

// funcion que realiza la conexion con el objeto XMLHTTP...
function Conectar()
{
	var Conexion; // Variable que manipula la conexion.
	if(window.XMLHttpRequest)
		Conexion=new XMLHttpRequest(); //mozilla
	else if(window.ActiveXObject)
		Conexion=new ActiveXObject("Microsoft.XMLHTTP"); //microsoft
 	return Conexion;
}

function Contenido(idContenido,raiz, Conexion)
{
	/* readyState devuelve el estado de la conexion. puede valer:
	 *	0- No inicializado (Es el valor inicial de readyState)
	 *	1- Abierto (El método "open" ha tenido éxito)
	 *	2- Enviado (Se ha completado la solicitud pero ningun dato ha sido recibido todavía)
	 *	3- Recibiendo
	 *	4- Respuesta completa (Todos los datos han sido recibidos)
	 */
	// En espera del valor 4
	if(Conexion.readyState!=4){
      document.getElementById(idContenido).innerHTML='<img src="'+raiz+'uploads/estilos/loading.gif" align="absmiddle" alt=""/>';
	  return;
	}
	/* status: contiene un codigo enviado por el servidor
	 *	200-Completado con éxito
	 *	404-No se encontró URL
	 *	414-Los valores pasados por GET superan los 512
	 * statusText: contiene el texto del estado
	 */
	if(Conexion.status==200) // Si conexion HTTP es buena !!!
	{
		/* Modificamos el identificador temp con el valor recibido por la consulta
		 *	Podemos recibir diferentes tipos de datos:
		 *	responseText-Datos devueltos por el servidor en formato cadena
		 *	responseXML-Datos devueltos por el servidor en forma de documento XML
		 */
		 
		/* Para cargar <script> que venga del ajax */ 
		var scs=Conexion.responseText.extractScript(); //capturamos los scripts  
		document.getElementById (idContenido).innerHTML = Conexion.responseText.stripScript(); //eliminamos los scripts... ya son innecesarios  
		scs.evalScript();  
		
		/* Datos devueltos por el ajax */ 
		document.getElementById(idContenido).innerHTML=Conexion.responseText;
		
	}else{
		document.getElementById(idContenido).innerHTML=Conexion.status+"-"+Conexion.statusText;
	}
	
	Conexion=false;
}


function Solicitud(raiz,url,idContenido,formulario,metodo)
{
	// Si ya esta conectado, cancela la solicitud en espera de que termine
	//if(Conexion) return; // Previene uso repetido del boton.
	Conexion=Conectar();

	
	// Si la conexion es correcta...
	if(Conexion)
	{
		/* Preparamos una conexion con el servidor:
		*	POST|GET - determina como se envian los datos al servidor
		*	true - No sincronizado. Ello significa que la página WEB no es interferida en su funcionamiento
		*	por la respuesta del servidor. El usuario puede continuar usando la página mientras el servidor
		*	retorna una respuesta que la actualizará, usualmente, en forma parcial.
		*	false - Sincronizado */
		if(metodo!="") metodo="GET";
		if(formulario==""){
		 parametros='';
		}else{
		 parametros='';
		 for(i=0; i<formulario.elements.length; i++)
		 {
		  if (formulario.elements[i].value != "")
		  parametros = parametros + formulario.elements[i].name +"="+ formulario.elements[i].value +"&";
		 }
		}
		
		Servidor=raiz+"gestionmax/version_0_00/"+url+"&"+parametros;
		Conexion.open(metodo,Servidor,true);
		
		// Cada vez que el estado de la conexión (readyState) cambie se ejecutara el contenido de esta "funcion()"
		Conexion.onreadystatechange=function()
		{
			Contenido(idContenido,raiz,Conexion);
		}
				
		
		/* Realiza la solicitud al servidor. Puede enviar una cadena de caracteres, o un objeto del tipo XML
		 * Si no deseamos enviar ningun valor, enviamos null */
		Conexion.send(null);
	}else
		document.getElementById(idContenido).innerHTML="No disponible";
}


