﻿$(Page_Load);
var AjaxContainerID;
var isBusy = false;
var isModal = false;
var ModalTitle = "";
var UrlParent = "";
var isNew = 0;
var isLoading = true;

function Page_Load() {
    // handled events automatically for controls with ajax-related actions
    Page_AutoWireup();
    // configure default options for ajax calls
    Ajax_Setup();
}

/* Automatic HTML Control Event Wireup */
function Page_AutoWireup(ContainerID) {
    var prefix = ContainerID ? "#" + ContainerID + " " : "";
    // disable form autosubmit on enter
    $(prefix + "form").submit(function() { return false; });
    $(prefix).keypress(function(event) { if (event.which == "27" || event.which == "0") { $('#WebPage_MessageBar').hide("slow"); $('#dialog_error').hide("slow"); } });
    //mostar reportes
    $(prefix + "[ajaxaction=report]").click(button_click);
    //imprime un listado
    $(prefix + "a[print]").click(print_click);
    //colocarle el contenedor a los controles que tiene validacion expuesta y no se especifica el contenedor
    $(prefix + "[ajaxvalidate]:not([ajaxtarget])").attr("ajaxtarget", Action_Container);
    //convierte unn un datapicker
    $(prefix + "[picker]").datepicker();
    //multiplex picker
    $(prefix + "[multiplexpicker]").datepicker({ numberOfMonths: 2, showButtonPanel: true });
    //picker con seleccion de mes y año
    $(prefix + "[changepicker]").datepicker({ changeMonth: true, changeYear: true });
    //Da el foco al control que se dispone
    if ($(prefix + "[foco]").length > 0) { $(prefix + "[foco]")[0].focus(); $(prefix + "[foco]")[0].select(); }
    //ocultar el template New que inserta en la lista detalle
    $(prefix + "#NewRecord").hide();
    //oculta cualquier control que le coloque hide
    $(prefix + "[hide]").hide();
    //aplicaar otros estilos
    $(prefix + ':input[ajaxvalidcontrol]').blur(OnValidate);
    $(prefix + ':input[type=text], input[type=password]').addClass('ui-input');
    $(prefix + ':input[class]').addClass($(prefix + 'input[class]').attr("class"));
    $(prefix + ':input[type=text], input[type=password], select').focus(StyleInput);
    $(prefix + ':input[type=text], input[type=password], select,input[ajaxmask]').focus(StyleInput);
    //manejo de password encriptados
    $(prefix + ':input[ajaxencrypt=SHA1]').blur(OnHashSHA1);
    $(prefix + ':input[ajaxencrypt=B65]').blur(OnHashBASE64);
    //implementacion de la columna para la activacion e inactivacion por grupos de registros
    $(prefix + ":input[type=checkbox][name^=chkgroup], " + prefix + ":input[type=checkbox][name^=chkitem]").click(AddCheckValue);
    jQuery.each($(prefix + ":input[type=checkbox][name^=chkgroup], " + prefix + ":input[type=checkbox][name^=chkitem]"), function() {
        var Container = $(this).attr("name").replace('chkgroup', '').replace('chkitem', '')
        if (Container == 'undefined' || Container == '') { $(this).attr("name", $(this).attr("name") + "_" + Action_Container); }
    });
    //aplicar la mascara al control.
    jQuery.each($(prefix + ':input[ajaxmask]'),
    function() {
        OnInputmask($(this))
    });
    //aplicar la mascara al control para los picker.
    //aplicar la mascara al control para los picker.
    //mas pruebas
    //    jQuery.each($(prefix + ':input[picker],input[multiplexpicker],input[changepicker]'),
    //    function() {
    //        $.mask.definitions['m'] = '[0-1]';
    //        $.mask.definitions['e'] = '[0-2]';
    //        $.mask.definitions['d'] = '[0-3]';
    //        $.mask.definitions['i'] = '[0123456789]';
    //        var value = $(this).val();
    //        $(this).mask(MaskDateSystem);
    //        if (value != '') {
    //            $(this).val(value);
    //        }
    //        return false;
    //    });
    // auto-wire dynamic dropdowns
    $(prefix + "select[ajaxchild]").change(dynamic_dropdown);
    //implementacion para modificaar el contenido de un contenedor por medio de un Dropdown
    $(prefix + "select[ajaxreload]").change(dynamic_container);
    $(prefix + "[ajaxreload=DETAIL]").blur(dynamic_container);
    //Default Action
    $(prefix + ":a[ajaxtabsdynamic], " + prefix + ":submit[ajaxtabsdynamic], " + prefix + ":button[ajaxtabsdynamic]" + prefix + ":li[ajaxtabsdynamic]").addClass("ui-tab-unselected");
    $(prefix + ":button[ajaxaction], " + prefix + ":submit[ajaxaction], " + prefix + ":a[ajaxaction]").click(button_click);
    $(prefix + ":button[ajaxcustom], " + prefix + ":submit[ajaxcustom], " + prefix + ":a[ajaxcustom]").click(button_click);
    //Manejo de estilo de tabs estaticos
    $(document).ready(function() {
        $('#tooltipHelp *').tooltip();
        //Default Action
        $("a[ajaxtabstatic]").addClass("ui-tab-unselected");
        $("div[class=ui-content-tabs]").hide(); //Hide all content
        $("a[ajaxtabstatic]:first").show(); //Activate first tab
        $("div[class=ui-content-tabs]:first").show(); //Show first tab content
        //On Click Event
        $("#ui-tabs a[ajaxtabstatic]").click(function() {
            $("#ui-tabs a[ajaxtabstatic]").addClass("ui-tab-unselected"); //Add "active" class to selected tab
            $(this).removeClass("ui-tab-selected");
            $(this).removeClass("ui-tab-unselected");  //Add "active" class to selected tab
            $(this).addClass("ui-tab-selected"); //Add "active" class to selected tab
            var activeTab = $(this).attr("ajaxtabstatic"); //Find the rel attribute value to identify the active tab + content
            $("div[class=ui-content-tabs]").hide(); //Hide all tab content
            $("#" + activeTab).fadeIn(); //Fade in the active content
            return false;
        });
        var xtextarea = $(prefix + "textarea[type]");
        if (typeof (xtextarea.attr("type")) == "undefined") {
            //Aplicar Textos enriquecidos
            $(prefix + ":textarea").htmlarea();
        }
    });

}
//Funcion para validacion de controles al Instantes.
function OnHashSHA1() {
    var btn = $(this);
    if (btn.val() != "") {
        btn.val(HashSHA1(btn.val()));
    }
}
//Funcion para validacion de controles al Instantes.
function OnHashBASE64() {
    var btn = $(this);
    if (btn.val() != "") {
        btn.val($.base64Encode(btn.val()));
    }
}
//Funcion para validacion de controles al Instantes.
function OnValidate() {
    var btn = $(this);
    if (!Validate(btn.attr("id"))) { return false; }
    return true;
}
//funcion para obtener valores de cadena separada por ","
function StyleInput() {
    //captura del objeto
    var obj = $(this);
    if (obj.attr("class") == "ui-input-error") {
        obj.removeClass("ui-input-error");
        if (obj.attr("class") != "") {
            obj.addClass(obj.attr("class"));
        } else {
            obj.addClass("ui-input");
        }
    } return;
}
//funcion para aplicacion de mascaras.
function OnInputmask(obj) {
    var btn = obj;
    var ajaxmask = btn.attr("ajaxmask");
    if ((typeof (ajaxmask) == "undefined" || ajaxmask == '')) { alert("si de sea colocarle mascara al input " + btn.attr("id") + " por favor colocarle al atributo ajaxmask con la mascara que desea"); return false; }
    $.mask.definitions['H'] = '[012]';
    $.mask.definitions['N'] = '[012345]';
    $.mask.definitions['n'] = '[0123456789]';
    if (ajaxmask == 'hours') { $(btn).mask("Hn:Nn"); return false; }
    if (ajaxmask == 'minutes') { $(btn).mask("Nn"); return false; }
    if (ajaxmask == 'phone') { $(btn).mask("(999) 999999999"); return false; }
    $(btn).mask(ajaxmask); return false;
}
//funcion para obtener valores de cadena separada por ","
function getValue(Text) {
    if (typeof (Text) == "undefined") return "0";
    var ArrayObject = Text.split(",");
    if (ArrayObject.length > 1) return $("#" + ArrayObject[0]).val();
    return Text;
}


