/////**************  CLASE PAJAX.JS **************////////
function PAjax(){

    var xmlHttp=false;

    try { 

        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

    } catch (e) {

        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
                xmlHttp = false;                
        }   
    }
    
    if (!xmlHttp && typeof XMLHttpRequest!='undefined') {

        xmlHttp = new XMLHttpRequest();

    }

    return xmlHttp;

}

  
/////**************  CLASE PACTION.JS **************////////

function PAction(sId){
    this._width="60px";
    this.setWidth=function(sValue){
    	this._width=sValue;
    }
    this.getWidth=function(){
    	return this._width;
    }
    
    this._height="20px";
    this.setHeight=function(sValue){
    	this._height=sValue;
    }
    this.getHeight=function(){
    	return this._height;
    }

    this._locked="";
    this.setLocked=function(sBol){
    	this._locked=sBol;
    	document.getElementById(this.getForm()+"_"+this.getId()+"_Button").disabled=sBol;
    }
    
    this._id=sId;
    this.getId=function(){
    	return this._id;
    }
    
    this._value = "";    
    this.setValue=function(sValue){
    	this._value= sValue;
    }   
    this.getValue=function(){
    	return this._value;
    }
    this._form="";
    this.getForm=function(){
    	return this._form;
    }
    this.setFormId=function(sId){//si no funciona poner setFormId
    	this._form=sId;
    }
        
    //funcion para asignar a funciones externas
    this.method=function(){
    } 
    this._method="";
    this.setMethod=function(sMethod){
    	this._method=sMethod;
    	switch(sMethod){
    		case "Insertar":
	    		this.method = goPPage.forms[goPPage.forms.length-1].insert;
				break;    	
	    	case "Borrar":
	    		this.method = goPPage.forms[goPPage.forms.length-1].del;
	    		break;
	    	case "Cancelar":
	    		this.method = goPPage.forms[goPPage.forms.length-1].cancel;
	    		break;
	    	case "Modificar":
	    		this.method = goPPage.forms[goPPage.forms.length-1].update;
	    		break;
    		default: break;
    	}
    }
    this.getMethod=function(){
    	return this._method;
    }
    
    this.addDomElement=function(oFormId){
    	var oButton=document.createElement("input");
    	oButton.setAttribute("type","button");
    	oButton.setAttribute("id",oFormId+"_"+this.getId()+"_Button");
    	oButton.setAttribute("value",this.getValue());
    	oButton.onclick=this.method;
    	this.setFormId(oFormId);
    	oButton.style.width=this.getWidth();
    	oButton.style.height=this.getHeight();
    	var oForm=document.getElementById(oFormId);
    	oForm.appendChild(oButton);
    }
}


//************************	PFIELD()

function PField(){
//    this.name=""; //Nombre del campo de la bd.
//    this.value="";
//    this.length=0; //Maximo numero de digitos
    this._visibled=true;
    this.setVisibled=function(bValue){
    	this._visibled=bValue;
    }
    this.getVisibled=function(){
    	return this._visibled;
    }
    this._width=0;
    this.setWidth=function(iValue){
    	this._width=iValue;
    }
    this.getWidth=function(){
    	return this._width;
    }
    this._presentation;
    this.setPresentation=function(sValue){
    	this._presentation=sValue;
    }
    this.getPresentation=function(){
    	return this._presentation;
    }
    this._height=60;
    this.setHeight=function(iValue){
    	this._height=iValue;
    }
    this.getHeight=function(){
    	return this._height;
    }
    this._dataMember="";
    this.setDataMember=function(sDataMember){
    	this._dataMember=sDataMember;
    }
    this.getDataMember=function(){
    	return this._dataMember;
    }

    this._locked=false;
    this.setLocked=function(sBool){
    	this._locked=sBool;
    }
    this.getLocked=function(){
    	return this._locked;
    }
    this._value="";
    this.setValue=function(sValue){
    	this._value=sValue;
    	document.getElementById(this.getId()+"_Input").value=sValue;
    }
    this.getValue=function(sValue){
    	return this._value;
    }
    
    this.mask="";this._mask="";
    this.setMask=function(sFormat){
    	this._mask=sFormat;
    	if(navigator.appName=="Microsoft Internet Explorer"){
 			var lang=navigator.userLanguage.toString().substr(0,2);
 		}else{
 			var lang=navigator.language.toString().substr(0,2); 
 		}//"es","en"
    	switch(sFormat){
    		case "0000/00/00":
    			if(lang=="es")
    				this.mask=/^(0[1-9]|[12][0-9]|3[01])(\/|-)(0[1-9]|1[012])\2(\d{4})$/;
    			else
    				this.mask=/^(\d{4})(\/|-)(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$/;
    			break;
    		case "0000/00/00 00:00":
    			if(lang=="es")
    				this.mask=/^(0[1-9]|[12][0-9]|3[01])(\/|-)(0[1-9]|1[012])\2(\d{4})( )(0[0-9]|1\d|2[0-3]):([0-5]\d)$/;
    			else
	    			this.mask=/^(\d{4})(\/|-)(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])( )(0[0-9]|1\d|2[0-3]):([0-5]\d)$/;
    			break;
    		case "999999":
    			this.mask=/^([0-9])*$/;
    			break;
    		case "999999.99":
    			if(lang=="es")
    				this.mask=/^\d*(,\d{1,2}){0,1}$/;
    			else
    				this.mask=/^\d*(\.\d{1,2}){0,1}$/;
    			break;
    		case "00:00":
    			this.mask= /^(0[0-9]|1\d|2[0-3]):([0-5]\d)$/;
    			break;
    	}
    }
    this.getMask=function(){
    	return this._mask;
    }
    
    this._id=""; //necesario para identificar el campo
    this.getId= function(){
    	return this._id;	
    }
    this.setId=function(nValue){
    	this._id = nValue;
    }

	//Formulario al que pertenece
	this._PForm;	    
    this.getPForm= function(){
    	return this._PForm;	
    }
	this.setPForm=function(sValue){
		this._PForm = sValue;
	}

    this._isRequired = false;
    this.getIsRequired= function(){
    	return this._isRequired;	
    }
    this.setIsRequired=function(bValue){
    	this._isRequired = bValue;
    }
        
    this._isKey=false;
    this.getIsKey= function(){
    	return this._isKey;	
    }
    this.setIsKey=function(bValue){
    	this._isKey= bValue;
    	/*try{
	    	if(document.getElementById(this._labelTag).firstChild!=null){
		    	var sText = document.getElementById(this._labelTag).firstChild.nodeValue;
		    	document.getElementById(this._labelTag).innerHTML = "<b>"+sText+"</b>";
	    	}
    	}catch (x){
    		;
    	}*/
    }  
    
   /* this._defaultValue="";
    this.getDefaultValue= function(){
    	return this._defaultValue;	
    }
    this.setDefaultValue=function(sValue){
    	this._defaultValue= sValue;
		document.getElementsByName(this._inputTag)[0].style.background = this.backgroundDefault;    	
    }  */

    /*this.setValueTag=function(sValue){
    	this._valueTag= sValue;
    } */  
        
    /*this.setInputTag=function(sValue){
    	this._inputTag= sValue;
    } */  
         
    this._label = ""; //Valor string de la etiqueta
    this.getLabel= function(){
    	return this._label;	
    }
    this.setLabel=function(sValue){
    	this._label= sValue;
    }       
    
    if(navigator.appName=="Microsoft Internet Explorer"){
	    this.backgroundRequired = "rgb(205,244,250)";//"#cdf4fa";#c0e3e0
	    this.backgroundDefault = "rgb(255,255,255)"; //"white";
	    this.backgroundError = "rgb(210,180,140)"; //"#D2B48C";
	    this.backgroundReadOnly= "rgb(215,216,217)";//"#d7d8d9";
	    
    }else{
	    this.backgroundRequired = "rgb(205, 244, 250)";//"#cdf4fa";#c0e3e0
	    this.backgroundDefault = "rgb(255, 255, 255)"; //"white";
	    this.backgroundError = "rgb(210, 180, 140)"; //"#D2B48C";
	    this.backgroundReadOnly= "rgb(215, 216, 217)";//"#d7d8d9";
    }

    this.onChange=function(){  
    	var sId=this.id.substr(0,this.id.lastIndexOf("_Input"));
    	var objPField=goPPage.getField(sId);
    	if(!objPField){
    		sId=this.id.replace(/Input/,"Cell");
    		objPField = goPPage.getField(sId);
    	}
    	objPField.controlCampo(this);
    }
    this.onKeyup=function(){  
    	var sId=this.id.substr(0,this.id.lastIndexOf("_Input"));
    	var objPField=goPPage.getField(sId);
    	if(!objPField){
    		sId=this.id.replace(/Input/,"Cell");
    		objPField = goPPage.getField(sId);
    	}
    	objPField.controlCampo(this);
    }
    this.onMouseup=function(){  
    	var sId=this.id.substr(0,this.id.lastIndexOf("_Input"));
    	var objPField=goPPage.getField(sId);
    	if(!objPField){
    		sId=this.id.replace(/Input/,"Cell");
    		objPField = goPPage.getField(sId);
    	}
    	objPField.controlCampo(this);
    }
    
    this.controlCampo=function(eComponente){
    	var sId=eComponente.id.substr(0,eComponente.id.lastIndexOf("_Input"));
    	var obPField = goPPage.getField(sId);
    	if(!obPField){
    		sId=eComponente.id.replace(/Input/,"Cell");
    		obPField = goPPage.getField(sId);
    	}
    	if(obPField.mask!="" && obPField.getLocked()!=true){
			//Valida el campo, utilizando la propiedad mask que tiene definida.
		   	var regExp=obPField.mask;
		   	if(!regExp.test(eComponente.value) && eComponente.value!="")
		   		eComponente.style.backgroundColor=obPField.backgroundError;
		   	else if(eComponente.value=="" && obPField.getIsRequired())
		   		eComponente.style.backgroundColor=obPField.backgroundRequired;
		   	else
		   		eComponente.style.backgroundColor=obPField.backgroundDefault;
    	}else{
    		if(obPField.getLocked()!=true){
	    		if(obPField.getIsRequired()==true && eComponente.value=="")
	    			eComponente.style.backgroundColor=obPField.backgroundRequired;
	    		else
	    			eComponente.style.backgroundColor=obPField.backgroundDefault;
    		}
    	}
	}
}


/////**************  CLASE PFORM.JS **************////////

