
var oAjaxResponseText = 0; // Default
var oAjaxResponseXML  = 1;

// var oAjaxRequestAsyncro = false;  // Default - Simultáneo/Paralélo
var oAjaxRequestSyncro  = true ; // Espera a que acabe la petición

var oAjaxShowDebugger = false; // * false por defecto
var oAjaxShowHistory = false;
// var oAjaxRequestType = oAjaxRequestAsyncro;
var oAjaxRequestType = oAjaxRequestSyncro;
var oAjaxResponseType = oAjaxResponseText;
var oAjaxEvalScripts = false;

var oAjax = new ajaxClass();

function ajaxClass(){

    this.loadFrame = false;
    this.showDebugger   = function(){ fShowDebugger();};
    this.hideDebugger   = function(){ fHideDebugger();};
    this.debuggerLines  = 0;
    this.debuggerColorLine  = "#ffffff";
    this.debuggerColorLine1 = "#ffffff";
    this.debuggerColorLine2 = "#e9f1fc";
    this.showHistory    = function(){ oAjaxShowHistory  = true;};
    this.hideHistory    = function(){ oAjaxShowHistory  = false;};
//    this.requestAsyncro = function(){ oAjaxRequestType  = oAjaxRequestAsyncro;};
    this.requestSyncro  = function(){ oAjaxRequestType  = oAjaxRequestSyncro;};
    this.responseText   = function(){ oAjaxResponseType = oAjaxResponseText;};
    this.responseXML    = function(){ oAjaxResponseType = oAjaxResponseXML;};
    this.evalScripts    = (
        function(value){
            if(value==true){
                oAjaxEvalScripts = true;
            }else{
                oAjaxEvalScripts = false;
            }
        });
    this.timer = {
       time:  0,
       now:   function(){ return (new Date()).getTime(); },
       start: function(){ this.time = this.now(); return this.time; },
       since: function(){ return this.now()-this.time; }
    }        

    this.useAjax = function(url, element, msg){useAjax(url, element, msg);};
}


/*******************************************************************
 Crea el objeto Ajax
*******************************************************************/
function fCreateXMLHttpRequest(){
    var oXMLHttpRequest = null;
    
    try {
        // Todos los navegadores
        oXMLHttpRequest = new XMLHttpRequest();
    } catch(e) {
        try {
            // Algunas version IE
            oXMLHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                // Algunas version IE
                oXMLHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(E) {
                alert(E);
                oXMLHttpRequest = null;
            }
        }
    }
    return oXMLHttpRequest;    
}


/*******************************************************************
 Función principal
*******************************************************************/
function useAjax(url, element, msg){

    var oXMLHttpRequest = fCreateXMLHttpRequest();   
    if(oXMLHttpRequest==null){return false;}

    var oElement = fGetObject(element);

    if(oElement!=null){
        if(msg!=""){
            oElement.innerHTML = msg;
        }
    }
    
    if(url==""){return false;}    
    if(url=="refresh"){url = oElement.url;}
    
    url = fRandom(url);

    
    fSendDebugger(element, url);
    oAjax.timer.start();
    
    oXMLHttpRequest.open("GET", url, oAjaxRequestType);
//    oXMLHttpRequest.onloadstart = function(){/*alert("onloadstart");*/}
//    oXMLHttpRequest.onprogress = function(){/*alert("onprogress");*/}
    oXMLHttpRequest.onreadystatechange = function(){fResponseAjax(oXMLHttpRequest, element, url, msg);}
//  oXMLHttpRequest.onload = function(){/*alert("onload");*/}
//  oXMLHttpRequest.onabort = function(){/*alert("onabort");*/}
        
    oXMLHttpRequest.send(null);

    delete oXMLHttpRequest;
    delete oElement;       
}

function fReloadUseAjax(obj){
    var url = obj.url;
    var element = obj.element;
    useAjax(url, element, "* Recargando...");
}

