﻿// Archivo JScript

// User Changeable Vars
var HighlightToday  = true;    // use true or false to have the current day highlighted
var DisablePast    = true;    // use true or false to allow past dates to be selectable
var MonthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");

// Global Vars
var now = new Date();
var dest = null;
var ny = now.getFullYear(); // Today's Date
var nm = now.getMonth();
var nd = now.getDate();
var sy = 0; // currently Selected date
var sm = 0;
var sd = 0;
var y = now.getFullYear(); // Working Date
var m = now.getMonth();
var d = now.getDate();
var l = 0;
var t = 0;
var MonthLengths = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var minDate = new Date(y,m,d);

/*
  Function: GetDate(control)

  Arguments:
    control = ID of destination control
*/
function GetDate(objeto) {
  EnsureCalendarExists();
  DestroyCalendar();
  // One arguments is required, the rest are optional
  // First arguments must be the ID of the destination control
  /*if(arguments[0] == null || arguments[0] == "") {
    // arguments not defined, so display error and quit
    alert("ERROR: Destination control required in funciton call GetDate()");
    return;
  } else {
    // copy argument
    dest = arguments[0];
  }*/
  dest = document.getElementById(objeto);
  y = now.getFullYear();
  m = now.getMonth();
  d = now.getDate();
  sm = 0;
  sd = 0;
  sy = 0;
  var cdval = dest.value;
  if(/\d{1,2}.\d{1,2}.\d{4}/.test(dest.value)) {
    // element contains a date, so set the shown date
    var vParts = cdval.split("/"); // assume mm/dd/yyyy
    sm = vParts[0] - 1;
    sd = vParts[1];
    sy = vParts[2];
    m=sm;
    d=sd;
    y=sy;
  }
  
//  l = dest.offsetLeft; // + dest.offsetWidth;
//  t = dest.offsetTop - 125;   // Calendar is displayed 125 pixels above the destination element
//  if(t<0) { t=0; }      // or (somewhat) over top of it. ;)

  /* Calendar is displayed 125 pixels above the destination element
  or (somewhat) over top of it. ;)*/
  l = dest.offsetLeft + dest.offsetParent.offsetLeft+300;
  t = dest.offsetTop+280;
  if(t < 0) t = 0; // >
  // si el campo de fecha regreso es el seleccionado, no podra seleccionar fechas menores a la fecha de salida
  if (dest == document.getElementById("fecha_reg")){
      var fecha = document.getElementById("fecha_sal").value;
      var mes = fecha.substring(0,fecha.indexOf("/"));
      var dia = fecha.substring(fecha.indexOf("/")+1,fecha.lastIndexOf("/"));
      var ano = fecha.substring(fecha.lastIndexOf("/")+1);
      //alert(mes + " / " + dia + " / " + ano);
      //mes = mes.valueOf();
      if (mes == 0) mes = 11; 
      else mes--;
      //alert((mes) + " / " + dia + " / " + ano);
      minDate.setYear(ano);
      minDate.setMonth(mes);
      minDate.setDate(dia);
      //alert(minDate);
      // se repite esto por que por algnua razon, a veces no pone bien la fecha limite
      minDate.setYear(ano);
      minDate.setMonth(mes);
      minDate.setDate(dia);
      //alert(minDate);
  }
  else
  {
        //pongo el valor de fecha minimo a ayer, para poder elegir el dia de hoy
        now.setDate(now.getDate()-1);
        minDate.setYear(now.getFullYear());
        minDate.setMonth(now.getMonth());
        minDate.setDate(now.getDate());
        //regreso el valor de la fecha actual al original
        now.setDate(now.getDate()+1);
        //alert(minDate);
  }
  DrawCalendar();
}

/*
  function DestoryCalendar()
  
  Purpose: Destory any already drawn calendar so a new one can be drawn
*/
function DestroyCalendar() {
  var cal = document.getElementById("dpCalendar");
  if(cal != null) {
    cal.innerHTML = null;
    cal.style.display = "none";
  }
  return
}

function DrawCalendar() {
  DestroyCalendar();
  cal = document.getElementById("dpCalendar");
  cal.style.left = l + "px";
  cal.style.top = t + "px";
  
  var sCal = "<table><tr><td class=\"cellButton\"><a href=\"javascript: PrevMonth();\" title=\"Previous Month\">&lt;&lt;</a></td>"+
    "<td class=\"cellMonth\" width=\"80%\" colspan=\"5\">"+MonthNames[m]+" "+y+"</td>"+
    "<td class=\"cellButton\"><a href=\"javascript: NextMonth();\" title=\"Next Month\">&gt;&gt;</a></td></tr>"+
    "<tr><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td></tr>";
  var wDay = 1;
  var wDate = new Date(y,m,wDay);
  if(isLeapYear(wDate)) {
    MonthLengths[1] = 29;
  } else {
    MonthLengths[1] = 28;
  }
  var dayclass = "";
  var isToday = false;
  for(var r=1; r<7; r++) {
    sCal = sCal + "<tr>";
    for(var c=0; c<7; c++) {
      var wDate = new Date(y,m,wDay);
      //alert(wDate + "\n" + minDate);
      if(wDate.getDay() == c && wDay<=MonthLengths[m]) {
        if(wDate.getDate()==sd && wDate.getMonth()==sm && wDate.getFullYear()==sy) {
          dayclass = "cellSelected";
          isToday = true;  // only matters if the selected day IS today, otherwise ignored.
        } else if(wDate.getDate()==nd && wDate.getMonth()==nm && wDate.getFullYear()==ny && HighlightToday) {
          dayclass = "cellToday";
          isToday = true;
        } else {
          dayclass = "cellDay";
          isToday = false;
        }
        if(minDate < wDate){
            if(((now > wDate) && !DisablePast ) || (now <= wDate) || isToday) { // >
                // user wants past dates selectable
                sCal = sCal + "<td class=\""+dayclass+"\"><a href=\"javascript: ReturnDay("+wDay+");\">"+wDay+"</a></td>";
            } else {
                // user wants past dates to be read only
                sCal = sCal + "<td class=\""+dayclass+"\">"+wDay+"</td>";
            }
        } else {
            // user wants past dates to be read only
            sCal = sCal + "<td class=\""+dayclass+"\">"+wDay+"</td>";
        }
        wDay++;
      } else {
        sCal = sCal + "<td class=\"unused\"></td>";
      }
    }
    sCal = sCal + "</tr>";
  }
  sCal = sCal + "<tr><td colspan=\"4\" class=\"unused\"></td><td colspan=\"3\" class=\"cellCancel\"><a href=\"javascript: DestroyCalendar();\">Cancel</a></td></tr></table>"
  cal.innerHTML = sCal; // works in FireFox, opera
  cal.style.display = "inline";
}

