
/*
	Funciones de AJAX Wysiwyg  v1.1
	
	makePOSTRequest(url, lista_parametros, funcion_retorno) -> Envia un post;
	RecorrerForm(formulario) -> Devuelve una lista con los parametros del formulario para enviar el POST.
	
	En RecorrerForm()   Lo suyo es hacerlo con encodeURIComponent() en vez de con escape() pero luego en el ASP no existe la funcion contraria, 
	por problema de la version (tendría que ser jscript 5.5)
*/


var RecorrerFormTexto = "";
function GenerarParametrosForm(node)
{
	RecorrerFormTexto = "";
	RecorrerForm(node);
	if (RecorrerFormTexto != "") { RecorrerFormTexto = RecorrerFormTexto.slice(0, -1); }
	return(RecorrerFormTexto);
	
}

function RecorrerForm(node) { 
	if (node.type == "text" && node.name != "" && !this.esNodoControl(node.name)) { RecorrerFormTexto += node.name + "=" + encodeURIComponent(node.value) + "&"; }
	else if (node.type == "hidden" && node.name != "" && !this.esNodoControl(node.name)) { RecorrerFormTexto += node.name + "=" + encodeURIComponent(node.value) + "&"; }
	else if (node.type == "password" && node.name != "" && !this.esNodoControl(node.name)) { RecorrerFormTexto += node.name + "=" + encodeURIComponent(node.value) + "&"; }
	else if (node.type == "textarea" && node.name != "" && !this.esNodoControl(node.name)) { RecorrerFormTexto += node.name + "=" + encodeURIComponent(node.value) + "&"; }
	else if (node.type == "select-one" && node.name != "" && !this.esNodoControl(node.name)) { RecorrerFormTexto += node.name + "=" + encodeURIComponent(node.options[node.selectedIndex].value) + "&"; }
	else if (node.type == "radio" && node.name != "" && !this.esNodoControl(node.name)) { if (node.checked) { RecorrerFormTexto += node.name + "=" + encodeURIComponent(node.value) + "&"; } }
	else if (node.type == "checkbox" && node.name != "" && !this.esNodoControl(node.name)) { if (node.checked) { RecorrerFormTexto += node.name + "=" + encodeURIComponent(node.value) + "&"; } }
	else
	{
		if (node.childNodes != null) { 
			for (var i=0; i < node.childNodes.length; i++) { 
				RecorrerForm(node.childNodes.item(i)); 
			}
		}
	}
}

   var http_request = false;
   function makePOSTRequest(url, parameters, funcion_retorno) {
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Se ha producido un error al enviar los datos');
         return false;
      }
      
      http_request.onreadystatechange = funcion_retorno;
      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
   }

   
	// Funcion que devuelve el resultado del http llamado, si el estado es correcto.
	//    Si hay error al cargar la página, devuelve "error". Si el estado no es el correcto, devuelve "".
   function alertContents() {
      if (http_request.readyState == 4) {
         if (http_request.status == 200) {
            result = http_request.responseText;
			return(result);           
         } else {
		 	return("");
            // alert("3\nSe ha producido un error en el sistema");
         } 
      }
	  else { return(""); }
   }

    // Función que sirve para eliminar elementos de formulario de control de servidor (como ASP.NET).
    function esNodoControl(nombre)
    {
        if (nombre.indexOf("__EVENT") == 0 || nombre.indexOf("__VIEWSTATE") == 0) { return(true); }
        else { return(false); }
    }
    

// Recorre una cadena devuelta en formato para flash &param1=1&param2=2& y la mete en un array asociativo.
//  Hay que revisarla para cuando las cadenas tienen retornos de carro, caracteres raros, etc.
function flash_parsestring(query)
{
	
	var array_retorno = new Array();
	
    if(query == "") { return null; }
    var pairs = query.split("\&");
    for(var i = 0; i < pairs.length; i++)
	{
        var pos = pairs[i].indexOf('=');
        if(pos == -1){ continue; }
        var arg_name = pairs[i].substring(0,pos);
        var arg_value = pairs[i].substring(pos+1);
		array_retorno[arg_name] = arg_value;
    }
    return array_retorno;
}