//funcion para los reportes
function DynamicReport(object) {
    var ReportName = $(object).attr("ajaxrecord");
    if (typeof (ReportName) == "undefined" || ReportName == '') { alert("No se especifico el nombre del Reporte."); return false; }
    var ReportTitle = $(object).attr("title") || document.title;
    var QueryStringData = '<input type="hidden" id="rptName" name="rptName" value="' + ReportName + '" />';
    QueryStringData += '<input type="hidden" id="rptTitle" name="rptTitle" value="' + ReportTitle + '" />';
    jQuery.each($("[ajaxrecord=param]").serializeArray(), function() { QueryStringData += '<input type="hidden" id="' + this.name + '" name="' + this.name + '" value="' + this.value + '" />'; });
    $("#frmReport").html(QueryStringData);
    ReportWindow = window.open("", "ReportPage", 'width=900,height=600');
    $("#frmReport")[0].submit();
    $("#frmReport")[0].focus();
    // ReportWindow.moveTo(50, 50);
    ReportWindow.focus();
    return false;
}

//agrega el valor de id del checkbox seleccionada...
function AddValue() {
    var value = $(this).val();
    var Container = $(this).attr("name").replace('chkgroup_', '').replace('chkitem_', '');
    var ArrayItems = $("input[type=checkbox][name=chkitem_" + Container + "]");
    for (var i = 0; i < ArrayItems.length; i++) { $(ArrayItems[i]).attr("checked", false); }
    $("input[type=checkbox][name=chkgroup_" + Container + "]").attr("checked", false);
    $('#ArrayValues[ajaxaction="values"]').attr($(this).attr("ajaxtarget"), (value ? value : ""));
    $(':input[type=checkbox][ajaxaction][ajaxrecord=' + value + ']').attr("checked", true);
}
//varificacion de los check item para verificacion de los check principales....
function AddCheckValue() {
    var Container = $(this).attr("name").replace('chkgroup_', '').replace('chkitem_', '');
    var ChkType = $(this).attr("name").split('_')[0];
    var isChecked = $(this).attr("checked");
    var isSomeChecked = isChecked;
    var values = "";
    var ArrayItems = $("input[type=checkbox][name=chkitem_" + Container + "]");
    if (ChkType == 'chkgroup') {
        for (var i = 0; i < ArrayItems.length; i++) { $(ArrayItems[i]).attr("checked", isChecked); }
    }
    else {
        var isAllChecked = true;
        for (var i = 0; i < ArrayItems.length; i++) { if (!$(ArrayItems[i]).attr("checked")) { isAllChecked = false; } else { isSomeChecked = true; } }
        $("input[type=checkbox][name=chkgroup_" + Container + "]").attr("checked", isAllChecked);
    }
    if (isSomeChecked && ArrayItems.length > 0) { $("#" + Container + " [hide=status]").show(); }
    else { $("#" + Container + " [hide=status]").hide(); }
    for (var i = 0; i < ArrayItems.length; i++) {
        if ($(ArrayItems[i]).attr("checked")) { values += ((values == "") ? "" : ",") + $(ArrayItems[i]).val(); }
    }
    $('#ArrayValues[ajaxaction="values"]').attr(Container, values);
}
//funcion para imprimir
function print_click(obj) {
    //captura del objeto
    var btn = $(obj);
    //tipo de accion
    var ajaxtarget = btn.attr("ajaxtarget");
    var Contents = $("#" + ajaxtarget).html();
    evalScripts(Contents);
    $("#ui-table-header").hide();
    $("#ui-table-footer").hide();
    $(ajaxtarget + "a[class!=ui-toolbar-button],a[class!=ui-button-a],a[class!=ui-breadcrumbs-a]").addClass("ui-print-a");
    $("input[type=checkbox],input[type=radio],input[type=button],input[type=submit],input[class!=ui-input-search],a[class=ui-button-a],a[class=ui-toolbar-button]").hide();
    $("#" + ajaxtarget).printArea();
    $("#ui-table-header").show();
    $("#ui-table-footer").show();
    $("input[type=checkbox],input[type=radio],input[type=button],input[type=submit],input[class!=ui-input-search],a[class=ui-button-a],a[class=ui-toolbar-button]").show();
    $("a[class!=ui-toolbar-button],a[class!=ui-button-a],a[class!=ui-breadcrumbs-a]").removeClass("ui-print-a");

    // to cancel event propagation
    return false;
}
// handle button actions automatically
function button_click() {
    //debugger;
    //control de una unica llamada asincronica al tiempo....
    if (isBusy) {
        alert("Existe un llamado en progreso.")
        return false;
    }
    //captura del objeto
    var btn = $(this);
    //titulo de la ventana modal
    ModalTitle = btn.attr("title") || document.title;
    var validation = btn.attr("validation");
    //tomar el id del control con el cual estamos trabajando.
    var id = btn.attr("id");
    //tipo de id asincronica a ejecutar
    var ajaxaction = btn.attr("ajaxaction");
    //Apagar el Traces
    var ajaxshowtrace = btn.attr("ajaxshowtrace");
    //capturar el usuario al que se aplicara el soporte
    var ajaxrecordUser = btn.attr("ajaxrecordUser");
    //para acciones en la pagina modal
    var ajaxmodal = btn.attr("ajaxmodal");
    //utilizacion de metodos personalizados
    var ajaxcustom = btn.attr("ajaxcustom");
    //TagName del control
    var TagName = this.tagName.toLowerCase();
    //leer el contenedor
    var ajaxtarget = btn.attr("ajaxtarget");
    //utilziar cuando vamos a recarga un contendor X pero deseamos realizar validaciones
    //con un contenedo Y
    var ajaxtarget2 = btn.attr("ajaxtarget2");
    // parametro para paginacion
    var pagenumber = getValue(btn.attr("pagenumber"));
    //parametro para el estado
    var pagestatus = btn.attr("pagestatus");
    //validacion para manejo de tabs
    var ajaxtabsdynamic = btn.attr("ajaxtabsdynamic");
    //href utilizado para el manejo de ventanas modales
    var href = btn.attr("href");
    //valor que posee un registro de una lista
    var recordID = btn.attr("ajaxrecord"); // for links
    //ocultar un contendor despues de validar
    var ajaxparentcontent = btn.attr("ajaxparentcontent");
    //validacion del contenedor para utilizacion de contenedor por defecto
    if (typeof (ajaxtarget2) == "undefined" || ajaxtarget2 == '') { ajaxtarget2 = ''; }
    if (typeof (ajaxcustom) == "undefined" || ajaxcustom == '') { ajaxcustom = ''; }
    if ((typeof (ajaxcustom) != "undefined") && (typeof (ajaxtarget) == "undefined")) { ajaxtarget = ajaxcustom; }
    if (typeof (ajaxtarget) == "undefined" || ajaxtarget == '') { ajaxtarget = Action_Container; }
    if ((typeof (ajaxaction) == "undefined" || ajaxaction == '') && (ajaxcustom != '')) { ajaxaction = "RELOADCONTENT"; }
    if (typeof (ajaxmodal) == "undefined" || ajaxmodal == '') { ajaxmodal = ""; }
    if (typeof (ajaxshowtrace) == "undefined" || ajaxshowtrace == '') { ajaxshowtrace = ""; }
    if (typeof (ajaxrecordUser) == "undefined" || ajaxrecordUser == '') { ajaxrecordUser = ""; }
    if (typeof (id) == "undefined" || id == '') { id = ""; }
    //validacion del parametro de validacion...
    if (typeof (pagenumber) == "undefined" || pagenumber == '') { pagenumber = 1; }
    //validacion del parametro de estado...
    if (typeof (pagestatus) == "undefined" || pagestatus == '') { pagestatus = 1; }
    if (typeof (validation) == "undefined" || validation == '') { validation = false; }
    //validacion del valor recordID
    if (typeof (recordID) == "undefined" || recordID == '') recordID = $('#ArrayValues[ajaxaction="values"]').attr(ajaxtarget);

    //Aplicar Textos enriquecidos
    if (ajaxaction.toLowerCase() == 'new') {
        $(':input', '#frmcontent')
            .not(':button, :submit, :reset, :hidden')
            .val('')
            .removeAttr('checked')
            .removeAttr('selected');
        isNew = 1;
        return false;
    }

    //valor que tiene el control
    var value = btn.val();
    //parametro para especificar que lo link,li,botones,img realizen validaciones sobre otro contProfiles...
    var ValidationIsEnabled;
    eval("ValidationIsEnabled = " + validation + ";");
    //implementacion para el manejo de tab con este codigo se hace posible el cambio de un Tab a Otro
    if (typeof (ajaxtabsdynamic) != "undefined") {
        $("#ui-tabs a[ajaxtabsdynamic]").addClass("ui-tab-unselected");
        btn.removeClass("ui-tab-selected");
        btn.removeClass("ui-tab-unselected");
        btn.addClass("ui-tab-selected");
        if (ajaxaction.toUpperCase() == 'TAB') return false;
    }
    //TODO: No se utiliza
    var customtype = btn.attr("customtype"); // for Custom Action
    if (typeof (recordID) == "undefined") recordID = "0";
    //Contenedor donde se ejecuta la accion asincrona
    AjaxContainerID = ajaxtarget;
    // If exists Javascript Function for this object, this function is Called
    var fn, Continue = true, FnName = btn.attr("id");
    try { fn = eval(FnName); } catch (e) { }
    if (typeof (fn) == "function") { try { Continue = fn(); } catch (e) { writeHtml("[Javascript Error] <br/>Description : " + e.message + "<br/>Function Name : " + FnName, "WebPage_MessageBar", "error"); return false; } }
    // Verify if Requested Action has canceled by Javascript Function
    if (!Continue) return false;
    //se identifico que en la toolbar de quiere insertar un nuevo registro para que el sistema inserte el nuevo registro se setea esta recordID variable en cero.
    if (isNew) recordID = 0;
    if (ajaxaction.toLowerCase() == "delete" || ajaxaction.toLowerCase() == "active" || ajaxaction.toLowerCase() == "inactive") { if (recordID == 0) { alert("Usted No ha Seleccionado Ningun Registro Para Realizar esta Accion"); return false; } }
    if (ajaxaction.toLowerCase() == "delete") {
        if (!confirm('Realmente desea eliminar este Registro\n\n' +
                                                             'recuerde que una vez eliminado no se puede Recuperar.')) { return false; }
    }
    var Url = document.location.href;
    var formData = { tag: this.tagName, value: value, ajaxaction: ajaxaction, ajaxtarget: ajaxtarget, recordID: recordID, pagenumber: pagenumber, pagestatus: pagestatus, customtype: customtype, ajaxcustom: ajaxcustom, ajaxmodal: ajaxmodal, ajaxurl: Url, ajaxshowtrace: ajaxshowtrace, ajaxrecordUser: ajaxrecordUser };
    // Verifica si el objecto que produce el evento tiene habilitada la validacion de los campos adicionamos campo para el manejo de varias validaciones.
    if (ValidationIsEnabled) if (!ValidateFields($("[ajaxvalidate][ajaxtarget=" + (ajaxtarget2 != '' ? ajaxtarget2 : ajaxtarget) + "]"), id, ajaxparentcontent)) return false;
    PageTitle = btn.attr("title") || PageTitle || document.title;
    var width = btn.attr("width");
    var height = btn.attr("height");
    if (typeof (width) == "undefined" || width == '') { width = 800; }
    if (typeof (height) == "undefined" || height == '') { height = 600; }
    $('#dialog').dialog({
        modal: true,
        minWidth: 400,
        minHeight: 450,
        width: width,
        height: height,
        zIndex: 1000,
        title: ModalTitle,
        autoOpen: false,
        autoResize: true
    });
    //cargar las propiedades del nuevo modal
    //manejo de reportes.
    if (ajaxaction.toLowerCase() == "report") { DynamicReport(this); return false; }
    //Arma el resto de control a enviar al server
    jQuery.each($("form").serializeArray(), function() { formData[this.name] = this.value; });
    //si la accion es modal, manda a buscar la pagian en forma modal.
    if (ajaxaction.toLowerCase() == 'modal') { isModal = true; formData.ajaxaction = "DETAIL"; formData.ajaxtarget = "dialog"; formData.ajaxmodal = "modal"; doPost(formData, href); return false; }
    if (ajaxmodal.toLowerCase() == 'modal') { formData.ajaxaction != ""; doPost(formData, href); return false; }
    if (ajaxaction.toLowerCase() == 'redirect') { formData.ajaxaction = "REDIRECT"; doPost(formData, href); return false; }
    // send ajax request
    else { $.ajax({ data: formData }); }
    // to cancel event propagation
    return false;
}

