//originalmente en _msxml

function FirstNode(xml)
{
  this.fst = xml.childNodes.item(0).attributes;
}
FirstNode.prototype._get = _get;
FirstNode.prototype._put = _put;

function _get(v)
{
  return this.fst.getNamedItem(v).value;
}

function _put(v)
{
document.getElementById("td_"+v).innerHTML = this.fst.getNamedItem(v).value;
}

function NodeAt(xml,at)
{
  this.fst = xml.childNodes.item(at).attributes;
}
NodeAt.prototype._get = _get;
NodeAt.prototype._put = _put;

function get_DOMDocument(page)
{
   var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
   xmlDoc.async = false;
   //alert(ConvToASCII(String(fnPOST(page))));
   xmlDoc.loadXML(ConvToASCII(String(fnPOST(page))));
   if(xmlDoc.xml != '') parseERROR(xmlDoc.documentElement);
   return xmlDoc;
}

function get_DOMDocument2(page,xmlToSend)
{
   var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
   xmlDoc.async = false;
   var strXml = String(fnPOST3(page,xmlToSend));
   strXml = ConvToASCII(strXml);
   xmlDoc.loadXML(strXml);
   if(xmlDoc.xml != '') parseERROR(xmlDoc.documentElement);
   return xmlDoc;
}

function get_DOMDocument_FromXMLFile(file)
{
   var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
   xmlDoc.async = false;
   xmlDoc.load(file);
   if(xmlDoc.xml != '') parseERROR(xmlDoc.documentElement);
   xmlDoc.loadXML(ConvToASCII(String(xmlDoc.xml)));
   return xmlDoc;
}

function new_DOMDocument(xDoc)
{
   var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
   xmlDoc.async = false;
   xmlDoc.loadXML(xDoc.xml);
   return xmlDoc;
}

function new_DOMDocumentEmpty(xml_text)
{
   var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
   xmlDoc.async = false;
   xmlDoc.loadXML(xml_text);
   return xmlDoc;
}

function put_TempDataIsland(data)
{
 if(typeof(xtemp) != "object") document.body.insertAdjacentHTML("BeforeEnd", '<xml id="xtemp" ></xml>');
 xtemp.loadXML('<data></data>');
 if(data)
 {
   xtemp.loadXML(data);
   parseERROR(xtemp.documentElement);
   return xtemp.documentElement;
 }
}

function newXMLDoc(fields)
{
 if(typeof(xtemp) != "object") document.body.insertAdjacentHTML("BeforeEnd", '<xml id="xtemp" ></xml>');
 var arr_fields = String(fields).split(',');
 var strXML = '<data><row ';
 for(var q=0;q<arr_fields.length;q++)
   strXML += arr_fields[q]+'=\"\" ';
 strXML += '/></data>';
 xtemp.loadXML(strXML);
 return xtemp.documentElement;
}

function newXML(fields)
{
 if(typeof(xtemp) != "object") document.body.insertAdjacentHTML("BeforeEnd", '<xml id="xtemp" ></xml>');
 var arr_fields = String(fields).split(',');
 var strXML = '<data><row ';
 for(var q=0;q<arr_fields.length;q++)
   strXML += arr_fields[q]+'=\"\" ';
 strXML += '/></data>';
 xtemp.loadXML(strXML);
 return xtemp;
}

function newXML_ID(xmlid,fields) 
{
 if(document.getElementById(xmlid) == null)
 {
	document.body.insertAdjacentHTML("BeforeEnd", '<xml id="' + xmlid + '" ></xml>');
	var arr_fields = String(fields).split(',');
	var strXML = '<data><row ';
	for(var q=0;q<arr_fields.length;q++)
	strXML += arr_fields[q]+'=\"\" ';
	strXML += '/></data>';
	document.getElementById(xmlid).loadXML(strXML);
 }
 return document.getElementById(xmlid);
}

function to_xsl(x)
{
  var xsl = new ActiveXObject("Microsoft.XMLDOM")
  xsl.async = false;xsl.load(x);
  return xsl;
}

function AddRecordToXML(_x,fields,values)
{
  values = String(values).split(',');
  fields = String(fields).split(',');
  _xmlDoc = _x.documentElement;
  if(!_xmlDoc.hasChildNodes())
  {
			var newElem = _x.createElement("row");
			_xmlDoc.appendChild(newElem);
			var namedNodeMap = _xmlDoc.childNodes.item(0).attributes;
			for(var s = 0; s < fields.length; s++)
			{
			  var attr = _x.createAttribute(fields[s]);
			  attr.value = String(values[s]);
			  namedNodeMap.setNamedItem(attr);
			}				
 }
 else
 {
    var nodeList = _xmlDoc.childNodes;
	var currNode = nodeList.item(0);
	_xmlDoc.appendChild(currNode.cloneNode(true));
	for(var s = 0; s < fields.length; s++)
	{
	  _xmlDoc.childNodes.item(nodeList.length-1).attributes.getNamedItem(fields[s]).value = String(values[s]);
	}
 }
 return _x;	
}

