Service.Forms.Html = function(){
	var me = this;
	me.setAdmin = true;
	me.seccion_title_css = "seccion_title_css";
	me.seccion_desc_css = "seccion_desc_css";
	me.seccion_field_css = "seccion_field_css";
	me.component_help_css = "component_help_css";
	me.component_li_css = "component_li_css";
	/*ESTE PREFIJO SE CONCATENA CON LOS IDS DEFINIDOS EN EL OBJETO FORM DE SECCIONES Y COMPONENTES*/
	me.prefijo_html = "html_";
	//UL DONDE ESTAN LOS <LI> DE CADA prefijo_div_campo 
	me.prefijo_ul_ccontainer = "sform_ul_ccontainer";
	/* PREFIJO DE ID PARA CONTENEDOR  DE CADA CAMPO */
	me.prefijo_div_campo = "sform_fieldcontainer_";
	/* PREFIJO COMPONENTES */
	me.prefijo_component = "sform_component_";
	/*PREFIJO UL DONDE SE INSERTAN LOS COMPONENTES EN EL FIELDSET*/
	me.aFieldonclick = function(accion,component){};
	me.aFieldonsort = function(accion,component){};
	me.Section = function(section){
		/* CREAMOS ELEMENTOS DE SECCION */
		var capa = document.createElement("FIELDSET");
		var capaTitulo = document.createElement("LEGEND");
		var capaDesc = document.createElement("DIV");
		var capaField = document.createElement("UL");
		/*DEFINIMOS UN CLASSNAME PARA CADA UNA */
		capaTitulo.className = me.seccion_title_css;
		capaDesc.className = me.seccion_desc_css;
		capaField.className = me.seccion_field_css;
		/*DEFINIMOS CONTENIDO DE CADA UNA Y ID*/
		capa.id = me.prefijo_html + section.idn;
		capaField.id = me.prefijo_ul_ccontainer + section.idn;
		capa.style.display = "none";
		capaTitulo.innerHTML = section.title;
		capaDesc.innerHTML = section.description;
		me.PrintComponents(section,capaField);
		/*AGREGAMOS LAS CAPAS A LA CAPA 'CAPA'*/
		capa.appendChild(capaTitulo);
		capa.appendChild(capaDesc);
		capa.appendChild(capaField);
		return capa;
	};
	me.Field =  function(component){
		var idn = component.idn;
		var capa = document.createElement("LI");
		capa.id = me.prefijo_div_campo + idn;
		capa.className = me.component_li_css;
		var label = document.createElement("LABEL");
		var sphelp = document.createElement("SPAN");
		sphelp.className = me.component_help_css;
		label.innerHTML = component.label;
		sphelp.innerHTML = component.helpString;
		var tipo = component.type;
		var campo = null;
		switch(tipo){
			case "text":
				campo = me.TextField(component);
				break;
			case "list":
				campo = me.ListField(component);
				break;
			case "select":
				campo = me.ComboField(component);
				break;
			case "sentence":
				campo = me.SentenceField(component);
				break;
		}
		capa.appendChild(label);
		capa.appendChild(campo);
		capa.appendChild(sphelp);
		if(me.setAdmin){
			var divAdmin = me.createFieldEditButtons(component);
			capa.appendChild(divAdmin);
		}
		return capa;
	};
	me.createFieldEditButtons = function(component){
		var capa = document.createElement("DIV");
		capa.className = "btn_actions";
		var aeditar = document.createElement("A");
		aeditar.href="#";
		aeditar.innerHTML = " <img src='img/edit.png' border='0'> ";
		aeditar.title = "Editar";
		aeditar.onclick = function(){
			me.aFieldonclick(1,component);
			return false;
		}
		var aeliminar = document.createElement("A");
		aeliminar.href="#";
		aeliminar.innerHTML = " <img src='img/remove.png' border='0'> ";
		aeliminar.title = "Eliminar";
		aeliminar.onclick = function(){
			me.aFieldonclick(2,component);
			return false;
		}
		var a_up = document.createElement("A");
		 a_up.href="#";
		a_up.innerHTML = " <img src='img/up.png' border='0'> ";
		a_up.title = "Subir";
		a_up.onclick = function(){
			me.aFieldonsort(true,component);
			return false;
		}
		var a_down = document.createElement("A");
		a_down.href="#";
		a_down.innerHTML = " <img src='img/down.png' border='0'>  ";
		a_down.title = "Subir";
		a_down.onclick = function(){
			me.aFieldonsort(false,component);
			return false;
		}

		capa.appendChild(aeditar);
		capa.appendChild(aeliminar);
		capa.appendChild(a_up);
		capa.appendChild(a_down);
		return capa;
	};
	me.SentenceField = function(component){
		var sp = document.createElement("SPAN");
		sp.innerHTML ="";
		return sp;
	}
	me.TextField = function(component){
		var idn = component.idn;
		var campo =  null;
		if(component.multiLine){
			campo = document.createElement("TEXTAREA");	
		}else{
			campo = document.createElement("INPUT");
			campo.type = "text";
		}
		
		campo.name = me.prefijo_component + idn;
		campo.id = me.prefijo_component + idn;
		//if(component.validation.type!=null&&component.validation.type!="none"){
		    switch(component.validation.type){
		        case "text":
		            campo.setAttribute("vtipo",component.validation.type + "_" + component.validation.num);
		            break;
                case "email":
                    campo.setAttribute("vtipo",component.validation.type);
                    break;
                default:
                    if(idInstancia==2){
                        campo.setAttribute("vtipo","text_1");
                    }
                    
		    }
		    
		//}
		return campo;
	};
	me.ListField = function(component){
		var idn = component.idn;
		var campo =  null;
		var tname = (!component.List.multiple)?"radio":"checkbox";
		var ul = document.createElement("UL");
		for(var i =0;i<component.List._options.length;i++){
			var li = document.createElement("LI");
			var cmpName = me.prefijo_component + idn;
			var opcion = component.List._options[i];
			var vtipo = "";
			//if(component.validation.type!=null&&component.validation.type!="none"){
			     switch(component.validation.type){
		            case "selected":
                        vtipo = component.validation.type + "_" + component.validation.num;
                        break;
                    default:
                        if(idInstancia==2){
                            vtipo = "selected_1";
                        }
                        
		         }
			//}
			var htm = "<input type='"+tname+"' value='"+opcion.value+"' name='"+cmpName+"' vtipo='"+vtipo+"' /> " + opcion.name;
			
			li.innerHTML = htm;
			ul.appendChild(li);
		}
		return ul;	
	};
	me.ComboField = function(component){
		var idn = component.idn;
		var campo = null;
		campo = document.createElement("SELECT");
		campo.name = me.prefijo_component + idn;
		campo.id = me.prefijo_component + idn;
		//if(component.validation.type!=null&&component.validation.type!="none"){
	        switch(component.validation.type){
                case "selected":
                    campo.setAttribute("vtipo","list_" + component.validation.num);
                    break;
                 default:
                        if(idInstancia==2){
                            campo.setAttribute("vtipo","list_1");
                        }
            }
		//}
		
		
		if(component.List.multiple){
			campo.setAttribute("size","5");
			campo.setAttribute("multiple","multiple");
		}
		for(var i =0;i<component.List._options.length;i++){
			var opcion = component.List._options[i];
			var opc = document.createElement('option');
			opc.value = opcion.value;
			var opcTxt = document.createTextNode(opcion.name);
			opc.appendChild(opcTxt);
			campo.appendChild(opc);
		}
		
		return campo;	
	};
	me.getInsideFieldDiv = function(capaSeccion){
		var capas = capaSeccion.getElementsByTagName("DIV");
		var capa = null;
		for(var i=0;i<capas.length;i++){
			if(capas[i].className == me.seccion_field_css){
				capa = capas[i];
				break;
			}
		}
		return capa;
	};
	me.addComponent = function(section,component){
		var idSeccionUL = me.prefijo_ul_ccontainer + section.idn;
		var idSeccionDiv = me.prefijo_html + section.idn;
		var fieldSetSeccion = document.getElementById(idSeccionDiv);
		var capaSeccion = document.getElementById(idSeccionUL);
		var htmField = me.Field(component);
		htmField.style.display = "none";
		if(fieldSetSeccion.style.display == "none")fieldSetSeccion.style.display = "block";
		capaSeccion.appendChild(htmField);
		$(htmField).slideDown("normal");
	};
	me.PrintComponents = function(section,capaField){
		for(var i=0;i<section.components.length;i++){
			var component = section.components[i];
			var capaComponent = me.Field(component);
			capaField.appendChild(capaComponent);
		}
	}
};