function PrevMonth() {
  m--;
  if(m==-1) {
    m = 11;
    y--;
  }
  DrawCalendar();
}

function NextMonth() {
  m++;
  if(m==12) {
    m = 0;
    y++;
  }
  DrawCalendar();
}

function ReturnDay(day) {
    // si la fecha seleccionada es la de salida, la de regreso no podra ser menor, y la cambiará
  if (dest == document.getElementById("fecha_sal")){
      var fech_sal = new Date(y,m,day);

      //aunque el campo de fecha_reg esté vacio, la fecha que se creará sera la mas pequeña que puede encontrar con valores nulos
      var fech = document.getElementById("fecha_reg").value;
      mes = fech.substring(0,fech.indexOf("/"));
      dia = fech.substring(fech.indexOf("/")+1,fech.lastIndexOf("/"));
      ano = fech.substring(fech.lastIndexOf("/")+1);
      if (mes == 0) mes = 11; 
      else mes--;
      var fech_reg = new Date(ano,mes,dia);
      //alert(m + ":" + y + ":" + day + " " + fech + " fecha_sal: " + fech_sal + " " + fech_reg);
      
      //si la fecha de salida es mayor al regreso, cambia la fecha de regreso a un dia despues de la fecha de salida
      if (fech_sal >= fech_reg){
        fech_sal.setDate(fech_sal.getDate()+1);
        document.getElementById("fecha_reg").value = (fech_sal.getMonth()+1) + "/" + (fech_sal.getDate()) + "/" + fech_sal.getFullYear();
      }
  }
  cDest = document.getElementById(dest);
  dest.value = (m+1)+"/"+day+"/"+y;
  DestroyCalendar();
  calcula_noches();
  borra_div_tarifas();//borra los campos de las tarifas
}

function EnsureCalendarExists() {
  if(document.getElementById("dpCalendar") == null) {
    var eCalendar = document.createElement("div");
    eCalendar.setAttribute("id", "dpCalendar");
    document.body.appendChild(eCalendar);
  }
}

function isLeapYear(dTest) {
  var y = dTest.getYear();
  var bReturn = false;
  
  if(y % 4 == 0) {
    if(y % 100 != 0) {
      bReturn = true;
    } else {
      if (y % 400 == 0) {
        bReturn = true;
      }
    }
  }
  
  return bReturn;
}

function calcula_noches()
{
    var fech = document.getElementById("fecha_reg").value;
    mes = fech.substring(0,fech.indexOf("/"));
    dia = fech.substring(fech.indexOf("/")+1,fech.lastIndexOf("/"));
    ano = fech.substring(fech.lastIndexOf("/")+1);
    if (mes == 0) mes = 11; 
    else mes--;
    var fech_reg = new Date(ano,mes,dia);

    fech = document.getElementById("fecha_sal").value;
    mes = fech.substring(0,fech.indexOf("/"));
    dia = fech.substring(fech.indexOf("/")+1,fech.lastIndexOf("/"));
    ano = fech.substring(fech.lastIndexOf("/")+1);
    if (mes == 0) mes = 11; 
    else mes--;
    var fech_sal = new Date(ano,mes,dia);
    
    var num_noches = fech_reg - fech_sal;
    
    document.getElementById("noches").value = Math.round(num_noches / 86400000);
}

function calcula_regreso()
{
    if (document.getElementById("noches").value != "" && document.getElementById("fecha_sal").value != "")
    {
        var salida = document.getElementById("fecha_sal").value;
        mes = salida.substring(0,salida.indexOf("/"));
        dia = salida.substring(salida.indexOf("/")+1,salida.lastIndexOf("/"));
        ano = salida.substring(salida.lastIndexOf("/")+1);
        
        var regreso = new Date(ano,mes,dia);
        regreso.setDate(regreso.getDate() + parseInt(document.getElementById("noches").value));
        
        //alert(regreso.getMonth() + "/" + regreso.getDate() + "/" + regreso.getFullYear());
        document.getElementById("fecha_reg").value = regreso.getMonth() + "/" + regreso.getDate() + "/" + regreso.getFullYear();
    }
}