//Valida los campos que tienen incluida la validacion.
function ValidateFields(ArrayObject, id, ajaxparentcontent) {
    var Exp;
    if (ArrayObject) {
        for (var i = 0; i < ArrayObject.length; i++) {
            if (id == "undefined" || id == "") {
                if (!Validate(ArrayObject[i].id)) return false;
            } else {
                //en esta parte es para poder realizar validaciones de controles definiendo cual de los botones de la pantalla
                //realizara la validacion.
                Exp = $("#" + ArrayObject[i].id).attr("ajaxvalidate").split("|");
                var parentcontrol = Exp[3];
                if (id == parentcontrol) {
                    if (!Validate(ArrayObject[i].id, ajaxparentcontent)) return false;
                }
            }
        }
        return true;
    }
    return false;
}


// populate dynamic dropdowns automatically
function dynamic_dropdown() {
    var dropdown = $(this);
    //Obtienen el contenedor hijo
    var ajaxchild = dropdown.attr("ajaxchild");
    //Verifica que se haya indicado el contenedor hijo
    if (ajaxchild != '') {
        AjaxContainerID = ajaxchild;
        //Deshabilita Dropdown hijo
        $("#" + ajaxchild).attr("disabled", true);
        //Obtiene el valor de padre
        var ajaxparentid = dropdown.val();
        // get data to be sent
        var formData = { tag: this.tagName, ajaxaction: "DROPDOWN", ajaxtarget: ajaxchild, ajaxparentid: ajaxparentid };
        //Arma los controles para enviarlos al server
        jQuery.each($("form").serializeArray(), function() { formData[this.name] = this.value; });
        // send ajax request
        $.ajax({ data: formData });
    }
    // to cancel event propagation
    return false;
}

