// Documento Javascript - Biblioteca ajax
//CREA UN NUEVO OBJETO PARA REALIZAR COMUNICACIÓN ASINCRÓNICA
function nuevoAjax(){
	var xmlhttp;
	try{
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e) {
		try{
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e2) {
			xmlhttp=false;
		}
			//alert(xmlhttp);
	}
	if (typeof xmlhttp=='boolean' && typeof XMLHttpRequest!='undefined')	{
			xmlhttp=new XMLHttpRequest();
	}
	return xmlhttp;
}
//ENVIA DATOS POR METODO GET Y DEVUELVE A UN OBJETO UNA RESPUESTA
function buscarGet(pagina, destino){		
	var ajax=nuevoAjax();
	if (pagina.indexOf('?')==-1){
		pagina=pagina+'?rand='+Math.random();
	}
	else{
		pagina=pagina+'&rand='+Math.random();
	}   
	ajax.open("get", pagina,true);
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			retornar(ajax.responseText, destino);
		}
		else{
			retornar ("cargando...", destino);
		}
	}
ajax.send(null);
}
//ENVIA DATOS POR GET Y EN LA MISMA FUNCION SE RETORNA UN RESULTADO INTERNO, Y UNA SALIDA PARA AVISO DE CARGANDO
function askingGet(pagina, destino){		
	var dato="";
	var ajax=nuevoAjax();
	ajax.open("get", pagina,true);
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			dato=ajax.responseText;
			retornar("Ready", destino);
		}
		else{
			retornar ("cargando...", destino);
		}
	}
ajax.send(null);
return dato;
}
//DEVUELVE EL RESULTADO DE REALIZAR UN ENVIO POR METODO POST	
function buscarPost(pagina, parameters, destino){		
	var ajax=nuevoAjax();
	ajax.open("post", pagina,true);
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.setRequestHeader("Content-length", parameters.length);
   	ajax.setRequestHeader("Connection", "close");
   	ajax.send(parameters);
	var dato="";
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			retornar(ajax.responseText, destino);
		}
		else{
			retornar ("cargando...", destino);
		}
	}
//Lo saco porque me tira error no especificado
//ajax.send(null);
}
//ENVIA DATOS POR MEDIO DEL POST A UN ARCHIVO, Y LA FUNCION DEVUELVE LA RESPUESTA DEL ARCHIVO, Y SE SETEA UN OBJETO COMO DESTINO PARA 
//LOS MENSAJES DE  CARGA
function askingPost(pagina, parameters, destino){		
	var dato="";
	var ajax=nuevoAjax();
	ajax.open("post", pagina,true);
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.setRequestHeader("Content-length", parameters.length);
   	ajax.setRequestHeader("Connection", "close");
   	ajax.send(parameters);
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			retornar("Ready", destino);
			dato=ajax.responseText;
		}
		else{
			retornar ("cargando...", destino);
		}
	}
//Lo saco porque me tira error no especificado
//ajax.send(null);
return dato;
}
//RETORNA EL CONTENIDO AÑANDIÉNDOLO COMO TEXTO AL OBJETO ESPECIFICADO
function retornar(contenido, destino){
	//alert(contenido);
	var  elemRespuesta=document.getElementById(destino);
	elemRespuesta.innerText=contenido;
	elemRespuesta.focus();
	//Aca abajo hago lo mismo pero el texto se añade al otro, en lugar de reemplazarlo
	//var textoRespuesta=document.createTextNode(contenido);
	//elemRespuesta.appendChild(textoRespuesta);
}
 //ATENCION: EN EL FORMULARIO SE DEBE PONER: EnviarFor('nombredelformulario') así como està, con comillas simpres.
 // Sino, lo interpreta como objeto o variable y no anda. Luego, al entrar en la funcion, ahora es una variable, y se
 //la trabaja como lo que es, sin comillas. 
 //ATENCION: TODAS LAS VARIABLES INTERNAS DE LA FUNCION QUE NO HAGAN REFERENCIA A UNA VARIABLE EXTERNA SE DEBEN INICIALIZAR
 //CON EL PREFIJO var
 
 //ENVIA DATOS POR METODO POST ASINCRONICO
function EnviarFor(nombreFor, pagina, devolucion){
	var formulario=document.getElementById(nombreFor);
	var largo=formulario.length;
	var parametros="";
	for (i=0; i<largo; i++){
		parametros=parametros+formulario.elements[i].name+'='+ encodeURI(formulario.elements[i].value)+'&';
	}
	//alert (parametros);
	parametros=parametros+'rand='+Math.random();
	buscarPost(pagina, parametros, devolucion);
}