function PForm(sId){        
    //this.fieldMode='';//?    
    //this.status='S'; //accion por defecto ?
    this._height=0;
    this.setHeight=function(iValue){
    	this._height=iValue;
    }
    this.getHeight=function(){
    	return this._height;
    }
    this._width=0;
    this.setWidth=function(iValue){
    	this._width=iValue;
    }
    this.getWidth=function(){
    	return this._width;
    }
    this._seccion='';
    this.setSeccion=function(sValue){
    	this._seccion=sValue;
    }
    this.getSeccion=function(){
    	return this._seccion;
    }
    this._DBservice='';
    this.setDBservice=function(sValue){
    	this._DBservice=sValue;
    }
    this.getDBservice=function(){
    	return this._DBservice;
    }
    this.fields= new Array();   
    this.actions=new Array(); 
	this._id=sId; //para identificar el formulario
	this.setId=function(sId){
		this._id=sId;
	}
	this.getId=function(){
		return this._id;
	}
	//this.name ='';
	
	function stateEventArg(){
		var stateNumber=0;
		var stateMessage="";
		/*
		 * 1: inserto correctamente
		 * 2: elemino correctamente
		 * 3: modifico correctamente
		 * 4: cargo datos correctamente
		 * 5: fallo insercion
		 * 6: fallo eliminacion
		 * 7: fallo modificacion
		 * 8: fallo carga de datos
		 * */
	}
	this.stateEvent=function(sender,args){
		
	}
	
	this._title='';
	this.setTitle=function(sTitle){
		this._title=sTitle;
		document.getElementById(this.getTitleId()).innerHTML=sTitle;
	}
	this.getTitleId=function(){
		return this._title;
	}
	this._titleId="";
	this.setTitleId=function(sId){
		this._titleId=sId;
	}
	
	this.getTitleId=function(){
		return this._titleId;
	}
	
	this.createTitle=function(sId){
		if(!document.getElementById(sId)){
			var oDivTitle=document.createElement("div");
			oDivTitle.setAttribute("id",sId);
			oDivTitle.style.paddingLeft="4px";
			document.getElementById(this.getId()).appendChild(oDivTitle);
		}
		this.setTitleId(sId);
	}
	
	if(!document.getElementById(sId)){
		if(goPPage.forms.length==0){
			var oDivImagen=document.createElement("div");
			oDivImagen.setAttribute("id","imagen");
			var oDivResultado=document.createElement("div");
			oDivResultado.setAttribute("id","resultado");
			oDivResultado.style.paddingLeft="10px";
		}
		var oForm=document.createElement("Form");
		oForm.setAttribute("id",sId);
		if(goPPage.forms.length==0){
			document.body.appendChild(oDivImagen);
			document.body.appendChild(oDivResultado);
		}
		document.body.appendChild(oForm);
	}else{
		if(goPPage.forms.length==0){
			var oDivImagen=document.createElement("div");
			oDivImagen.setAttribute("id","imagen");
			var oDivResultado=document.createElement("div");
			oDivResultado.setAttribute("id","resultado");
			oDivResultado.style.paddingLeft="10px";
		}
		var oForm=document.createElement("Form");
		oForm.setAttribute("id",sId+"b");
		this.setId(sId+"b");
		if(goPPage.forms.length==0){
			document.getElementById(sId).appendChild(oDivImagen);
			document.getElementById(sId).appendChild(oDivResultado);
		}
		document.getElementById(sId).appendChild(oForm);
	}
	goPPage.forms.push(this);
	
	this._dataSource='';
    this.getDataSource= function(){
    	return this._dataSource;	
    }
    this.setDataSource=function(sValue){
    	this._dataSource = sValue;
    }	

       
    //metodo para acceder a un field por su id
    this.field = function(sId){    
  		var numElements = this.fields.length; 
  		for (var e = 0; e < numElements; e++) {   			
    		if (this.fields[e].getId() == sId){
    			return this.fields[e];
    		}    		
    	}
    }
    
        
    //metodo para acceder a un action por su nombre
    this.action = function(sId){    
  		var numElements = this.actions.length; 
  		for (var a = 0; a < numElements; a++) { 
    		if (this.actions[a].getId() == sId){
    			return this.actions[a];
    		}    		
    	}
    }    
    //MODIFICAR
    this.update = function(bBorra){
    	var oResponse=null;
    	var Flag=0;
    	document.getElementById("resultado").innerHTML="";
    	var bCancel = false;
    	try{
	    	var oFormId=this.id.substr(0,(this.id.indexOf("_Button")<=0)?this.id.length:this.id.indexOf("_Button"));
	    	if(this.id.indexOf("_Button")>0)
	    		oFormId=oFormId.substr(0,(oFormId.lastIndexOf("_")<=0)?oFormId.length:oFormId.lastIndexOf("_"));
	    	var oForm = goPPage.getForm(oFormId);	
    	}catch(x){
    		oForm=this;
    	}
    	//Se hara una comprobacion de campos del form(eltos requeridos)
    	var sError="";
    	var numEl = oForm.fields.length;
    	//Para contabilizar el numero de elementos que se llevan mostrados
    	var cont=0;
    	for (var i = 0; i < numEl; i++) { 
			var oFieldTMP = oForm.fields[i];
			if ((oFieldTMP.getIsRequired() && document.getElementById(oFieldTMP._id+"_Input").value == '')||(oFieldTMP.getIsRequired() && oFieldTMP.getPresentation()=="combobox" && document.getElementById(oFieldTMP._id+"_Input").value==0) || document.getElementById(oFieldTMP._id+"_Input").style.backgroundColor ==oFieldTMP.backgroundError){
				if (cont == 0){
					sError = 'Campos a revisar: ' + oFieldTMP.getLabel();
					cont += 1;
				}else{
					sError = sError + ', ' + oFieldTMP.getLabel();
					cont += 1;
				}
			}
		}
    	//Mostramos el error
    	if(sError!=""){
    		document.getElementById("resultado").innerHTML = sError;
			bCancel = true;
    	}
    	//No hay error
    	if (!bCancel){
       		//obtenemos los campos a insertar
 			var sEnv = "accion=U";
 			var numEl = oForm.fields.length; 
			for (var i = 0; i < numEl; i++) { 
				oFieldTMP = oForm.fields[i]; 
				if(oFieldTMP.getPresentation()!="checkbox")
					var iValue = encodeURI(goPPage.document.getElementById(oFieldTMP._id+"_Input").value);
				else{
					var iValue = "";
					if(goPPage.document.getElementById(oFieldTMP._id+"_Input").checked==true)
						iValue="1";
					else
						iValue="0";
				}
				iValue=oForm.getConfiguracionEquipo("BD",oFieldTMP,iValue);	
				var sCampo = oFieldTMP.getDataMember();
				sEnv = sEnv + '&' + sCampo + '=' + iValue.toString() ;			
			}   		
            //instanciamos el PAjax   
            ajax=PAjax();
            ajax.open("POST", oForm.getDataSource(),false);   
            
       		ajax.onreadystatechange=function() {  
          		if (ajax.readyState==4) {
          			if(ajax.responseText.substr(0,1)=="1")  {
	          			e=new stateEventArg();
          				e.stateNumber=3;
          				e.stateMessage="El elemento ha sido modificado";
          				oForm.stateEvent(oForm,e);
          				document.getElementById("resultado").innerHTML = e.stateMessage;
          			}else{
          				Flag=1;
       					document.getElementById("resultado").innerHTML = ajax.responseText;
       				}
       				oResponse=ajax.responseText;
       				if(bBorra!=false || Flag!=1)
       					oForm.clear();
          		}  
      		}            
                        	
            ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");     
            //enviando los valores     
            ajax.send(sEnv);  
            //se habilitan todos los botones
            oForm.ableActions();
      	} 
      	return oResponse;
    }
    // FIN MODIFICAR    
    //INSERTAR  		            
    this.insert = function(){ 
    	document.getElementById("resultado").innerHTML = "";
    	var bCancel = false;
    	var Flag=0;
    	var oResponse=null;
    	try{
	    	var oFormId=this.id.substr(0,(this.id.indexOf("_Button")<=0)?this.id.length:this.id.indexOf("_Button"));
	    	if(this.id.indexOf("_Button")>0)
	    		oFormId=oFormId.substr(0,(oFormId.lastIndexOf("_")<=0)?oFormId.length:oFormId.lastIndexOf("_"));
	    	var oForm = goPPage.getForm(oFormId);	
    	}catch(x){
    		oForm=this;
    	}
    	var sError = ''; 
		var numEl = oForm.fields.length; 
		//Para contabilizar el numero de elementos que se llevan mostrados
		var cont = 0;
		for (var i = 0; i < numEl; i++) { 
			var oFieldTMP = oForm.fields[i];
			if ((oFieldTMP.getIsRequired() && document.getElementById(oFieldTMP._id+"_Input").value == '')||(oFieldTMP.getIsRequired() && oFieldTMP.getPresentation()=="combobox" && document.getElementById(oFieldTMP._id+"_Input").value==0) || document.getElementById(oFieldTMP._id+"_Input").style.backgroundColor ==oFieldTMP.backgroundError){
				if (cont == 0){
					sError = 'Campos a revisar: ' + oFieldTMP.getLabel();
					cont += 1;
				}else{
					sError = sError + ', ' + oFieldTMP.getLabel();
					cont += 1;
				}
			}
		}
				
		//Mostramos el error
		if(sError != ''){
			//AbrirVentana('../FrameworkPhp/errores.php?texto='+sError,'Formulario de errores','height=50,width=300,top=200,left=300');	
			document.getElementById("resultado").innerHTML = sError;
			bCancel = true;
		}	
      		
      	//No hay error
      	if (!bCancel){
       		//obtenemos los campos a insertar
 			var sEnv = "accion=I";
 			var numEl = oForm.fields.length; 
			for (var i = 0; i < numEl; i++) { 
				oFieldTMP = oForm.fields[i]; 
				if(oFieldTMP.getPresentation()!="checkbox")
					var iValue = encodeURI(goPPage.document.getElementById(oFieldTMP._id+"_Input").value);
				else{
					var iValue = "";
					if(goPPage.document.getElementById(oFieldTMP._id+"_Input").checked==true)
						iValue="1";
					else
						iValue="0";
				}
				iValue=oForm.getConfiguracionEquipo("BD",oFieldTMP,iValue);
				var sCampo = oFieldTMP.getDataMember();
				sEnv = sEnv + '&' + sCampo + '=' + iValue.toString() ;			
			}   		
            //instanciamos el PAjax   
            ajax=PAjax();
            ajax.open("POST", oForm.getDataSource(),false);   
            
       		ajax.onreadystatechange=function() {  
          		if (ajax.readyState==4) {  
          			if(ajax.responseText.substr(0,1)=="1"){
          				e=new stateEventArg();
          				e.stateNumber=1;
          				e.stateMessage="El elemento ha sido insertado";
          				oForm.stateEvent(oForm,e);
          				document.getElementById("resultado").innerHTML = e.stateMessage;	
          			}else{
       					Flag=1;
       					document.getElementById("resultado").innerHTML = ajax.responseText;
          			}
          			oResponse=ajax.responseText;
          			if(Flag!=1)
       					oForm.clear();
          		}  
      		}            
                        	
            ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");     
            //enviando los valores     
            ajax.send(sEnv);  
            //se habilitan todos los botones
            oForm.ableActions();
      	} 
      	return oResponse;  
    }
    //FIN INSERTAR 	
 	
 	//ELIMINAR 	
    this.del = function(){  
    	document.getElementById("resultado").innerHTML = "";
    	var bCancel = false; 
    	try{
	    	var oFormId=this.id.substr(0,(this.id.indexOf("_Button")<=0)?this.id.length:this.id.indexOf("_Button"));
	    	if(this.id.indexOf("_Button")>0)
	    		oFormId=oFormId.substr(0,(oFormId.lastIndexOf("_")<=0)?oFormId.length:oFormId.lastIndexOf("_"));
	    	var oForm = goPPage.getForm(oFormId);	
    	}catch(x){
    		oForm=this;
    	}	
       /*	oForm.search();  
 		//si no existe el registro
 		var numEl = oForm.fields.length;  
		for (var i = 0; i < numEl; i++) { 
			var oFieldTMP = oForm.fields[i]; 
			if (oFieldTMP.getIsKey()){ 
				  var iValue = encodeURI(goPPage.document.getElementById(oFieldTMP._id+"_Input").value);
				  if (iValue == ""){
				  	bCancel = true;
				  	break;
				  }	
			}				
		}*/  		
       	if (!bCancel){       			
       		if (confirm("Desea eliminar el registro")){      			
       			//obtenemos los campos a insertar
 				var sEnv = "accion=D";
 				var numEl = oForm.fields.length;  
				for (var i = 0; i < numEl; i++) { 
					oFieldTMP = oForm.fields[i]; 
					if (oFieldTMP.getIsKey()){ 
				  		var iValue = encodeURI(goPPage.document.getElementById(oFieldTMP._id+"_Input").value);
				  		var sCampo = oFieldTMP.getDataMember();
				  		sEnv = sEnv + '&' + sCampo + '=' + iValue;	
					}				
				}      		
            	//instanciamos el PAjax   
           		ajax=PAjax();
            	ajax.open("POST",oForm.getDataSource(),false);               	
            	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");     
            	//enviando los valores     
            	ajax.send(sEnv);
            	//botones todos habilitados
      	        oForm.ableActions(); 
       			oForm.clear();//no saca el mensaje
	            if (ajax.readyState==4){
	            	if(ajax.responseText.substr(0,1)=="1"){
          				e=new stateEventArg();
          				e.stateNumber=2;
          				e.stateMessage="El elemento ha sido eliminado";
          				oForm.stateEvent(oForm,e);
          				document.getElementById("resultado").innerHTML = e.stateMessage;
          			}else{
					document.getElementById("resultado").innerHTML = ajax.responseText;    	 
					}
	          	}	   
       		} 
       	}   
    } 	
 	//FIN ELIMINAR   
 	
 	//CONSULTA 	
    this.search = function(){ 
		var bCancel = false;	      	
      	var oForm = this;	
		var sError = ""; 
    	//Se haria una comprobación de campos del form  
		var numEl = oForm.fields.length; 	
		//Para contabilizar el número de elementos que se llevan mostrados
		var cont = 0;
		for (var i = 0; i < numEl; i++) { 
			var oFieldTMP = oForm.fields[i];
			var sValue = document.getElementById(oFieldTMP.getId()+"_Input").value;										
			if ((oFieldTMP.getIsKey() && sValue == '')||(oFieldTMP.getIsKey() && oFieldTMP.getPresentation()=="combobox" && document.getElementById(oFieldTMP._id+"_Input").value==0)){
				if (cont == 0){
					sError = 'Campos requeridos: ' + oFieldTMP.getLabel();
					cont++;
				}else{
					sError = sError + ', ' + oFieldTMP.getLabel();
					cont++;
				}				
			}			
		}		
		if(sError != ''){
			document.getElementById("resultado").innerHTML = sError;
			bCancel = true;
		}   		
       	//Si no hay error		// y hay algun campo clave	
       	if (!bCancel ){	
	 		var sEnv = "accion=S";
	  		var numEl = oForm.fields.length; 
	        var sender = oForm;
			for (var i = 0; i < numEl; i++) { 
				oFieldTMP = oForm.fields[i];	
				if (oFieldTMP.getIsKey()){ 
					  var iValue = encodeURI(goPPage.document.getElementById(oFieldTMP.getId()+"_Input").value);
					  var sCampo = oFieldTMP.getDataMember();
					  sEnv = sEnv + '&' + sCampo + '=' + iValue;	
				}				
			}  			
		    //instanciamos el PAjax   
	        ajax=PAjax();
	        ajax.open("POST", oForm.getDataSource(),false);
	       	ajax.onreadystatechange=function() {  
	          	if (ajax.readyState==4) {    
	              	var oResponse = eval('(' + ajax.responseText + ')');	              	
	              	if (oResponse.OK.value.indexOf('false')== 0){
						//Mostrar error/es
						var numErr = oResponse.Errors.length;
						var sError = "";
						var sNivel = "";
						for (var i = 0; i < numErr; i++){
							switch (oResponse.Errors[i].nivel){
								case "0":
									sNivel = "Warning-";
									//oForm.initActions("Insert"); 	
									break;
								case "1":
									sNivel = "Error-";
									break;
								case "2":
									sNivel = "Error fatal-";
									//oForm.desinitActions("Insert"); 	
									break;																
							}
							sError =  sError + sNivel + oResponse.Errors[i].msg + "\r\n";
						}
						
						if (!(sError.indexOf("Elemento no encontrado")>=0)){
							document.getElementById("resultado").innerHTML = sError;
						}
						//habilitamos boton insertar y deshabilitamos borrar
						oForm.initActions("Insertar","Cancelar"); 
						//cuando no se encuentra registro, no se puede borrar el form, porque tambien
						//borra la clave, y no se podria insertar un nuevo registro.
						oForm.clear("search");						
	              	}else{  
						var numErr = oResponse.Campos.length;
						for (var i = 0; i < numErr; i++){
							var objPField=goPPage.getField(oResponse.Campos[i].name);
							if(objPField.getPresentation()!="checkbox"){
								if(objPField.getPresentation()!="combobox"){// || navigator.appName!="Microsoft Internet Explorer")
									var valor=oForm.getConfiguracionEquipo("Form",objPField,oResponse.Campos[i].value);
									document.getElementById(oResponse.Campos[i].name+"_Input").value = valor;
								}else{
									for(var loung=0; loung<document.getElementById(oResponse.Campos[i].name+"_Input").options.length; loung++){
										if(document.getElementById(oResponse.Campos[i].name+"_Input").options[loung].value==oResponse.Campos[i].value){
											document.getElementById(oResponse.Campos[i].name+"_Input").options[loung].selected=true;
											break;
										}
									}
								}
								objPField.controlCampo(document.getElementById(oResponse.Campos[i].name+"_Input"));
							}else{
								if(oResponse.Campos[i].value=="1")
									document.getElementById(oResponse.Campos[i].name+"_Input").checked=true;
								else
									document.getElementById(oResponse.Campos[i].name+"_Input").checked=false;
							}
						}
						//habilitamos boton borrar y modificar y deshabilitamos insertar
						
						e=new stateEventArg();
          				e.stateNumber=4;
          				e.stateMessage="El registro ha sido cargado, correctamente";
          				oForm.stateEvent(oForm,e);
          				document.getElementById("resultado").innerHTML = e.stateMessage;
						oForm.initActions("Borrar","Modificar","Cancelar"); 
	              	}        
	          	}  
	      	}                	
	        ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");     
	        //enviando los valores     
	        ajax.send(sEnv);   
       	} 	
    }
 	//FIN CONSULTA   	 
 	
 	this.getConfiguracionEquipo=function (sDireccion,oField,iValue){
 		if(navigator.appName=="Microsoft Internet Explorer"){
 			var lang=navigator.userLanguage.toString().substr(0,2);
 		}else{
 			var lang=navigator.language.toString().substr(0,2); 
 		}//"es","en"
 		switch(sDireccion){
		 	//operaciones de insercion en base de datos
		 	case "BD":	
		 		switch (oField.getMask()){
		 			case "999999.99":
				    	if(iValue.indexOf(",")>0 ){
			    			iValue1=iValue.substr(0,iValue.indexOf(","))+".";
			    			iValue1=iValue1+iValue.substr(iValue.indexOf(",")+1);
			    			iValue=iValue1;
				    	}
				    	break;
					case "0000/00/00":
						if(lang=="es" && iValue!=""){
							var dd=iValue.substring(0,2);
							var mm=iValue.substring(3,5);
							var aaaa=iValue.substr(6);
							iValue=aaaa+"/"+mm+"/"+dd
						}
						break;
					case "0000/00/00 00:00":
						if(lang=="es" && iValue!=""){
							var dd=iValue.substring(0,2);
							var mm=iValue.substring(3,5);
							var aaaa=iValue.substring(6,10);
							var hh=iValue.substr(11);
							iValue=aaaa+"/"+mm+"/"+dd+" "+hh
						}
						break;
		 		}
				break;
			//operaciones de muestra de datos
			case "Form": 
				switch (oField.getMask()){
		 			case "999999.99":
				    	if(lang=="es"){
					    	if(iValue.indexOf(".")>0 ){
				    			iValue1=iValue.substr(0,iValue.indexOf("."))+",";
				    			iValue1=iValue1+iValue.substr(iValue.indexOf(".")+1);
				    			iValue=iValue1;
					    	}
				    	}
				    	break;
					case "0000/00/00":
						if(lang=="es" && iValue!=""){
							var dd=iValue.substr(8);
							var mm=iValue.substring(5,7);
							var aaaa=iValue.substr(0,4);
							iValue=dd+"/"+mm+"/"+aaaa
						}
						break;
					case "0000/00/00 00:00":
						if(lang=="es" && iValue!=""){
							var dd=iValue.substring(8,10);
							var mm=iValue.substr(5,7);
							var aaaa=iValue.substr(0,4);
							var hh=iValue.substr(11);
							iValue=dd+"/"+mm+"/"+aaaa+" "+hh
						}
						break;
		 		}
				break;
 		}
 		
 		return iValue;
 	}
 	
 	//CANCELAR
 	this.cancel=function(){
 		try{
	    	var oFormId=this.id.substr(0,(this.id.indexOf("_Button")<=0)?this.id.length:this.id.indexOf("_Button"));
	    	if(this.id.indexOf("_Button")>0)
	    		oFormId=oFormId.substr(0,(oFormId.lastIndexOf("_")<=0)?oFormId.length:oFormId.lastIndexOf("_"));
	    	var oForm = goPPage.getForm(oFormId);	
    	}catch(x){
    		oForm=this;
    	}
 		/*var sId=this.id.substr(0,this.id.lastIndexOf("_"));
 		sId=sId.substr(0,sId.lastIndexOf("_"));
		oForm = goPPage.getForm(sId);*/
		oForm.clear();
		oForm.ableActions(); 	
		document.getElementById("resultado").innerHTML = "";
 	}
 	
 	//FIN CANCELAR
 	
 	this.getLenIsKey=function(){
 		var cont=0;
 		var numElems=this.fields.length;
 		for ( var i = 0; i < numElems; i++){
 			if(this.fields[i].getIsKey()){
 				cont++;
 			}
 		}return cont;
 	}

 	this.onBlur = function(){
 		var sIdField=this.id.substr(0,this.id.indexOf("_Input"));
 		var objPField=goPPage.getField(sIdField);
 		var sId=objPField.getPForm();
 		var oForm = goPPage.getForm(sId);
 		if(oForm.field(sIdField).getIsKey()!=false){
	 		var cont=0;		
	 		var numElems = oForm.fields.length;
	 		var nLenIsKey = oForm.getLenIsKey();
	 		for (var i=0; i<numElems; i++){ 
	 			if (oForm.fields[i].getIsKey() && 
	 			(document.getElementById(this.id).value != "undefined" 
	 			&& document.getElementById(this.id).value != null
	 			&& (document.getElementById(this.id).value != ""
	 			&& document.getElementById(this.id).style.backgroundColor != oForm.fields[i].backgroundError)) ){
	 				cont++;
	 			}
	 		}
	 		if (cont== nLenIsKey  && cont!=0 && oForm.field(sIdField).getIsKey()){ 			
	 			oForm.search(); 
	 		}
 		}
 	} 	
	
	//Metodo que añade un nuevo campo al formulario	
	this.addFieldDOM=function(oPField){
		this.fields.push(oPField);
		oPField.addDomElement(this.getId());
	}
	
	//Metodo que añade una nueva accion al formulario
 	this.addActionDOM=function(oPAction){
 		oPAction.setFormId(this.getId());
 		this.actions.push(oPAction);
 		oPAction.addDomElement(this.getId());
 	}
 	
 	//Metodo que limpia los campos (estado inicial)
 	this.clear = function(borra){ 
	var numElF = this.fields.length;
		var tipo ;
		for (var j = 0; j < numElF; j++) {	
			oFieldTMP = this.fields[j];
			tipo = oFieldTMP.getPresentation();
			if (tipo == "combobox"){
				if(borra=="search"){
					if(oFieldTMP.getIsKey()!=true)
						document.getElementById(oFieldTMP.getId()+"_Input").selectedIndex = '0';
				}else{
					document.getElementById(oFieldTMP.getId()+"_Input").selectedIndex = '0';
				}
			}else if(tipo== "checkbox"){
				document.getElementById(oFieldTMP.getId()+"_Input").checked=false;
			}else {
				if(borra=="search"){
					if(oFieldTMP.getIsKey()!=true)
						document.getElementById(oFieldTMP.getId()+"_Input").value = '';
				}else{
					document.getElementById(oFieldTMP.getId()+"_Input").value = '';
				}
				if(tipo=="codebox"){
					document.getElementById(oFieldTMP.getId()+"_Descrip").innerHTML="";
				}
			}
			if (oFieldTMP.getIsRequired()){
				document.getElementById(oFieldTMP.getId()+"_Input").style.background = oFieldTMP.backgroundRequired;		
			}else{
				document.getElementById(oFieldTMP.getId()+"_Input").style.background = oFieldTMP.backgroundDefault;	
			}

		}	
 	}
 	
 	//Metodo que habilita/deshabilita los botones en funcion de la accion que se
 	//pasa por parametro
 	this.initActions = function(x){
  		//sAction es el _method del PAction
  		var variables=this.initActions.arguments;
  		for(var i=0; i<this.actions.length; i++){
  			document.getElementById(this.getId()+"_"+this.actions[i].getId()+"_Button").disabled=true;
  			for(var j=0; j<variables.length;j++){
  				if(this.actions[i].getMethod()==variables[j])
  					document.getElementById(this.getId()+"_"+this.actions[i].getId()+"_Button").disabled=false;
  			}
  		}
 	}
 	
	//Metodo que habilita todos los botones
 	this.ableActions= function(){
		var numElA = this.actions.length;
		for (var j = 0; j < numElA; j++) {							
			document.getElementById(this.getId()+"_"+this.actions[j].getId()+"_Button").disabled = false;	
		}
 	}  
}