//Funcionalidad para los <select> que recargan un contenedor
function dynamic_container() {
    var Obj = $(this);
    var Url = document.location.href;
    //recarga de otro contenedor
    var ajaxcustom = "";
    var ajaxaction = "";
    //titulo de la ventana modal
    ModalTitle = Obj.attr("title") || document.title;
    //Obtiene el valor del registro seleccionado
    var value = Obj.val();
    //recarga de otro contenedor
    var ajaxreload = Obj.attr("ajaxreload");
    //recarga en modal
    var ajaxmodal = Obj.attr("ajaxmodal");
    //Obtiene el contenedor
    var ajaxtarget = Obj.attr("ajaxtarget");
    //href utilizado para el manejo de ventanas modales
    var href = Obj.attr("href");
    //Obtiene la paginacion actual
    var pagenumber = Obj.attr("pagenumber");
    //Obtiene el estado actual de la pagina
    var pagestatus = Obj.attr("pagestatus");
    //Valida la paginacion
    if (typeof (pagenumber) == "undefined" || pagenumber == '') { pagenumber = 1; }
    //Valida el estado
    if (typeof (pagestatus) == "undefined" || pagestatus == '') { pagestatus = 1; }
    //Valida el contenedor
    if (typeof (ajaxtarget) == "undefined" || ajaxtarget == '') { ajaxtarget = Action_Container; }
    //recarda en ventanas modales.
    if (typeof (ajaxmodal) == "undefined" || ajaxmodal == '') { ajaxmodal = ""; }
    //validacion del attributo
    if (typeof (ajaxreload) == "undefined" || ajaxreload == '') { ajaxreload = ""; }
    //manejo de la accion a ajecutar
    if (ajaxreload.toLowerCase() == 'detail') { ajaxaction = "DETAIL"; } else { ajaxaction = "RELOADCONTENT"; ajaxcustom = ajaxreload; }
    //Arma los datos del server
    var formData = { tag: this.tagName, value: value, ajaxaction: ajaxaction, ajaxtarget: ajaxtarget, pagenumber: pagenumber, pagestatus: pagestatus, ajaxmodal: ajaxmodal, ajaxurl: Url, ajaxcustom: ajaxcustom };
    jQuery.each($("form").serializeArray(), function() { formData[this.name] = this.value; });
    if (ajaxmodal.toLowerCase() == 'modal') {
        formData.ajaxaction != ""; doPost(formData, href);
        return false;
    } else {
        formData.ajaxmodal = "";
        $.ajax({ data: formData });
    } // send ajax request

    // to cancel event propagation
    return false;
}