//CARGA UN DOCUMENTO XML Y LLEVA EL RESULTADO COMO OPCIONES DE UN SELECT
function armarSelect(nombreSelect, paginaXML){
	var xDoc=getXML(paginaXML);
	
	var nodoPpal=xDoc.getElementsByTagName("elemento");
	var cantidad=nodoPpal.length;
	//alert (cantidad);
	var Lista=document.getElementById(nombreSelect);
	Lista.length=0;
	//cant=Lista.length;
	Lista.length=cantidad+1;
	//alert (cantidad);
	for (i=0;i<cantidad;i++){
		Lista.options[i].text=xDoc.getElementsByTagName("nombre").item(i).text;
		Lista.options[i].value=xDoc.getElementsByTagName("id").item(i).text;
		
	}
	Lista.options[cantidad].text='Select';
	Lista.options[cantidad].value='';
	Lista.options[cantidad].selected=true;
}
//CARGA UN ARCHIVO CON CONTENIDO EN XML
function getXML(paginaXML){
	var xmlDoc=nuevoXML();
	xmlDoc.async=false;
	xmlDoc.load(paginaXML);
	return xmlDoc;
}
function nuevoXML(){
 	var Doc=null; 
 	if (document.implementation && document.implementation.createDocument){
		//alert ("para mozilla");
		Doc=document.implementation.createDocument("","",null);
	}
	else {
		var msDoc=null;
		try{
			msDoc=new ActiveXObject("Microsoft.XMLDOM");
			//alert ("para ie");
		}catch (e){
			msDoc=new ActiveXObject("Msxml.DOMDocument");
		}
		Doc=msDoc;
	}
	//alert (Doc);
	
	return Doc;
}
//CARGA DATOS DE LA PÁGINA SELECCIONADA, Y LOS PUEDE TRABAJAR COM HTML O COMO XML
function cargarDatos(pagina,selectOrigen,destino,claseTabla,claseFila,claseCelda,opcion){
	var ajax=nuevoAjax();
	if (selectOrigen!=0){
		var selectNombre=document.getElementById(selectOrigen);
		//alert(selectNombre.selectedIndex);
		var variable=selectNombre[selectNombre.selectedIndex].value;
		if (pagina.indexOf('?')!=-1){
			pagina=pagina+'&var='+variable+'&rand='+Math.random();
		}
		else{
			pagina=pagina+'?var='+variable+'&rand='+Math.random();
		}
	}
	else{
		if (pagina.indexOf('?')!=-1){
			pagina=pagina+'&rand='+Math.random();
		}
		else{
			pagina=pagina+'?rand='+Math.random();
		}
	}
	alert (pagina);
	ajax.open("get", pagina,true);
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
		alert (ajax.responseText);
			if (opcion=='H'){
				retornarDatos(ajax.responseText, destino);
			}
			else if(opcion=='X'){
				retornarDatosXML(ajax.responseText, destino,claseTabla,claseFila,claseCelda);
			}
		}
		else{
			if (opcion=='H'){
				retornarDatos ("cargando...", destino);
			}
			else if(opcion=='X'){
				retornarDatosXML ("cargando...", destino);
			}
		}
	}