/////**************  CLASE PPAGE.JS **************////////

function PPage(document){  
	this.document=document;  
    this.helpId=0;
  //  this.height=0;
  //  this.width=0; 
    this.title = this.document.title;	
    this.forms=new Array(); 
    this.grids=new Array(); 
    this.tabs=new Array();
    this.trees=new Array();
	
    //Creamos los formularios de la pagina y sus campos  
	var oDivs = document.body.getElementsByTagName("div"); 
	var numDivs = oDivs.length;
	var numForms = 0;

	this.votes=new Array();
    
    this.getVote=function(sId){
		var numVotes=this.votes.length;
		for(var i=0; i<this.votes.length; i++){
			if(this.votes[i].getId()==sId)
				return this.votes[i];
		}
	}

	this.getTree=function(sId){
		var numTrees=this.trees.length;
		for(var i=0; i<this.trees.length; i++){
			if(this.trees[i].getId()==sId)
				return this.trees[i];
		}
	}
  
    //Metodo para acceder a un form por su nombre
  /*  this.form = function(sId){					
		var numForms = this.forms.length;
		for (var f = 0; f < numForms; f++) {       	
    		if (this.forms[f].id == sId){
    			return this.forms[f];
    		}    		
    	}
    }*/
    

    //Metodo para acceder a un form 
    this.getForm=function(sId){
    	var numForms=this.forms.length;
    	for ( var i = 0; i < numForms; i++){
    		if(this.forms[i].getId()==sId){
    			return this.forms[i];
    		}
    	}
    }
    
    this.getGrid=function(sId){
		var numGrids=this.grids.length;
    	for ( var i = 0; i < numGrids; i++){
    		if(this.grids[i].getId()==sId){
    			return this.grids[i];
    		}
    	}
    }
    
    this.getTab=function(sId){
		var numTabs=this.tabs.length;
    	for ( var i = 0; i < numTabs; i++){
    		if(this.tabs[i].getId()==sId){
    			return this.tabs[i];
    		}
    	}
    }
    
    //Metodo para acceder a un campo
    this.getField = function(sName){			
		var numForms = this.forms.length;
		for (var f = 0; f < numForms; f++) {       	
			var numElems = this.forms[f].fields.length;
			for (var e = 0; e < numElems; e++) {   		
				if (sName==this.forms[f].fields[e].getId()){
					return this.forms[f].fields[e];
				}
			}	 		
		}
		var numGrids = this.grids.length;
		for (var f = 0; f < numGrids; f++) {  //hay que recorrer los rows     	
			var numElems = this.grids[f].rows.length;
			for (var e = 0; e < numElems; e++) { 
				var numCells=this.grids[f].rows[e].length;
				for(var i= 0; i<numCells;i++){
  					if (sName==this.grids[f].rows[e][i].getId()){
  						return this.grids[f].rows[e][i];
  					}
				}
			}	 		
		} 		
    }

    		    
 	//Método que limpia los campos de los formularios de la página
 	this.clear = function(){ 		
		var numEl = this.forms.length; 
		for (var i = 0; i < numEl; i++) { 			
			var numElF = this.forms[i].fields.length;
			var oFormTMP = this.forms[i];
			for (var j = 0; j < numElF; j++) {	
				oFieldTMP = oFormTMP.fields[j];
				this.document.getElementsByName(oFieldTMP.getInputTag())[0].value = '';				
				if (oFieldTMP.getIsRequired()){
					this.document.getElementsByName(oFieldTMP.getInputTag())[0].style.background = oFieldTMP.backgroundRequired;		
				}else{
					this.document.getElementsByName(oFieldTMP.getInputTag())[0].style.background = oFieldTMP.backgroundDefault;	
				}
			}
		} 	
 	}
 	
 	//Método que habilita los botones de los formularios de la página
 	this.ableActions= function(){
 		var numEl = this.forms.length; 
		for (var i = 0; i < numEl; i++) { 
			var numElA = this.forms[i].actions.length;
			var oFormTMP = this.forms[i];
			for (var j = 0; j < numElA; j++) {							
				oActionTMP = oFormTMP.actions[j];
				this.document.getElementById(oFormTMP.id+"_"+oActionTMP.getId()+"_Button").disabled = false;	
			}
		}			
 	}	
 }    
 