//Inicializa los valores del JQuery para las acciones asincronas.
function Ajax_Setup() {

    // remove # anchors from the url
    var targetUrl = document.location.href;
    /*problemas con el historial*/
    var i = targetUrl.indexOf('#');
    if (i >= 0) targetUrl = targetUrl.substring(0, i);
    $.ajaxSetup({
        url: targetUrl,
        type: "POST",
        dataType: "json",
        beforeSend: Request_BeforeSend,
        error: Response_Error,
        success: Response_Success
    });
}

//Envia los datos al server
function doPost(data, targetUrl) {

    UrlParent = document.location.href;
    jQuery.ajax({
        url: targetUrl ? targetUrl : document.location.href,
        data: data
    });

}
//Envia los datos al server
function doPostContainer(Container, targetUrl) {
    var l = $("#WebPage_Loading");
    if (l) l.hide();
    isBusy = false;
    isLoading = false;
    var formData = { ajaxcustom: Container, ajaxtarget: Container, ajaxaction: "RELOADCONTENT" };
    UrlParent = document.location.href;
    jQuery.ajax({
        url: targetUrl ? targetUrl : document.location.href,
        data: formData
    });

}
//Envia los datos al server por submit
function doPostsubmit(ajaximages) {
    var f = document.frmcontent;
    f.ajaxupload.value = 'UPLOAD';
    f.cd_image.value = ajaximages;
    f.submit();
}
//Envia los datos al server por submit
function dosubmit() {
    var f = document.frmcontent;
    f.submit();
}
//Metodo que se ejecuta antes enviar los datos al server
function Request_BeforeSend(xhr) {
    isBusy = true;
    // display loading message
    if (isLoading) ShowLoading();
    // add special header for callbacks
    xhr.setRequestHeader("ISCALLBACK", "1");
    isLoading = true;
}

