
/* JavaScript Document
// Gestiona documentos XML
// Autor: Enrique Ignacio Vazquez (EIV)
// mail: eivazquez@maat-g.com, ei_Vazquez@hotmail.com
// 18/05/2005
*/
/* Permite gestionar peticiones al servidor
// particularmente realizadas en XML 
*/
//------------------------ Inicio ------------------------------------------//

function callServer(){
// Metodos XMLHttpRequest

this.DocTxt;
this.DocXml; 
this.controlLoad=0; // controla si realizo un load al servidor devuelve 1 por si
this.onLoad; // permite atachar una funcion de controladora de lectura
this.sendValues;
var me=this;

var xmlhttp;
var ret;


var xmlTXT; // 0 - Retorna XML, 1 - Texto





this.loadXMLhttp=function(url,metodo,asc){
	xmlTXT=0;
	xmlHttpLoad(url,metodo,asc);
}
this.loadTXThttp=function(url,metodo,asc){
	xmlTXT=1;
	xmlHttpLoad(url,metodo,asc);
}
	function xmlHttpLoad(url,metodo,asc){
	/*
	metodo: POST, GET , HEAD
	url: Server Side datos
	asc: true o false , si es ascicronico o no
	*/
	// Valores por default

		if (metodo==undefined){ metodo="GET";}
		if (asc==undefined){ asc="false";}
			
		// Mozilla, etc.
		if (window.XMLHttpRequest){
			  xmlhttp=new XMLHttpRequest()
			  xmlhttp.onreadystatechange=state_Change
			  xmlhttp.open(metodo,url,asc)
			  xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
			  //lhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
			  //lhttp.setRequestHeader("Accept-Charset","UTF-8");
			  //xmlhttp.setRequestHeader('Content-Type','UTF-8'); 
			if (me.sendValues==undefined){
				xmlhttp.send(null);
			}else{
				xmlhttp.send(me.sendValues);
			}
				
			  
		}
		// IE
		else if (window.ActiveXObject)
		  {
		  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
			if (xmlhttp){
				xmlhttp.onreadystatechange=state_Change
				xmlhttp.open(metodo,url,asc);
				xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
				//xmlhttp.setRequestHeader("Accept-Charset","UTF-8");
				//xmlhttp.setRequestHeader("charset", "iso-8859-1" );
				//xmlhttp.setRequestHeader('Content-Type','UTF-8'); 
				
				if (me.sendValues==undefined){
					xmlhttp.send();
				}else{
					xmlhttp.send( me.sendValues);
				}
			}
		  }
	  return ret;
	}

	function state_Change(){
		if (me.onLoad==undefined){
			window.status='Cargando....';
		}else { 
			if (me.controlLoad==0 ) {
				me.onLoad(false);
			}
		}
		
		me.controlLoad=1;		
		
		if (xmlhttp.readyState==4){
			if (xmlhttp.status==200){
			  ret=true;
			  if(xmlTXT==0) {
			  	me.DocXml=xmlhttp.responseXML;
			  }else{
			  	me.DocTxt=xmlhttp.responseText;
			  }
			  
				if (me.onLoad==undefined){
					window.status='Ok';
				}else { 
					me.onLoad(true);
				}

			}else{
			  ret=false;
			  alert("Problemas al recibir datos:" + xmlhttp.statusText)
			}
		  }
	};
	
	
//------------------------------------------------------------------//


// -------------------------     Funciones de Recarda de Objetos Form -----------------------------------//
	this.isNull=function(valor,retorno){
		if (valor==null){
			return retorno;
		}else{
			return valor;
		};
	};
	
	
	this.xmlToArray=function(listaFields){
	// listaFields : lista de campos
	// Devuelve un objeto con "n" array cuyo contenido es el texto de los tag listaFieds
		var ret=new Object();
		var f_array=listaFields.split(",");
		for (var i=0; i<f_array.length; i++){
			var _nTag=f_array[i];
			var _nField=f_array[i].replace('.','_');
			var _nodes=me.getCampo(_nTag);
			var _sconcat='';
			if (_nodes.length>0){
				for (var j=0; j <_nodes.length; j++){
					var v='';
					if (_nodes[j].hasChildNodes()){
						v=_nodes[j].firstChild.nodeValue;
					};
					_sconcat=_sconcat + v + "|";
				};
				_sconcat=_sconcat.substr(0,_sconcat.length -1);
				var _str="ret." + _nField +"=_sconcat.split('|');";
				eval(_str);
			};
		};
		return ret;
	};

	this.xmlToCombo=function (IdCombo,fieldTexto, fieldValor, inicio){
			// Recarga un comboBox = select 
			/* recibe 
			IdCombo= id del objeto 
			campo= nombre del campo que se rellena
			*/
			try {
			var myCombo=document.getElementById(IdCombo);
			if (inicio==undefined){ inicio=0;}
			myCombo.options.length=inicio;
			aTexto=me.getCampo(fieldTexto);
			aValor=me.getCampo(fieldValor);
				for(i=0; i<aTexto.length; i++){
					myCombo.options.add(new Option(me.isNull(me.getValue(fieldTexto,i),""),me.isNull(me.getValue(fieldValor,i),"")))
				}
			} catch (e) {
				//alert("Error en xmlToCombo -> IdCombo,fieldTexto, fieldValor");
			};
		}
	
	this.xmlToObj=function (IdObj,campo,i){
			// Carga valor dea un TextField
			if(i== undefined){i=0;}
			try {
				var myObj=document.getElementById(IdObj);		
				var aCampo=me.getCampo(campo);

				myObj.value =aCampo[i].firstChild.nodeValue;
			} catch (e) {
				alert ("Error en xmlToObj-> IdObj:" +IdObj + " ,campo: " + campo);
			}
		}; // End xmlToObj
		
    this.xmlToAllObjPrefix=function (listaFields,i,iF, Prefix ){
		// Implementa xmlToAllObj
		// la única diferencia  es que todos los objetos dl form tienen un prefijo
		// Prefix = prefijo
			
		
		if(i== undefined){i=0;}
		if(iF== undefined){iF=0;}
		if(Prefix== undefined){Prefix='';}
		if(listaFields== undefined){
		// se construiran en funcion de los objetos del formulario
			
		}		
		var listaNodos=listaFields;
		var s;
		var newLista='';		
		var f_array=listaFields.split(",");
		
		// armo la lista de nombres de objetos con el prefijo adelante
		for (s=0;s< f_array.length;s++){			
			newLista= newLista + Prefix + f_array[s] + ',';
		}
		newLista= newLista.substring(0, newLista.length -1 ); // descarto ultima coma	
		this.xmlToAllObj(newLista,i,iF,listaNodos);
	}; // End xmlToAllObjPrefix
	
	this.xmlToAllObj=function (listaFields,i,iF, listaNodos ){
		// listaFields = lista de Id's de los objetos de formularios a rellenar
		// i = optional Indice por default es el cero
		// iF = index de formulario cero por default
		// listaNodos= nombre de los nodos, Opcional si viene este parametro indica que se debe mapear,
		//             por que los nombres de los Objetos del form , no coinciden con los nombres de Nodos
		var f_array, n_array;
		//Valores por default
		if(i== undefined){i=0;}
		if(iF== undefined){iF=0;}
		if(listaFields== undefined){
			// se construiran en funcion de los objetos del formulario
		}else{	
			f_array=listaFields.split(",")
		}
		if (listaNodos==undefined){			
			// No vino el parametro , tomo la misma lista de Objetos
			n_array=listaFields.split(",")
		}else {
			n_array=listaNodos.split(",")
		}
		try{
			var s;
			// carga uno a uno los objetos de la lista
			for (s=0;s< f_array.length;s++){
			    //             idObjeto  ,Nodo     , Indice
				this.xmlToObj(f_array[s],n_array[s],i);
			}
		} catch (e) {
			alert ("Error en xmlToAllObj-> no se pudo definir Matriz de Objetos");
		}
	}; // End xmlToAllObj

	this.getCampo=function (campo){
		//Devuelve el Nodo Campo
			var aResp;
			try {
				aResp=me.DocXml.getElementsByTagName(campo);
			} catch (e) {
				alert("Error en getCampo-> No se ha encontrado el Campo");
			}
			
			return aResp;
		}
		
	this.getValue=function(campo,i){
	// retorna el valor especifico de un Nodo texto
	// campo : Obligatorio
	// indice a recuperar : Obligatorio
		
		var _node;
		var _text=null;
		try{
			_node=me.getCampo(campo)[i];
			if (_node.firstChild.nodeType==3){
				_text=_node.firstChild.nodeValue;
			}else{
				alert(campo + " no contiene text");
			}
		} catch (e){
			//alert("No existe el Subíndice: " + i);
		};
		return _text
		
	}
}; // Fin CallServer


// ---------------------------- Esto es todo ------------------------------------- //
