var ie=true;
function procesarXHR( servicio, parametros, datos){
	var xhrWK = crearXHR();
	if (parametros.length !=0)
		servicio= servicio + "?" + parametros;
	xhrWK.open("post", servicio, false);
	xhrWK.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhrWK.send(datos);
	if ( !((xhrWK.status >= 200 && xhrWK.status <300) || xhrWK.status == 304)) 
		return null;
	return  parseXML(xhrWK.responseText);

}



function crearXHR(){
if (typeof XMLHttpRequest != "undefined"){
	ie = false;
	return new XMLHttpRequest();
	}
else {
	if (typeof ActiveXObject != "undefined"){
		if (typeof arguments.callee.activeXString != "string"){
			var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.MSXMLHttp"];
			for (var i=0, len=versions.length, xhr; i < len; i++){
				xhr = new ActiveXObject(versions[i]);
				if (xhr != null) {
					arguments.callee.activeXString=versions[i];
					return xhr;
					}
				}
			alert("No se puede crear el Objeto XHR."); 
			return null;
			}
		else return new ActiveXObject(arguments.callee.activeXString);
		}
	else
		{
		alert("No existe un Objeto XHR Disponible."); 
		return null;
		}
	}
}

 
function parseXML (xml){
//	alert ("xml:" +xml);
	var xmldom = null;
	if (typeof DOMParser != "undefined"){
		xmldom= (new DOMParser()).parseFromString(xml, "text/xml");
		var errors = xmldom.getElementsByTagName("parsererror");
		if (errors.length){
			alert ("Error de parsing (DOMParser).");
			alert ("xml:" +xml);
			return null;
			}
		}
	else{
		if (document.implementation.hasFeature("LS", "3.0")){
			var implementation = document.implementation;
			var parser = implementation.createLSParser(implementation,MODE_SYNCHRONOUS,null);
			var input = implementation.createLSInput();
			input.stringData = xml;
			xmldom = parser.parse(input);
			}
		else{
			if (typeof ActiveXObject != "undefined"){
				xmldom = crearDocumento();
            	xmldom.loadXML(xml);
				if (xmldom.parseError != 0)	{
					alert ("Error de parsing (ActiveXObject) [."+xmldom.parseError.reason+"]");
			alert ("xml:" +xml);
					return null;
					}
				}
			else{
				alert ("No hay un Parser disponible.");
				return null;
				}
			}
		}
	return xmldom;
}
/*  Para ie crea un documento con msxml */
function crearDocumento(){
if (typeof arguments.callee.activeXString != "string"){
	var versions = ["MSXML2.DOMDocument.6.0", "MSXML2.DOMDocument.3.0",
					"MSXML2.DOMDocument"];
	for (var i=0,len=versions.length; i < len; i++){
		try {
			var xmldom = new ActiveXObject(versions[i]);
			arguments.callee.activeXString = versions[i];
			return xmldom;
		} catch (ex){
		}
	}
}
return new ActiveXObject(arguments.callee.activeXString);
}

