﻿// 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();
      _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();
      _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 + sepParams + _paramCal;
      }
      else
      {
         payload = "PrevMonth" + sepParams + _divcal.id + sepParams + txtCal.id + sepParams + _TipoCal + sepParams + sepParams + sepParams +  _mes + sepParams + _anio +  sepParams + web + sepParams + _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();
              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 + sepParams;
                        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();
            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 +  sepParams;
            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()
{
   var IsparamsCal = $("hidParamsCal") != null;
   if(IsparamsCal && $("hidParamsCal").value != "")
   {
      paramCal = sepParams + "anio_" +  $F("hidParamsCal");
   }
   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];
}