//Muestra el mensaje "Cargando" al usuario
function ShowLoading() { writeHtml('<img alt="Loading..." src="../App_Themes/' + Theme + '/images/loading.gif" width="18px" />&#160;Loading...', "WebPage_Loading", "LOADING"); }

//Quita el mensaje "Cargando" al usuario
function HideLoading() {
    var k = $("#WebPage_MessageBar");
    if (k) k.hide();
    var l = $("#WebPage_Loading");
    if (l) l.hide();
    var m = $("#session_support");
    if (m) m.hide();
    var b = $("#btn_support");
    if (b) b.show();
}

//Metodo que se ejecuta cuanto el server retorna un error no controlado
function Response_Error(xhr, textStatus, errorThrown) {
    isBusy = false;
    HideLoading();
    //Habilita Dropdown
    $("#" + AjaxContainerID).attr("disabled", false);
    // it will render the html text for the 500 http status code sent by the server
    writeHtml((textStatus != undefined && textStatus != 'error' ? 'textStatus: ' + textStatus + '<br>' : '') +
                  (errorThrown ? 'errorThrown: ' + errorThrown + '<br>' : '') +
                  xhr.responseText, AjaxContainerID, "ERROR");
}

//Metodo donde llega la respuesta del server, se retorna una estructura JSON de la siguiente forma:
function Response_Success(response) {
    isBusy = false;
    var sWarning = "";
    //Se oculta el mensaje "Cargando"
    HideLoading();
    //Redirecciona a la pagina pedida
    // TODO: No se utiliza
    if (response.redirectUrl) { document.location.href = response.redirectUrl; return; }
    //pintar trace sin modal
    if (response.traceTarget == "WebPage_Trace") { writeHtml(response.traceContent, response.traceTarget); }
    //Muestra el resultado en una ventana modal
    if (response.ajaxTarget == "dialog") {
        var traceContent = "";
        if (typeof (response.traceContent) != "undefined") {
            traceContent = '<div id="ui-modal-row"><div id="ui-modal-web-container-modal">' + response.traceContent + '</div></div>';
        }
        $("#dialog").show().dialog('open');
        writeHtml("<form id=\"frmcontentmodal\" name=\"frmcontentmodal\"  method=\"POST\"  onsubmit=\"return false;\" enctype=\"multipart/form-data\">" + response.ajaxContent + "</form>" + traceContent, "dialog"); return;
    }
    //actualiza el contenido de la pagina sobre el contenedor enviado
    if (response.ajaxContent) { writeHtml(response.ajaxContent, response.ajaxTarget); }
    //Muestra el mensaje enviado desde el server. Tando de Mensajes de notificacion, Ok y Error.
    if (response.messageText) {
        var context;
        context = response.messageText;
        writeHtml(response.messageText, response.messageTarget, response.messageType);

    }
    // guardar historial de navegacion para Ajax
    /*problemas con ese historial*/
}