//****************************
var ArrayPaneles=new Array();
function menuAjax (url,capa,valores,metodo)
{
	  var ajax=PAjax();
	  var capaContenedora = document.getElementById(capa);

	/*Creamos y ejecutamos la instancia si el metodo elegido es POST*/
	if(metodo.toUpperCase()=='POST'){
	         ajax.open ('POST', url, false);
	         ajax.onreadystatechange = function() {
	         if (ajax.readyState==1) {
	                          capaContenedora.innerHTML="Cargando.......";
	         }
	         else if (ajax.readyState==4){
	                   if(ajax.status==200)
	                   {
	                        document.getElementById(capa).innerHTML=ajax.responseText;
	                   }
	                   else if(ajax.status==404)
	                                             {
	
	                            capaContenedora.innerHTML = "La direccion no existe";
	                                             }
	                           else
	                                             {
	                            capaContenedora.innerHTML = "Error: ".ajax.status;
	                                             }
	                                    }
	                  }
	         ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	         ajax.send(valores);
	         return;
	}
	/*Creamos y ejecutamos la instancia si el metodo elegido es GET*/
	if (metodo.toUpperCase()=='GET'){
	     ajax.open ('GET', url, true);
	     ajax.onreadystatechange = function() {
	     if (ajax.readyState==1) {
	                                  capaContenedora.innerHTML="Cargando.......";
	     }
	     else if (ajax.readyState==4){
	               if(ajax.status==200){
	                                         document.getElementById(capa).innerHTML=ajax.responseText;
	               }
	               else if(ajax.status==404)
	                                         {
	
	                        capaContenedora.innerHTML = "La direccion no existe";
	                                         }
	                                         else
	                                         {
	                        capaContenedora.innerHTML = "Error: ".ajax.status;
	                                         }
	                                }
	              }
	     ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	     ajax.send(null);
	     return
	}
} 

function crea(capa,padre){
    var nivel=capa.substr(0,1); Flag=0;FlagOcultar=0;
    capa=capa.substr(1);
    var i= ArrayPaneles.length;
    for(j=0;j<i;j++){
    	if(ArrayPaneles[j][0]==capa+"hijos"){
    		var cambio=document.getElementById(ArrayPaneles[j][0]).style;
    		if(cambio.visibility=="visible"){
   				FlagOcultar=1;
       		}
    	}
    }
    for(j=0; j<i; j++){
    	if(ArrayPaneles[j][0]==capa+"hijos" && FlagOcultar==0){
    		ArrayPaneles[j][1]=1;
    		Flag=1;
    	}else{
    			ArrayPaneles[j][1]=0;
	    		var cambio=document.getElementById(ArrayPaneles[j][0]).style;
	    		cambio.visibility="hidden";
    	}
    }
    if(FlagOcultar==1){
    	return;
    }
    if(Flag==0){
		var div1=document.getElementById(capa);
		var div=document.createElement("div");
		var menu=document.getElementById("Menu");
		div.setAttribute("class","rightsub");
		div.setAttribute("id",capa+"hijos");
		div.setAttribute("style","position: absolute; z-index: 6; background-color: #fafafa");
		menu.appendChild(div);
		var NuevoArray=new Array(capa+"hijos","1",padre);
		ArrayPaneles.splice(i,1,NuevoArray);
		PanelesSubmenu(nivel+capa,padre);
    } else {
    	var estilo=document.getElementById(capa+"hijos").style;
    	estilo.visibility="visible";
    }
    if(padre!="no"){
    	MuestraAntecesores(padre);
    }
}
function MuestraAntecesores(padre){
	var i=ArrayPaneles.length;
	for(j=0;j<i;j++){
		if(ArrayPaneles[j][0]==padre){
			ArrayPaneles[j][1]=1;
			var cambio=document.getElementById(ArrayPaneles[j][0]).style;
    		cambio.visibility="visible";
			if(ArrayPaneles[j][2]=="no"){
				break;
			} else {
				MuestraAntecesores(ArrayPaneles[j][2]);
			}
		}
	}
}
function NuevaVentana(destino){
	window.open("index.php?"+destino,null,"height=1000,width=1100,status=no,toolbar=no,menubar=no,location=no");
}
function PanelesSubmenu(capa, padre){
	if(document.getElemntById){
		var stdBrowser=true;
	}else{
		var stdBrowser=false;
	}
	var nivel=capa.substr(0,1);
    capa=capa.substr(1);
	var div=document.getElementById(capa);
	var div1=document.getElementById(capa+"hijos").style;
	if(!stdBrowser){
		var navegador=navigator.appName;
		if(navegador=="Netscape"){
			if(nivel==1){
				div1.top=div.offsetTop+div.offsetHeight+3+"px";
				div1.left=div.offsetLeft+"px";
			} else {
				var div2=document.getElementById(padre);
				div1.top=div.offsetTop+div.offsetHeight+8+"px";
				div1.left=div2.offsetLeft+div.offsetWidth+1+"px";
			}
		}
		if(navegador=="Microsoft Internet Explorer"){
			if(nivel==1){
				var capa2=capa+"hijos";
				document.getElementById(capa2).style.top=div.offsetTop+div.offsetHeight+3+"px";
				document.getElementById(capa2).style.left=div.offsetLeft+"px";
				document.getElementById(capa2).style.position="absolute";
				//no coge los datos de la clase rightsub
				document.getElementById(capa2).setAttribute("className","rightsub");
				document.getElementById(capa2).style.backgroundcolor="#fafafa";
				document.getElementById(capa2).style.backgroundImage="url(ApMedia/menu-bar-gradient.jpg)";
				document.getElementById(capa2).style.backgroundRepeat="repeat-y";
				document.getElementById(capa2).style.border="1px solid";
			} else {
				var capa2=capa+"hijos";
				document.getElementById(capa2).style.top=div.offsetTop+div.offsetHeight+8+"px";
				document.getElementById(capa2).style.left=div.offsetLeft+div.offsetWidth+21+"px";
				document.getElementById(capa2).style.position="absolute";
				document.getElementById(capa2).style.setAttribute("className","rightsub");
				document.getElementById(capa2).style.backgroundColor="#fafafa";
				document.getElementById(capa2).style.backgroundImage="url(ApMedia/menu-bar-gradient.jpg)";
				document.getElementById(capa2).style.backgroundRepeat="repeat-y";
				document.getElementById(capa2).style.border="1px solid";			
			}
		}
	}else{
		if(nivel==1){
			document.getElementById(capa).top=parseInt(capa.top)+parseInt(capa.height)+3;
			document.getElementById(capa).left=parseInt(capa.left);
		}else{
			document.getElementById(capa).top=parseInt(capa.top)+parseInt(capa.height)+8;
			document.getElementById(capa).left=parseInt(capa.left)+parseInt(capa.width)+1;
		}
	}
	a=capa.substr(5);
	menuAjax("index.php?Servicio=Menu&Metodo=Hijos",capa+"hijos","Padre="+a,"POST");
}

function cambiacolor(capa){
	var div=document.getElementById(capa).style;
	div.backgroundColor="#FFB46D";
	div.border="1px solid #000000";
	var divni=document.getElementById(capa);
}

function colornormal(capa){
	var divichi=document.getElementById(capa).style;
	divichi.backgroundColor="";
	divichi.border="1px solid transparent";
	var div=document.getElementById(capa);
	if(navigator.appName=="Microsoft Internet Explorer"){
		var clase=div.getAttribute("className");
		if(clase=="Contenedor"){
			divichi.backgroundImage="url('ApMedia/menu_strip_down_arrow.png')";
		}
		if(clase=="SubContenedor"){
			divichi.backgroundImage="url('ApMedia/menu-bar-right-arrow.png')";
		}
		divichi.backgroundPosition="right center";
		divichi.backgroundRepeat="no-repeat";
		div.setAttribute("className",clase);
	}
}


//***************************PGrid