function fResponseAjax(oXMLHttpRequest, element, url, msg){

    var oElement = fGetObject(element);
    var res = "";

    switch(oXMLHttpRequest.readyState){
    
        // Sin inicializar    
        case 0: break;
        
        // Cargando
        case 1: break;
        
        // Cargado    
        case 2: break;
        
        // Interactivo
        case 3: break;
        
        //Completado   
        case 4:  
               
            switch(oXMLHttpRequest.status){
                
                // Ok
                case 200:

                    fUpdateDebugger(oXMLHttpRequest, element, url);

                    // Configuramos el tipo de respuesta (texto/objeto XML)
                    if(oAjaxResponseType==oAjaxResponseText){
                        res = unescape(oXMLHttpRequest.responseText);
                    }else if(oAjaxResponseType==oAjaxResponseXML){
                        res = oXMLHttpRequest.responseXML;
                    }
                    
                    if(oElement != null){ 
                        //res = encode(res);
                        oElement.innerHTML = res;
                        //this.actualizaHistorico(element, url);
                        oElement.url = url;
                    }
                    break;
                
                // Not Found    
                case 404:
                    
                    fUpdateDebugger(oXMLHttpRequest, element, url);
                    fErrorResponse(oXMLHttpRequest, element, url);
                    break;
                
                // Error interno servidor    
                case 500:
                    
                    fUpdateDebugger(oXMLHttpRequest, element, url);
                    fErrorResponse(oXMLHttpRequest, element, url);
                    break;

                // Otros errores
                default:
                
                    fUpdateDebugger(oXMLHttpRequest, element, url);
                    fErrorResponse(oXMLHttpRequest, element, url);
                    break;    
            }
            
            break;
            
        default:
            break;        
    }
}


function fErrorResponse(oXMLHttpRequest, element, url){
    var oElement = fGetObject(element);
    var err = oXMLHttpRequest.status;
    var errDes = oXMLHttpRequest.statusText;
    var msg = "";

    msg += "<font style='font:8pt Courier'>";

    switch(err){
        case 404:
            msg += "Error " + err + ": " + errDes;
            msg += "<br><a href='javascript:function(){return false;}' onClick='window.open(" + String.fromCharCode(34) + url + String.fromCharCode(34) + ");' style='color:#004e98;'>" + url + "</a>";
            break;
        case 500:
            msg += "Error " + err + ": " + errDes;
            msg += "<br><a href='javascript:function(){return false;}' onClick='window.open(" + String.fromCharCode(34) + url + String.fromCharCode(34) + ");' style='color:#004e98;'>Más...</a>";
            break;
        default:
            msg += "Error " + err + ": " + errDes;
            break;
    }

    msg += "</font>";

    oElement.innerHTML = msg;
}


