﻿// Variables separadoras
var sepPar = "{_P_}";
// separa orden ajax de sus parametros
var sepElem = "{_E_}";
// separa elementos (a un control select se le pueden cargar varios elementos)
var sepVal = "{_V_}";
// separa valores de sus claves, donde clave y valor forman un elemento
var sepCtl = "{_C_}";
// separa controles (tanto simples : txt, pwd, spa), como compuestos
var sepBloc = "{_B_}";
// separa bloques : parametros que no tienen nada que ver entre si (en algunas ocasiones pueden contener subbloques)
var sepSBloc = "{_S_}";
// Separa subbloques : estructuras formadas por elementos o controles
var sepArg = "{_A_}";
// separa argumentos : estructuras formadas por bloques
var sepGra = "(_)";
// Separador de argumentos del GridAjax
var idLngActual;
// id de idioma actual
var vecLangs;
// Vector con los nombres de los idiomas en el idioma actual
/* Variables Globales */
var _divcalendar = "divcalendar";
var _divcalendar1 = "divcalendar1";
var _wcFecha = "wcReservar1_";
/* Control de usuario que se concatena */
var _txtFechaEnt = "txtFechaEnt_1";
var _txtFechaSal = "txtFechaSal_2";
var txtFechaEnt;
var txtFechaSal;
var _txtFecha = "txtFecha_3";
var _txtNoches = "txtNoches";
var _lblDiaEnt = "lblDiaSemanaEnt";
var _lblDiaSal = "lblDiaSemanaSal";
var _inputId = "";
var PeticionesPage = "PeticionesServer.aspx";
var url = PeticionesPage;
var sepParams = "(_)";
var _TipoCal = "";
var _divCal = "";
var _mes = "";
var _anio = "";
var date = new Date();
var startdate = "";
var sepradorIdctl = "_";
var diaSemana = new Array();
var Meses = new Array();
var _TypeEvent = "";
var _dia;
var _mes;
var _anio;
var web = "tipo_Publica";
// var web = "tipo_Publica";
var sepradorFecha = "/";
var _paramCal = "";
var _errorFecha = false;
var _bSumaDia = true;

/*Nos devuelve los dias y meses traducidos al idioma */
GetDiasSemana();

/* Nos devuelve el mes y anÃ±o de los campos ocultos del calendari */
function GetYr_Mo() {

    var Ismo = $("txtMes_" + CalendarioLib.GestionPet._CtrlID) != null;
    var Isyr = $("txtAnio_" + CalendarioLib.GestionPet._CtrlID) != null;

    if (Ismo && Isyr) {
        _mes = $("txtMes_" + CalendarioLib.GestionPet._CtrlID).value;
        _anio = $("txtAnio_" + CalendarioLib.GestionPet._CtrlID).value;
    }
}


/* Tipo calendario puede ser 1 indica un solo calendario 2 calendario entrada y salida */
function GetTipoCalendario() {
    _TipoCal = CalendarioLib.GestionPet._CtrlID.id.substr(CalendarioLib.GestionPet._CtrlID.id.indexOf(sepradorIdctl) + 1, 1);
}