//Funcion para aplicar el resultado del server.
function writeHtml(Contents, ContainerID, MessageType) {
    if (!ContainerID) { document.write(Contents); return; }
    var o = $('#' + ContainerID);
    var time = 15000;
    // si es un mensaje de error o de notificacion
    if (MessageType) {
        o.removeClass().addClass("UserMessage" + MessageType).html(Contents).show();
        if (MessageType.toLowerCase() == 'error') {
            $("input[type=checkbox][name=chkitem_" + AjaxContainerID + "], input[type=checkbox][name=chkgroup_" + AjaxContainerID + "]").attr("checked", false);
            $('#ArrayValues[ajaxaction="values"]').attr(AjaxContainerID, "");
        }
        window.setTimeout(function() { HideLoading(); }, time);
        time = 0;
    }
    //para que se pierda la accion de nuevo ejecutada en la toolbar
    isNew = 0;
    if (ContainerID == 'WebPage_Trace') {
        o.html(Contents);
        o.show();
    }
    // para llenado dinamico de dropdown
    if (typeof (o[0]) != "undefined") {
        if (o[0].tagName == "SELECT") {
            o = o[0]; // escoge el primer dropdown devuelto

            //Habilita Dropdown
            $(o).attr("disabled", false);

            // borra las entradas existentes
            o.options.length = 0;
            // agrega nuevas entradas
            for (var i = 0; i < Contents.length; i++) {
                var id = Contents[i][0], ds = Contents[i][1];
                o.options[i] = new Option(ds, id);
            }
            var ajaxchild = $(o).attr("ajaxchild");
            if (typeof (ajaxchild) != "undefined") $(o).change();
        }
        // peticion normal (navegacion, lista etc)
        else {
            if (ContainerID != 'WebPage_Contents' && ContainerID != 'WebPage_MessageBar' && ContainerID != 'WebPage_Loading' && ContainerID != 'dialog') {
                if ($("#dialog").dialog("isOpen")) {
                    o.html(Contents);
                } else {
                    o.html(Contents)
                    o.show();
                }
            } else {
                //Actualiza el contenido de la pagina
                o.html(Contents);
                if (ContainerID == 'WebPage_MessageBar' || ContainerID == 'dialog_error') { o.show("slow"); }
            }
        }
    }
    //Evalua el contenido en busca de scripts
    evalScripts(Contents);
    //inicializa los contProfiles.
    Page_AutoWireup(ContainerID);
}

//evalua texto Html
function evalScripts(HtmlContent) {
    var scripts;
    if (scripts = HtmlContent.match(/<script[^>]*?>[\S\s]*?<\/script>/ig)) {
        for (var i = 0, count = scripts.length; i < count; i++) {
            var script = scripts[i].replace(/^<script[^>]*?>/i, "").replace(/<\/script>$/i, "");
            script = script.replace(/\\n/g, "\n").replace(/\\\\/g, "\\").replace(/\\'/g, "\'");
            eval(script);
        } // for
    } // if
}