/*******************************************************************
 DEPURADOR
*******************************************************************/
function _fCreateDebugger(){

    var oDebuggerMain = document.createElement("div");
    var oDebuggerCaption = document.createElement("div");
    var oDebuggerHead = document.createElement("div");
    var oDebuggerBody = document.createElement("div");
    var oDebuggerFood = document.createElement("div");
    
    var oDebuggerCaptionTable = document.createElement("table");
    var oDebuggerCaptionTableTr = document.createElement("tr");
    var oDebuggerCaptionTableTd1 = document.createElement("td");
    var oDebuggerCaptionTableTd2 = document.createElement("td");    
    var oDebuggerHeadTable = document.createElement("table");
    var oDebuggerHeadTableTr = document.createElement("tr");
    var oDebuggerHeadTableTd1 = document.createElement("td");
    var oDebuggerHeadTableTd2 = document.createElement("td");
    var oDebuggerHeadTableTd3 = document.createElement("td");
    var oDebuggerHeadTableTd4 = document.createElement("td");
    var oDebuggerHeadTableTd5 = document.createElement("td");
    var oDebuggerBodyTable = document.createElement("table");  
        
    oDebuggerMain.id = "divDebuggerMain";
    oDebuggerMain.style.borderTop = "solid 1px #aca899";
    oDebuggerMain.style.borderLeft = "solid 1px #aca899";
    oDebuggerMain.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerMain.style.borderBottom = "solid 1px #cbc7b8";
    oDebuggerMain.style.filter = "alpha(opacity=100)";
    oDebuggerMain.style.position = "absolute";
    oDebuggerMain.style.top = 670;
    oDebuggerMain.style.left = 5;    
    //oDebuggerMain.style.height = "111";
    oDebuggerMain.style.width = "900";
    //oDebuggerMain.style.backgroundColor = "#ff0000";
    oDebuggerMain.style.padding = "0";
    oDebuggerMain.style.zIndex = 1000;
    
    oDebuggerCaption.id = "divDebuggerCaption";
    oDebuggerCaption.style.backgroundColor = "#4a90e4";
    oDebuggerCaption.style.color = "#ffffff";
    oDebuggerCaption.style.font = "8pt Verdana";
    oDebuggerCaption.style.padding = "3";
    oDebuggerCaption.style.width = "100%";
    
    oDebuggerCaptionTable.id = "tableDebuggerCaption";
    oDebuggerCaptionTable.width = "100%";
    oDebuggerCaptionTable.style.font = "8pt Verdana";
    
    oDebuggerCaptionTableTd1.innerHTML = "oAjax - Depurador"
    oDebuggerCaptionTableTr.style.color = "#ffffff";
    oDebuggerCaptionTableTd2.style.textAlign = "right";
    oDebuggerCaptionTableTd2.innerHTML = "<a href='javascript:function(){return false;}' onclick='fHideDebugger();' style='color:#ffffff;text-decoration:none;'>x</a>" 
    
    oDebuggerHead.id = "divDebuggerHead";
    oDebuggerHead.style.backgroundColor = "#efebe5";
    oDebuggerHead.style.color = "#000000";
    oDebuggerHead.style.padding = "0";
    oDebuggerHead.style.width = "100%";
    //oDebuggerHead.style.marginRight = "-6";
    oDebuggerHead.style.borderBottom = "solid 1px #cbc7b8";
    
    oDebuggerHeadTable.id = "tableDebuggerHead";
    oDebuggerHeadTable.width = "100%";
    oDebuggerHeadTable.style.font = "8pt Verdana";
    
    oDebuggerHeadTableTd1.width = "30";
    oDebuggerHeadTableTd1.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerHeadTableTd1.innerHTML = "&nbsp;"
    oDebuggerHeadTableTd2.width = "30";
    oDebuggerHeadTableTd2.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerHeadTableTd2.innerHTML = "&nbsp;"
    oDebuggerHeadTableTd3.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerHeadTableTd3.innerHTML = "Url"
    oDebuggerHeadTableTd4.width = "150";
    oDebuggerHeadTableTd4.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerHeadTableTd4.innerHTML = "Objeto"
    oDebuggerHeadTableTd5.width = "90";
    oDebuggerHeadTableTd5.style.textAlign = "center";
    oDebuggerHeadTableTd5.innerHTML = "ms.";
    
    oDebuggerBody.id = "divDebuggerBody";
    oDebuggerBody.style.height = "67";
    oDebuggerBody.style.overflowY = "auto";
    oDebuggerBody.style.backgroundColor = "#ffffff";
    oDebuggerBody.style.padding = "0";
    //oDebuggerBody.style.marginRight = "-6";
    
    oDebuggerBodyTable.id = "tableDebuggerBody";
    oDebuggerBodyTable.width = "900";
    oDebuggerBodyTable.style.font = "8pt Verdana";
    oDebuggerBodyTable.cellSpacing = "1";
    oDebuggerBodyTable.cellPadding = "2";
     
    oDebuggerFood.id = "divDebuggerFood";
    oDebuggerFood.style.backgroundColor = "#efebe5";
    oDebuggerFood.style.color = "#000000";
    oDebuggerFood.style.padding = "1";
     
    document.body.appendChild(oDebuggerMain);
    oDebuggerMain.appendChild(oDebuggerCaption);
    oDebuggerMain.appendChild(oDebuggerHead);
    oDebuggerMain.appendChild(oDebuggerBody);
    //oDebuggerMain.appendChild(oDebuggerFood);
    
    oDebuggerCaption.appendChild(oDebuggerCaptionTable);
    oDebuggerCaptionTable.appendChild(oDebuggerCaptionTableTr);
    oDebuggerCaptionTableTr.appendChild(oDebuggerCaptionTableTd1);
    oDebuggerCaptionTableTr.appendChild(oDebuggerCaptionTableTd2);
    
    oDebuggerHead.appendChild(oDebuggerHeadTable);
    oDebuggerHeadTable.appendChild(oDebuggerHeadTableTr);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd1);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd2);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd3);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd4);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd5);

    oDebuggerBody.appendChild(oDebuggerBodyTable);
    
    // Refresh...
    oDebuggerCaption.innerHTML = oDebuggerCaption.innerHTML; 
    oDebuggerHead.innerHTML = oDebuggerHead.innerHTML;
    oDebuggerBody.innerHTML = oDebuggerBody.innerHTML;
}