/* Libreria CalendarioLib */
var CalendarioLib =
{
}
;
CalendarioLib.properties =
{


}
;
/* NamesSpace */
CalendarioLib.GestionPet =
{
    _CtrlID: null,
    _TipoCalendario: null,
    InitFechas: function(fechaEnt, fechaSal, txtNoches, SumaDia) {
        if (fechaEnt != undefined) {
            _txtFechaEnt = fechaEnt;
        }
        if (fechaSal != undefined) {
            _txtFechaSal = fechaSal;
        }
        if (txtNoches != undefined) {
            _txtNoches = txtNoches;
        }

        if (SumaDia != undefined) {
            _bSumaDia = false;
        }
        var IstxtFechaEnt = $(_txtFechaEnt) != null;
        var IstxtFechaSal = $(_txtFechaSal) != null;
        var IstxtwcFechaEnt = $(_wcFecha + _txtFechaEnt) != null;
        var IstxtwcFechaSal = $(_wcFecha + _txtFechaSal) != null;
        var IslblwcFechaEnt = $(_wcFecha + _lblDiaEnt) != null;
        var IslblwcFechaSal = $(_wcFecha + _lblDiaSal) != null;
        var IstxtFecha = $(_txtFecha) != null;
        var IstxtNoches = $(_txtNoches) != null;
        var IslbldiaEnt = $(_lblDiaEnt) != null;
        var IslbldiaSal = $(_lblDiaSal) != null;
        var startDate = new Date();
        var milisegundos = parseInt(1 * 24 * 60 * 60 * 1000);
        var fecha = new Date();
        //      var tiempo = fecha.getTime();
        //      var total = fecha.setTime(parseInt(tiempo + milisegundos)); 
        _dia = fecha.getDay();
        _mes = fecha.getMonth() + 1;
        _anio = fecha.getFullYear();
        _errorFecha = false;

        if (IslbldiaEnt) {
            var dia = "";
            dia = DevuelveDia(fecha.getDay() - 1);
            $(_lblDiaEnt).innerHTML = dia; //diaSemana[dia];
        }



        if (IslbldiaSal) {
            //fecha.setMilliseconds(milisegundos);
            var dia = "";
            dia = DevuelveDia(fecha.getDay());
            $(_lblDiaSal).innerHTML = dia;
        }

        if (IstxtFechaEnt) {
            $(_txtFechaEnt).value = Framework.Fecha.addZero(startDate.getDate()) + "/" + Framework.Fecha.addZero(startDate.getMonth() + 1) + "/" + startDate.getFullYear();
            _txtFechaEnt = $(_txtFechaEnt);
            $(_txtFechaEnt).onkeypress = SoloFechas;
        }
        else if (IstxtwcFechaEnt) {
            fecha.setMilliseconds(milisegundos);
            $(_wcFecha + _txtFechaEnt).value = Framework.Fecha.addZero(startDate.getDate()) + "/" + Framework.Fecha.addZero(startDate.getMonth() + 1) + "/" + startDate.getFullYear();
            _txtFechaEnt = $(_wcFecha + _txtFechaEnt);
            $(_txtFechaEnt).onkeypress = SoloFechas;

        }

        if (IstxtFechaSal) {
            fecha.setMilliseconds(milisegundos);
            $(_txtFechaSal).value = Framework.Fecha.addZero(fecha.getDate()) + "/" + Framework.Fecha.addZero(fecha.getMonth() + 1) + "/" + fecha.getFullYear();
            _txtFechaSal = $(_txtFechaSal);
            $(_txtFechaSal).onkeypress = SoloFechas;
        }
        else if (IstxtwcFechaSal) {
            $(_wcFecha + _txtFechaSal).value = Framework.Fecha.addZero(fecha.getDate()) + "/" + Framework.Fecha.addZero(fecha.getMonth() + 1) + "/" + fecha.getFullYear();
            _txtFechaSal = $(_wcFecha + _txtFechaSal);
            $(_txtFechaSal).onkeypress = SoloFechas;
        }

        if (IstxtFecha) {
            $(_txtFecha).value = Framework.Fecha.addZero(startDate.getDate()) + "/" + Framework.Fecha.addZero(startDate.getMonth() + 1) + "/" + startDate.getFullYear();
        }

        if (IstxtNoches) {
            $(_txtNoches).value = "1";
        }
        CalendarioLib.GestionPet.Init();
    }
   ,

    Init: function(CtrID, CtrlIdSal) {

        _txtFechaEnt = CtrID;
        _txtFechaSal = CtrlIdSal;

        txtFechaEnt = $(CtrID);
        txtFechaSal = $(CtrlIdSal);

        var IstxtFechaEnt = $(_txtFechaEnt) != null;
        var IstxtFechaSal = $(_txtFechaSal) != null;
        var IstxtwcFechaEnt = $(_wcFecha + _txtFechaEnt) != null;
        var IstxtwcFechaSal = $(_wcFecha + _txtFechaSal) != null;
        var IstxtFecha = $(_txtFecha) != null;

        if (IstxtFecha) {
            $(_txtFecha).onchange = function() {
                CalendarioLib.GestionPet.__ActualizaCal($(_txtFecha));
            }
            $(_txtFecha).onkeypress = function() {
                numerosFecha(this, _txtFecha);

            }
            $(_txtFecha).onkeyup = function() {
                return numerosFecha(this, _txtFecha);

            }
        }

    }
   ,

    ShowCalendar: function(divCal) {
        var num = CalendarioLib.GestionPet.__GetTipoCalendario();
        var payload = "";
        _divcal = $(divCal);
        var txtCal = CalendarioLib.GestionPet._CtrlID;
        GetTipoCalendario();
        txtCal.id = txtCal.id.substr(0, txtCal.id.indexOf(sepradorIdctl));
        if (num == "3") {
            payload = "IniciaCal" + sepParams + divCal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + txtCal.value;
        }
        else {
            if (Framework.Fecha.checkDate(_txtFechaEnt) && Framework.Fecha.checkDate(_txtFechaSal)) {
                _mes = txtFechaEnt.value.substr(txtFechaEnt.value.indexOf("/") + 1, txtFechaEnt.value.indexOf("/") - 1);
                _anio = txtFechaEnt.value.substr(5, 4);
                payload = "IniciaCal" + sepParams + divCal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + web + sepParams + Framework.Fecha.addZero(_mes) + sepParams + _anio + sepParams + txtFechaEnt.value + sepParams + txtFechaSal.value;
            }
        }
        CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);
    }
   ,
    NextMonth: function(controlid, divcal, tipocal) {
        var txtCal = $(controlid);
        _paramCal = CompruebaAnio(controlid);
        _divcal = $(divcal);
        _TipoCal = tipocal;
        CalendarioLib.GestionPet._CtrlID = controlid;
        GetYr_Mo();
        startdate = Framework.Fecha.addZero(date.getDate()) + "/" + Framework.Fecha.addZero(_mes) + "/" + _anio;
        var payload = "NextMonth" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + AjaxLib.comm.encodeValue(startdate) + sepParams + web + sepParams + _paramCal;
        CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);
    }
   ,

    PrevMonth: function(controlid, divcal, tipocal) {
        var txtCal = $(controlid);
        _paramCal = CompruebaAnio(controlid);
        _divcal = $(divcal);
        _TipoCal = tipocal;
        CalendarioLib.GestionPet._CtrlID = controlid;
        GetYr_Mo();
        startdate = Framework.Fecha.addZero(date.getDate()) + "/" + Framework.Fecha.addZero(_mes) + "/" + _anio;

        var payload;
        if (txtFechaEnt.value != "" && txtFechaSal.value != "") {
            payload = "PrevMonth" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + txtFechaEnt.value + sepParams + txtFechaSal.value + sepParams + _mes + sepParams + _anio + sepParams + web + _paramCal;
        }
        else {
            payload = "PrevMonth" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + sepParams + sepParams + _mes + sepParams + _anio + sepParams + web + _paramCal;
        }
        CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);
    }
   ,

    NextYear: function(controlid, divcal, tipocal) {
        var txtCal = $(controlid);
        _divcal = $(divcal);
        _TipoCal = tipocal;
        CalendarioLib.GestionPet._CtrlID = controlid;
        GetYr_Mo();
        startdate = Framework.Fecha.addZero(date.getDate()) + "/" + Framework.Fecha.addZero(_mes) + "/" + _anio;
        var payload = "NextYear" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + web + sepParams + AjaxLib.comm.encodeValue(startdate) + sepParams + web + sepParams;
        CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);
    }
   ,
    PrevYear: function(controlid, divcal, tipocal) {
        var txtCal = $(controlid);
        _divcal = $(divcal);
        _TipoCal = tipocal;
        CalendarioLib.GestionPet._CtrlID = controlid;
        GetYr_Mo();
        startdate = Framework.Fecha.addZero(date.getDate()) + "/" + Framework.Fecha.addZero(_mes) + "/" + _anio;
        var payload = "PrevYear" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + web + sepParams + AjaxLib.comm.encodeValue(startdate) + sepParams + web + sepParams;
        CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);
    }
   ,

    /*// Seleccion de fecha en el CalendarioLib */
    SelectDate: function(dia, controlid, idioma, page, divcal, date) {
        var tipocal = CalendarioLib.GestionPet._TipoCalendario;
        _paramCal = CompruebaAnio();
        var fldEntrada;
        var fldSalida;
        var fecha;
        var _fecha = $(controlid);
        var _addDia;
        var milisegundos;
        var isDias = _fecha.getAttribute("dia") != null;
        var _iframe = $("iframe_" + divcal);
        if (isDias) {
            _addDia = _fecha.getAttribute("dia");
            milisegundos = parseInt(parseInt(_addDia) * 24 * 60 * 60 * 1000);
        }
        else {
            milisegundos = parseInt(1 * 24 * 60 * 60 * 1000);
        }
        _divcal = $(divcal);

        // CalendarioLib.GestionPet._CtrlID = controlid;
        GetYr_Mo();
        CalendarioLib.GestionPet._CtrlID = $(controlid);
        fecha = $(controlid);
        tempDay = dia;
        tempMonth = date.substr(3, 2);
        if (tempMonth.indexOf("0", 0) == 0) tempMonth = tempMonth.substring(1, 2);
        tempYear = date.substr(6, 4);
        var fechaCal = new Date(tempYear, parseInt(tempMonth) - 1, dia);
        /* var tiempo = fechaCal.getTime();
        var total = fechaCal.setTime(parseInt(tiempo + milisegundos)); */

        fechaCal.setMilliseconds(milisegundos);

        _dia = fechaCal.getDate();
        _mes = fechaCal.getMonth() + 1;
        _anio = fechaCal.getFullYear();

        var Isattr = _fecha.getAttribute("attributo") != null;
        if (Isattr) {
            var attr = _fecha.getAttribute("attributo");
            //CalendarioLib.GestionPet._TipoCalendario = attr.substr(attr.lastIndexOf(sepradorIdctl) + 1, 1);
            CalendarioLib.GestionPet._TipoCalendario = attr;
            var num = CalendarioLib.GestionPet._TipoCalendario;
        }
        else {
            // CalendarioLib.GestionPet._TipoCalendario = _fecha.substr(CtrID.id.lastIndexOf(sepradorIdctl) + 1, 1);
            var num = CalendarioLib.GestionPet.__GetTipoCalendario();
        }
        if (num == "3") {
            var calFecha = Framework.Fecha.addZero(dia) + "/" + Framework.Fecha.addZero(_mes) + "/" + _anio;
            fecha.value = calFecha;
        }
        else {
            /* es tipo 1, 2 entrada y salida, comprueba si estan rellenados los campos y si las fechas son correctas */
            fldEntrada = $(_txtFechaEnt);
            fldSalida = $(_txtFechaSal);
            if (Framework.Fecha.checkDate(fldEntrada) && Framework.Fecha.checkDate(fldSalida)) {
                var calFecha = Framework.Fecha.addZero(dia) + "/" + Framework.Fecha.addZero(_mes) + "/" + _anio;
                if (num == "1") {
                    fldEntrada.value = date;
                    if (_bSumaDia) {
                        fldSalida.value = Framework.Fecha.addZero(_dia) + "/" + Framework.Fecha.addZero(_mes) + "/" + _anio;
                        var fecha = new Date(_anio, _mes - 1, _dia - 1);
                        DevuelveDiaSemana(fecha.getDay(), num);
                    }
                }
                else {
                    if (fldEntrada.value != "") {
                        tempDay = dia;
                        tempMonth = date.substr(3, 2);
                        tempYear = date.substr(6, 4);
                        var fecha = new Date(tempYear, tempMonth - 1, dia);
                        fldSalida.value = (String(fecha.getDate()).length == 1 ? Framework.Fecha.addZero(fecha.getDate()) : String(fecha.getDate()))
                      + "/" + tempMonth + "/" + tempYear;
                        fldSalida = $(controlid);

                        DevuelveDiaSemana(fecha.getDay(), num);
                    }
                    else {
                        // alert("La fecha de entrada es incorrecta.");
                        var _date = new Date();
                        var _Resetdate = new Date();
                        _Resetdate = Framework.Fecha.formatoDate(_Resetdate, "dd/MM/yyyy");
                        $(controlid).value = date;
                        $(_txtFechaEnt).value = date;
                        if (fldSalida.value == "") {
                            $(fldSalida).value = ReiniciaFechas("2", $(_txtFechaEnt).id, true);
                        }
                    }
                    if (fldSalida.value != "" && fldEntrada.value != "") {
                        var inputDays = $(_txtNoches) != null;
                        if (inputDays) {
                            if (_bSumaDia) {
                                var payload = "CalculaDias" + sepParams + _divcal.id + sepParams + fldSalida.id + sepParams + tipocal + sepParams + fldEntrada.value + sepParams + fldSalida.value + sepParams + web + sepParams;
                                CalendarioLib.GestionPet.__EnviaPeticionAjax(payload, "JSON");
                            }
                        }
                    }
                }
            }
        }
        _divcal.style.display = "none";
        if (_iframe != null) _iframe.style.display = "none";
    },

    ReiniciaCal: function(dia, mes, anio, controlid, idioma, tipocal, divcal) {
        var txtCal = $(controlid);
        _divcal = $(divcal);
        _TipoCal = tipocal;
        CalendarioLib.GestionPet._CtrlID = controlid;
        var payload = "ReiniciaCal" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + web + sepParams + dia + sepParams + mes + sepParams + anio;
        CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);
    }
   ,

    /* Respuesta desde el servidor */
    handleResponse: function(response) {
        var desglosa = [];
        desglosa = response.xhr.responseText.split("(_)")
        var divcal = $(_divcal);
        var ind = "";
        var useControl = "";
        var controlid;
        switch (desglosa[0]) {
            case "CalculaDias":
                var isDias = $("txtDias") != null;
                var isNoches = $(_txtNoches) != null;
                if (isNoches) {
                    $(_txtNoches).value = desglosa[2];
                }
                break;
            case "SumaDias":
                $(_txtFechaSal).value = desglosa[1]
                // $(divcal).style.display = "inline";
                //divcal.innerHTML = desglosa[2];
                break;

            case "GetDia":
                var IslblEntradawc = $(_wcFecha + _lblDiaEnt) != null;
                var IslblSalidawc = $(_wcFecha + _lblDiaSal) != null;
                var IslblEntrada = $(_lblDiaEnt) != null;
                var IslblSalida = $(_lblDiaSal) != null;
                var filas = desglosa[1].split("{_M_}");
                switch (filas[0]) {
                    case "1":
                        if (IslblEntradawc) {
                            useControl = _wcFecha;
                            $(useControl + _lblDiaEnt).innerHTML = filas[1];
                        }
                        if (IslblSalidawc) {
                            $(useControl + _lblDiaSal).innerHTML = filas[2];
                        }

                        if (IslblEntrada) {
                            controlid = $(_lblDiaEnt).getAttribute("name");
                            if (controlid == null) {
                                if (useControl != null) {
                                    controlid = $(useControl + _lblDiaEnt).getAttribute("name");
                                }
                            }
                            var lbldia = $(_lblDiaEnt);

                            if (useControl != null) {
                                lbldia = $(useControl + _lblDiaEnt);
                            }

                            if (controlid != null) {
                                ind = controlid.indexOf("_");
                            }

                            if (parseInt(ind) >= 0) {
                                $(_lblDiaEnt).innerHTML = filas[1];
                                $(_lblDiaSal).innerHTML = filas[2];
                            } else if (ind == "") {
                                $(_lblDiaEnt).innerHTML = filas[1];
                                $(_lblDiaSal).innerHTML = filas[2];
                            } else {
                                //lbldia = lbldia.id.substring(0,lbldia.id.indexOf("_"));
                                $(lbldia).innerHTML = filas[1];
                                $(useControl + _lblDiaSal).innerHTML = filas[2];
                            }

                        }
                        break;
                    case "2":
                        if (IslblSalidawc) {
                            $(_wcFecha + _lblDiaSal).innerHTML = filas[1];
                        }

                        if (IslblSalida) {
                            controlid = $(_lblDiaEnt).getAttribute("name");
                            if (controlid == null) {
                                if (useControl != null) {
                                    controlid = $(useControl + _lblDiaSal).getAttribute("name");
                                }
                            }
                            var lbldia = $(_lblDiaSal);

                            if (useControl != null) {
                                lbldia = $(useControl + _lblDiaSal);
                            }

                            if (controlid != null) {
                                ind = controlid.indexOf("_");
                            }

                            if (parseInt(ind) >= 0) {
                                $(_lblDiaSal).innerHTML = filas[1];
                            } else if (ind == "") {
                                $(_lblDiaSal).innerHTML = filas[1];
                            } else {
                                //lbldia = lbldia.id.substring(0,lbldia.id.indexOf("_"));
                                $(lbldia).innerHTML = filas[1];
                            }
                        }
                        break;
                }
                break;

            default:
                if (_TypeEvent != "change") {
                    $(divcal).style.display = "inline";
                    divcal.innerHTML = response.xhr.responseText;
                } else {
                    $(divcal).style.display = "none";
                    var isFrame = $("iframe_" + _divcal.id) != null;
                    if (isFrame) {
                        $("iframe_" + _divcal.id).style.display = "none";
                    }
                    var dia;
                    var date;
                    var Ctrid;
                    var Ctrid1;
                    var a = _TipoCal;
                    if (_TipoCal == "1") {
                        Ctrid = $(_txtFechaEnt);
                        dia = Ctrid.value.substring(0, Ctrid.value.indexOf("/"));
                        date = Ctrid.value;
                    } else if (_TipoCal == "2") {
                        Ctrid = $(_txtFechaSal);
                        dia = Ctrid.value.substring(0, Ctrid.value.indexOf("/"));
                        date = Ctrid.value;
                    }
                    //CalendarioLib.GestionPet.SelectDate(dia, Ctrid, "es", this, _divcal, date);

                }
                break;
        }


    }
   ,
    /* Eventos onclick */
    __handleEventos: function(CtrID) {
        CalendarioLib.GestionPet._CtrlID = CtrID;
        CalendarioLib.GestionPet._TipoCalendario = CtrID.id.substr(CtrID.id.indexOf(sepradorIdctl) + 1, 1);
        var IsdivCal = CtrID.getAttribute("layer") != null;
        if (IsdivCal) {
            divCal = $(CtrID).getAttribute("layer");
        }
        CalendarioLib.GestionPet.ShowCalendar($(divCal));
    }
   ,

    /* Procesa la peticion ajax */
    __EnviaPeticionAjax: function(_payload, tiporespuesta) {
        var respuesta = "";
        if (tiporespuesta != "" || tiporespuesta == "undefined") {
            respuesta = "TEXTO";
        }
        else {
            respuesta = tiporespuesta;
        }

        var options =
      {
          method: "POST",
          payload: _payload,
          onSucess: CalendarioLib.GestionPet.handleResponse,
          tipoRespuesta: respuesta
      }
      ;
        AjaxLib.comm.sendRequest(url, options);
    }
   ,

    __GetTipoCalendario: function() {
        var tipo = CalendarioLib.GestionPet._CtrlID;
        var num = tipo.id.substr(tipo.id.lastIndexOf(sepradorIdctl) + 1, 1);
        return num;
    }
   ,
    /* Eventos onmouseover */
    __ActualizaCal: function(CtrID, CtrlIdSal, event, txtNoches, lblDiaEnt, lblDiaSal) {
        if (txtNoches != undefined) {
            _txtNoches = txtNoches;
        }
        if (lblDiaEnt != undefined) {
            _lblDiaEnt = lblDiaEnt;
        }
        if (lblDiaSal != undefined) {
            _lblDiaSal = lblDiaSal;
        }

        var IstxtNoches = $(_txtNoches) != null;
        if (IstxtNoches) {
            if ($(_txtNoches).value != "1") {
                $(_txtNoches).value = "1";
            }
        }
        _wcFecha = CtrID.substring(0, CtrID.indexOf("_") + 1);

        CalendarioLib.GestionPet.Init(CtrID, CtrlIdSal);
        _TypeEvent = event.type;
        var payload = "";
        _paramCal = CompruebaAnio(CtrID);
        var txtCal = $(CtrID);
        var isLayerEnt = $(CtrID).getAttribute('layer') != null;
        if (isLayerEnt) {
            _divcalendar = txtCal.getAttribute('layer');
        }
        var txtCalSal = $(CtrlIdSal);
        var isLayerSal = $(CtrlIdSal).getAttribute('layer') != null;
        if (isLayerSal) {
            _divcalendar1 = txtCalSal.getAttribute('layer');
        }

        muestraCapaPos(event, _divcalendar, CtrID);

        var div = $(_divcalendar1);
        if (div.style.display == "inline") {
            div.style.display = "none";
        }
        var _iframe = $("iframe_" + _divcalendar1);
        if (CtrID != CtrlIdSal)
            if (_iframe != null) _iframe.style.display = "none";

        if (CtrlIdSal != undefined) {
            CalendarioLib.GestionPet.Init(CtrID, CtrlIdSal);
        }

        var enviaFecha = "";
        CtrID = $(CtrID);
        CalendarioLib.GestionPet._CtrlID = CtrID;

        var Isattr = CtrID.getAttribute("attributo") != null;
        if (Isattr) {
            var attr = CtrID.getAttribute("attributo");
            CalendarioLib.GestionPet._TipoCalendario = attr.substr(attr.lastIndexOf(sepradorIdctl) + 1, 1);
        }
        else {
            CalendarioLib.GestionPet._TipoCalendario = CtrID.id;
        }
        _TipoCal = CalendarioLib.GestionPet._TipoCalendario;

        var IsdivCal = CtrID.getAttribute("layer") != null;
        if (IsdivCal) {
            divCal = $(CtrID).getAttribute("layer");
            _divcal = $(divCal);
        }

        if (Framework.Fecha.checkDate(txtFechaEnt)) {
            if (CalendarioLib.GestionPet._TipoCalendario == "3") {
                CalendarioLib.GestionPet._CtrlID = CtrID;
                var num = CalendarioLib.GestionPet.__GetTipoCalendario();
                payload = "ActualizaCal" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + CtrID.value + sepParams + web + sepParams;
                CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);
            } else {
                var fechaActual = new Date();
                var fecha;
                try {
                    var arrFecha = CtrID.value.split("/");
                    _dia = arrFecha[0];
                    _mes = arrFecha[1].indexOf("0") == 0 ? arrFecha[1].substring(1) : arrFecha[1];
                    _anio = arrFecha[2];
                    fecha = new Date(_anio, parseInt(_mes) - 1, _dia);
                } catch (e) {
                }
                if (Framework.Fecha.checkDate(txtFechaSal) && esFecha2aIgualoSup(fechaActual, fecha)) {
                    CalendarioLib.GestionPet._CtrlID = CtrID;
                    var num = CalendarioLib.GestionPet._TipoCalendario;
                    if (num == "2") {
                        enviaFecha = $(txtFechaEnt).value;
                    }
                    else {
                        enviaFecha = $(CtrID).value;
                    }

                    payload = "ActualizaCal" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + enviaFecha + sepParams + web + _paramCal;
                    CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);
                    if (txtCal.value != "") {
                        $(CtrlIdSal).value = ReiniciaFechas("2", txtCal.id, true);
                    }
                } else {
                    _errorFecha = true;
                }
            }
        } else {
            _errorFecha = true;
        }

        if (_errorFecha) {
            txtCal.value = ReiniciaFechas(_TipoCal);
            $(CtrlIdSal).value = ReiniciaFechas("2", txtCal.id, true);
            var isFrame = $("iframe_" + _divcal.id) != null;
            if (isFrame) {
                $(_divcal).style.display = "none";
                $("iframe_" + _divcal.id).style.display = "none";
            } else {
                $(_divcal.id).style.display = "none";
            }
            _errorFecha = false;
            CalendarioLib.GestionPet.__ActualizaCal(CtrID.id, CtrlIdSal, event, txtNoches, lblDiaEnt, lblDiaSal);
        }
    }
   ,

    __FormatoFecha: function(ctrlID, event) {
        var CtrID = $(ctrlID);
        if (CtrID.value != "") {
            try {
                var arrFecha = CtrID.value.split("/");
                _dia = arrFecha[0];
                _mes = arrFecha[1];
                if (arrFecha[2].length == 1) arrFecha[2] = "200" + arrFecha[2];
                if (arrFecha[2].length == 2) arrFecha[2] = "20" + arrFecha[2];
                if (arrFecha[2].length == 3) arrFecha[2] = "2" + arrFecha[2];
                _anio = arrFecha[2];

                if (esFechaCorrecta(_anio, _mes, _dia)) {
                    fecha = new Date(_anio, parseInt(_mes) - 1, _dia);
                    CtrID.value = _dia + "/" + _mes + "/" + _anio;
                }
                else {
                    CtrID.value = "";
                }
            }
            catch (e) {

            }
        }
    }
   ,

    __ActualizaCalSalida: function(CtrID, CtrIDEnt, event, txtNoches, lblDiaEnt, lblDiaSal) {
        if (txtNoches != undefined) {
            _txtNoches = txtNoches;
        }
        if (lblDiaEnt != undefined) {
            _lblDiaEnt = lblDiaEnt;
        }
        if (lblDiaSal != undefined) {
            _lblDiaSal = lblDiaSal;
        }

        _wcFecha = CtrID.substring(0, CtrID.indexOf("_") + 1);
        var mensaje;
        var fecha, fechaEnt;
        CalendarioLib.GestionPet.Init(CtrIDEnt, CtrID);
        _TypeEvent = event.type;
        CtrID = $(CtrID);
        try {
            var arrFecha = CtrID.value.split("/");
            _dia = arrFecha[0];
            _mes = arrFecha[1].indexOf("0") == 0 ? arrFecha[1].substring(1) : arrFecha[1];
            _anio = arrFecha[2];
            fecha = new Date(_anio, parseInt(_mes) - 1, _dia);
            CtrID.value = _dia + "/" + _mes + "/" + _anio;

            arrFecha = $(CtrIDEnt).value.split("/");
            _dia = arrFecha[0];
            _mes = arrFecha[1].indexOf("0") == 0 ? arrFecha[1].substring(1) : arrFecha[1];
            _anio = arrFecha[2];
            fechaEnt = new Date(_anio, parseInt(_mes) - 1, _dia);
        } catch (e) {
        }

        if (Framework.Fecha.checkDate($(CtrID)) && esFecha2aMayor(fechaEnt, fecha)) {
            var txtCal = $(CtrID);
            _paramCal = CompruebaAnio(CtrID.id);
            var isLayerEnt = $(CtrIDEnt).getAttribute('layer') != null;
            if (isLayerEnt) {
                _divcalendar = $(CtrIDEnt).getAttribute('layer');
            }
            var txtCalSal = $(CtrID);
            var isLayerSal = $(CtrID).getAttribute('layer') != null;
            if (isLayerSal) {
                _divcalendar1 = txtCalSal.getAttribute('layer');
            }
            muestraCapaPos(event, _divcalendar1, CtrID);
            var div = $(_divcalendar);
            if (div.style.display == "inline") {
                div.style.display = "none";
            }
            var _iframe = $("iframe_" + _divcalendar);
            if (_iframe != null) _iframe.style.display = "none";
            CtrID = $(CtrID);
            if (CtrID != "undefined" || CtrID != "") {
                if ($(CtrID).id.substr(0, 2) == "Wc") {
                    txtFechaSal = $(CtrID);
                    txtFechaEnt = $(CtrIDEnt);
                } else {
                    txtFechaSal = $(CtrID);
                    txtFechaEnt = $(CtrIDEnt);
                }
            }
            var fecha = $(txtFechaEnt).value;
            var diaent = $(txtFechaEnt);
            var diasal = $(CtrID);
            var dia, mes, anio, diahoy, meshoy, aniohoy;
            var payload = "";
            CalendarioLib.GestionPet._CtrlID = CtrID;
            var Isattr = CtrID.getAttribute("attributo") != null;
            if (Isattr) {
                var attr = CtrID.getAttribute("attributo");
                CalendarioLib.GestionPet._TipoCalendario = attr.substr(attr.lastIndexOf(sepradorIdctl) + 1, 1);
                // jose
                // _txtFechaSal = attr;
            } else {
                CalendarioLib.GestionPet._TipoCalendario = CtrID.id.substr(CtrID.id.lastIndexOf(sepradorIdctl) + 1, 1);
            }
            _TipoCal = CalendarioLib.GestionPet._TipoCalendario;
            var IsdivCal = CtrID.getAttribute("layer") != null;
            if (IsdivCal) {
                divCal = $(CtrID).getAttribute("layer");
                _divcal = $(divCal);
            }
            dia = fecha.substr(0, 2);
            mes = fecha.substr(3, 2);
            anio = fecha.substr(6, 4);
            diahoy = fecha.substr(0, 2) + 1;
            meshoy = fecha.substr(3, 2);
            aniohoy = fecha.substr(6, 4);
            if (Framework.Fecha.checkDate(diasal.value)) {
                diahoy = Framework.Fecha.addZero(diahoy);
                diasal.value = diahoy + "/" + meshoy + "/" + aniohoy;
            }
            payload = "ActualizaCalSal" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + diaent.value + sepParams + diasal.value + sepParams + web + _paramCal;
            CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);
            DiferenciaFechas($(CtrIDEnt), $(CtrID), $(_txtNoches));
        } else {
            $(CtrID).value = ReiniciaFechas("2", $(CtrID), "", $(CtrIDEnt));
            DiferenciaFechas($(CtrIDEnt), $(CtrID), $(_txtNoches));
            return -1;
        }
    },

    __AddDays: function(txt, txt1, txtNoches) // Jose - No entiendo el porqué de pasarle los inputs (objetos)
    {
        CalendarioLib.GestionPet.Init(txt.id, txt1.id);
        _wcFecha = txt.id.substring(0, txt.id.indexOf("_") + 1);
        if (txt.value != "") {
            if (txtNoches != undefined) {
                _txtNoches = txtNoches;
            }
            var dias = $(_txtNoches).value;
            if (dias == "" || dias == "0") {
                dias = 1;
                $(_txtNoches).value = dias;
            }

            _lblDiaEnt = "lblDiaSemanaEnt";
            _lblDiaSal = "lblDiaSemanaSal";
            if ($(_txtNoches).id.indexOf("_") != -1) {
                _lblDiaEnt = _lblDiaEnt + $(_txtNoches).id.substring($(_txtNoches).id.indexOf("_"), $(_txtNoches).id.length);
                _lblDiaSal = _lblDiaSal + $(_txtNoches).id.substring($(_txtNoches).id.indexOf("_"), $(_txtNoches).id.length);
            }

            var payload = "";
            var txtCal = $(txt);
            _TipoCal = "2";
            _divcal = $(_divcalendar1);
            payload = "AddDays" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + parseInt(dias) + sepParams + $(txt).value + sepParams + web + sepParams;
            CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);

            if (_TipoCal == "2") {
                dia = txtCal.value.substr(0, 2);
                mes = txtCal.value.substr(3, 2);
                anio = txtCal.value.substr(6, 4);
                var milisegundos = parseInt(dias * 24 * 60 * 60 * 1000);
                var fecha = new Date(anio, mes - 1, dia);
                fecha.setMilliseconds(milisegundos);
                var fechaTemp = new Date()
                fechaTemp = Framework.Fecha.formatoDate(fecha, "dd/MM/yyyy");
                var dia = fechaTemp.substring(0, fechaTemp.indexOf("/"));

                CalendarioLib.GestionPet._TipoCalendario = "2";
                DevuelveDiaSemana(fecha.getDay(), _TipoCal);
            }
        }
    }
   ,

    __hiddenCal: function(CtrID) {
        var IsdivCal = CtrID.getAttribute("layer") != null;
        if (IsdivCal) {
            divCal = $(CtrID).getAttribute("layer");
            _divcal = $(divCal);
            _divcal.style.display = "none";
        }

    }
   ,

    __ComprobarFecha: function(CtrID) {
        CtrID = $(CtrID);
        var _FechaInput = "";
        var FechaActual = new Date();
        var _dia;
        var _mes;
        var _anio;
        var fecha;

        if (CtrID.value != "") {
            try {
                var arrFecha = CtrID.value.split("/");
                _dia = arrFecha[0];
                _mes = arrFecha[1];
                if (arrFecha[2].length == 1) arrFecha[2] = "200" + arrFecha[2];
                if (arrFecha[2].length == 2) arrFecha[2] = "20" + arrFecha[2];
                if (arrFecha[2].length == 3) arrFecha[2] = "2" + arrFecha[2];
                _anio = arrFecha[2];

                if (esFechaCorrecta(_anio, _mes, _dia)) {
                    fecha = new Date(_anio, parseInt(_mes) - 1, _dia);
                    CtrID.value = _dia + "/" + _mes + "/" + _anio;
                }
                else {
                    CtrID.value = "";
                }
            }
            catch (e) {
                fecha = Framework.Fecha.formatoDate(FechaActual, "dd/MM/yyyy");
                _dia = fecha.substr(0, 2);
                _mes = fecha.substr(3, 2);
                _anio = fecha.substr(6, 4);
                var FechaCompara = new Date(_anio, _mes - 1, _dia);
                if (FechaCompara < FechaActual) {
                    CtrID.value = _dia + "/" + _mes + "/" + _anio;
                }

                CtrID.value = "";
            }
        }
    }
}
;