function votacion(raiz,n,max,id,idContenido)
{
	// Si ya esta conectado, cancela la solicitud en espera de que termine
	//if(Conexion) return; // Previene uso repetido del boton.
	
	// Realiza la conexion
	Conexion=Conectar();
	
	// Si la conexion es correcta...
	if(Conexion)
	{
		/* Preparamos una conexion con el servidor:
		 *	POST|GET - determina como se envian los datos al servidor
		 *	true - No sincronizado. Ello significa que la página WEB no es interferida en su funcionamiento
		 *	por la respuesta del servidor. El usuario puede continuar usando la página mientras el servidor
		 *	retorna una respuesta que la actualizará, usualmente, en forma parcial.
		 *	false - Sincronizado */
		Servidor=raiz+"gestionmax/version_0_00/votar.php?n="+n+"&max="+max+"&id="+id;
		Conexion.open("GET",Servidor,true);

		// Cada vez que el estado de la conexión (readyState) cambie se ejecutara el contenido de esta "funcion()"
		Conexion.onreadystatechange=function()
		{
			Contenido(idContenido,raiz,Conexion);
		}
				
		/* Realiza la solicitud al servidor. Puede enviar una cadena de caracteres, o un objeto del tipo XML
		 * Si no deseamos enviar ningun valor, enviamos null */
		Conexion.send(null);


	}else
		document.getElementById(idContenido).innerHTML="No disponible";
}


function Solicitud_conectado(raiz,url,idContenido,formulario,metodo,Conexion)
{
	// Si ya esta conectado, cancela la solicitud en espera de que termine
	//if(Conexion) return; // Previene uso repetido del boton.
	//Conectar();
	
	// Si la conexion es correcta..
	if(Conexion)
	{
		/* Preparamos una conexion con el servidor:
		*	POST|GET - determina como se envian los datos al servidor
		*	true - No sincronizado. Ello significa que la página WEB no es interferida en su funcionamiento
		*	por la respuesta del servidor. El usuario puede continuar usando la página mientras el servidor
		*	retorna una respuesta que la actualizará, usualmente, en forma parcial.
		*	false - Sincronizado */
		if(metodo!="") metodo="GET";
		if(formulario==""){
		 parametros='';
		}else{
		 parametros='';
		 for(i=0; i<formulario.elements.length; i++)
		 {
		  if (formulario.elements[i].value != "")
		  parametros = parametros + formulario.elements[i].name +"="+ formulario.elements[i].value +"&";
		 }
		}
		
		Servidor=raiz+"gestionmax/version_0_00/"+url+"&"+parametros;
		Conexion.open(metodo,Servidor,true);
		
		// Cada vez que el estado de la conexión (readyState) cambie se ejecutara el contenido de esta "funcion()"
		Conexion.onreadystatechange=function()
		{
			Contenido(idContenido,raiz,Conexion);
		}
				
		
		/* Realiza la solicitud al servidor. Puede enviar una cadena de caracteres, o un objeto del tipo XML
		 * Si no deseamos enviar ningun valor, enviamos null */
		Conexion.send(null);
	}else
		document.getElementById(idContenido).innerHTML="No disponible";
}




/*Para cargar los <script> que vengan del ajax */


		var tagScript = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
        /**
        * Eval script fragment
        * @return String
        */
        String.prototype.evalScript = function()
        {
                return (this.match(new RegExp(tagScript, 'img')) || []).evalScript();
        };
        /**
        * strip script fragment
        * @return String
        */
        String.prototype.stripScript = function()
        {
                return this.replace(new RegExp(tagScript, 'img'), '');
        };
        /**
        * extract script fragment
        * @return String
        */
        String.prototype.extractScript = function()
        {
                var matchAll = new RegExp(tagScript, 'img');
                return (this.match(matchAll) || []);
        };
        /**
        * Eval scripts
        * @return String
        */
        Array.prototype.evalScript = function(extracted)
        {
                var s=this.map(function(sr){
                         var sc=(sr.match(new RegExp(tagScript, 'im')) || ['', ''])[1];
                         if(window.execScript){
                              window.execScript(sc);
                         }
                        else
                       {
                           window.setTimeout(sc,0);
                        }
                });
                return true;
        };
        /**
        * Map array elements
        * @param {Function} fun
        * @return Function
        */
        Array.prototype.map = function(fun)
        {
                if(typeof fun!=="function"){return false;}
                var i = 0, l = this.length;
                for(i=0;i<l;i++)
                {
                        fun(this[i]);
                }
                return true;
        };  
		
		
		
	