function fCreateDebugger(){

    var oDebuggerMain = document.createElement("div");
    var oDebuggerMainTable = document.createElement("table");
    var oDebuggerMainTableTr1 = document.createElement("tr");
    var oDebuggerMainTableTr1Td1 = document.createElement("td");
    var oDebuggerMainTableTr2 = document.createElement("tr");
    var oDebuggerMainTableTr2Td1 = document.createElement("td");
    var oDebuggerMainTableTr3 = document.createElement("tr");
    var oDebuggerMainTableTr3Td1 = document.createElement("td");
    var oDebuggerMainTableTr4 = document.createElement("tr");
    var oDebuggerMainTableTr4Td1 = document.createElement("td");
          
    var oDebuggerCaption = document.createElement("div");
    var oDebuggerHead = document.createElement("div");
    var oDebuggerBody = document.createElement("div");
    var oDebuggerFood = document.createElement("div");
    
    var oDebuggerCaptionTable = document.createElement("table");
    var oDebuggerCaptionTableTr = document.createElement("tr");
    var oDebuggerCaptionTableTd1 = document.createElement("td");
    var oDebuggerCaptionTableTd2 = document.createElement("td");    
    var oDebuggerHeadTable = document.createElement("table");
    var oDebuggerHeadTableTr = document.createElement("tr");
    var oDebuggerHeadTableTd1 = document.createElement("td");
    var oDebuggerHeadTableTd2 = document.createElement("td");
    var oDebuggerHeadTableTd3 = document.createElement("td");
    var oDebuggerHeadTableTd4 = document.createElement("td");
    var oDebuggerHeadTableTd5 = document.createElement("td");
    var oDebuggerHeadTableTd6 = document.createElement("td");
    var oDebuggerBodyTable = document.createElement("table");
    var oDebuggerFoodTable = document.createElement("table");
    var oDebuggerFoodTableTr = document.createElement("tr");
    var oDebuggerFoodTableTd1 = document.createElement("td");        
        
    oDebuggerMain.id = "divDebuggerMain";
    oDebuggerMain.style.borderTop = "solid 1px #aca899";
    oDebuggerMain.style.borderLeft = "solid 1px #aca899";
    oDebuggerMain.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerMain.style.borderBottom = "solid 1px #cbc7b8";
    oDebuggerMain.style.filter = "alpha(opacity=100)";
    oDebuggerMain.style.position = "absolute";
    oDebuggerMain.style.top = 600;
    oDebuggerMain.style.left = 5;    
    //oDebuggerMain.style.height = "111";
    oDebuggerMain.style.width = "1000";
    oDebuggerMain.style.padding = "0";
    oDebuggerMain.style.zIndex = 1000;
    
    oDebuggerMainTable.width = "100%";
    oDebuggerMainTable.cellPadding = "0";
    oDebuggerMainTable.cellSpacing = "0";
    
    oDebuggerCaption.id = "divDebuggerCaption";
    oDebuggerCaption.style.backgroundColor = "#4a90e4";
    oDebuggerCaption.style.color = "#ffffff";
    oDebuggerCaption.style.font = "8pt Verdana";
    oDebuggerCaption.style.padding = "3";
    oDebuggerCaption.style.width = "100%";
    
    oDebuggerCaptionTable.id = "tableDebuggerCaption";
    oDebuggerCaptionTable.width = "100%";
    oDebuggerCaptionTable.style.font = "8pt Verdana";
    
    oDebuggerCaptionTableTd1.innerHTML = "oAjax - Depurador"
    oDebuggerCaptionTableTr.style.color = "#ffffff";
    oDebuggerCaptionTableTd2.style.textAlign = "right";
    oDebuggerCaptionTableTd2.innerHTML = "<a href='javascript:function(){return false;}' onclick='fHideDebugger();' onmouseover='fShowDebuggerHelp(" + fPonComillas("Ocultar depurador") + ");' onMouseOut='fShowDebuggerHelp();' style='color:#ffffff;text-decoration:none;'>x</a>" 
    
    oDebuggerHead.id = "divDebuggerHead";
    oDebuggerHead.style.backgroundColor = "#efebe5";
    oDebuggerHead.style.color = "#000000";
    oDebuggerHead.style.padding = "0";
    oDebuggerHead.style.width = "100%";
    //oDebuggerHead.style.marginRight = "-6";
    oDebuggerHead.style.borderBottom = "solid 1px #cbc7b8";
    
    oDebuggerHeadTable.id = "tableDebuggerHead";
    oDebuggerHeadTable.width = "100%";
    oDebuggerHeadTable.style.font = "8pt Verdana";
    
    oDebuggerHeadTableTd1.width = "30";
    oDebuggerHeadTableTd1.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerHeadTableTd1.innerHTML = "&nbsp;"
    oDebuggerHeadTableTd2.width = "30";
    oDebuggerHeadTableTd2.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerHeadTableTd2.innerHTML = "&nbsp;"
    oDebuggerHeadTableTd3.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerHeadTableTd3.innerHTML = "Url"
    oDebuggerHeadTableTd4.width = "150";
    oDebuggerHeadTableTd4.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerHeadTableTd4.innerHTML = "Objeto"
    oDebuggerHeadTableTd5.width = "90";
    oDebuggerHeadTableTd5.style.textAlign = "center";
    oDebuggerHeadTableTd5.innerHTML = "ms.";
    oDebuggerHeadTableTd5.style.borderRight = "solid 1px #cbc7b8";
    oDebuggerHeadTableTd6.width = "40";
    oDebuggerHeadTableTd6.innerHTML = "&nbsp;";

    oDebuggerBody.id = "divDebuggerBody";
    oDebuggerBody.style.height = "111";
    oDebuggerBody.style.overflowY = "auto";
    oDebuggerBody.style.backgroundColor = "#ffffff";
    oDebuggerBody.style.padding = "0";
    //oDebuggerBody.style.marginRight = "-6";
    
    oDebuggerBodyTable.id = "tableDebuggerBody";
    oDebuggerBodyTable.width = "100%";
    oDebuggerBodyTable.style.font = "8pt Verdana";
    oDebuggerBodyTable.cellSpacing = "1";
    oDebuggerBodyTable.cellPadding = "2";
     
    oDebuggerFood.id = "divDebuggerFood";
    oDebuggerFood.style.backgroundColor = "#efebe5";
    oDebuggerFood.style.color = "#000000";
    oDebuggerFood.style.padding = "1";
    
    oDebuggerFoodTableTd1.id = "cellDebuggerFood";
    oDebuggerFoodTableTd1.style.font = "7pt Verdana";
    oDebuggerFoodTableTd1.innerHTML = "&nbsp;";
    
    document.body.appendChild(oDebuggerMain);  
        oDebuggerMain.appendChild(oDebuggerMainTable);
            oDebuggerMainTable.appendChild(oDebuggerMainTableTr1);
                oDebuggerMainTableTr1.appendChild(oDebuggerMainTableTr1Td1);
                    oDebuggerMainTableTr1Td1.appendChild(oDebuggerCaption);
                        oDebuggerCaption.appendChild(oDebuggerCaptionTable);
            oDebuggerMainTable.appendChild(oDebuggerMainTableTr2);
                oDebuggerMainTableTr2.appendChild(oDebuggerMainTableTr2Td1);
                    oDebuggerMainTableTr2Td1.appendChild(oDebuggerHead);
                        oDebuggerHead.appendChild(oDebuggerHeadTable);                    
            oDebuggerMainTable.appendChild(oDebuggerMainTableTr3);
                oDebuggerMainTableTr3.appendChild(oDebuggerMainTableTr3Td1);
                    oDebuggerMainTableTr3Td1.appendChild(oDebuggerBody);            
                        oDebuggerBody.appendChild(oDebuggerBodyTable)
            oDebuggerMainTable.appendChild(oDebuggerMainTableTr4);
                oDebuggerMainTableTr4.appendChild(oDebuggerMainTableTr4Td1);
                    oDebuggerMainTableTr4Td1.appendChild(oDebuggerFood);            
                        oDebuggerFood.appendChild(oDebuggerFoodTable)
                                                
    //oDebuggerMain.appendChild(oDebuggerCaption);
    //oDebuggerMain.appendChild(oDebuggerHead);
    //oDebuggerMain.appendChild(oDebuggerBody);
    //oDebuggerMain.appendChild(oDebuggerFood);
    
    oDebuggerCaption.appendChild(oDebuggerCaptionTable);
    oDebuggerCaptionTable.appendChild(oDebuggerCaptionTableTr);
    oDebuggerCaptionTableTr.appendChild(oDebuggerCaptionTableTd1);
    oDebuggerCaptionTableTr.appendChild(oDebuggerCaptionTableTd2);
    
    oDebuggerHead.appendChild(oDebuggerHeadTable);
    oDebuggerHeadTable.appendChild(oDebuggerHeadTableTr);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd1);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd2);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd3);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd4);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd5);
    oDebuggerHeadTableTr.appendChild(oDebuggerHeadTableTd6);

    oDebuggerFood.appendChild(oDebuggerFoodTable);
    oDebuggerFoodTable.appendChild(oDebuggerFoodTableTr);
    oDebuggerFoodTableTr.appendChild(oDebuggerFoodTableTd1);   
    
    // Refresh...
    oDebuggerMain.innerHTML = oDebuggerMain.innerHTML;
    oDebuggerCaption.innerHTML = oDebuggerCaption.innerHTML; 
    oDebuggerHead.innerHTML = oDebuggerHead.innerHTML;
    oDebuggerBody.innerHTML = oDebuggerBody.innerHTML;
    
    fDragAndDrop();
}

