﻿var pagEnvio = "AjaxServer.aspx";

function CrearXmlHttp() {
    var xmlHttp = false;
    /*branch for Mozilla, Safari, ...*/
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			xmlHttp = new XMLHttpRequest();
        } catch(e) {
			xmlHttp = false;
        }
    /*branch for IE/Windows ActiveX version*/
    } else if(window.ActiveXObject) {
       	try {
        	xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		xmlHttp = false;
        	}
		}
    }
    return xmlHttp;
}

function enviaLlamada(url, data, funcionVuelta) {
    /*1.- Creamos el objeto xmlHttpRequest*/
    var xmlHttp = CrearXmlHttp();
    /*Si se ha creado correctamente*/
    if (xmlHttp) {
        /*2.- Marcar qué función manejará la respuesta*/
        xmlHttp.onreadystatechange = function() {
            //getCallBack(xmlHttp, url, data);
            getLlamadaVuelta(xmlHttp, funcionVuelta);
        }        
        /*3.- Enviar*/
        //alert(url);
        xmlHttp.open("POST", url, true);
        xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
        xmlHttp.send(data);
    }
    else {
        alert("No se pudo crear el objeto XMLHttpRequest");
    }
}

function getLlamadaVuelta(xmlHttp, funcionVuelta) {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            var res = xmlHttp.responseText;
            if(res.substring(0, 8) == "ERROR(_)") {
                var loading = document.getElementById("divLoading");
                if (loading != null) loading.style.visibility = "hidden";
                alert("Error en la petición.\n" + res.substring(8));
            } else {
                res = TiempoRespuesta(res);
                funcionVuelta(descodificaDatos(res));
                if (getCtl("divLoading") != null) {
                    ocultaCtl("divLoading");
                } 
            }
        } else {
            var res = xmlHttp.responseText;
            if(res.substring(0, 8) == "ERROR(_)") {
                var loading = document.getElementById("divLoading");
                loading.style.visibility = "hidden";
                alert("Error en la petición.\nTiempo de espera excedido 45sec.");
            } 
            //alert("Error en la petición.\nMensaje de error: " + xmlHttp.statusText);
        }
    }
}

//function peticionAjax(datos, funcionVuelta) {	   
//    var parametros = "datos=" + codificaDatos(datos);
//    enviaLlamada(pagEnvio , parametros, funcionVuelta);    
//}

//function petiAjaxMain(datos, funcionVuelta) {
//	var parametros = "datos=main" + sepGra + codificaDatos(datos);
//    enviaLlamada(pagEnvio , parametros, funcionVuelta);
//}

function peticionAjax(datos, funcionVuelta) {	   
    var parametros = "datos=" + codificaParametros(datos);
    enviaLlamada(pagEnvio, codificaDatos(parametros), funcionVuelta);
}

function petiAjaxMain(datos, funcionVuelta) {
	var parametros = "datos=main" + sepGra + codificaParametros(datos);
    enviaLlamada(pagEnvio , codificaDatos(parametros), funcionVuelta);
}

function TiempoRespuesta(res)
{
    var respuesta = res;
    var resul = res.split("(_T_)");
    
    if(resul.length > 1) {
        respuesta = resul[0];
        var tiempoRes = document.getElementById("tiempoRes");
        /*
        if(tiempoRes != null)
            tiempoRes.innerHTML = "Tiempo " + resul[1].substring(0, 6) + "sec.";
        */
    }
    
    return respuesta;
}

  /*********************/
 /* Grid Ajax Client */
/********************/

function cargaTabla(res) {
    var resul = res.split(sepBloc);    
    getCtl(resul[0]).innerHTML = resul[1];
}

function cargaTodo(res) {
    var resul = res.split(sepBloc);    
    getCtl(resul[0]).innerHTML = resul[1];
}

function cambioPagina(argumento) {
    var dato = argumento.split("(_)");
    var idCtl = dato[2];
    var buffer = obtenerBuffer(idCtl);    
    peticionAjax("graj(_)todo(_)" + argumento + "(_)" + buffer, cargaTodo);
}

function marcarTodo(argumento) {
    var dato = argumento.split("(_)");
    var idCtl = dato[2];
    var buffer = obtenerBuffer(idCtl);        
    peticionAjax("graj_tabla&datos=graj(_)grid(_)marcarTodo(_)" + argumento + "(_)" + buffer, cargaTabla);
}

function obtenerBuffer(idCtl) {
    var hidCE = "hidColsExt" + idCtl;
    var colsExt = getCtl(hidCE).value;    
    var buffer = "";    
    if (colsExt != null) {
        cols = colsExt.split("(#)");        
        if (cols.length > 0) {
            var nCols = cols.length;
            for (i = 0; i < nCols; i++) {
                var salir = false;
                buffer += cols[i] + "(=)";
                var c = 0;
                while (!salir) {
                    try {
                        if (cols[i].substring(0, 3) == "chk") {
                            var result = getCtl(cols[i] + c).checked;

                            if (result == true) {
                                buffer += "1";
                            } else {
                                buffer += "0";
                            }

                        } else {
                            buffer += getCtl(cols[i] + c).value;
                        }

                        buffer += "(,)";
                    } catch(e) {
                        if (buffer.length > 2) {
                            buffer = buffer.substring(0, buffer.length - 3);
                        }
                        salir = true;
                    }
                    c++;
                }
                if (i < nCols - 1) {
                    buffer += "(#)";
                }
            }
        }
    }
    return buffer;
}

function ordena(argumento) {
    var dato = argumento.split("(_)");
    var idCtl = dato[2];
    var buffer = obtenerBuffer(idCtl);    
    peticionAjax("graj(_)grid(_)" + argumento + "(_)" + buffer, cargaTabla);
}

function paginaPor(idCtl, campo) {
    var buffer = obtenerBuffer(idCtl);
	peticionAjax("graj(_)todo(_)paginaPor(_)" + campo + "(_)" + idCtl + "(_)" + buffer, cargaTodo);
} 