function HideCal(div) {
    var _div = $(div);
    _div.style.display = "none";
    var _iframe = $("iframe_" + div);
    if (_iframe != null) _iframe.style.display = "none";
}

function muestraCapaPos(event, capaDiv, controlid) {
    var div = $(capaDiv);
    var Isx = div.getAttribute("coordX") != null;
    var Isy = div.getAttribute("coordY") != null;
    var _x, _y;
    if (Isx) {
        _x = div.getAttribute("coordX");
    }
    else {
        _x = 100;
    }
    if (Isy) {
        _y = div.getAttribute("coordY");
    }
    else {
        _y = -6;
    }
    getCoordCursor(event);
    div.style.left = (cursorX - _x) + "px";
    div.style.top = (cursorY - _y) + "px";
    div.style.display = "block";

    var iframe = document.getElementById("iframe_" + capaDiv);
    if (iframe != null) {
        iframe.style.left = (cursorX - _x) + "px";
        iframe.style.top = (cursorY - _y) + "px";
        iframe.style.height = "152px";
        iframe.style.width = "200px";
        iframe.style.display = "block";
    }
}

function hiddenCal(evt) {
    var elem;
    // var coordX = event.clientX + document.body.scrollLeft
    // var coordY = event.clientY + document.body.scrollTop
    // $("coords").value = coordX + "/" + coordY;
    if (evt) {
        elem = (evt.target) ? evt.target : evt.srcElement
    }
    else {
        elem = evt.target;
    }

    if (elem.className == "palette") {
        $("divcalendar").style.display = "none";
    }

}