function fSendDebugger(element, url){

    var oElement = fGetObject(element);
    var oDebugger = fGetObject("divDebuggerBody");
    var oTable = fGetObject("tableDebuggerBody");
    var oTr = document.createElement("tr");
    var oTd1 = document.createElement("td");
    var oTd2 = document.createElement("td");
    var oTd3 = document.createElement("td");
    var oTd4 = document.createElement("td");
    var oTd5 = document.createElement("td");
    var oTd6 = document.createElement("td");
    var icon = document.createElement("img");
    var msg, color;
    var loadTime = "";

    if(oAjaxShowDebugger==true){
        if(oDebugger!=null && oTable!=null){

            oAjax.debuggerLines++;
                       
            oTable.appendChild(oTr);
            oTr.appendChild(oTd1);
            oTr.appendChild(oTd2);
            oTr.appendChild(oTd3);
            oTr.appendChild(oTd4);
            oTr.appendChild(oTd5);
            oTr.appendChild(oTd6);
            
            oTr.id = "trDebuggerBody_" + oAjax.debuggerLines;
            oTr.url = url;
            oTr.element = element;
            if(oAjax.debuggerColorLine==oAjax.debuggerColorLine1){
                oAjax.debuggerColorLine = oAjax.debuggerColorLine2;
            }else{
                oAjax.debuggerColorLine = oAjax.debuggerColorLine1;
            }
            oTr.style.backgroundColor = oAjax.debuggerColorLine;    
            oTr.style.font = "8pt Verdana";
            oTr.height = "21";
            //oTr.onmouseover = function(){fSelectLineDebugger(this);}
            
            icon.id  = "iconDebuggerBody_" + oAjax.debuggerLines;
            icon.alt = "Cargando...";
            icon.src = "/iconos/useAjax/load.gif";
            icon.width = "16";
            icon.height = "16";
                        
            // Celda Icono
            oTd1.id = "td1DebuggerBody_" + oAjax.debuggerLines;
            oTd1.style.textAlign = "center";
            oTd1.style.width = "30";
            if(icon.alt!=""){
                oTd1.appendChild(icon);
            }
            oTd1.innerHML = oTd1.innerHML;         
            
            // Celda número línea
            oTd2.id = "td2DebuggerBody_" + oAjax.debuggerLines;    
            oTd2.style.width = "30";
            oTd2.style.textAlign = "center";
            msg  = "";
            msg += "<a onclick='fSelectDebuggerCell(" + fPonComillas("td2DebuggerBody_" + oAjax.debuggerLines) + ");' onmouseover='fShowDebuggerHelp(" + fPonComillas("Crear/Eliminar marca de referéncia") + ");' onMouseOut='fShowDebuggerHelp();' style='cursor:hand;'>" + oAjax.debuggerLines + "</a>";
            oTd2.innerHTML = msg;
            
            // Columna url
            msg  = "";
            msg += "<a onclick='fReloadUseAjax(this);' onmouseover='fShowDebuggerHelp(" + fPonComillas("Cargar <font color=#4a90e4>" + url + "</font> en <font color=#4a90e4>" + element + "</font>") + ");' onMouseOut='fShowDebuggerHelp();' style='cursor:hand;' url='" + url + "' element='" + element + "'>" + url.substring(0,80);
            if(url.length>80){
                msg += "...";
            }
            msg += "</a>";
            oTd3.id = "td3DebuggerBody_" + oAjax.debuggerLines;
            oTd3.innerHTML = msg;
            
            // Columna nombre div
            msg  = "";
            msg += "<a onclick='fSelectObject(" + fPonComillas(element) + ");' onmouseover='fShowDebuggerHelp(" + fPonComillas("Marcar/Desmarcar " + element) + ");' onMouseOut='fShowDebuggerHelp();' style='cursor:hand;'>" + element + "</a>";
            oTd4.id = "td4DebuggerBody_" + oAjax.debuggerLines;
            oTd4.innerHTML = msg;
            oTd4.style.width = "150";
            
            // Columna tiempo de carga (ms.)
            oTd5.id = "td5DebuggerBody_" + oAjax.debuggerLines;
            oTd5.style.width = "80";
            oTd5.style.textAlign = "right";
            oTd5.innerHTML = "Cargando...";                      

            // Columna acciones
            oTd6.id = "td6DebuggerBody_" + oAjax.debuggerLines;
            oTd6.style.width = "30";
            oTd6.style.textAlign = "center";
            oTd6.innerHTML = "<img src='/iconos/useAjax/edit.png' style='cursor:hand;' onclick='fEditDebuggerLine(" + fPonComillas(oTr.id) + ");' onmouseover='fShowDebuggerHelp(" + fPonComillas("Editar fila...") + ");' onMouseOut='fShowDebuggerHelp();'>";   
                                            
            oDebugger.innerHTML = oDebugger.innerHTML;
            oDebugger.scrollTop = 999999999;
        }else{
            fCreateDebugger();
            fSendDebugger(element, url);
        }
    }
}

