//AUTOR:RAUL CORDERO - RODRIGO RUIZ
//FECHA: 8 DE OCTUBRE DE 2003
//DESCRIPCION : MANEJO DE XML
//FECHA DE ULTIMA MODIFICACION: 9 DE OCTUBRE

//=============================VARIABLES GLOBALES===================================================
var contabla="tabla", contd="td" , contr="fila", conmensajetabla= "Ingrese Informaci&oacute;n";
var glbfilas=null, glbposxml=0;


//===================================================================================
// Abre la tabla, y es almacenad en stringxml, para posteriormente generar el string xml

		function xmlabrirtabla()
		{
			var stringxml =  "[" + contabla + "]";
			return (stringxml);
		}

//====================================================================================		
// Abre o Inicia la fila de la tabla, la variable stringxml almacena el string de xml
		
		function xmlabrirfila()
		{
			var stringxml = "[" + contr+ "]";
			return (stringxml);
		}

//====================================================================================
// Crea la celda de la tabla, y su vez retorna el codigo de la xml
		function xmlcelda(stringcelda)
		{
			var stringxml = "[" + contd + "]" + stringcelda + "[/" + contd + "]"
			return (stringxml);
		}

//====================================================================================
//funcion que permite crear un nodo, y su vez retorna el codigo de la xml

		function xmlnodo(strnodo,valor)
		{
			var stringxml = "[" + strnodo + "]" + valor + "[/" + strnodo + "]"
			return (stringxml);
		}
//====================================================================================
//Cierra la fila,la variable stringxml almacena el string de xml
		function xmlcerrarfila()
		{
			var stringxml =  "[/" + contr + "]"
			return (stringxml);
		}

//====================================================================================
//Finaliza la tabla ,la variablestringxml almacena el string de xml
		function xmlcerrartabla()
		{
			var stringxml ="[/" + contabla + "]";
			return (stringxml);
		}

//====================================================================================
// Divide el string por el campo de inicio de la tabla y lo almacena en un arreglo 

		function xmlopen(stringxml)
		{
			if (stringxml.length>0) 
			{		
				glbfilas = stringxml.split("[/" + contr + "]");
				glbposxml=0;
				return (true);
			}
			else
			{
				glbfilas = null;
				return (false);
			}
		}

//=============================================================
//Si la cantidad de filas es distinto de null la posicion se va al inicio 
		function xmlmovefirst()
		{
		if (glbfilas!= null)
		{
			glbpostxml = 0;
			return (true);
		}
			else
			{
			return (false)
			}
		}

//=============================================================
//Incrementa las  posiciones (para recorrer el string) en la variable glbposxml
		function xmlmovenext() 
		{
			if (glbfilas.length-2>glbposxml)
			{
				glbposxml++;
				return(true);
			}
			else
			{
				return (false);
			}
		}
//=============================================================
//Se Mueve a la posicion fila en el xml tabla
		function xmlmovepos(fila)
		{
			if (glbfilas.length-1>fila && fila>=0)
			{
				glbposxml=fila;
				return(true);
			}
			else
			{
				return (false);
			}
		}

//=============================================================
//  Busca y retorna el campo que se encuentra entre la celda (campo)

		function xmlsinglenodo(campo)
		{
		//	xmlsinglenodo
			if (glbfilas[glbposxml].search("[/"+campo+"]"))
			{
				var arrcol=glbfilas[glbposxml].split("[/"+campo+"]");
				var arrdato=arrcol[0].split("[" + campo + "]");
				return(arrdato[1]);
			}
			else
			{
				return ("");
			} 
		}

//=============================================================
//Divide el string en arreglos , para extraer el campo mediante el indice pasado por parametro a la funcion


		function xmlfields (index)
		{
			var arrcol=glbfilas[glbposxml].split("[/" + contd + "]");
			var arrdato;
			if (arrcol.length-1>index)
			{
				arrdato=arrcol[index].split("[" + contd + "]");
				return(arrdato[1]);
			}
			else
			{
				return ("");
			} 
		}

//=============================================================
//Permite ver la fila seleccionada, la variable varcontrol trae la fila selecionada y la funcion destaca la fila con un color determinada

		function formatnumxml(strxml,tag)
		{
			if(xmlopen(strxml))	
			{
				var contador=0
				do 
				{
					strxml=replacestring(strxml,"["+tag+"]"+xmlsinglenodo(tag)+"[/"+tag+"]","["+tag+"]"+formateanumero(replacestring(xmlsinglenodo(tag),".",""))+"[/"+tag+"]");
				}
				while (xmlmovenext())

			}
			return strxml;
		}