// Devuelve las coordenadas X e Y del cursor
function getCoordCursor(event) {
    if (navigator.userAgent.indexOf("MSIE") >= 0) {
        cursorX = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
        cursorY = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
    }
    else {
        cursorX = event.clientX + window.scrollX;
        cursorY = event.clientY + window.scrollY;
    }
}

function CompruebaAnio(ctlId) {
    var id = "hidParamsCal_" + ctlId;
    var IsparamsCal = $(id) != null;
    if (IsparamsCal && $(id).value != "") {
        paramCal = sepParams + "anio_" + $F(id);
    }
    else {
        paramCal = sepParams;
    }
    return paramCal;
}

function numerosFecha(evt, idControl) {
    var ok = true;
    var correcto = "0";
    var input = $(idControl);
    var txtTmp = "";
    txtTmp = input.value;

    evt = (evt) ? evt : event;
    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode :
   ((evt.which) ? evt.which : 0));
    ok = charCode <= 13 || (charCode >= 47 && charCode <= 57);


    if (ok) {
        // Han escrito la barra '/'
        if (charCode == 47) {
            /* si han introducido un 0 y seguidamente la barra; borramos el 0 */
            if (txtTmp.indexOf("/") == -1) {
                if (txtTmp.indexOf("0", txtTmp.length - 1) != -1) txtTmp = txtTmp.substring(0, txtTmp.length - 1);
            }
            else {
                if (txtTmp.indexOf("/") != -1 && txtTmp.indexOf("/") == txtTmp.length - 2) {
                    if (txtTmp.indexOf("0", txtTmp.length - 1) != -1) txtTmp = txtTmp.substring(0, txtTmp.length - 1);
                }
            }

            if (txtTmp.indexOf("/", txtTmp.length - 1) != -1) txtTmp = txtTmp.substring(0, txtTmp.length - 1);

            /* * interactDate * * */
            var dat = interactDate(txtTmp);
            var info = dat.split("@");
            correcto = info[0];
            input.value = info[1];

            if (correcto == "0") ok = false;
            else if (correcto == "1") ok = false;
        }
        if (input.value.length == 2 && charCode != 47) {
            if (charCode != 8) {
                var dat = interactDate(txtTmp);
                var info = dat.split("@");
                correcto = info[0];
                input.value = info[1];
                if (correcto == "1") {
                    input.value = input.value + sepradorFecha;
                }
            }
        }
        else if (input.value.length == 5 && charCode != 47) {
            if (charCode != 8) {
                var dat = interactDate(txtTmp);
                var info = dat.split("@");
                correcto = info[0];
                input.value = info[1];
                if (correcto == "1") {
                    input.value = input.value + sepradorFecha;
                }

            }
        }
        else {
            /* if(charCode != 47 && charCode != 8) {
            var dat = interactDate(txtTmp);
            var info = dat.split("@");
            correcto = info[0];
            input.value = info[1];
            } */
        }
    }
    else {
        if (charCode != 8) {
            ok = false;
        }
    }

    return ok;
}