ajax.send(null);
}
//DEVUELVE DATOS EN FORMA DE TABLA A PARTIR DE cargarDatos() ya escrito en HTML
function retornarDatos(contenido,destino){
	var elem=document.getElementById(destino);
	if (contenido=='cargando...'){
		elem.innerText=contenido;
	}
	else{
		//alert(contenido);
		elem.style.display='block';
		elem.innerHTML=contenido;
	}
}
//DEVUELVE DATOS EN FORMA DE TABLA A PARTIR DE cargarDatos() escrito en XML
function retornarDatosXML(contenido,destino,claseTabla,claseFila,claseCelda){
	var elem=document.getElementById(destino);
	if (contenido=='cargando...'){
		elem.innerText=contenido;
	}
	else{
		var Doc=stringXML(contenido);
		//alert (Doc.childNodes.length); //2
		//alert (Doc.childNodes(0).childNodes.length);  //0
		//alert (Doc.childNodes(1).childNodes.length); //5
		//alert (Doc.childNodes(2).childNodes.length); //se requiere objeto
		//alert (Doc.tagName); //undefined
		//alert (Doc.childNodes(0).tagName); //undefined
		//alert (Doc.childNodes(1).tagName); //tabla
		//alert (Doc.parentNode); //null
		//alert (Doc.childNodes(1).childNodes(0).lastChild.text); //3
		//alert (Doc.childNodes(1).tagName);
		//alert (Doc.childNodes(2).tagName);  //se requiere objeto
		//alert (Doc.childNodes(3).tagName);  //se requiere objeto
		var capa=document.getElementById(destino);
		mytable     = document.createElement("table");
        mytablebody = document.createElement("tbody");
		var cantidadFilas=Doc.childNodes(1).childNodes.length;
		//alert (cantidadFilas);
		for (i=0;i<cantidadFilas;i++){
		 	fila=document.createElement("tr");
			cantidadCols=Doc.childNodes(1).childNodes(i).childNodes.length;
			//alert (cantidadCols);
			for (j=0;j<cantidadCols;j++){
				celda=document.createElement("td");
				valor=Doc.childNodes(1).childNodes(i).childNodes(j).text;
				texto= document.createTextNode(valor);
				celda.appendChild(texto);
				celda.className=claseCelda;
				fila.appendChild(celda);
			}
			celdaImagen=document.createElement("td");
			Imagen=document.createElement("img");
			Imagen.src="../img/modificar.gif";
			Imagen.name='modificaProd_'+i;
			//Imagen.onClick=alert("hola");
			celdaImagen.appendChild(Imagen);
			celdaImagen.className=claseCelda;
			fila.appendChild(celdaImagen);
			celdaImagen2=document.createElement("td");
			Imagen2=document.createElement("img");
			Imagen2.src="../img/borrar.gif";
			Imagen2.name='borraProd_'+i;
			//Imagen.onClick=alert("hola");
			celdaImagen2.appendChild(Imagen2);
			celdaImagen2.className=claseCelda;
			fila.appendChild(celdaImagen2);
			fila.className=claseFila;
			mytablebody.appendChild(fila);
		}
		mytable.appendChild(mytablebody);
		mytable.className=claseTabla;
		capa.innerText='';
		capa.appendChild(mytable);
		capa.style.display="block";
	}
}
//CREA UN DOCUMENTO XML A PARTIR DE UN STRING
function stringXML(string){
	if (document.implementation.createDocument){ 
  		 // Mozilla, create a new DOMParser 
  		 var parser = new DOMParser(); 
  		 myDocument = parser.parseFromString(string, "text/xml"); 
	 } else if (window.ActiveXObject){ 
  		 // Internet Explorer, create a new XML document using ActiveX 
		 // and use loadXML as a DOM parser. 
  		 myDocument = new ActiveXObject("Microsoft.XMLDOM") 
  		 myDocument.async="false"; 
   		myDocument.loadXML(string);   
 	} 
	//alert (string);
	return myDocument;
}
//ARMA UN LISTADO EN UN SELECT A PARTIR DE LA OPCION SELECCIONADA EN OTRO SELECT ELEMENTO1:SELECT ORIGINAL
function armarSelectSubCat(elemento1, elemento2, pagina){
	var origen=document.getElementById(elemento1);
	//alert (origen.selectedIndex);
	var variable=origen[origen.selectedIndex].value;
	if (pagina.indexOf('?')==-1){
		var paginaXML=pagina+'?var='+variable+'&rand='+Math.random();
	}
	else{
		var paginaXML=pagina+'&var='+variable+'&rand='+Math.random();
	}
	//alert (paginaXML);
	armarSelect(elemento2, paginaXML);
}
//DE UN ENVIO POR POST, DE ACUERO AL VALOR DE CHECK, HACE EL ENVIO ASINCRÓNICO O SINCRÓNICO
function envioCondicionado(formulario,check,pagina,devolucion){
	var opcionCheck=document.getElementById(check);
	if (opcionCheck.checked){
		//alert ("esta marcado");
		var form=document.getElementById(formulario);
		form.submit();
	}
	else{
		//alert ("no esta marcado");
		EnviarFor(formulario, pagina, devolucion)
	}		
}
//PERMITE HACER UN DESPLEGABLE CARGANDO LA INFO DE ADENTRO, USA UNA IMG PARA ABRIRLA Y NECESITA UNA
//CAPA DONDE MOSTRAR EL CONTENIDO, LA IMG MUESTRA DESPLEGADO/REPLEGADO, Y LOS DATOS DE CARGAR DATOS
function onOffAndData(capa,Imagen,srcRep,srcDesp,url,Select,claseTabla,claseFila,claseCelda,dato){
	//alert ('entro');
	var elemento=document.getElementById(capa);
	var imagen=document.getElementById(Imagen);
	if (elemento.style.display=='none'){
		cargarDatos(url,Select,capa,claseTabla,claseFila,claseCelda,dato);
		elemento.style.display='block';
		imagen.src=srcDesp;
	}
	else if(elemento.style.display=='block'){
		elemento.style.display='none';
		imagen.src=srcRep;
	}
}