function PGrid(sId){
	this.columns=new Array();
	this._firstRow=0;
	this.setFirstRow=function(iValue){
		this._firstRow=iValue;
	}
	this.getFirstRow=function(){
		return this._firstRow;
	}
	this._totalReg="";
	this.setTotalReg=function(sValue){
		this._totalReg=sValue;
	}
	this.getTotalReg=function(){
		return this._totalReg;
	}
	this._visibleRows=10;
	this.setVisibleRows=function(iValue){
		this._visibleRows=iValue;
	}
	this.getVisibleRows=function(){
		return this._visibleRows;
	}
	this._colWidth=100;
	this.setColWidth=function(iValue){
		this._colWidth=iValue;
	}
	this.getColWidth=function(){
		return this._colWidth;
	}
	this.dataArray=new Array();
	this._id="";
	this.setId=function(sId){
		this._id=sId;
	}
	this.getId=function(){
		return this._id;
	}
	function stateEventArg(){
		var stateNumber=0;
		var stateMessage="";
		/********************************
		 * 1: inserto correctamente     *
		 * 2: elemino correctamente     *
		 * 3: modifico correctamente    *
		 * 4: cargo datos correctamente *
		 * 5: fallo insercion 			*
		 * 6: fallo eliminacion			*
		 * 7: fallo modificacion		*
		 * 8: fallo carga de datos		*
		 ********************************/
	}
	this.stateEvent=function(sender,args){
		
	}
	
	this.getConfiguracionEquipo=function (sDireccion,oField,iValue){
 		if(navigator.appName=="Microsoft Internet Explorer"){
 			var lang=navigator.userLanguage.toString().substr(0,2);
 		}else{
 			var lang=navigator.language.toString().substr(0,2); 
 		}//"es","en"
 		switch(sDireccion){
		 	//operaciones de insercion en base de datos
		 	case "BD":	
		 		switch (oField.getMask()){
		 			case "999999.99":
				    	if(iValue.indexOf(",")>0 ){
			    			iValue1=iValue.substr(0,iValue.indexOf(","))+".";
			    			iValue1=iValue1+iValue.substr(iValue.indexOf(",")+1);
			    			iValue=iValue1;
				    	}
				    	break;
					case "0000/00/00":
						if(lang=="es" && iValue!=""){
							var dd=iValue.substring(0,2);
							var mm=iValue.substring(3,5);
							var aaaa=iValue.substr(6);
							iValue=aaaa+"/"+mm+"/"+dd
						}
						break;
					case "0000/00/00 00:00":
						if(lang=="es" && iValue!=""){
							var dd=iValue.substring(0,2);
							var mm=iValue.substring(3,5);
							var aaaa=iValue.substring(6,10);
							var hh=iValue.substr(12);
							iValue=aaaa+"/"+mm+"/"+dd+" "+hh
						}
						break;
		 		}
				break;
			//operaciones de muestra de datos
			case "Grid": 
				switch (oField.getMask()){
		 			case "999999.99":
				    	if(lang=="es"){
					    	if(iValue.indexOf(".")>0 ){
				    			iValue1=iValue.substr(0,iValue.indexOf("."))+",";
				    			iValue1=iValue1+iValue.substr(iValue.indexOf(".")+1);
				    			iValue=iValue1;
					    	}
				    	}
				    	break;
					case "0000/00/00":
						if(lang=="es" && iValue!=""){
							var dd=iValue.substr(8);
							var mm=iValue.substring(5,7);
							var aaaa=iValue.substr(0,4);
							iValue=dd+"/"+mm+"/"+aaaa
						}
						break;
					case "0000/00/00 00:00":
						if(lang=="es" && iValue!=""){
							var dd=iValue.substring(8,10);
							var mm=iValue.substr(5,7);
							var aaaa=iValue.substr(0,4);
							var hh=iValue.substr(11);
							iValue=dd+"/"+mm+"/"+aaaa+" "+hh
						}
						break;
		 		}
				break;
 		}
 		
 		return iValue;
 	}
	
	function PCell(sId){
		PField.apply(this);
		PCell.prototype.superclass=PField;
		this._id=sId;
		this._PGrid="";
		this.setPGrid=function(sId){
			this._PGrid=sId;
		}
		this.getPGrid=function(){
			return this._PGrid;
		}
		this.value=function(sValue){
			var id=this._id.replace(/Cell/,"Input");
			try{
				document.getElementById(id).value=sValue;
			}catch(e){
				alert("Revisar function PCell: objeto->"+document.getElementById(id));
			}
		}
	}
	
	this.setId(sId);
	if(!document.getElementById(sId)){
		var oDivGrid=document.createElement("div");
		oDivGrid.setAttribute("id",sId);
		oDivGrid.style.overflow="hidden";
		oDivGrid.style.height=((parseInt(this.getVisibleRows())*20)+41)+"px";
		document.getElementsByTagName("body")[0].appendChild(oDivGrid);
	}
		var oDivTableh=document.createElement("div");
		var oDivTableb=document.createElement("div");
		oDivTableh.setAttribute("id",sId+"dth");
		oDivTableb.setAttribute("id",sId+"dtb");
		oDivTableb.style.overflow="scroll";
		oDivTableh.style.position="absolute";
		oDivTableb.style.position="absolute";
		var oTableh=document.createElement("Table");
		oTableh.setAttribute("id",sId+"th");
		var oTableb=document.createElement("Table");
		oTableb.setAttribute("id",sId+"tb");
		if(navigator.appName=="Microsoft Internet Explorer"){
			oTableh.setAttribute("className","PGrid");
			oTableb.setAttribute("className","PGrid");
		}else{
			oTableh.setAttribute("Class","PGrid");
			oTableb.setAttribute("Class","PGrid");
		}
		var oColGroup=document.createElement("colgroup");
		oTableh.appendChild(oColGroup);
		var oTHead=document.createElement("THead");
		var oTr=document.createElement("Tr");
		oTr.setAttribute("id",sId+"TrH");
		oTHead.appendChild(oTr);
		var oTBody=document.createElement("TBody");
		oTableh.appendChild(oTHead);
		//oDivTableb.style.height=(parseInt(this.getVisibleRows())*20)+"px";
		oTableb.appendChild(oTBody);
		oTableh.setAttribute("cellSpacing","0px");
		oTableh.setAttribute("cellPadding","0px");
		oTableb.setAttribute("cellSpacing","0px");
		oTableb.setAttribute("cellPadding","0px");
		oDivTableh.appendChild(oTableh);
		oDivTableb.appendChild(oTableb);
		document.getElementById(sId).appendChild(oDivTableh);
		document.getElementById(sId).appendChild(oDivTableb);
		goPPage.grids.push(this);
	
	
	this.rows=new Array();
	var canal=new Array();
	canal.push(this.rows,this.columns);
	this._dataSource="";
	this.setDataSource=function(sValue){
		this._dataSource=sValue;
	}
	this.getDataSource=function(){
		return this._dataSource;
	}
    
    this.onMouseOver=function(){
	 	this.style.backgroundColor="#eeeeff";
    }
    
    this.onMouseOut=function(){
    	this.style.backgroundColor="#ffffff";
    }
    this.onClick=function(){
    }
    this.onDblClick=function(){
    	
    }
    
    this.onFocus=function(){
    	var pNode=this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id;
    	var col=this.id.substring(this.id.lastIndexOf("_")+1);
    	if(goPPage.getGrid(pNode).columns[col].getLocked()==true){
    		this.readOnly=true;
    	}
    	var temp=this.id.substring(this.id.lastIndexOf("_"));
    	var filaPos=this.id.substring(0,this.id.length-temp.length);
    	filaPos=filaPos.substring(filaPos.lastIndexOf("_")+1);
    	var fila=canal[0][filaPos];
    	for(var i=0;i<fila.length;i++){
    		if(canal[1][i].getIsRequired()==true)
    			fila[i].setIsRequired(true);
    		if(canal[1][i].getIsKey()==true)
    			fila[i].setIsKey(true);
    		
    		sId=this.id.replace(/Input/,"Cell");
    	 	oPField = goPPage.getField(sId);//no lo coge, porque una cell, no esta en forms.fields
    		oPField.controlCampo(this);//llamamos a control campo para que valide los campos ya cargados
    	}
    }
    this.onBlur=function(){
    	var num=canal[0].length;
    	for(var i=0; i<num;i++){
    		var Numcol=canal[0][i].length;
    		for(var j=0; j<Numcol;j++){
    			var id=canal[0][i][j]._id.replace(/Cell/,"Input");
    			//si el fondo tiene el color de error, lo mantenemos a pesar de cambiar de row
    			if(document.getElementById(id).style.backgroundColor!=canal[0][i][j].backgroundError)
    				document.getElementById(id).style.backgroundColor="Transparent";
    		}
    	}
    }
    
    this.ordenaGrid=function(){
    	var virtualGrid=new Array();
    	var TBody=this.parentNode.id;
    	TBody=TBody.substr(0,TBody.indexOf("TrH"))	;
    	TBody=TBody+"tb";//TBody de la grid
    	
    	var oTable=document.getElementById(TBody);
    	var oTbody=oTable.firstChild;
    	for(var i=0; i<oTbody.childNodes.length; i++){
    		var oTr=oTbody.childNodes[i];
    		var oRow=new Array();
    		for(var j=0; j<oTr.childNodes.length; j++){
    			var oTd=oTr.childNodes[j];
    			var oInput=oTd.firstChild;
    			oRow[j]=oInput.value;
    		}
    		virtualGrid[i]=oRow;
    	}
    	
    	var uPGrid=this.parentNode.id;
    	uPGrid=uPGrid.substr(0,uPGrid.indexOf("TrH"));
    	uPGrid=goPPage.getGrid(uPGrid);//Objeto PGrid
    	var numCol=0;//Indice de la columna por el que vamos a ordenar
  	 	while(uPGrid.columns[numCol].getLabel()!=this.innerHTML){
			numCol++;
    	}
    	//al no pasar siempre el mismo tipo de dato, string, integer, date,..., no podemos usar
    	//la funcion sort de los arrays
		var numRows=virtualGrid.length;
		for(var i=0; i<numRows;i++){
			for(var j=i+1;j<numRows;j++){
				if(virtualGrid[i][numCol]>virtualGrid[j][numCol]){
					var temp=new Array();
					temp=virtualGrid[i];
					virtualGrid[i]=virtualGrid[j];
					virtualGrid[j]=temp;
				}
			}
		}
		uPGrid.removeData();
		for(var i=0; i<numRows;i++){
			uPGrid.addRow(uPGrid.getId());
			for(var j=0; j<virtualGrid[i].length;j++){
				uPGrid.rows[i][j].value(virtualGrid[i][j]);
			}
		}
    }
	
	this.addCol=function(oPField){
		var num=goPPage.grids.length-1;
		var oColGroup=document.getElementsByTagName("colgroup")[num];
		var oCol=document.createElement("col");
		oCol.style.width=oPColumn.getWidth()+"px";
		/*if(oPField.visibled==false)
			oCol.style.visibility=false;*/
		var oTr=document.getElementById(goPPage.grids[num].getId()+"TrH");//ahora hay uno en cada tabla
		var oTd=document.createElement("Td");
		if(oPColumn.getVisibled()==false){
			oTd.style.visibility="hidden";
			oTd.style.width="0px";
			oCol.style.width="0px";
		}else{	
			oTd.style.width=oPColumn.getWidth()+"px";
			oTd.innerHTML=oPField.getLabel();
		}
		oColGroup.appendChild(oCol);
		if(navigator.appName=="Microsoft Internet Explorer")
			oTd.setAttribute("className","PGridH");
		else
			oTd.setAttribute("Class","PGridH");
		oTd.onclick=this.ordenaGrid;
		oTr.appendChild(oTd);
		this.columns.push(oPField);
		var oDivGrid=document.getElementById(this.getId());
		oDivGrid.style.height=((parseInt(this.getVisibleRows())*20)+41)+"px";
	}
	
	this.getCol=function(sId){
		var numCols = this.columns.length;
		for ( var i = 0; i < numCols; i++){
			if(this.columns[i].getId()==sId)
				return this.columns[i];
		}
	}

	this.addRow=function(sId){
		var oTBody=document.getElementById(this.getId()+"tb").lastChild;
		var oTr=document.createElement("Tr");
		var NumCols=this.columns.length;
		var row=new Array();
		var bigRow=0;
		for(var i=0; i<NumCols; i++){
			sId=this.columns[i].getId();
			var oPCell=new PCell(sId);
			oPCell.setPGrid(this.getId());
			var oTd=document.createElement("Td");
			oTd.style.width=this.columns[i].getWidth()+"px";
			if(this.columns[i].getPresentation()=="textarea"){
				var oInput=document.createElement("textarea");
				oInput.style.height=this.columns[i].height;
			}else{
				var oInput=document.createElement("Input");
				oInput.setAttribute("type","text");
			}
			oInput.setAttribute("id",sId+"_Input_"+this.rows.length+"_"+i);
			if(navigator.appName=="Microsoft Internet Explorer"){
				oInput.setAttribute("className","inputGrid");
				oTd.setAttribute("className","PGrid");
			}else{
				oInput.setAttribute("Class","inputGrid");
				oTd.setAttribute("Class","PGrid");
			}
			oInput.style.width=this.columns[i].getWidth()+"px";
			if(this.columns[i].getVisibled()==false){
				oInput.style.width="0px";
				oInput.style.visibility="hidden";
				oTd.style.visibility="hidden";
				oInput.setAttribute("type","hidden");
				oTd.style.width="0px";
			}
			oInput.onkeyup=oPCell.onKeyup;
			oInput.onmouseup=oPCell.onMouseup;
			oInput.onfocus=this.onFocus;
			oInput.onclick=this.onClick;
			oInput.onmousedown=this.setRowPos;
			oInput.onblur=this.onBlur;
			oInput.ondblclick=this.onDblClick;
			oPCell.setPForm = this;
			oPCell.format=this.getCol(sId).format;
			oPCell._id=sId+"_Cell_"+this.rows.length+"_"+i;
 			row[i] = oPCell;	
 			bigRow=oInput.offsetHeight;
 			oTd.appendChild(oInput);
 			oTr.appendChild(oTd);
		}
		oTr.onmouseover=this.onMouseOver;
		oTr.onmouseout=this.onMouseOut;	
		oTr.style.height=bigRow+"px";
		oTr.style.backgroundColor="#ffffff";
		oTBody.appendChild(oTr);
		if (this.rows.length ==null||this.rows.length==""||this.rows.length=="undefined" || this.rows.length==0){
 			this.rows[0] = row;	
 		}else{ 	
 			this.rows[this.rows.length] = row;
 		}
 		document.getElementById(this.getId()+"th").style.width=oTBody.offsetWidth+"px";
 		canal[0]=this.rows;
 		document.getElementById(this.getId()+"dtb").style.marginTop=document.getElementById(this.getId()+"dth").offsetHeight+"px";
 		document.getElementById(this.getId()+"dtb").style.height=(parseInt(this.getVisibleRows())*20)+"px";
 		document.getElementById(this.getId()+"dtb").style.width=document.getElementById(this.getId()).style.width;
		document.getElementById(this.getId()+"dtb").onscroll=this.onScroll;
	}
	this.onScroll=function(){
		var gridTbody=document.getElementById(this.id);
		var gridThead=document.getElementById(this.parentNode.id+"dth");
		gridThead.style.left=-gridTbody.scrollLeft+"px";
	}
	this.getField=function(sName){
		var num=canal[0].length;
		for(var i=0;i<num;i++){
			var numcol=canal[0][i].length;
			for(var j=0; j<numcol; j++){
				if(canal[0][i][j]._inputTag==sName)
					return canal[0][i][j];
			}
		}
	}
	
	this.filterDataLoad=function(x){
		this.dataArray.length=0;
		var variables=this.filterDataLoad.arguments;
		var valores="";
		for(var j=0; j<variables.length;j++){
			if(j>0)
				valores+="&";
			valores+="filtro"+j+"="+variables[j];
		}
		valores="accion=S&"+valores;
		var ajax=new PAjax();
		var PHP=this.getDataSource();
		var uPGrid=this;
		ajax.open ("POST", PHP, true);
 		ajax.onreadystatechange = function() {
		 if (ajax.readyState==1) {
		     //document.getElementById(TZone).innerHTML="";
		 }
		 else if (ajax.readyState==4){
	       if(ajax.status==200)
	       {
				try{
					matrizJSON=eval('(' + ajax.responseText + ')');
				}catch(x){
					return false;
				}
				//contando la longitud del array, evitamos que si nos devuelve menos registros
				//se produzca un error
				for(var reg=0; reg<matrizJSON.arrayCampos.length; reg++){
					for(var numcol=0; numcol<canal[1].length;numcol++){
						try{
							//Buscar el resultado en el JSON por el nombre del campo
							var valor=uPGrid.getConfiguracionEquipo("Grid",uPGrid.columns[numcol],matrizJSON.arrayCampos[reg].Campos[numcol].value);
							uPGrid.rows[reg][numcol].value(valor);
						}catch(x){
							uPGrid.addRow(uPGrid.columns[numcol].getId());
							var valor=uPGrid.getConfiguracionEquipo("Grid",uPGrid.columns[numcol],matrizJSON.arrayCampos[reg].Campos[numcol].value);
							uPGrid.rows[reg][numcol].value(valor);
						}
					}
				}
				uPGrid.totalReg=matrizJSON.TotalReg;
	       }
	       else if(ajax.status==404){
		          alert("La direccion, al archivo "+uPGrid.getDataSource()+" no existe");
		   }else{
		         alert("Error: ".ajax.status);
		   }
		 }
	 	}
		ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	 	ajax.send(valores);
		}
		
		this.dataLoad=function(x){
			this.dataArray.length=0;
			var variables=this.dataLoad.arguments;
			if(variables.length!=0){
				StartReg=variables[0];
				EndReg=variables[1];
			}else{
				StartReg=0;
			}
			var ajax=new PAjax();
			var PHP=this.getDataSource();
			var uPGrid=this;
			try{
				for(var i=StartReg; i<EndReg;i++){
					uPGrid.addRow();
				}
				var valores="accion=S&StartReg="+StartReg+"&EndReg="+EndReg;
			}catch(x){
				var valores="accion=S&StartReg="+StartReg;
			}
			ajax.open ("POST", PHP, true);
	 		ajax.onreadystatechange = function() {
			 if (ajax.readyState==1) {
			     //document.getElementById(TZone).innerHTML="";
			 }
			 else if (ajax.readyState==4){
		       if(ajax.status==200)
		       {
					try{
						matrizJSON=eval('(' + ajax.responseText + ')');
					}catch(x){
						return false;
					}
					//contando la longitud del array, evitamos que si nos devuelve menos registros
					//se produzca un error
					for(var reg=0; reg<matrizJSON.arrayCampos.length; reg++){
						for(var numcol=0; numcol<canal[1].length;numcol++){
							
							try{
								//En uPGrid.rows estan almacenadas las celdas, como objetos PField
								var valor=uPGrid.getConfiguracionEquipo("Grid",uPGrid.columns[numcol],matrizJSON.arrayCampos[reg].Campos[numcol].value);
								uPGrid.rows[reg][numcol].value(valor);
							}catch(x){
								uPGrid.addRow(uPGrid.columns[numcol].getId());
								var valor=uPGrid.getConfiguracionEquipo("Grid",uPGrid.columns[numcol],matrizJSON.arrayCampos[reg].Campos[numcol].value);
								uPGrid.rows[reg][numcol].value(valor);
							}
						}
					}
					uPGrid.totalReg=matrizJSON.TotalReg;
		       }
		       else if(ajax.status==404){
			          alert("La direccion, al archivo "+uPGrid.getDataSource()+" no existe");
			   }else{
			         alert("Error: ".ajax.status);
			   }
			 }
		 	}
			ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		 	ajax.send(valores);
		}
		
		this.removeRow=function(RowPos){
			var oTBody=document.getElementById(this.getId()+"tb").lastChild;
			oTBody.removeChild(oTBody.childNodes[RowPos]);
			this.rows.slice(RowPos);
		}
		
		this.removeData=function(){
			this.rows=new Array();
			this.dataArray.length=0;
			canal[0]=this.rows;
			var oTBody=document.getElementById(this.getId()+"tb").lastChild;
			while(oTBody.childNodes.length!=0){
				oTBody.removeChild(oTBody.childNodes[0]);
			}
		}
		
		this.setNumRows=function(){
			this.removeData();
			var num=document.getElementById("selecter").value;
	  		this.DataLoad(0,num);
		}
		
	/*	this.goPage=function(obj){//Adaptar para funcionar con mas de una grid
		if(obj.id=="first"){
			if(goPGrid.firstRow>0){
				goPGrid.removeData();
				goPGrid.firstRow=0;
				goPGrid.DataLoad(goPGrid.firstRow,goPGrid.firstRow+parseInt(document.getElementById("selecter").value,16));
			}
		}else if(obj.id=="back"){
			if(goPGrid.firstRow>0){
				goPGrid.removeData();
				goPGrid.firstRow=goPGrid.firstRow-document.getElementById("selecter").value;
				goPGrid.DataLoad(goPGrid.firstRow,goPGrid.firstRow+parseInt(document.getElementById("selecter").value,16));
			}
		}else if(obj.id=="next"){
			if((goPGrid.totalReg-(goPGrid.firstRow+parseInt(document.getElementById("selecter").value,16)))>0){
				goPGrid.removeData();
				goPGrid.firstRow=goPGrid.firstRow+parseInt(document.getElementById("selecter").value,16);
				goPGrid.DataLoad(goPGrid.firstRow,goPGrid.firstRow+parseInt(document.getElementById("selecter").value,16));
			}
		}else if(obj.id=="last"){
			var a=parseInt((goPGrid.totalReg/parseInt(document.getElementById("selecter").value,16)),16);
			if(a>1){
				var b=goPGrid.totalReg/parseInt(document.getElementById("selecter").value,16);
				goPGrid.removeData();
				if(b>a){
					goPGrid.firstRow=a*parseInt(document.getElementById("selecter").value,16);
				}else if(b==a){
					goPGrid.firstRow=(a-1)*parseInt(document.getElementById("selecter").value,16);
				}
				goPGrid.DataLoad(goPGrid.firstRow,goPGrid.firstRow+parseInt(document.getElementById("selecter").value,16));
			}
		}
	}*/
	this._rowPos="";//onmousedown
	this.setRowPos=function(){
		var Flag=0;
		var pNode=this.parentNode.parentNode.parentNode.parentNode.id;
		pNode=pNode.substr(0,pNode.length-2);
		var uPGrid=goPPage.getGrid(pNode);
		var row=this.id.substr(0,this.id.lastIndexOf("_"));
		row=row.substr(row.lastIndexOf("_")+1,row.length);
		if(uPGrid.getRowPos()!=row && uPGrid.getRowPos()!=""){
			for(var lon=0;lon<uPGrid.dataArray.length; lon++){
				if(document.getElementById(uPGrid.rows[uPGrid.getRowPos()][lon]._id.replace(/Cell/,"Input")).value!=uPGrid.dataArray[lon])
					Flag=1;
			}
			if(Flag==1)
				uPGrid.update(uPGrid.getRowPos());
		}
		uPGrid._rowPos=row;
		for(var lon=0;lon<uPGrid.rows[row].length;lon++){
			uPGrid.dataArray[lon]=document.getElementById(uPGrid.rows[row][lon]._id.replace(/Cell/,"Input")).value;
		}
		
		this.focus();
	}
	this.getRowPos=function(){
		return this._rowPos;
	}
	
	//Tanto la funcion update, como insert, como del, se ejecutan al cambiar de row, e inmediatamente
	//despues se llama a removedata y dataload, para refrescar la grid, con los datos actuales
	this.update=function(sRow){
		var oResponse=null;
    	document.getElementById("resultado").innerHTML="";
    	var bCancel = false;
    	var uPGrid = this;
    	//Se hara una comprobacion de campos del row(eltos requeridos)
    	var sError="";
    	var row=uPGrid.rows[sRow];
    	var numEl = row.length;
    	
    	//Para contabilizar el numero de elementos que se llevan mostrados
    	var cont=0;
    	for (var i = 0; i < numEl; i++) { 
			var oCellTMP = row[i];
			var oColTMP=uPGrid.columns[i];
			if ((oColTMP.getIsRequired() && document.getElementById(oCellTMP._id.replace(/Cell/,"Input")).value == '') || document.getElementById(oCellTMP._id.replace(/Cell/,"Input")).style.backgroundColor ==oCellTMP.backgroundError){
				var nombreCampo=oCellTMP._id.substr(0,oCellTMP._id.indexOf("_Cell"));
				if (cont == 0){
					sError = 'Campos a revisar: ' + nombreCampo;
					cont += 1;
				}else{
					sError = sError + ', ' + nombreCampo;
					cont += 1;
				}
			}
		}
    	//Mostramos el error
    	if(sError!=""){
    		document.getElementById("resultado").innerHTML = sError;
			bCancel = true;
    	}
    	//No hay error
    	if (!bCancel){
       		//obtenemos los campos a insertar
 			var sEnv = "accion=U";
			for (var i = 0; i < numEl; i++) { 
				oCellTMP = row[i]; 
				if(oCellTMP.getPresentation()!="checkbox")
					var iValue = encodeURI(goPPage.document.getElementById(oCellTMP._id.replace(/Cell/,"Input")).value);
				else{
					var iValue = "";
					if(goPPage.document.getElementById(oCellTMP._id.replace(/Cell/,"Input")).checked==true)
						iValue="1";
					else
						iValue="0";
				}
					
			//	var sCampo = oCellTMP._id.substr(0,oCellTMP._id.indexOf("_Cell"));
				iValue=oForm.getConfiguracionEquipo("BD",oCellTMP,iValue);
				var sCampo=oCellTMP.getDataMember();
				sEnv = sEnv + '&' + sCampo + '=' + iValue ;			
			}   		
            //instanciamos el PAjax   
            ajax=PAjax();
            ajax.open("POST", uPGrid.getDataSource(),false);   
            
       		ajax.onreadystatechange=function() {  
          		if (ajax.readyState==4) {
          			if(ajax.responseText.substr(0,1)=="1")  {
	          			e=new stateEventArg();
          				e.stateNumber=3;
          				e.stateMessage="El elemento ha sido modificado";
          				uPGrid.stateEvent(uPGrid,e);
          				document.getElementById("resultado").innerHTML = e.stateMessage;
          			}else{
       					document.getElementById("resultado").innerHTML = ajax.responseText;
       				}
       				oResponse=ajax.responseText;
          		}  
      		}            
                        	
            ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");     
            //enviando los valores     
            ajax.send(sEnv);  
      	} 
      	return oResponse;
	}
	/*this.insert=function(){
		
	}
	this.del=function(){
		
	}*/
}