function interactDate(txtTmp) {
    var pares = txtTmp.split("/");
    txtTmp = "";
    var valsCorrect = true;

    for (var i = 0; i < pares.length; i++) {
        valsCorrect = true;
        if (pares[i].length > 0 && pares[i].length <= 2) {
            if (i == 0) {
                if (parseInt(pares[0]) > 31) valsCorrect = false;
            }
            else if (i == 1) {
                if (parseInt(pares[1]) > 12) valsCorrect = false;
            }

            if (valsCorrect) {
                if (pares[i].length == 1) pares[i] = "0" + pares[i];
                txtTmp += pares[i] + "/";
            }
        }

    }

    txtTmp = txtTmp.substring(0, txtTmp.length - 1);
    if (txtTmp.length == 0) {
        txtTmp = "0@";
        // ok = false;
    }
    else {
        txtTmp = "1@" + txtTmp;
    }

    return txtTmp;
}

function DevuelveDiaSemana(day, CalendarId) {
    var payload = "";
    var payload = sepBloc + "DevuelveDiaSemana" + sepParams + day + sepParams + CalendarId;
    CalendarioLib.GestionPet.__EnviaPeticionAjax(payload);
}

function ReiniciaFechas(tipocal, control, i, controlEnt) {
    var fecha;
    if (controlEnt == undefined || controlEnt == null) {
        controlEnt = control;
    }
    if (tipocal == "2") {
        if (i = true) {
            var milisegundos = parseInt(1 * 24 * 60 * 60 * 1000);
            var tempDia = $(controlEnt).value.substr(0, $(controlEnt).value.indexOf("/"));
            var tempMes = $(controlEnt).value.substr($(controlEnt).value.indexOf("/") + 1, $(controlEnt).value.indexOf("/"));
            var tempAnio = $(controlEnt).value.substr($(controlEnt).value.lastIndexOf("/") + 1, $(controlEnt).value.length);
            fecha = new Date(tempAnio, tempMes - 1, tempDia);
            fecha.setMilliseconds(milisegundos);
        }
    } else {
        fecha = new Date();
    }
    return Framework.Fecha.formatoDate(fecha, "dd/MM/yyyy");
}