//Hasta aca era de _msxml.js

//viene de listener.js

function Xml_Error(xmlD)
{
  if(xmlD.substring(0,16)=="<data error='0'>")
  {
	var xmlr = xmlD.substring(0,5) + xmlD.substring(15,xmlD.length);
	return xmlr;
  }else{
	  var error = xmlD.split("'");
	  var strERROR = 'Descripción: ' + error[3] + '\n' 
	               + 'Ayuda: ' + error[5] + '\n'
	               + 'Archivo de Ayuda: ' + error[7] + '\n'
	               + 'Número: ' + error[9] + '\n'
	               + 'Origen: ' + error[11];
	  alert("Ha Ocurrido Un Error En El Servidor!\n\n" + strERROR + "\n\n");
	  return "error";	  
  }
}


function toPage(page)
{ 
   var xmldata = window.document.getElementById("x" + listener.sql);
   if(xmldata.documentElement.childNodes.length == 0)
   {
    event.returnValue = false;
   }else{
   var args = "args=" + listener.buff_sql + listener.condicion;
     switch(page)
     {
	case 'first':
		listener.page=1;setPage();
		clearIt("x" + listener.sql);
		args += " order by concatenacion";
		xml = getdata(listener.sql,args);
		xml = Xml_Error(xml);
		if (xml!="error")
		{		
			xmldata.loadXML(xml);
			fetchRecords(xmldata);	 
		}
		break;
	case 'last':
		listener.page=listener.pages_total;setPage();
	        clearIt("x" + listener.sql);
		args += " order by concatenacion desc";	
		xml = getdata(listener.sql,args);
		xml = Xml_Error(xml);
		if (xml!="error")
		{		
			xmldata.loadXML(xml);
			var stt = xmldata.xml;	      	        
			xmldata.loadXML(xmldata.transformNode(to_xsl("../../"+listener.app+"/applications/xsl/order_x" + listener.sql + "_asc.xsl")));
			fetchRecords(xmldata);
		}
        	break;
        case 'prev':			
		xmldata.recordset.MoveFirst();	
		args += " and (" + listener.field_order + " || '_' || lpad (" + listener.rowid + ", 8, '0')) < '" + xmldata.recordset.Fields("concatenacion").value + "' order by concatenacion desc";
		xml = getdata(listener.sql,args);
		xml = Xml_Error(xml);
		if (xml!="error")
		{		
			if(xml == "<data></data>"){
				alert("NO HAY MAS DATOS EN BASE CON ESTOS PARAMETROS!");
			}else{
				listener.page--;setPage();
				clearIt("x" + listener.sql);
				xmldata.loadXML(xml);
				xmldata.loadXML(xmldata.transformNode(to_xsl("../../"+listener.app+"/applications/xsl/order_x" + listener.sql + "_asc.xsl")));
				fetchRecords(xmldata);
			}
		}
        	break;
        case 'next':
	        xmldata.recordset.MoveLast();
		args += " and (" + listener.field_order + " || '_' || lpad (" + listener.rowid + ", 8, '0' )) > '" + xmldata.recordset.Fields("concatenacion").value + "' order by concatenacion";
		xml = getdata(listener.sql,args);
		xml = Xml_Error(xml);
		if (xml!="error")
		{		
			if(xml == "<data></data>"){
				alert("NO HAY MAS DATOS EN BASE CON ESTOS PARAMETROS!");
			}else{
				listener.page++;setPage();
				clearIt("x" + listener.sql);
				xmldata.loadXML(xml);
				fetchRecords(xmldata);
			}		   	
		}
        	break;
        default:
      } 
   }	
}

function toDirect(to_page)
{
  var trek = to_page.listener.page; 
  if(trek>0)
  {
    for(i=0;i<trek;i++)
	{
	 toPage('next');
	}
  }
  if(trek<0)
  {
	trek*=-1;
	for(i=0;i<trek;i++)
	{
	  toPage('prev');
	 }
  }
}

function fetchRecords(xml)
{
 if(parseInt(xml.recordset.recordcount) < 20 && parseInt(xml.recordset.recordcount) != 0){         
  tbl_lista.datapagesize = parseInt(xml.recordset.recordcount);
  tbl_lista.height= 8*parseInt(xml.recordset.recordcount);   
 }
}


//Hasta aca era de listener.js


//viene de search_obj.js