function PTextAreaBox(sId){
	PField.apply(this);
	PTextAreaBox.prototype.superclass=PField;
	try{
		this.setPForm(oPForm.getId());
	}catch(x){}
	this._id=sId;
	this.setPresentation("textarea");
	this.addDomElement = function (oParentNode){
		var oBlock=document.createElement("div");
		var oLabel=document.createElement("div");
		var oDInput=document.createElement("div");
		var oInput=document.createElement("textarea");
		oLabel.setAttribute("id",sId+"_Label");
		oInput.setAttribute("id",sId+"_Input");
		oDInput.setAttribute("id",sId+"_Value");
		oBlock.setAttribute("id",sId);
		oInput.onkeyup=this.onKeyup;
		if(oPForm.field(sId).getIsRequired())
			oInput.style.backgroundColor=this.backgroundRequired;
		oInput.onmouseup=this.onMouseup;
		oInput.style.width=this.getWidth()+"px";
		oInput.style.height=this.getHeight()+"px";
		oInput.onblur=oPForm.onBlur;
		oInput.onchange=this.onChange;
		oLabel.innerHTML=this.getLabel();
		if(this.getLocked()==true){
			oInput.readOnly=true;
			oInput.style.backgroundColor=this.backgroundReadOnly;
		}
		oDInput.appendChild(oInput);
		oBlock.appendChild(oLabel);
		oBlock.appendChild(oDInput);
		if(this.getVisibled()==false)
			oBlock.style.visibility="hidden";
		var oParent=document.getElementById(oParentNode);
		oParent.appendChild(oBlock);
	}	
}

function PTextBox(sId){
	PField.apply(this);
	PTextBox.prototype.superclass=PField;
	try{
		this.setPForm(oPForm.getId());
	}catch(x){}
	this._id=sId;
	this.setPresentation("textbox");
	this.addDomElement = function (oParentNode){
		var oBlock=document.createElement("div");
		var oLabel=document.createElement("div");
		var oDInput=document.createElement("div");
		var oInput=document.createElement("input");
		oInput.setAttribute("type","text");
		oLabel.setAttribute("id",sId+"_Label");
		oInput.setAttribute("id",sId+"_Input");
		oDInput.setAttribute("id",sId+"_Value");
		oBlock.setAttribute("id",sId);
		oInput.onkeyup=this.onKeyup;
		if(oPForm.field(sId).getIsRequired())
			oInput.style.backgroundColor=this.backgroundRequired;
		oInput.onmouseup=this.onMouseup;
		oInput.onblur=oPForm.onBlur;
		oInput.onchange=this.onChange;
		if(this.getLocked()==true){
			oInput.readOnly=true;
			oInput.style.backgroundColor=this.backgroundReadOnly;
		}
		/*oBlock.style.width=this.width;
		oBlock.style.height=this.height;*/
		oLabel.innerHTML=this.getLabel();
		oDInput.appendChild(oInput);
		oBlock.appendChild(oLabel);
		oBlock.appendChild(oDInput);
		if(this._mask=="0000/00/00"){
			if(navigator.appName=="Microsoft Internet Explorer"){
	 			var lang=navigator.userLanguage.toString().substr(0,2);
	 		}else{
	 			var lang=navigator.language.toString().substr(0,2); 
	 		}
			var datapicker=document.createElement("a");
			if(lang!="es")
				datapicker.setAttribute("href","javascript:NewCal('"+sId+"_Input','yyyymmdd',false,24)");
			else
				datapicker.setAttribute("href","javascript:NewCal('"+sId+"_Input','ddmmyyyy',false,24)");
			var img=document.createElement("img");
			img.setAttribute("id","calendario");
			if(navigator.appName=="Microsoft Internet Explorer")
				datapicker.setAttribute("className","calendario");
			else
				datapicker.setAttribute("class","calendario");
			img.setAttribute("alt","fecha");
			datapicker.appendChild(img);
			oBlock.appendChild(datapicker);
		}
		var oParent=document.getElementById(oParentNode);
		if(this.getVisibled()==false)
			oBlock.style.visibility="hidden";
		oParent.appendChild(oBlock);
	}
}

function PCheckBox(sId){
	//Hereda de PField.
	PField.apply(this);
	PCheckBox.prototype.superclass=PField;
	try{
		this.setPForm(oPForm.getId());
	}catch(x){}
	this._id=sId;
	this.setPresentation("checkbox");
	this.addDomElement = function (oParentNode){
		var oBlock=document.createElement("div");
		var oLabel=document.createElement("div");
		var oDCheck=document.createElement("div");
		var oCheck=document.createElement("input");
		oCheck.setAttribute("type","checkbox");
		oLabel.setAttribute("id",sId+"_Label");
		oCheck.setAttribute("id",sId+"_Input");
		oDCheck.setAttribute("id",sId+"_Value");
		oBlock.setAttribute("id",sId);
		//oCheck.onkeyup=this.onKeyup;
		if(oPForm.field(sId).getIsRequired())
			oCheck.style.backgroundColor=this.backgroundRequired;
		/*oCheck.onmouseup=this.onMouseup;
		oCheck.onblur=oPForm.onBlur;
		oCheck.onchange=this.onChange;*/
		/*oBlock.style.width=this.width;
		oBlock.style.height=this.height;*/
		oLabel.innerHTML=this.getLabel();
		if(this.getLocked()==true){
			oCheck.disabled=true;
			oCheck.style.backgroundColor=this.backgroundReadOnly;
		}
		oDCheck.appendChild(oCheck)	;
		oBlock.appendChild(oLabel);
		oBlock.appendChild(oDCheck);
		if(this.getVisibled()==false)
			oBlock.style.visibility="hidden";
		var oParent=document.getElementById(oParentNode);
		oParent.appendChild(oBlock);
	}
}