function fUpdateDebugger(oXMLHttpRequest, element, url){
    
    var err = oXMLHttpRequest.status;
    var errDes = oXMLHttpRequest.statusText; 
    var loadTime = "";
    if(err==200){loadTime = oAjax.timer.since(); }

    var oElement = fGetObject(element);
    var oDebugger = fGetObject("divDebuggerBody");
    var oTable = fGetObject("tableDebuggerBody");
    var oTr = fGetObject("trDebuggerBody_" + oAjax.debuggerLines);
    var oTd1 = fGetObject("td1DebuggerBody_" + oAjax.debuggerLines);
    var oTd2 = fGetObject("td2DebuggerBody_" + oAjax.debuggerLines);
    var oTd3 = fGetObject("td3DebuggerBody_" + oAjax.debuggerLines);
    var oTd4 = fGetObject("td4DebuggerBody_" + oAjax.debuggerLines);
    var oTd5 = fGetObject("td5DebuggerBody_" + oAjax.debuggerLines);
    var icon = fGetObject("iconDebuggerBody_" + oAjax.debuggerLines);
    var msg, color;

    if(oAjaxShowDebugger==true){
        if(oDebugger!=null && oTable!=null){
            
            switch(err){
                case 200:
                    if(oElement!=null){
                        icon.alt = oElement.innerHTML;
                        icon.src = "/iconos/useAjax/ok.png";
                    }else{                        
                        icon.alt = "No existe el objeto: " + element;
                        icon.src = "/iconos/useAjax/exists.png";
                    }                           
                    break;
                case 404:
                    icon.alt = "Error 404: No se encuentra la página\n" + url;
                    icon.src = "/iconos/useAjax/warning.png";
                    break;
                case 500:
                    icon.alt = "Error 500: Error interno del servidor";
                    icon.src = "/iconos/useAjax/error.png";
                    break;
                default:
                    icon.alt = "Error " + err + ": " + errDes;
                    alert("default");
                    break;
            }      
            
            // Columna tiempo de carga (ms.)
            oTd5.innerHTML = loadTime;
                                             
            oDebugger.innerHTML = oDebugger.innerHTML;
            oDebugger.scrollTop = 999999999;
        }else{
            fCreateDebugger();
            fUpdateDebugger(oXMLHttpRequest, element, url);
        }
        
    }
}