function buscarSubDOM (xmldom,xpath, otabla){
	var raiz=xpath.substring(0,xpath.indexOf("/"));
//	alert ("xpath: "+xpath+" - raiz: "+raiz+" - nodeName: " + xmldom.nodeName);
	if(xmldom.nodeName!=raiz) return null;
	raiz=xpath.substring(xpath.indexOf("/")+1, xpath.length);
	sxmldom=xmldom.childNodes;
//	alert ("xpath: "+xpath+" - raiz: "+raiz+" - nodeLength: " + sxmldom.length);
	return buscarSubDOMProfundo (sxmldom,raiz, otabla);
}
function buscarSubDOMProfundo (sxmldom, raiz, otabla){
	var cuenta=0;
	if (raiz.indexOf("/") == -1) 
		{
		for(var i=0;i<sxmldom.length;i++) 
			{
//			alert(" - raiz: "+raiz+" - nodo final: "+sxmldom[i].nodeName+" - i: "+i+" - cuenta: "+cuenta);
			if (sxmldom[i].nodeName == raiz) 
				{
				// es el buscado, ver si tienen grupos repetitivos
//				alert ("nodo buscado: "+raiz+" - primer hijo: "+sxmldom[i].firstChild.nodeName+" - ultimo hijo: "+sxmldom[i].lastChild.nodeName);
//				alert("columnas: "+sxmldom[i].childNodes.length+" - iteracion: "+i+" - cuenta: "+cuenta);
				otabla.qcolumnas=sxmldom[i].childNodes.length;
				otabla.valores[cuenta]= Array (otabla.qcolumnas);
				for(var j=0;j<otabla.qcolumnas;j++)
					{
//					alert("col: ("+j+") "+sxmldom[i].childNodes[j].nodeName+ " - valor: ("+cuenta+","+j+") "+ (sxmldom[i].childNodes[j].text || sxmldom[i].childNodes[j].firstChild.nodeValue));
					otabla.columnas_nombres[j]=sxmldom[i].childNodes[j].nodeName;
					otabla.valores[cuenta][j]=(sxmldom[i].childNodes[j].text || sxmldom[i].childNodes[j].firstChild.nodeValue);
					}
				cuenta++;
				}
			}
		otabla.qfilas=cuenta;
		return 1;
		}
	else{
//		for (var i=0;i<sxmldom.length;i++) alert ("nodo: "+sxmldom[i].nodeName+" - raiz:"+raiz);
		for(var i=0;i<sxmldom.length;i++) {
//			alert("nodo: "+sxmldom[i].nodeName+" - raiz: "+raiz.substring(0,raiz.indexOf("/")));
			if (sxmldom[i].nodeName == raiz.substring(0,raiz.indexOf("/"))) {
				var nraiz=raiz.substring(raiz.indexOf("/")+1, raiz.length);
				var nsxmldom=sxmldom[i].childNodes;
//				alert("nueva raiz; "+nraiz);
				buscarSubDOMProfundo(nsxmldom, nraiz, otabla);
			}
		}
	return null;
	}
}
function buscarElementoXTipoYNombre(sTipo,sNombre){
	var cuenta=	document.getElementsByTagName(sTipo).length;
	for (var i=0; i <cuenta; i++)
		if (document.getElementsByTagName(sTipo).item(i).getAttribute("name") == sNombre)
			return document.getElementsByTagName(sTipo).item(i);
}
function buscarElementosXTipoYNombre(sTipo,sNombre){
	var resultado= Array();
	var cuenta=	document.getElementsByTagName(sTipo).length;
	for (var i=0; i <cuenta; i++)
		if (document.getElementsByTagName(sTipo).item(i).getAttribute("name") == sNombre)
			resultado.push(document.getElementsByTagName(sTipo).item(i));
	return resultado;
}
function buscarNodoXNombre(odom, nombre){
for (var i=0,lon=odom.childNodes.length; i<lon; i++) if (odom.childNodes[i].nodeName == nombre) return odom.childNodes[i]; return null;
}
// ---------------------- Codificar y decodificar caracteres NO XML
function deCodificarXML(swork){
	var	ipos= swork.indexOf("~", 0);
	while (ipos != -1) {
		switch (swork.charAt(ipos +1)) {
			case 'n':
				scambio= String.fromCharCode(241);break;
			case 'N':
				scambio= String.fromCharCode(209); break;
			case 'a':
				scambio= String.fromCharCode(225); break;
			case 'A':
				scambio= String.fromCharCode(193); break;
			case 'e':
				scambio= String.fromCharCode(233); break;
			case 'E':
				scambio= String.fromCharCode(201); break;
			case 'i':
				scambio= String.fromCharCode(237); break;
			case 'I':
				scambio= String.fromCharCode(205); break;
			case 'o':
				scambio= String.fromCharCode(243); break;
			case 'O':
				scambio= String.fromCharCode(211); break;
			case 'u':
				scambio= String.fromCharCode(250); break;
			case 'U':
				scambio= String.fromCharCode(218); break;
			case 'v':
				scambio= String.fromCharCode(252); break;
			case 'V':
				scambio= String.fromCharCode(220); break;
			case 'c':
				scambio= String.fromCharCode(39); break;
			case 'd':
				scambio= String.fromCharCode(186); break;
			case 'y':
				scambio= "&"; break;
			case 'p':
				scambio= "%"; break;
			}
		swork= swork.replace("~"+swork.charAt(ipos +1), scambio); 
		ipos= swork.indexOf("~", 0);
		}
	return swork;
}
// ---------------------- Codificar y decodificar caracteres NO XML
function enCodificarXML(swork){
	var sdatos= swork;
	var scar;
	var scambio;
	// á y Á
	scar= String.fromCharCode(225);
	scambio= "~a";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	scar= String.fromCharCode(193);
	scambio= "~A";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// é y É
	scar= String.fromCharCode(233);
	scambio= "~e";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	scar= String.fromCharCode(201);
	scambio= "~E";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// í e Í
	scar= String.fromCharCode(237);
	scambio= "~i";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	scar= String.fromCharCode(205);
	scambio= "~I";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// ó y Ó
	scar= String.fromCharCode(243);
	scambio= "~o";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	scar= String.fromCharCode(211);
	scambio= "~O";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// ú y Ú
	scar= String.fromCharCode(250);
	scambio= "~u";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	scar= String.fromCharCode(218);
	scambio= "~U";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// ü y Ü
	scar= String.fromCharCode(252);
	scambio= "~v";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	scar= String.fromCharCode(220);
	scambio= "~V";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// ñ y Ñ
	scar= String.fromCharCode(241);
	scambio= "~n";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	scar= String.fromCharCode(209);
	scambio= "~N";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// "
	scar= String.fromCharCode(39);
	scambio= "~c";
	// º
	scar= String.fromCharCode(186);
	scambio= "~d";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// &
	scar= "&";
	scambio= "~y";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// %
	scar= "%";
	scambio= "~p";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// <
	scar= "<";
	scambio= "";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// >
	scar= ">";
	scambio= "";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	scar= "ÿ";
	scambio= "";
	while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, scambio); 
	// si quedo alguno > 127, se elimina
	for (var i= 128; i < 256; i++) {
		scar= String.fromCharCode(i);
		while (sdatos.indexOf(scar, 0) != -1)	sdatos= sdatos.replace(scar, ""); 
	}
	return sdatos;
}
function enCodificarURL(swork) {
	var sdatos= swork;
	while (sdatos.indexOf(" ", 0) != -1)	sdatos= sdatos.replace(" ", "%20"); 
	return sdatos;
}
function verSeparadorDecimal() {
	var n = 1.1;
	if (n.toLocaleString().substring(1, 2) == ".")
		return "P";
	else
		return "C";
}