Service.Forms.Admin = function(){
	var me = this;
	me.id_formulario = "";
	me.mainDivID = "form_main";
	me.panelDivID = "form_panel";
	me.panelDivActionsID = "divp_actions";
	me.panelDivActionsID2 = "divp_actions_sub";
	me.formID = "form1";
	me.f = null;
	me.oForm = null;
	me.mainDiv = null;
	me.panelDiv = null;
	me.panelDivActions = null;
	me.panel_mode = "new";
	me._html = null;
	me.handler = "handler.aspx";
	me._init = function(){
		me.mainDiv = document.getElementById(me.mainDivID);
		me.panelDiv = document.getElementById(me.panelDivID);
		me.f = document.getElementById(me.formID);
		me.oForm = Service.Forms.FormManager._create();
		me.panelDivActions = document.getElementById(me.panelDivActionsID);
		me.panelDivActions2 = document.getElementById(me.panelDivActionsID2);
		me._html = new Service.Forms.Html();
		me._html.aFieldonclick = function(accion,component){
			me.Components.Action(accion,component);
		};
		me._html.aFieldonsort = function(accion,component){
			me.Components.SwapComponents(accion,component);
		};
	};
	me.LoadXML = function(url,vars){
		me.oForm.XML._loadXML(url,vars,function(){
			me.oForm.XML.XML2Object();
			me.PrintAll();
		});
	};
	me.SaveXML = function(){
	    me.SetEstado();
	    me.oForm.XML.toXML();
	    var accion = 2;
	    var xmlstr = Service.XML._xml2string(me.oForm.xml);
	    var peticion = Service.HTTP._create();
		peticion.url = me.handler;
		peticion._add("pg","action_form");
		peticion._add("accion",accion);
		peticion._add("Contenido",xmlstr);
		peticion._add("IdItem",idItem);
		peticion._add("TipoInstancia",idInstancia);
		peticion._add("formularioID",me.id_formulario);
		peticion._add("GUID",guid);
		peticion.onFinish = function(){
		    alert("Formulario guardado");
		}
		peticion._post();
	}
	me.DeleteForm = function(){
	    if(!confirm("Si borra el formulario perdera todos los cambios, Desea continuar?"))return;
	    var peticion = Service.HTTP._create();
		peticion.url = me.handler;
		peticion._add("pg","delete_form");
		peticion._add("IdItem",idItem);
		peticion._add("TipoInstancia",idInstancia);
		peticion._add("GUID",guid);
		peticion.onFinish = function(){
		    alert("Formulario borrado");
		    window.close();
		}
		peticion._get();
	};
	me.PrintAll = function(){
	    me.f.formName.value = me.oForm.title;
	    me.f.formDescription.value =  me.oForm.description;
	    me.f.formHabilitado.selectedIndex = (me.oForm.estado == "disabled")?1:0;
		for(var i =0;i<me.oForm.sections.length;i++){
			var section = me.oForm.sections[i];
			var capaSeccion = me._html.Section(section);
			me.mainDiv.appendChild(capaSeccion);
		}
		me.Secciones.toCombo();
	};
	me.SetTitle = function(){
		var titulo = me.f.formName.value;
		me.oForm.title = titulo; 	
	};
	me.SetDescription = function(){
		var desc = me.f.formDescription.value;
		me.oForm.description = desc;
	};
	me.SetEstado = function(){
	    var estado = me.f.formHabilitado.options[me.f.formHabilitado.selectedIndex].value;
	    me.oForm.estado = estado;
	}
	me.ValidationChangeHandler = function(){
		var combo = me.f.formp_validation;
		if(combo.options.length <= 0)return null;
		var tipo = combo.options[combo.selectedIndex].value;
		var spnum = document.getElementById("divp_nval");
		var spnum_label =  document.getElementById("label_number_elements");
		switch(tipo){
			case "text":
				spnum.style.display = "block";
				spnum_label.innerHTML = "Numero de caracteres";
				break;
			case "number":
				spnum.style.display = "block";
				spnum_label.innerHTML = "Numero de digitos";
				break;
			case "selected":
				spnum.style.display = "block";
				spnum_label.innerHTML = "Numero de elementos seleccionados";
				break;
			default:
				spnum.style.display = "none";
				spnum_label.innerHTML = "";
				break;
		}
	};
	me.Secciones = {
		currentId : null,
		GetSelectedId : function(){
			var combo = me.f.f_secciones;
			if(combo.options.length <= 0)return null;
			var idn = combo.options[combo.selectedIndex].value;
			return idn;
		},
		ResetFormValues : function(){
			var f = me.f;
			f.formSectionName.value = "";
			f.formSectionDesc.value = "";
			f.form_btn_seccion_edit.disabled = true;
			f.form_btn_seccion_remove.disabled = true;
			f.form_btn_seccion_cancel.disabled = true;
			f.form_btn_seccion_new.disabled = false;
			me.panelDiv.style.display  = "none";
		},
		Cancel : function(){
		    this.ResetFormValues();
		},
		Edit : function(){
			var f = me.f;
			var combo = f.f_secciones;
			if(combo.options.length <= 0)return;
			var idn = combo.options[combo.selectedIndex].value;
			var oSeccion = me.oForm.getSectionById(idn);
			oSeccion.title = f.formSectionName.value;
			oSeccion.description = f.formSectionDesc.value;
			this.ResetFormValues();
			this.toCombo();
			/*********************/
			old_div = document.getElementById(me._html.prefijo_html + oSeccion.idn);
			new_div = me._html.Section(oSeccion);
			old_div.parentNode.replaceChild(new_div,old_div);
		},
		ChangeHandler : function(){
			//this.currentId = this.GetSelectedId();
			//alert(this.currentId  + "-"+this.GetSelectedId());
			if(this.currentId != null && this.GetSelectedId()!=this.currentId){
				var obj1 = document.getElementById(me._html.prefijo_html + this.currentId);
				if(obj1)
					obj1.style.display = "none";
				
			}
			var obj2 = document.getElementById(me._html.prefijo_html + this.GetSelectedId());
			obj2.style.display = "block";
			this.currentId = this.GetSelectedId();
			this.Prepare2Edit();
			if(me.mainDiv.style.display == "none")me.mainDiv.style.display = "block";
			if(me.panelDiv.style.display =="none")$(me.panelDiv).fadeIn("slow");
		},
		Prepare2Edit : function(){
			var f = me.f;
			var combo = f.f_secciones;
			if(combo.options.length <= 0)return;
			var idn = combo.options[combo.selectedIndex].value;
			var oSeccion = me.oForm.getSectionById(idn);
			f.formSectionName.value = oSeccion.title;
			f.formSectionDesc.value = oSeccion.description;
			f.form_btn_seccion_edit.disabled = false;
			f.form_btn_seccion_remove.disabled = false;
			f.form_btn_seccion_cancel.disabled = false;
			f.form_btn_seccion_new.disabled = true;
		},
		Add : function(){
			var f = me.f;
			var nombre = f.formSectionName.value;
			var desc = f.formSectionDesc.value;
			var oSeccion = me.oForm.AddSection();
			oSeccion.title = nombre;
			oSeccion.description = desc;
			this.ResetFormValues();
			this.toCombo();
			var capaSeccion = me._html.Section(oSeccion);
			me.mainDiv.appendChild(capaSeccion);
			if(me.panelDiv.style.display =="none")$(me.panelDiv).fadeIn("slow");
		},
		Remove : function(){
			var f = me.f;
			var combo = f.f_secciones;
			if(combo.options.length <= 0)return;
			var idn = combo.options[combo.selectedIndex].value;
			
			var oSeccion = me.oForm.getSectionById(idn);
			old_div = document.getElementById(me._html.prefijo_html + oSeccion.idn);
			old_div.parentNode.removeChild(old_div);
			
			me.oForm.RemoveSection(idn);
			this.ResetFormValues();
			this.toCombo();
		},
		toOption : function(section){
			var opc = document.createElement('option');
			opc.value = section.idn;
			var opcTxt = document.createTextNode(section.title);
			opc.appendChild(opcTxt);
			return opc;
		},
		toCombo : function(){
			var f = me.f;
			var combo = f.f_secciones;
			combo.options.length = 0;
			for(var i =0;i<me.oForm.sections.length;i++){
				var section = me.oForm.sections[i];
				var opc = this.toOption(section);
				combo.appendChild(opc);
			}
			if(combo.options.length > 0){
			    try{
				    combo.selectedIndex = 0;	
				    this.currentId = this.GetSelectedId();
				}catch(ex){}
			}
		},
		Swap : function(arriba){
			var f = me.f;
			var combo = f.f_secciones;
			if(combo.options.length <= 0)return;
			var idn = combo.options[combo.selectedIndex].value;
			var oSeccion = me.oForm.getSectionById(idn);
			
			var seccionIndex = oSeccion._parent.getSectionArrayIndex(oSeccion.idn);
			if(seccionIndex == 0 && arriba)return;
			else if(seccionIndex == (oSeccion._parent.sections.length -1) && !arriba )return;
			var signo = (arriba)? -1:1;
			var oSeccion2 = oSeccion._parent.sections[seccionIndex + signo];
			oSeccion._parent.sections[seccionIndex] = oSeccion2;
			oSeccion._parent.sections[seccionIndex + signo] = oSeccion;
			var op1 = combo.options[combo.selectedIndex];
			Service.XML.SwapNodes(op1,arriba);
		}
	};
	me.Components = {
		_section : function(){
			var idn = me.Secciones.GetSelectedId();
			var oSeccion = me.oForm.getSectionById(idn);
			return oSeccion;
		},
		ResetFormValues : function(){
			var f = me.f;
			var spnum = document.getElementById("divp_nval");
			f.formp_Idn.value = "";
			f.formp_label.value = "";
			f.formp_help.value = "";
			f.formp_numval.value = 1;
			f.formp_validation.selectedIndex = 0;
			f.formp_type.selectedIndex = 0;
			me.panelDivActions.innerHTML = "";
			spnum.style.display = "none";
			f.form_btn_component_edit.disabled = true;
		},
		SetComponentValues : function(oComponent){
			var f = me.f;
			var etiqueta = f.formp_label.value;
			var strHelp = f.formp_help.value;
			var tipo = f.formp_type.options[f.formp_type.selectedIndex].value;
			var vtipo = me.f.formp_validation.options[f.formp_validation.selectedIndex].value;
			var vnum = f.formp_numval.value;
			oComponent.label = etiqueta;
			oComponent.helpString = strHelp;
			oComponent.validation.type = vtipo;
			oComponent.validation.num = vnum;
			switch(tipo){
				case "text":
					oComponent.type = "text";
					oComponent.multiLine = false;
					break;
				case "mtext":
					oComponent.type = "text";
					oComponent.multiLine = true;
					break;
				case "list":
					oComponent.type = "list";
					oComponent.List.multiple = false;
					this.AddOptionsFromHtml(oComponent);
					break;
				case "mlist":
					oComponent.type = "list";
					oComponent.List.multiple = true;
					this.AddOptionsFromHtml(oComponent);
					break;
				case "clist":
					oComponent.type = "select";
					oComponent.List.multiple = false;
					this.AddOptionsFromHtml(oComponent);
					break;
				case "cmlist":
					oComponent.type = "select";
					oComponent.List.multiple = true;
					this.AddOptionsFromHtml(oComponent);
					break;
				case "sentence":
					oComponent.type = "sentence";
					break;

			}
			return oComponent;
		},
		Add : function(){
			var f = me.f;
			var oSeccion = this._section();
			var oComponent = oSeccion.AddComponent();
			this.SetComponentValues(oComponent);
			me._html.addComponent(oSeccion,oComponent);
			this.ResetFormValues();
			f.formp_label.focus();
		},
		Remove : function(component){
		    var fn = this;
			if(!confirm("Esta seguro que desea eliminar este elemento?"))return;
			var capaID = me._html.prefijo_div_campo + component.idn;
			var capa = document.getElementById(capaID);
			$(capa).slideUp("normal",function(){
				capa.parentNode.removeChild(capa);
				fn.ResetFormValues();
			});
			
			
			component._parent.RemoveComponentById(component.idn);
		},
		Edit : function(){
			var f = me.f;
			var idn = f.formp_Idn.value;
			var label = f.formp_label.value;
			var strhelp = f.formp_help.value;
			var oSeccion = this._section();
			var oComponent = oSeccion.getComponentById(idn);
			oComponent = this.SetComponentValues(oComponent);
			old_div = document.getElementById(me._html.prefijo_div_campo + idn);
			new_div = me._html.Field(oComponent);
			old_div.parentNode.replaceChild(new_div,old_div);
			this.ResetFormValues();
		},
		SetComboIndexValue : function(combo,valor){
			var n = 0;
			for(var i =0;i<combo.options.length;i++){
				var opcion = combo.options[i];
				if(valor == opcion.value){
					n = i;
					break;	
				}
			}
			combo.selectedIndex = n;
		},
		Prepare2Edit : function(component){
			var f = me.f;
			var spnum = document.getElementById("divp_nval");
			if(component.validation.type != "none" && component.validation.num != null) spnum.style.display = "block";
			else spnum.style.display = "none";
			f.formp_label.value = component.label;
			f.formp_help.value = component.helpString;
			f.formp_Idn.value = component.idn;
			f.formp_numval.value = component.validation.num;
			this.SetComboIndexValue(me.f.formp_validation,component.validation.type);
			var tipo = component.type;
			if(tipo == "text"){
				if(component.multiLine){
					f.formp_type.selectedIndex = 1;
					this.PanelDivHtml("mtext");
				}else 
				{
					f.formp_type.selectedIndex = 0;
					this.PanelDivHtml("text");
				}
			}
			else if(tipo == "list"){
				if(!component.List.multiple)f.formp_type.selectedIndex = 2;
				else f.formp_type.selectedIndex = 3;
				var ul = this.Object2HtmlOptions(component);
				me.panelDivActions.innerHTML = "";
				me.panelDivActions.appendChild(ul);
			}else if(tipo == "select"){
				if(!component.List.multiple)f.formp_type.selectedIndex = 4;
				else f.formp_type.selectedIndex = 5;
				var ul = this.Object2HtmlOptions(component);
				me.panelDivActions.innerHTML = "";
				me.panelDivActions.appendChild(ul);
			}else if(tipo == "sentence"){
				f.formp_type.selectedIndex = 6;
			}
			f.form_btn_component_edit.disabled = false;
		},
		Action : function(accion,component){
			switch(accion){
				case 1:
					this.Prepare2Edit(component);
					break;
				case 2:
					this.Remove(component);
					break;
			}
		},
		PanelComboLists : function(){
            var peticion = Service.HTTP._create();
            peticion.url = me.handler;
            peticion.vars = "pg=list_form_xml_items";
            var htm = "";
            peticion.onFinish = function(){
                var xml = peticion.responseXML;
                var docxml = xml.documentElement;
                var items = docxml.getElementsByTagName("item");
                htm = "";
                htm += "Cat&aacute;logos precargados :<select id='combo_list_form_aux'>";
                for(var i =0;i<items.length;i++){
                    var idn = items[i].getAttribute("id");
                    var nombre = Service.XML._subnodevalue(items[i],"nombre");
                    htm += "<option value='"+idn+"'>"+nombre+"</option>";
                }
                htm += "</select>";
                htm += "&nbsp; <a href='#' onclick='OpenPreList();return false;'>Vista Previa de Cat&aacute;logos</a>";
                htm += "&nbsp; <a href='#' onclick='OpenPreNew();return false;'>Crear Nuevo Cat&aacute;logo</a>";
                me.panelDivActions2.innerHTML = htm;
            }
            peticion._get();
		},
		ismultiple : false,
		PanelDivHtml : function(tipo){
			me.panelDivActions.innerHTML = "";
			if(tipo == "text"){
				me.panelDivActions.innerHTML = "<div style='border:2px dashed #cccccc;height:20px;width:300px;' />";
				me.panelDivActions2.innerHTML = "";
			}
			else if(tipo == "mtext"){
				me.panelDivActions.innerHTML = "<div style='border:2px dashed #cccccc;height:60px;width:300px;' />";
				me.panelDivActions2.innerHTML = "";
			}
			else if(tipo == "list"){
			    this.ismultiple = false;
				this.AddDynamicListOption(false);
				this.PanelComboLists();
			}
			else if(tipo == "mlist"){
			    this.ismultiple = true;
				this.AddDynamicListOption(true);
				this.PanelComboLists();
			}
			else if(tipo == "clist"){
			    this.ismultiple = false;
				this.AddDynamicListOption(false);
				this.PanelComboLists();
			}
			else if(tipo == "cmlist"){
			    this.ismultiple = true;
				this.AddDynamicListOption(true);
				this.PanelComboLists();
			}
		},
		TypeHandler : function(combo){
			var tipo = combo.options[combo.selectedIndex].value;
			this.PanelDivHtml(tipo);
		},
		SwapComponents : function(arriba,component){
			var componentIndex = component._parent.getComponentArrayIndex(component.idn);
			if(componentIndex == 0 && arriba)return;
			else if(componentIndex == (component._parent.components.length -1) && !arriba )return;
			var signo = (arriba)? -1:1;
			var component2 = component._parent.components[componentIndex + signo];
			component._parent.components[componentIndex] = component2;
			component._parent.components[componentIndex + signo] = component;
			var capa1 =  document.getElementById(me._html.prefijo_div_campo + component.idn);
			Service.XML.SwapNodes(capa1,arriba);
		},
		noptions : 0,
		css_first_time : "css_first_time",
		newDynamicList : function(){
			var ul = document.createElement("UL");
			ul.id = "dynlist_options";
			me.panelDivActions.appendChild(ul);
			return ul;
		},
		AddDynamicListOption : function(m){
			var ul = (document.getElementById("dynlist_options"))?document.getElementById("dynlist_options"):this.newDynamicList();
			var li = this.DynamicListOption(m);
			ul.appendChild(li);
			li.getElementsByTagName("INPUT")[0].focus();
		},
		DynamicListOption : function(m,objValues){
			if(!objValues)objValues = {"texto":"", "valor": ""};
			var fn = this;
			var li = document.createElement("LI");
			var input = document.createElement("INPUT");
			if(objValues.texto.length > 0){
			    input.value = objValues.texto;
			    input.className = "";
			}else{
			    input.value = "Texto de lista";
			    input.className = fn.css_first_time;
			}
			input.type = "text";
			var input2 = document.createElement("INPUT");
			if(objValues.valor.length > 0){
			    input2.value = objValues.valor;
			    input2.className = "";
			}else{
			    input2.value = "Valor real de la lista";
			    input2.className = fn.css_first_time;
			}
			input2.type = "text";
			input2.onkeyup = function(e){
				fn.DynamicOptionKup(this,e,m);
			};
			input.onkeydown = function(e){
				fn.DynamicOptionKup(this,e,m);
			};
			input.onfocus = function(e){
			    if(this.className == fn.css_first_time){
			        this.className = "";
			        this.value = "";
			    }
			};
			input.onblur = function(e){
			    if(this.value == ""){
			        this.className = fn.css_first_time;
			        this.value = "Texto de lista";
			    }
			}
			input2.onfocus = function(e){
				if(this.className == fn.css_first_time){
			        this.className = "";
			        this.value = "";
			    }
				
			};
			input2.onblur = function(e){
			    if(this.value == ""){
			        this.className = fn.css_first_time;
			        this.value = "Valor real de lista";
			    }
			}
			li.appendChild(input);
			li.appendChild(input2);
			if(m){
				inputck = document.createElement("INPUT");	
				inputck.type = "checkbox";
				inputck.checked = false;
				li.appendChild(inputck);
			}
			var spactions_up = document.createElement("SPAN");
			spactions_up.style.cursor = "pointer";
			spactions_up.innerHTML = " [subir] ";
			spactions_up.onclick = function(){
				var pnode = Service.XML._parent(this,"li");
				Service.XML.SwapNodes(pnode,true);
			}
			li.appendChild(spactions_up);
			var spactions_down = document.createElement("SPAN");
			spactions_down.innerHTML = "[bajar]";
			spactions_down.style.cursor = "pointer";
			spactions_down.onclick = function(){
				var pnode = Service.XML._parent(this,"li");
				pnext = Service.XML.get_nextsibling(pnode);
				Service.XML.SwapNodes(pnode,false);
			}
			li.appendChild(spactions_down);
			
			var spactions_remove = document.createElement("SPAN");
			spactions_remove.innerHTML = " [eliminar] ";
			spactions_remove.style.cursor = "pointer";
			spactions_remove.onclick = function(){
				var pnode = Service.XML._parent(this,"li");
				pnode.parentNode.removeChild(pnode);
			}
			li.appendChild(spactions_remove);
			return li;
		},
		DynamicSwapOptions : function(){
		
		},
		DynamicOptionKup : function(campo,evt,m){
			evt = (evt) ? evt : window.event;
			tecla = evt.keyCode; 
			document.title = tecla;
			if(tecla ==  13 || tecla == 40){
				var inputs = campo.parentNode.getElementsByTagName("INPUT");
				if(inputs[1].value == "")inputs[1].value = inputs[0].value;
				me.Components.AddDynamicListOption(m);
			}
			if(tecla == 46){
			    var pnode = Service.XML._parent(campo,"li");
			    var pnode_before = Service.XML.get_previoussibling(pnode);
			    if(pnode_before){
			        var input_before = pnode_before.getElementsByTagName("INPUT")[0];
			        input_before.focus();
				    pnode.parentNode.removeChild(pnode);
				}
				 
				
				
			}
			return false;
		},
		
		AddOptionsFromHtml : function(oComponent){
			var ul = document.getElementById("dynlist_options");
			var lis = ul.getElementsByTagName("LI");
			oComponent.List.Clear();
			alert(lis.length);
			for(var i=0;i<lis.length;i++){
				var li = lis[i];
				var inputs = li.getElementsByTagName("INPUT");
				if(inputs[0].className == this.css_first_time)inputs[0].value = "";
				if(inputs[1].className == this.css_first_time)inputs[1].value = "";
				var texto = inputs[0].value;
				var valor = inputs[1].value;
				if(texto == "" && valor == "")continue;
				if(valor == "")valor = texto; 
				var checado = (inputs.length > 2)?inputs[2].checked:false;
				var opcion = oComponent.List.addOption(texto,valor);
				opcion._selected = false;
			}
		},
		XmlGrid2HtmlOptions : function(xml){
		    var ul = (document.getElementById("dynlist_options"))?document.getElementById("dynlist_options"):this.newDynamicList();
			var m = this.ismultiple;
			var rows = xml.getElementsByTagName("row");		    
		    for(var i=0;i<rows.length;i++){
		            var r = rows[i];
		            var rcol = r.getElementsByTagName("rcol");
		            var nombre = Service.XML._subnodevalue(rcol[0],"value");
			        var valor = Service.XML._subnodevalue(rcol[1],"value");
				    var objValues = {"texto":nombre, "valor": valor};
				    if(nombre!="" || valor != ""){
				        var li = this.DynamicListOption(m,objValues);
				        ul.appendChild(li);
				    }
		     }
			 li.getElementsByTagName("INPUT")[0].focus();
		},
		Object2HtmlOptions : function(oComponent){
			var ul = document.createElement("UL");
			ul.id = "dynlist_options";
			var m = oComponent.List.multiple;
			if(oComponent.List._options.length == 0){
			    var opcion = oComponent.List._options[i];
				var objValues = {"texto":"", "valor": ""};
				var li = this.DynamicListOption(m,objValues);
				ul.appendChild(li);
			}
			for(var i =0;i<oComponent.List._options.length;i++){
				var opcion = oComponent.List._options[i];
				var objValues = {"texto":opcion.name, "valor": opcion.value};
				var li = this.DynamicListOption(m,objValues);
				ul.appendChild(li);
			}
			return ul;
		}
		
		
		
	};
};
Service.Forms.Listing = {
    instance : [],
	_formulario : function(){
		me =  this;
		var indice = me.instance.length + "";
		if(!me.instance[indice]){
			me.instance[indice] = new me.c(me,indice);
		}
		return me.instance[indice];
	},
	c : function(pobj,ci){
		var _this =  this;
		_this._parent = pobj;
		_this.xf  = Service.XML;
		_this.indice = ci;
		_this.urlHandler = "handler.aspx";
		_this.xml = null;
		_this.currentvars = "";
		_this.pagina = 1;
		_this.numpages = 1;
		_this.nmaximo = 10;
		_this.xpagina = 2;
		_this.nresultados = 0;
		_this.criterio = "";
		_this.mainID = "formulario_listado";
		_this.pagingID = "formulario_admin_paging";
		_this._load = function(url,vars,fname){
			_this.currentvars = vars;
			vars += "&pagina="+_this.pagina;
			vars += "&size="+_this.xpagina;
			vars += "&criterio="+encodeURIComponent(_this.criterio);
			var _xml = Service.HTTP._create();
			_xml.url = url;
			_xml.vars = vars;
			_xml.onFinish = function(){
				var node,rootNode;
				node = _xml.responseXML;	
				if(node.childNodes[0].nodeType == 7) {
					rootNode = node.childNodes[1];
				}else{
					rootNode = node.childNodes[0];
				}
				_this.xml = rootNode;
				_this._parse();
				if(fname){ fname(_this.xml);}
			}
			_xml._get(); 
		};
		_this._search = function(criterio,fname){
			_this.pagina = 1;
			_this.criterio = criterio;
			_this._load(_this.urlHandler,_this.currentvars,function(xml){
				if(fname)fname();						 
			});
		};
		_this.p = function(pindex){
			if(_this.nresultados == 0)return;
			var pnum = Math.ceil(_this.nresultados/_this.xpagina);
			if(pindex < 1)pindex = 1;
			else if(pindex > pnum)pindex = pnum;
			_this.pagina = pindex;
			_this._load(_this.urlHandler,_this.currentvars);
    	}

		//paginacion
		_this.setpaging = function(pnum){
			var divpage = document.getElementById(_this.pagingID);
			if(pnum == 0){
				divpage.innerHTML = "";
				return;
			}
			pnum = Math.ceil(pnum/_this.xpagina);
			var mitad = Math.ceil(_this.nmaximo / 2);
			var htm = "<span class='pages'>Page " + _this.pagina + " of " + pnum + "</span>";
			htm += '<a href="#" title="&laquo; Primera" onclick="Service.Forms.Listing.instance[\''+_this.indice+'\'].p(1);return false;">&laquo; Primera</a>';
			var ultima = 1;
			if(_this.pagina < mitad){
				ultima = (pnum < _this.nmaximo)?pnum:_this.nmaximo;
				for(var i = 1;i <= ultima;i++){
					var clase = "";
					if(_this.pagina == i)clase ='class="current"';
					htm += '<a href="#" onclick="Service.Forms.Listing.instance[\''+_this.indice+'\'].p('+i+');return false;" title="'+i+'"><span '+clase+'>'+i+'</span></a>';
				}
			}else{
				var inicio = (_this.pagina - (mitad))+1;
				var nfinal = (_this.pagina + (mitad))-1;
				for(var i = inicio;i <= _this.pagina-1;i++){
					htm += '<a href="#" onclick="Service.Forms.Listing.instance[\''+_this.indice+'\'].p('+i+');return false;" title="'+i+'">'+i+'</a>';
				}
				for(var i = _this.pagina;i <= nfinal;i++){
					var clase = "";
					if(_this.pagina == i)clase ='class="current"';
					if(i > pnum)break;
					htm += '<a href="#" title="'+i+'" onclick="Service.Forms.Listing.instance[\''+_this.indice+'\'].p('+i+');return false;" ><span '+clase+'>'+i+'</span></a>';
				}
			}
			htm += '<a href="#" title="&Uacute;ltima &raquo;" onclick="Service.Forms.Listing.instance[\''+_this.indice+'\'].p('+pnum+');return false;">&Uacute;ltima &raquo;</a>';
			divpage.innerHTML = htm;

		}
		_this._parse = function(){
			var oitem  = _this.xml.getElementsByTagName("items")[0];
			//Obtenemos el numero de elementos en total
			var nresultados = oitem.getAttribute("total");
			_this.nresultados = Number(nresultados);
			//Div de paginacion
			_this.setpaging(nresultados);
			//Obtenemos los items
			var items = oitem.getElementsByTagName("item");
			//Capa donde se imprimira
			var obj = document.getElementById(_this.mainID);
			//Limpiamos o reseteamos
			obj.innerHTML = "";
			//validamos si existen elementos
			if(items.length > 0){
			    var capa = _this._html(items);
				obj.appendChild(capa);
			}else{
				obj.innerHTML = "No se encontraron elementos";	
			}
		}
		_this._html = function(items,clase){
			if(!clase)var clase = "";
			var li = document.createElement("li");
			for(var i=0;i<items.length;i++){
				var nodo = items[i];
				var nombre = Service.XML._subnodevalue(nodo,"nombre");
				var resumen = Service.XML._subnodevalue(nodo,"resumen");
				var nodoID = nodo.getAttribute("id_formulario");
				var capanombre = document.createElement("DIV");
				capanombre.innerHTML = nombre;
				capanombre.className = "nombre";
				var caparesumen = document.createElement("DIV");
				caparesumen.innerHTML = resumen;
				caparesumen.className = "resumen";
				var capabtn = _this.createFieldEditButtons(nodo);
				
				li.appendChild(capanombre);
				li.appendChild(caparesumen);
				li.appendChild(capabtn);
			}
			return li;
	    }
	    _this.createFieldEditButtons = function(nodo){
			var nodoID = nodo.getAttribute("id_formulario");
			var nombre = Service.XML._subnodevalue(nodo,"nombre");
			var capa = document.createElement("DIV");
			capa.className = "btn_actions";
			var aeditar = document.createElement("A");
			aeditar.href="#";
			aeditar.style.cursor = "pointer";
			aeditar.innerHTML = " [editar] ";
			aeditar.title = "Editar";
			aeditar.onclick = function(){
				window.open("Default.aspx?formularioID=" + nodoID
								, "pre_cat","height=550,width=790,status=yes,toolbar=no,menubar=no,location=no");
				return false;
			}
			var aeliminar = document.createElement("A");
			aeliminar.href="#";
			aeliminar.style.cursor = "pointer";
			aeliminar.innerHTML = " [eliminar] ";
			aeliminar.title = "Eliminar";
			aeliminar.onclick = function(){
				if(confirm("Estas seguro que deseas eliminar este elemento?")){
					var peticion = Service.HTTP._create();
					peticion.url = _this.urlHandler;
					peticion.vars = "pg=delete_form&formularioID="+nodoID;
					peticion.onFinish = function(){
						var str = peticion.response;
						_this._search("",function(){});
					}
					peticion._get();
				}
				return false;
			};
			
			capa.appendChild(aeditar);
			capa.appendChild(aeliminar);
			return capa;
		};

    }
    		

};