function parseERROR(xmlDc)
{
	if (xmlDc.attributes.getNamedItem("error"))
	{
		if(xmlDc.attributes.getNamedItem("error").value == 0)
		{
			xmlDc.removeAttribute("error");
			return 0;
		}
		else
		{
			var strERROR = 'Description: ' + xmlDc.firstChild.attributes.getNamedItem("Description").value + '\n'
						+ 'Help Context: ' + xmlDc.firstChild.attributes.getNamedItem("HelpContext").value + '\n'
						+ 'Help File: ' + xmlDc.firstChild.attributes.getNamedItem("HelpFile").value + '\n'
						+ 'Number: ' + xmlDc.firstChild.attributes.getNamedItem("Number").value + '\n'
						+ 'Source: ' + xmlDc.firstChild.attributes.getNamedItem("Source").value;
			alert("ERROR DE CARGA EN SERVIDOR!\n    ............................................................ \n" + strERROR + "\n    ............................................................");
			returnValue = false;
			return 1;
		}
	}
	else
	{
		return 0;
	}
}

//Hasta aca era de search_obj.js

//viene de valida.js

function Xml_Error(xmlD)
{
  if(xmlD.substring(0,16)=="<data error='0'>")
  {
	var xmlr = xmlD.substring(0,5) + xmlD.substring(15,xmlD.length);
	return xmlr;
  }else{
	  var error = xmlD.split("'");
	  var strERROR = 'Descripción: ' + error[3] + '\n' 
	               + 'Ayuda: ' + error[5] + '\n'
	               + 'Archivo de Ayuda: ' + error[7] + '\n'
	               + 'Número: ' + error[9] + '\n'
	               + 'Origen: ' + error[11];
	  alert("Ha Ocurrido Un Error En El Servidor!\n\n" + strERROR + "\n\n");
	  return "error";	  
  }
}

//Hasta aca era de valida.js

//viene de xml.js

function xml_doTable(param,nombre_tabla,elXml,datasource,hiddenFields)
{
	var fieldsNames = param.split(',');
	var hiddenFieldsNames= hiddenFields.split(',');
	var nombre_campo = '';
	var fila = "<data><row ";
	tabla = "<tr>\n"
	for(i=0;i<fieldsNames.length;i++)
	{
		nombre_campo = String(fieldsNames[i]).trim();
		tabla += "<td style='border-top:1pt solid windowtext;border-bottom:1pt solid windowtext;' ><span datafld='" + nombre_campo + "'></span></td>\n";
		fila += nombre_campo + "=\"\" ";
	};
	for(i=0;i<hiddenFieldsNames.length;i++)
	{
		nombre_campo = String(hiddenFieldsNames[i]).trim();
		//alert("@" + nombre_campo + "@");
		fila += nombre_campo + "=\"\" ";
	};
	fila += "></row></data>";
	//alert(fila);
	tabla += "</tr>\n";
	var tot_table = "<table id=" + nombre_tabla 
	if (datasource) {tot_table+=" datasrc=" + datasource}
	tot_table += ">";
	tot_table += tabla;
	tot_table += "</table>";
	return (tot_table);
};

function xml_addReg(elXml,param)
{
	var xmlres = window.document.getElementById(elXml);
	xmlres.recordset.AddNew();
	var arr = param.split(',');
	for(i=0;i<arr.length;i++)
	{
		var parametro = arr[i].split('=');
		//alert("xmlres.recordset.Fields("+parametro[0].trim()+")="+parametro[1].trim());
			xmlres.recordset.Fields(parametro[0].trim())=parametro[1].trim();
	}
};

function xml_delRow(elXml,param)
{
	var xmlres = window.document.getElementById(elXml);
	xmlres.recordset.MoveFirst();
	var arr = param.split(',');
	while (!xmlres.recordset.eof)
	{
		var i=0;
		var seguir = 'yes'
		while ((i<arr.length) && (seguir=="yes"))
		{
			var parametro = arr[i].split('=');
			if ((xmlres.recordset.Fields(parametro[0]).value==parametro[1]) && (seguir=="yes"))
				{ i++ }
			else
				{seguir='no'};
		}		
		if (seguir=="yes")
			{
				xmlres.recordset.Delete();
				xmlres.recordset.MoveFirst();
			}
		else
			{xmlres.recordset.MoveNext()}				
	}
};

function xml_fill(elXml, queryName, param){
	var xmlres = window.document.getElementById(elXml);
	xmlres.loadXML(getdata(queryName,param));
}

function xml_returnValue(elXml,param,fieldToReturn)
{
	var xmlres = window.document.getElementById(elXml);
	xmlres.recordset.MoveFirst();
	var arr = param.split(',');
	while (!xmlres.recordset.eof)
	{
		var i=0;
		var seguir = 'yes'
		while ((i<arr.length) && (seguir=="yes"))
		{
			var parametro = arr[i].split('=');
			if ((xmlres.recordset.Fields(parametro[0]).value==parametro[1]) && (seguir=="yes"))
				{ i++ }
			else
				{seguir='no'};
		}		
		if (seguir=="yes")
			{
				alert(xmlres.recordset.Fields(fieldToReturn).value);
				return (xmlres.recordset.Fields(fieldToReturn).value);
				xmlres.recordset.MoveLast()
			}
		else
			{xmlres.recordset.MoveNext()}					
	}
};


//Hasta aca era de xml.js