function PComboBox(sId){
	//Hereda de PField.
	PField.apply(this);
	PComboBox.prototype.superclass=PField;
	try{
		this.setPForm(oPForm.getId());
	}catch(x){}
	this._id=sId;
	this.setPresentation("combobox");
	this._dataSource="";
	this.setDataSource=function(sValue){
		this._dataSource=sValue;
	}
	this.getDataSource=function(){
		return this._dataSource;
	}
	this.addDomElement = function (oParentNode){
		var oBlock=document.createElement("div");
		var oLabel=document.createElement("div");
		var oDCombo=document.createElement("div");
		var oCombo=document.createElement("select");
		oLabel.setAttribute("id",sId+"_Label");
		oCombo.setAttribute("id",sId+"_Input");
		oDCombo.setAttribute("id",sId+"_Value");
		oBlock.setAttribute("id",sId);
		//oCombo.onkeyup=this.onKeyup;
		if(oPForm.field(sId).getIsRequired())
			oCombo.style.backgroundColor=this.backgroundRequired;
		oCombo.onmouseup=this.onMouseup;
		oCombo.onblur=oPForm.onBlur;
		oCombo.onchange=this.onChange;
		try{
			oCombo.addEventListener('change',this.onChange2,false);
		}catch(x){
			oCombo.attachEvent('onchange',this.onChange2)
		}
		/*oBlock.style.width=this.width;
		oBlock.style.height=this.height;*/
		oLabel.innerHTML=this.getLabel();
		if(this.getLocked()==true){
			oCombo.readOnly=true;
			oCombo.style.backgroundColor=this.backgroundReadOnly;
		}
		oDCombo.appendChild(oCombo);
		oBlock.appendChild(oLabel);
		oBlock.appendChild(oDCombo);
		var oParent=document.getElementById(oParentNode);
		if(this.getVisibled()==false)
			oBlock.style.visibility="hidden";
		oParent.appendChild(oBlock);
		oPForm.field(sId).Items.add("0","");
	}
	
	this.onChange2=function(){
	}
	
	function Items(componenteId){
		this.item=new Array();
		this.add=function(sValue,sItem){
			this.item.push(sValue,sItem);
			var oOption=document.createElement("option");
			oOption.innerHTML=sItem;
			oOption.value=sValue;
			document.getElementById(componenteId+"_Input").appendChild(oOption);
			document.getElementById(componenteId+"_Input").options[0].selected=true;
		}
		this.remove=function(sIndex){
			this.item.splice(sIndex,1);
		}
	}
	this.Items=new Items(this._id);
	
	this.filterDataLoad=function(x){
		oCombo=this;
		var variables=this.filterDataLoad.arguments;
		var valores="";
		for(var j=0; j<variables.length;j++){
			if(j>0)
				valores+="&";
			valores+="filtro"+j+"="+variables[j];
		}
		valores="accion=S&"+valores;
		var ajax=new PAjax();
		var PHP=this.getDataSource();
		var uPGrid=this;
		ajax.open ("POST", PHP, true);
 		ajax.onreadystatechange = function() {
		 if (ajax.readyState==1) {
		     //document.getElementById(TZone).innerHTML="";
		 }
		 else if (ajax.readyState==4){
	       if(ajax.status==200)
	       {
				try{
					matrizJSON=eval('(' + ajax.responseText + ')');
				}catch(x){
					return false;
				}
				//segun la cantidad de valores, llamamos a items.add
				for(var i=0; i<matrizJSON.arrayCampos.length;i++){
					oCombo.Items.add(matrizJSON.arrayCampos[i].Campos[0].value,matrizJSON.arrayCampos[i].Campos[1].value);
				}
	       }
	       else if(ajax.status==404){
		          alert("La direccion, al archivo "+oComboBox.getDataSource()+" no existe");
		   }else{
		         alert("Error: ".ajax.status);
		   }
		 }
	 	}
		ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	 	ajax.send(valores);
		}
	
	this.removeData=function(){
		document.getElementById(this.getId()+"_Input").options.length=0;
		this.Items.add("0","");
	}
	
	this.dataLoad=function(){
		oCombo=this;
		var ajax=new PAjax();
		var PHP=this.getDataSource();
		ajax.open ("POST", PHP, false);
 		ajax.onreadystatechange = function() {
		 if (ajax.readyState==4){
	       if(ajax.status==200)
	       {
				try{
					matrizJSON=eval('(' + ajax.responseText + ')');
				}catch(x){
					return false;
				}
				//segun la cantidad de valores, llamamos a items.add
				for(var i=0; i<matrizJSON.arrayCampos.length;i++){
					oCombo.Items.add(matrizJSON.arrayCampos[i].Campos[0].value,matrizJSON.arrayCampos[i].Campos[1].value);
				}
	       }
	       else if(ajax.status==404){
		          alert("La direccion, al archivo "+oComboBox.getDataSource()+" no existe");
		   }else{
		         alert("Error: ".ajax.status);
		   }
		 }
	 	}
		ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		ajax.send();
	}
}
function PCodeBox(sId){
	//Hereda de PField.
	PField.apply(this);
	PCodeBox.prototype.superclass=PField;
	try{
		this.setPForm(oPForm.getId());
	}catch(x){}
	this._id=sId;
	this.setPresentation("codebox");
	this._dataSource="";
	this.setDataSource=function(sValue){
		this._dataSource=sValue;
	}
	this.getDataSource=function(){
		return this._dataSource;
	}
	this.validate=function(){
		//ahora valida el campo contra la base de datos
		var oDivValue=this.parentNode;
   		var oDivBlock=oDivValue.parentNode;
	   	var oPField=goPPage.getForm(this.form.id).field(oDivBlock.id);
	   	var nombre=oPField.getId();
		if(this.style.backgroundColor!=oPField.backgroundError && this.style.backgroundColor!=oPField.backgroundRequired && this.value!=""){
			var ajax=new PAjax();
			var PHP=oPField.getDataSource();
			var valores="KeyField="+this.value;
			ajax.open ("POST", PHP, true);
	 		ajax.onreadystatechange = function() {
			 if (ajax.readyState==1) {
			     //document.getElementById(TZone).innerHTML="";
			 }
			 else if (ajax.readyState==4){
		       if(ajax.status==200)
		       {
					if(ajax.responseText==""){
						document.getElementById(nombre+"_Descrip").innerHTML="";
						var oInput=document.getElementById(nombre+"_Input");
						oInput.value="";
						oInput.focus();
					}else {
						document.getElementById(nombre+"_Descrip").innerHTML=ajax.responseText;
					}
		       }
		       else if(ajax.status==404){
			          alert("La direccion, al archivo "+PHP+" no existe");
			   }else{
			         alert("Error: ".ajax.status);
			   }
			 }
		 	}
			ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		 	ajax.send(valores);
		}else{
			if(this.value!="")
				document.getElementById(nombre+"_Descrip").innerHTML="Debe introducir un código válido";
		}
	}

	
	this.addDomElement = function (oParentNode){
		var oBlock=document.createElement("div");
		var oLabel=document.createElement("div");
		var oDInput=document.createElement("div");
		var oInput=document.createElement("input");
		var oLInput=document.createElement("div");
		oLabel.setAttribute("id",sId+"_Label");
		oInput.setAttribute("id",sId+"_Input");
		oInput.setAttribute("type","text");
		oDInput.setAttribute("id",sId+"_Value");
		oBlock.setAttribute("id",sId);
		oLInput.setAttribute("id",sId+"_Descrip");
		//oLInput.setAttribute("style","position:absolute;margin-left:2px;margin-top:0px;float:left;");
		oInput.onkeyup=this.onKeyup;
		oInput.onmouseup=this.onMouseup;
		if(oPForm.field(sId).getIsRequired())
			oInput.style.backgroundColor=this.backgroundRequired;
		oInput.onchange=this.onChange;
		oInput.onblur=this.validate;
		/*oBlock.style.width=this.width;
		oBlock.style.height=this.height;*/
		oLabel.innerHTML=this.getLabel();
		if(this.getLocked()==true){
			oInput.readOnly=true;
			oInput.backgroundColor=this.backgroundReadOnly;
		}
		oDInput.appendChild(oInput);
		oDInput.appendChild(oLInput);
		oBlock.appendChild(oLabel);
		oBlock.appendChild(oDInput);
		var oParent=document.getElementById(oParentNode);
		if(this.getVisibled()==false)
			oBlock.style.visibility="hidden";
		oParent.appendChild(oBlock);
	}
}

//******************Pestañas
function PTab(sId){
	this._id=sId;
	this.getId=function(){
		return this._id;
	}
	this._selectedItem="0";
	this.setSelectedItem=function(){
		var idPTab=this.parentNode.id;
		var oPTab=goPPage.getTab(idPTab);
		var antIndex=oPTab.getSelectedItem();
		document.getElementById(oPTab.Items.item[oPTab.getSelectedItem()][1]).style.visibility="hidden";
		oPTab._selectedItem=this.id.substr(idPTab.length);
		document.getElementById(oPTab.Items.item[oPTab.getSelectedItem()][1]).style.visibility="visible";
		if(antIndex!=oPTab.getSelectedItem())
			oPTab.selectedItemChanged();
	}
	this.getSelectedItem=function(){
		return this._selectedItem;
	}

	this.selectedItemChanged=function(){
	}
	
	if(!document.getElementById(sId)){
		var oDiv=document.createElement("div");
		oDiv.setAttribute("id",sId);
		document.body.appendChild(oDiv);
	}else{
		var oDiv=document.getElementById(sId);
	}
	goPPage.tabs.push(this);
	
	function _Items(componenteId){
		this._id=componenteId;
		this.item=new Array();
		this.add=function(sValue,sItem){
			var pestana=document.createElement("input");
			pestana.setAttribute("type","button");
			pestana.setAttribute("id",this._id+this.item.length);
			pestana.setAttribute("value",sValue);
			pestana.onclick=goPPage.getTab(this._id).setSelectedItem;
			document.getElementById(this._id).appendChild(pestana);
			if(this.item.length==0)
				document.getElementById(sItem).style.visibility="visible";
			else
				document.getElementById(sItem).style.visibility="hidden";
			var temp=Array(sValue,sItem);
			this.item.push(temp);
		}
		this.remove=function(sIndex){
			this.item.splice(sIndex,1);
		}
	}
	this.Items=new _Items(this._id);
}

//*************PSection************
function PSection(sId){
	this._id=sId;
	this.getId=function(){
		return this._id;
	}
}

//*************PSeparator**********

function PSeparator(sId){
	this._id=sId;
	this.getId=function(){
		return this._id;
	}
	this._width=0;
	this.setWidth=function(iValue){
		this._width=iValue;
	}
	this.getWidth=function(){
		return this._width;
	}
	this._title	="";
	this.setTitle=function(sValue){
		this._title=sValue;
	}
	this.getTitle=function(){
		return this._title;
	}
	this._titleWidth=0;
	this.setTitleWidth=function(iValue){
		this._titleWidth=iValue;
	}
	this.getTitleWidth=function(){
		return this._titleWidth;
	}
	this.addSeparator=function(sContenedor){
		var anchoHr=this.getWidth()-this.titleWidth;
		var oDiv=document.createElement("div");
		oDiv.setAttribute("id",this.getId());
		oDiv.style.width=this.getWidth()+"px";
		var oHr=document.createElement("hr");
		oHr.setAttribute("id",this.getId()+"hr");
		oHr.style.width=anchoHr+"px";
		oHr.style.bottom="6px";
		oHr.style.left=this.titleWidth+"px";
		oHr.style.position="absolute";
		if(this.getTitle()!="" && this.titleWidth>0){
			var oTitle=document.createElement("div");
			oTitle.innerHTML=this.getTitle();
			oTitle.style.width=this.titleWidth+"px";
			oDiv.appendChild(oTitle);
		}
		oDiv.style.height="20px";
		oDiv.appendChild(oHr);
		document.getElementById(sContenedor).appendChild(oDiv);
	}
}