function fShowDebugger(){
    var oDebugger = fGetObject("divDebuggerMain");
    if(oDebugger!=null){
        oDebugger.style.display = "inline";
    }
    oAjaxShowDebugger = true;
}

function fHideDebugger(){
    var oDebugger = fGetObject("divDebuggerMain");
    if(oDebugger!=null){
        oDebugger.style.display = "none";
    }
    oAjaxShowDebugger = false;
}

function fSelectDebuggerLine(oLine){
    var oDebugger = oLine.parent;
    
    for(var i=0;i<oDebugger.childNodes.length;i++){
        oDebugger.childNodes[i].style.backgroundColor = "#ffffff";
        oDebugger.childNodes[i].style.color = "#000000";
    }
    oLine.style.backgroundColor = "#ff0000";
    oLine.style.color = "#ffffff";
    
}

function fEditDebuggerLine(idLine){
    var oLine = fGetObject(idLine);
    var url = oLine.url;
    var element = oLine.element;
    var oFood = fGetObject("cellDebuggerFood");
    
    oFood.editDebuggerLine = "true";
    oFood.innerHTML = "Url: <input id='txtEditDebuggerLineUrl' type='text' value='" + url + "' style='font:7pt Verdana;width:620;'> &nbsp;&nbsp; Objeto: <input id='txtEditDebuggerLineElement' type='text' value='" + element + "' style='font:7pt Verdana;width:130;'> &nbsp;&nbsp;&nbsp;&nbsp; <input type='button' value='Aceptar' style='font:7pt Verdana;' onclick='fAcceptEditDebuggerLine();'>&nbsp;<input type='button' value='Cancelar' style='font:7pt Verdana;' onclick='fCancelEditDebuggerLine();'>" 
}

function fAcceptEditDebuggerLine(){
    var url = fGetObject("txtEditDebuggerLineUrl").value;
    var element = fGetObject("txtEditDebuggerLineElement").value;
    useAjax(url, element, "Cargando...");
    fCancelEditDebuggerLine();
}

function fCancelEditDebuggerLine(){
    var oFood = fGetObject("cellDebuggerFood");
    oFood.editDebuggerLine = "false";
    oFood.innerHTML = "&nbsp;";
}

function fSelectDebuggerCell(id){
    var oElement = fGetObject(id);
    if(oElement.debuggerCellSelected=="true"){
        oElement.style.backgroundColor = oElement.style.debuggerCellColor;
        oElement.debuggerCellSelected = "false";
        oElement.style.color = "#000000";
    }else{
        oElement.style.debuggerCellColor = oElement.style.backgroundColor;
        oElement.debuggerCellSelected = "true";
        oElement.style.backgroundColor = "#4a90e4";
        oElement.style.color = "#ffffff";
    }
}