//=============================================================
//Permite ver la fila seleccionada, la variable varcontrol trae la fila selecionada y la funcion destaca la fila con un color determinada

		function marcarfila(varcontrol)
		{
			var vartd=window.event.srcElement;

			var vartr=vartd.parentElement;
			var vartabla=vartr.parentElement;
			for (var i=1;i<vartabla.rows.length;i++)
				vartabla.rows[i].bgColor="white";
			vartr.bgColor="#ceecf8";
			varcontrol.value=vartr.rowIndex;
		}

		function marcarfila2(varcontrol)
		{
			
			var vartd=window.event.srcElement;
			var vartr=vartd.parentElement;
			var vartabla=vartr.parentElement;
			for (var i=0;i<vartabla.rows.length;i++)
				vartabla.rows[i].bgColor="white";
			vartr.bgColor="#ceecf8";
			varcontrol.value=vartr.rowIndex;
		}
		function marcarfila3()
		{
			var vartd=window.event.srcElement;
			var vartr=vartd.parentElement;
			var vartabla=vartr.parentElement;

			vartd=vartabla.parentElement.parentElement;

			//alert(vartd.innerHTML);

			vartr=vartd.parentElement;
			vartabla=vartr.parentElement;

			for (var i=0;i<vartabla.rows.length;i++)
				vartabla.rows[i].bgColor="white";
			vartr.bgColor="#ceecf8";
		}

		function marcarfilatabla_clear(vartabla,fila)
		{
			for (var i=0;i<vartabla.rows.length;i++)
			vartabla.rows[i].bgColor="white";
			vartabla.rows[fila].bgColor="#ceecf8";
		}
		function marcarfilatabla(vartabla, fila)
		{
			vartabla.rows[fila].bgColor="#ceecf8";
		}

//=============================================================
//Remplaza el fin de la tabla (string xmls) y agrega una fila al string xml,
//posteriormente, agrega el fin de la tabla, quedando el archivo completo.

		function xmladd(stringxml,strfila)
		{
			var strxml=stringxml;
			if (strxml=="")
			{
				strxml+="[" + contabla + "]";
			}
			else
			{
				strxml=strxml.replace ("[/" + contabla + "]","");
			}

			strxml+= strfila;
			strxml+="[/" + contabla + "]";
			return(strxml);
		}

//=============================================================
//Eliminana de el string una fila determinada por el parametro strindex , posteriormente genera el archivo xml

		function xmlremove (stringxml,strindex)
		{
		var i
		var strremove


			if (stringxml.value=="" || strindex.value=="")
			{
				return("");
			}
			var arrfilas =stringxml.split("[" + contr + "]");
			arrfilas[(1+parseInt(strindex))]="";
			strremove="";

			for (i=0; i < arrfilas.length ; i++ )
			{
				if (i!=(1+parseInt(strindex)))
				{
					if ( i< arrfilas.length-1 )
					{
						if ( i == (parseInt(strindex)) && i == (arrfilas.length-2))
						{
							strremove += arrfilas[i]+"[/" + contabla + "]";
						}
						else
						{
							strremove += arrfilas[i]+"[" + contr + "]";
						}
					}
					else
					{
						strremove += arrfilas[i];
					}
				}
			}
			if ( strremove== "[" + contabla + "]"+"[/" + contabla + "]")
			{
				return ("");
			}
			else
			{
				return (strremove);
			}
		}

//=============================================================================
//Edita el string , reemplazando los campos de una  fila determinada , posteriormente genera el archivo xml.
function xmllength(stringxml)
{
var contador=0;
	if(xmlopen(stringxml))	
	{
		do 
		{
			contador++;
		}
		while (xmlmovenext())

	}
	return contador;
}


function xmledita (stringxml,strindex,filaxml)
		{
		var i
		var stredit
		var xmlordenado=""

//			if (stringxml=="" || strindex=="")
			if (stringxml.value=="" || strindex.value=="")
			{
				return("");
			}
			else
			{
				var arrfilas =stringxml.split("[" + contr + "]");
				arrfilas[(1+parseInt(strindex))]= filaxml + "[/"+contr+"]";				
				stredit=""

				for (i=0; i < arrfilas.length ; i++ )
				{
					if ( i< arrfilas.length-1 )
					{
								stredit += arrfilas[i]+"[" +contr +"]";
					}
					else
					{
						if ( (parseInt(strindex))==(i-1) && (arrfilas.length-2)==(i-1))
						{
							stredit += arrfilas[i]+"[/" +contabla +"]";
						}
						else
						{
							stredit += arrfilas[i];
						}

					}
				}
			}
				return (stredit);
		}
	

	/// Busca en tabla si existe codigo repetido
function xmlbuscar (stringxml,campo,valor)
{
	if (stringxml=="" || stringxml ==null) return(false);

	xmlopen(stringxml);
	do 
	 {
		 if (xmlsinglenodo(campo)==valor)
		 {
			return (true);
		 }
	 }
	while (xmlmovenext())

    return(false);
}

function xmlbuscar3 (stringxml,campo1,valor1,campo2,valor2)
{
	if (stringxml=="" || stringxml ==null) return(false);

	xmlopen(stringxml);
	do 
	 {
		 if (xmlsinglenodo(campo1)==valor1&&xmlsinglenodo(campo2)==valor2)
		 {
			return (true);
		 }
	 }
	while (xmlmovenext())

    return(false);
}
	/// Retorna el indice del campo en el xml
function xmlbuscar2 (stringxml,campo,valor)
{
	if (stringxml=="" || stringxml ==null) return(false);
	var varpos=0;
	xmlopen(stringxml);
	do 
	 {
		 if (xmlsinglenodo(campo)==valor)
		 {
			return (varpos);
		 }
		 varpos++;
	 }
	while (xmlmovenext())

    return(-1);
}
function xmlcontar3 (stringxml,campo1,valor1,campo2,valor2)
{
	if (stringxml=="" || stringxml ==null) return(false);
	xmlopen(stringxml);
	var intcont=0;
	do 
	 {
		 if (xmlsinglenodo(campo1)==valor1&&xmlsinglenodo(campo2)==valor2)
		 {
			intcont++;
		 }
	 }
	while (xmlmovenext())
    return(intcont);
}