//*****************CLASE PARBOL()*********************//
function PTree(sId){
	this._nodes=new Array();
	this.getNode=function(sId){
		var numNodes=this._nodes.length;
		for(var i=0; i<this._nodes.length; i++){
			if(this._nodes[i].getId()==sId){
				return this._nodes[i];
			}
		}
	}
	this._id=sId;
	this.setId=function(sId){
		this._id=sId;
	}
	this.getId=function(){
		return this._id;
	}
	this._width=0;
	this.setWidth=function(iValue){
		this._width=iValue;
	}
	this.getWidth=function(){
		return this._width;
	}
	this._height=0;
	this.setHeight=function(iValue){
		this._height=iValue;
	}
	this.getHeight=function(){
		return this._width;
	}
	this._dataSource="";
	this.setDataSource=function(sValue){
		this._dataSource=sValue;
	}
	this.getDataSource=function(){
		return this._dataSource;
	}
	if(!document.getElementById(sId)){
		var oDiv=document.createElement("div");
		oDiv.setAttribute("id",sId);
		document.body.appendChild(oDiv);
		goPPage.trees.push(this);
	}else{
		if(!goPPage.getTree(sId))
			goPPage.trees.push(this);
	}
	if(!document.getElementById("hijosDe"+sId)){
		oDiv=document.createElement("div");
		oDiv.setAttribute("id","hijosDe"+sId);
		document.getElementById(sId).appendChild(oDiv);
	}
	
	/*this._addNode2=function(oNode){
		oNode.setPArbol(this.getId());
 		this._nodes.push(oNode);
 		oNode.addNodeDOM(oNode.getId());
	}*/
	this.nodeOnClick=function(){
		
	}
	
	function PNode(sId){
		PField.apply(this);
		PNode.prototype.superclass=PField;
		this._container="";
		this.setContainer=function(sContainer){
			this._container=sContainer;
		}
		this.getContainer=function(){
			return this._container;
		}
		this.setId(sId);
		this._index=0;
		this.setIndex=function(iValue){
			this._index=iValue;
		}
		this._isCollapsed=true;

		this.getIsCollapsed=function(){
			return this._isCollapsed;
		}
		this.getIndex=function(){
			return this._index;
		}
		this._PTree="";
		this.setPTree=function(sId){
			this._PTree=sId;
		}
		this.getPTree=function(){
			return this._PTree;
		}
		this._parent="";
		this.setParent=function(sId){
			this._parent=sId;
		}
		this.getParent=function(){
			return this._parent;
		}
		this._isParent=false;
		this.setIsParent=function(bValue){
			this._isParent=bValue;
		}
		this.getIsParent=function(){
			return this._isParent;
		}
		this._label="";
		this.setLabel=function(sValue){
			this._label=sValue;
		}
		this.getLabel=function(){
			return this._label;
		}
		
		this.expand=function(){
			if(!document.getElementById("hijosDe"+this.getId())){
				//alert("por aqui no...");
			}else{
				var oNode=document.getElementById("hijosDe"+this.getId());
				if(oNode.innerHTML=="" || oNode.innerHTML==null || oNode.innerHTML=="undefined"){
					for(var i=0; i<goPPage.trees.length; i++){
						if(goPPage.trees[i].getNode(this.getId()).getId()==this.getId()){
							var index=goPPage.trees[i].getNode(this.getId()).getIndex();
							var sName=goPPage.trees[i].getNode(this.getId()).getId();
							break;
						}
					}
					goPPage.trees[i].filterDataLoad(index,sName);
				}else{
					oNode.style.display="block";
					oNode._isCollapsed = false;
				}
			}
		}
				
		this.collapse=function(){
			var oNode=document.getElementById("hijosDe"+this.getId());
			oNode.style.display="none";
			oNode._isCollapsed = true;
		}
		
		this._nodeAction=function(){
			for(var i=0; i<goPPage.trees.length; i++){
				if(goPPage.trees[i].getNode(this.id)){
					oNode=goPPage.trees[i].getNode(this.id);
				}
			}
			
			if(oNode._isCollapsed){
				oNode.expand();
			}else{
				oNode.collapse();
			}
		}
		this.addNode=function(sId){//mal
				var treeId=this.getPTree();
				var oTree=goPPage.getTree(treeId);
				var oDiv=document.createElement("div");
				//var oImg=document.createElement("img");
				
				oDiv.setAttribute("id","Principal"+sId);
				var oDivLink=document.createElement("div");
				oDivLink.setAttribute("id",sId);
				oDivLink.innerHTML=this.getLabel();			
				oDivLink.onclick=this._nodeAction;			
				if(navigator.appName=="Microsoft Internet Explorer")
					oDivLink.attachEvent("onclick",oTree.nodeOnClick);
				else
					oDivLink.addEventListener("click",oTree.nodeOnClick,false);
				oDiv.appendChild(oDivLink);
				if(this.getIsParent()==true){
					var oDivHijos=document.createElement("div");
					oDivHijos.setAttribute("id","hijosDe"+sId);
					oDivHijos.style.paddingLeft="10px";
					oDiv.appendChild(oDivHijos);
				}
				oTree=goPPage.getTree(this.getPTree());
				document.getElementById(this.getContainer()).appendChild(oDiv);
			}
		}
		
		
	this.dataLoad=function(){
		oTree=this;
		var sEnv="Node=primerNivel";
		var ajax=new PAjax();
		var PHP=this.getDataSource();
		ajax.open ("POST", PHP, false);
 		ajax.onreadystatechange = function() {
		 if (ajax.readyState==4){
	       if(ajax.status==200)
	       {//el JSON tiene que devolver las nodes y si tienen hijos.iId,sNombre, bHijos
				try{
					matrizJSON=eval('(' + ajax.responseText + ')');
				}catch(x){
					return false;
				}
				//segun la cantidad de valores, llamamos a items.add
				for(var i=0; i<matrizJSON.arrayCampos.length;i++){
					oTree.addNode(matrizJSON.arrayCampos[i].Campos[0].value,matrizJSON.arrayCampos[i].Campos[1].value,matrizJSON.arrayCampos[i].Campos[2].value,matrizJSON.arrayCampos[i].Campos[1].value,"PTree",oTree.getId());
				}
	       }
	       else if(ajax.status==404){
		          alert("La direccion, al archivo "+PHP+" no existe");
		   }else{
		         alert("Error: ".ajax.status);
		   }
		 }
	 	}
		ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		ajax.send(sEnv);
	}
	this.filterDataLoad=function(iIndexPadre,sNombrePadre){
		oTree=this;
		iPadre=iIndexPadre;
		sPadre=sNombrePadre;
		var sEnv="Node=Contenido&filtro0="+iPadre;
		var ajax=new PAjax();
		var PHP=this.getDataSource();
		ajax.open ("POST", PHP, true);
 		ajax.onreadystatechange = function() {
		 if (ajax.readyState==1) {
		     //document.getElementById(TZone).innerHTML="";
		 }
		 else if (ajax.readyState==4){
	       if(ajax.status==200)
	       {
				try{
					matrizJSON=eval('(' + ajax.responseText + ')');
				}catch(x){
					return false;
				}
				//segun la cantidad de valores, llamamos a items.add
				for(var i=0; i<matrizJSON.arrayCampos.length;i++){
					//aqui crea las nodes
					oTree.addNode(matrizJSON.arrayCampos[i].Campos[0].value,matrizJSON.arrayCampos[i].Campos[1].value,matrizJSON.arrayCampos[i].Campos[2].value,matrizJSON.arrayCampos[i].Campos[1].value,"PNode",sPadre);
				}
	       }
	       else if(ajax.status==404){
		          alert("La direccion, al archivo "+PHP+" no existe");
		   }else{
		         alert("Error: ".ajax.status);
		   }
		 }
	 	}
		ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	 	ajax.send(sEnv);
	}

	
	this.addNode=function(iIndex,sName,isParent,sLabel,sSuperior,sIdSuperior){
		sId=iIndex+sName;
		if(!document.getElementById(sId)){
			var oPNode=new PNode(sId);
			oPNode.setIsParent(isParent);
			oPNode.setIndex(iIndex);
			oPNode.setLabel(sLabel);
			if(sSuperior=="PTree"){
				oPNode.setPTree(sIdSuperior);
				oPNode.setContainer("hijosDe"+sIdSuperior);
			}else{
				oPNode.setParent(sIdSuperior);
				oPNode.setContainer("hijosDe"+sIdSuperior);
				oPNode.setPTree(goPPage.trees[goPPage.trees.length-1].getId());
			}
			oPNode.setPTree(this.getId());
 			this._nodes.push(oPNode);
 			oPNode.addNode(oPNode.getId());
		}else{
			alert("Ya existe otra node, con el mismo id: "+sId);
		}
	}
}

//***************PMENU

function PMenu(sId){
	PTree.apply(this);
	PMenu.prototype.superclass=PTree;
}


//******************PVote
function PVote(sId){
	this._id=sId;	
	this.setId=function(sId){
		this._id=sId;
	}
	this.getId=function(){
		return this._id;
	}
	this._dataSource="";
	this.setDataSource=function(sValue){
		this._dataSource=sValue;
	}
	this.getDataSource=function(){
		return this._dataSource;
	}
	this._imageDirectory="";
	this.setImageDirectory=function(sValue){
		this._imageDirectory=sValue;
	}
	this.getImageDirectory=function(){
		return this._imageDirectory;
	}
	this._imageName="";//Nombre de la imagen de la estrella, una unica estrella
	//tiene que haber una imagen con el prefijo vacia, y otra con rellena
	///p.ej: vaciast.jpg, rellenast.jpg; y 6 imagenes, con 5 estrellas, con todas, en blanco
	//y luego con cada vez mas estrellas.
	//p.ej: 0st.jpg, 1st.jpg...
	this.setImageName=function(sValue){
		this._imageName=sValue;
	}
	this.getImageName=function(sValue){
		return this._imageName;
	}
	this._canVote=true;
	this.setCanVote=function(bValue){
		this._canVote=bValue;
	}
	this.getCanVote=function(){
		return this._canVote;
	}
	this.retrieveVotes=function(x){
		oVote=this;
		var variables=this.retrieveVotes.arguments;
		var sEnv="";
		for(var i=0; i<variables.length; i++){
			if(i>0){
				sEnv=sEnv+"&";
			}
			sEnv=sEnv+"filtro"+i+"="+variables[i];
		}
		var ajax=new PAjax();
		var PHP=this.getDataSource();
		ajax.open ("POST", PHP+"&Metodo=read", true);
 		ajax.onreadystatechange = function() {
		 if (ajax.readyState==1) {
		     //document.getElementById(TZone).innerHTML="";
		 }
		 else if (ajax.readyState==4){
	       if(ajax.status==200)
	       {
				oResponse=eval('(' + ajax.responseText + ')');
   				sNivel="";
   				numErr=oResponse.Errors.length;
   				if(oResponse.isOk.value=='false'){
   					for (var i = 0; i < numErr; i++){
						switch (oResponse.Errors[i].level){
							case "0":
								sNivel = "Warning-";
								break;
							case "1":
								sNivel = "Error-";
								break;
							case "2":
								sNivel = "Error fatal-";
								break;																
						}
						sError =  sNivel+" "+oResponse.Errors[i].errorId+" "+oResponse.Errors[i].descrip+"\n\r";
					}
					document.getElementById("pagResultado").innerHTML=sError;
   				}else{
   					//recibimos el total de votos y la media (de 0-5)
   					var directory=oVote.getImageDirectory();
   					var imageName=oVote.getImageName();
   					var oDiv=document.getElementById(oVote.getId()+"EstrellasTotal");
   					oDiv.innerHTML="";
   					switch(oResponse.DataRows[0].row[1].value){
   						case 0: 
   							oDiv.style.backgroundImage="url("+directory+"/0"+imageName+")";
   							oDiv.style.backgroundRepeat="none";
   							break;
   						case 1:
   							oDiv.style.backgroundImage="url("+directory+"/1"+imageName+")";
   							oDiv.style.backgroundRepeat="none";
   							break;
   						case 2: 
   							oDiv.style.backgroundImage="url("+directory+"/2"+imageName+")";
   							oDiv.style.backgroundRepeat="none";
   							break;
   						case 3: 
   							oDiv.style.backgroundImage="url("+directory+"/3"+imageName+")";
   							oDiv.style.backgroundRepeat="none";
   							break;
   						case 4: 
   							oDiv.style.backgroundImage="url("+directory+"/4"+imageName+")";
   							oDiv.style.backgroundRepeat="none";
   							break;
   						case 5:
   							oDiv.style.backgroundImage="url("+directory+"/5"+imageName+")";
   							oDiv.style.backgroundRepeat="none";
   							break;
   						default: break;
   					}
   					document.getElementById(oVote.getId()+"TotalVotos").innerHTML=oResponse.DataRows[0].row[0].value+" votos";
   				}
	       }
	       else if(ajax.status==404){
		          alert("La direccion, al archivo "+PHP+" no existe");
		   }else{
		         alert("Error: ".ajax.status);
		   }
		 }
	 	}
		ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	 	ajax.send(sEnv);
	}
	this.addNewVote=function(iValue){
		oVote=this.id.substring(0,this.id.length-4);
		oVote=goPPage.getVote(oVote);
		if(oVote.getCanVote()==true){
			var sEnv="";
			var ajax=new PAjax();
			var PHP=oVote.getDataSource();
			ajax.open ("POST", PHP+"&Metodo=create", true);
	 		ajax.onreadystatechange = function() {
			 if (ajax.readyState==1) {
			     //document.getElementById(TZone).innerHTML="";
			 }
			 else if (ajax.readyState==4){
		       if(ajax.status==200)
		       {
					oResponse=eval('(' + ajax.responseText + ')');
	   				sNivel="";
	   				numErr=oResponse.Errors.length;
	   				if(oResponse.isOk.value=='false'){
	   					for (var i = 0; i < numErr; i++){
							switch (oResponse.Errors[i].level){
								case "0":
									sNivel = "Warning-";
									break;
								case "1":
									sNivel = "Error-";
									break;
								case "2":
									sNivel = "Error fatal-";
									break;																
							}
							sError =  sNivel+" "+oResponse.Errors[i].errorId+" "+oResponse.Errors[i].descrip+"\n\r";
						}
						document.getElementById("pagResultado").innerHTML=sError;
	   				}else{
	   					oVote.setCanVote(false);
	   				}
		       }
		       else if(ajax.status==404){
			          alert("La direccion, al archivo "+PHP+" no existe");
			   }else{
			         alert("Error: ".ajax.status);
			   }
			 }
		 	}
			ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		 	ajax.send(sEnv);
		}
	}
	this.starBar=function(){
		oVote=this.id.substring(0,this.id.length-4);
		oVote=goPPage.getVote(oVote);
		var estrellas=this.id.substring(this.id.length-1);
		var id=this.id.substring(0,this.id.length-1);
		for(var i=1; i<=estrellas; i++){
			document.getElementById(id+i).src=oVote.getImageDirectory()+"/rellena"+oVote.getImageName();
		}
		for(var i=5; i>estrellas; i--){
			document.getElementById(id+i).src=oVote.getImageDirectory()+"/vacia"+oVote.getImageName();
		}
	}
	this.addPVote=function(){
		sId=this.getId();
		if(!document.getElementById(sId)){
			var oDiv=document.createElement("div");
			oDiv.setAttribute("id",sId);
			document.body.appendChild(oDiv);
			var oDivVotos=document.createElement("div");
			oDivVotos.setAttribute("id",sId+"Valoracion");
			var oDivVotar=document.createElement("div");
			oDivVotar.setAttribute("id",sId+"Vota");
			oDiv.appendChild(oDivVotos);
			oDiv.appendChild(oDivVotar);
			var oDivEstrellasValor=document.createElement("div");
			oDivEstrellasValor.setAttribute("id",sId+"EstrellasTotal");
			var oDivTotalVotos=document.createElement("div");
			oDivTotalVotos.setAttribute("id",sId+"TotalVotos");
			oDivVotos.appendChild(oDivEstrellasValor);
			oDivVotos.appendChild(oDivTotalVotos);
			var oImg1=document.createElement("img");
			oImg1.setAttribute("id",sId+"Img1");
			oImg1.src=this.getImageDirectory()+"/rellena"+this.getImageName();
			oImg1.style.backgroundRepeat="none";
			oImg1.onmouseover=this.starBar;
			oImg1.onclick=this.addNewVote;
			var oImg2=document.createElement("img");
			oImg2.setAttribute("id",sId+"Img2");
			oImg2.src=this.getImageDirectory()+"/vacia"+this.getImageName();
			oImg2.style.backgroundRepeat="none";
			oImg2.onmouseover=this.starBar;
			oImg2.onclick=this.addNewVote;
			var oImg3=document.createElement("img");
			oImg3.setAttribute("id",sId+"Img3");
			oImg3.src=this.getImageDirectory()+"/vacia"+this.getImageName();
			oImg3.style.backgroundRepeat="none";
			oImg3.onmouseover=this.starBar;
			oImg3.onclick=this.addNewVote;
			var oImg4=document.createElement("img");
			oImg4.setAttribute("id",sId+"Img4");
			oImg4.src=this.getImageDirectory()+"/vacia"+this.getImageName();
			oImg4.style.backgroundRepeat="none";
			oImg4.onmouseover=this.starBar;
			oImg4.onclick=this.addNewVote;
			var oImg5=document.createElement("img");
			oImg5.setAttribute("id",sId+"Img5");
			oImg5.src=this.getImageDirectory()+"/vacia"+this.getImageName();
			oImg5.style.backgroundRepeat="none";
			oImg5.onmouseover=this.starBar;
			oImg5.onclick=this.addNewVote;
			oDivVotar.appendChild(oImg1);
			oDivVotar.appendChild(oImg2);
			oDivVotar.appendChild(oImg3);
			oDivVotar.appendChild(oImg4);
			oDivVotar.appendChild(oImg5);
		}
		goPPage.votes.push(this);
	}
}