function DiferenciaFechas(ent, sal, txtDias) {

    //Obtiene los datos del formulario   
    CadenaFecha1 = sal.value; //ent.value;
    CadenaFecha2 = ent.value; //sal.value;

    //Obtiene dia, mes y año   
    var fecha1 = new fecha(CadenaFecha1)
    var fecha2 = new fecha(CadenaFecha2)

    //Obtiene objetos Date   
    var miFecha1 = new Date(fecha1.anio, fecha1.mes, fecha1.dia)
    var miFecha2 = new Date(fecha2.anio, fecha2.mes, fecha2.dia)

    //Resta fechas y redondea   
    var diferencia = miFecha1.getTime() - miFecha2.getTime()
    var dias = Math.floor(diferencia / (1000 * 60 * 60 * 24))
    var segundos = Math.floor(diferencia / 1000)
    txtDias.value = dias;
    //alert ('La diferencia es de ' + dias + ' dias,\no ' + segundos + ' segundos.')   
    return false;
}

function fecha(cadena) {

    //Separador para la introduccion de las fechas   
    var separador = "/"

    //Separa por dia, mes y año   
    if (cadena.indexOf(separador) != -1) {
        var posi1 = 0
        var posi2 = cadena.indexOf(separador, posi1 + 1)
        var posi3 = cadena.indexOf(separador, posi2 + 1)
        this.dia = cadena.substring(posi1, posi2)
        this.mes = cadena.substring(posi2 + 1, posi3)
        this.anio = cadena.substring(posi3 + 1, cadena.length)
    } else {
        this.dia = 0
        this.mes = 0
        this.anio = 0
    }
}

function GetDiasSemana() {
    var lng = getParam("lng");
    var parametros = "Comun" + sepGra + "GetDiasSemana" + sepBloc + lng;
    petiAjaxMain(parametros, RespDias);
}

function RespDias(res) {
    var desglosa = [];
    var filas = [];
    //diaSemana
    //meses
    if (res != "") {
        desglosa = res.split(sepGra);
        for (var x = 0; x < desglosa.length; x++) {
            if (desglosa[x] != "") {
                filas = desglosa[x].split(",");
                for (var y = 0; y < filas.length; y++) {
                    switch (x) {
                        case 1:
                            if (filas[y] != "") {
                                Meses.push(filas[y]);
                            }
                            break;
                        case 2:
                            if (filas[y] != "") {
                                diaSemana.push(filas[y]);
                            }
                            break;

                    }
                }
            }
        }
    }
}

function DevuelveDia(num) {
    if (num == -1) {
        num = 6;
    }
    return diaSemana[num];
}