function fShowDebuggerHelp(msg){
    var oFood = fGetObject("cellDebuggerFood");
    if(oFood.editDebuggerLine!="true"){
        if(msg==undefined){
            msg = "&nbsp;";
        }
        oFood.innerHTML = msg;
    }    
}

/*function fAddUrlHistory(element, url){
    var oElement = fGetObject(element);
    oElement.url1 = oElement.url2;
    oElement.url2 = oElement.url3;
    oElement.url3 = oElement.url4;
    oElement.url4 = oElement.url5;
    oElement.url5 = oElement.url6;
    oElement.url6 = oElement.url7;
    oElement.url7 = oElement.url8;
    oElement.url8 = oElement.url9;
    oElement.url9 = oElement.url10;
    oElement.url10 = url;

}*/

/*******************************************************************
 VARIOS
*******************************************************************/
function fRandom(url){
    var query = url.indexOf("?");
    if(query==-1){
        url = url + "?";
    }
    var rand = url.indexOf("&rand=");
    if(rand!=-1){
        url = url.substring(0,rand);
    }
    url = url + "&rand=" + parseInt(Math.random() * 999999999999999);
    return url;
}

function fGetObject(id){
    var oElement = document.getElementById(id);
    if(oElement==null){
        oElement = this.top.document.getElementById(id);
    }
    return oElement;
}

function fSelectObject(id){
    var oElement = fGetObject(id);
    if(oElement!=null){
        if(oElement.selected=="true"){
            oElement.style.border = "0px";
            oElement.selected = "false";
        }else{
            oElement.style.border = "solid 3px #cc0000";
            oElement.selected = "true";
        }
    }
}

function fPonComillas(msg){
    return String.fromCharCode(34) + msg + String.fromCharCode(34);
}

/*******************************************************************
 DRAG&DROP
*******************************************************************/
var scrollDivs=new Array();
scrollDivs[0]="divDebuggerMain";
//scrollDivs[1]="divDebuggerCaption";

function fDragAndDrop(){
    dragAndDropPosition=0;
	
    // IE
    if(navigator.userAgent.indexOf("MSIE")>=0) webBrowser=0;
    // Otros
    else webBrowser=1;

    registraDivs();
}

function registraDivs(){
    for(divId in scrollDivs){
        document.getElementById(scrollDivs[divId]).onmouseover=function() { this.style.cursor="move"; }
        document.getElementById(scrollDivs[divId]).onmousedown=fDragAndDropStart;
    }
}

function fCancelBubble(event){
    // Funcion que evita que se ejecuten eventos adicionales
    if(webBrowser==0){
        window.event.cancelBubble = true;
        window.event.returnValue  = false;
    }
    if(webBrowser==1) event.preventDefault();
}

function fDragAndDropStart(event){
    var id = this.id;
    dragAndDropMove=document.getElementById(id);
	
     // Obtengo la posicion del cursor
    if(webBrowser==0){
        cursorComienzoX = window.event.clientX+document.documentElement.scrollLeft + document.body.scrollLeft;
        cursorComienzoY = window.event.clientY+document.documentElement.scrollTop  + document.body.scrollTop;
    }
    if(webBrowser==1){    
        cursorComienzoX = event.clientX+window.scrollX;
        cursorComienzoY = event.clientY+window.scrollY;
    }
	
    dragAndDropMove.onmousemove = fDragAndDropMove;
    dragAndDropMove.onmouseup   = fDragAndDropEnd;
	
    elComienzoX = parseInt(dragAndDropMove.style.left);
    elComienzoY = parseInt(dragAndDropMove.style.top);
    // Actualizo el posicion del elemento
    dragAndDropMove.style.zIndex = ++dragAndDropPosition;
	
    fCancelBubble(event);
}

function fDragAndDropMove(event){  
    var xActual, yActual;
    
    if(webBrowser==0){    
        xActual=window.event.clientX+document.documentElement.scrollLeft+document.body.scrollLeft;
        yActual=window.event.clientY+document.documentElement.scrollTop+document.body.scrollTop;
    }  
    if(webBrowser==1){
        xActual=event.clientX+window.scrollX;
        yActual=event.clientY+window.scrollY;
    }
	
    dragAndDropMove.style.left = (elComienzoX+xActual-cursorComienzoX)+"px";
    dragAndDropMove.style.top  = (elComienzoY+yActual-cursorComienzoY)+"px";

    fCancelBubble(event);
}

function fDragAndDropEnd(event){
    dragAndDropMove.onmousemove = null;
    dragAndDropMove.onmouseup = null;
}

//window.onload=fDragAndDrop;