﻿// JScript File
var arrDateId;
var depDateId;
var numNightsId;

var nightsMinValue;
var nightsMaxValue;
var controlType;

//Function to initialize the Control Ids
function storeControlId(strArrDateId,strDepDateId,strNumNightsId,strControlType,nightMinVal,nightMaxVal)
{
    arrDateId   = strArrDateId;
    depDateId   = strDepDateId;
    numNightsId = strNumNightsId;
    
    nightsMinValue = nightMinVal;
    nightsMaxValue = nightMaxVal;
    controlType = strControlType;
}

//Function to manipulate the date according to the Arrival, NoofNights and Departure dates
function showDate()
{
    //storeControlId();
    var ctrlArrivalDate;
    var ctrlDepartureDate;
    var ctrlNoOfNights;
    
    var currentArrivalDate;
    var currentNumberOfNights;
    var currentDepartureDate;
    
    var newDepartureDate;
    var newNumberOfNights;
    
    if(controlType && document.getElementById(arrDateId) && document.getElementById(depDateId) && document.getElementById(numNightsId))
    {
        // Create an instance for Arrival and Departure Date
        ctrlArrivalDate = GetDateControlInstance(arrDateId);
        ctrlDepartureDate = GetDateControlInstance(depDateId);
        // End
        
        // Create an instance for Number of Nights
        ctrlNoOfNights = document.getElementById(numNightsId);
        // End
        
        // Initialize values
        currentArrivalDate = ctrlArrivalDate.GetSelectedDate();
        currentNumberOfNights = GetNumberOfNights(ctrlNoOfNights);
        currentDepartureDate = ctrlDepartureDate.GetSelectedDate();

        oldDepartureDate = eval(oldDepartureDate);
        // End
        
        // Check, which element has raised the event.
        if((currentDepartureDate.getTime() != oldDepartureDate.getTime() && currentNumberOfNights == oldNumberOfNights))
        {
            // Manipulate number of nights
            newNumberOfNights = days_between(currentDepartureDate,currentArrivalDate);
        }
        else
        {
            // Manipulate departure date
            var modifiedMinDate = addDays(currentArrivalDate,nightsMinValue);
            var modifiedMaxDate = addDays(currentArrivalDate,nightsMaxValue);
            
            var modifiedMinimumDate = ctrlDepartureDate.FormatDate(modifiedMinDate.getFullYear(),modifiedMinDate.getMonth(),modifiedMinDate.getDate());
            var modifiedMaximumDate = ctrlDepartureDate.FormatDate(modifiedMaxDate.getFullYear(),modifiedMaxDate.getMonth(),modifiedMaxDate.getDate());
            
            RegisterModifiedDateRange(ctrlDepartureDate.id,modifiedMinimumDate,modifiedMaximumDate);
            if(controlType == "DropdownCalendar" || controlType == "DropdownControl")
            {
                ctrlDepartureDate.SetDateRange(ctrlDepartureDate,modifiedMinDate,modifiedMaxDate);
            }
            newDepartureDate = addDays(currentArrivalDate,currentNumberOfNights);
            if(newDepartureDate.getTime() > ctrlDepartureDate.GetMaximumDate(ctrlDepartureDate).getTime())
            {
                newDepartureDate = ctrlDepartureDate.GetMaximumDate(ctrlDepartureDate);
                newNumberOfNights = 0;
            }
            if(newDepartureDate.getTime() <= currentArrivalDate.getTime())
            {
                newNumberOfNights = 0;
            }
            ctrlDepartureDate.SetSelectedDate(ctrlDepartureDate,newDepartureDate);
        }
            oldDepartureDate = (newDepartureDate) ? newDepartureDate : currentDepartureDate;
            newNumberOfNights = oldNumberOfNights = (newNumberOfNights) ? newNumberOfNights : currentNumberOfNights;
            SetNumberOfNights(ctrlNoOfNights,newNumberOfNights);
    }
}

function GetDateControlInstance(controlId)
{
    if(controlId)
    {
        if(controlType == "DropdownCalendar")
        {
            return CreateDropdownCalendar(controlId);
        }
        else if(controlType == "DropdownControl")
        {
            return CreateDropDown(controlId);
        }
        else
        {
            return CreateCalendar(controlId);
        }
    }
}

function SetNumberOfNights(controlId,value)
{
    if(controlId)
    {
        var ctrlNoNights = controlId;
        if(ctrlNoNights.type == 'select-one')
        {
            for (var i=0; i<ctrlNoNights.length;i++)
            {
                if(ctrlNoNights.options[i].value ==  value)
                {
                    ctrlNoNights.options[i].selected=true;
                    break;
                } 
            }
        }
        else
        {
            ctrlNoNights.value = value;
        }
    }
}

function GetNumberOfNights(controlId)
{
    var nightsValue = 0;
    if(controlId)
    {
       var ctrlNoNights = controlId;
       if (ctrlNoNights.type == 'select-one')
       {    
            nightsValue = ctrlNoNights.options[ctrlNoNights.selectedIndex].value;
       }
       else
       {
            if(ctrlNoNights.value != "")
            {
                nightsValue = window.event.keyCode > 0 && window.event.keyCode < 37 || isNaN(ctrlNoNights.value) ? 0 : parseInt(ctrlNoNights.value);
            }
            else
            {
                nightsValue = 0;
            } 
       }
       if(nightsValue < parseInt(nightsMinValue) || nightsValue > parseInt(nightsMaxValue) || nightsValue == 0)
       {
            nightsValue = nightsMaxValue;
       }
   }
   return nightsValue;
}

function RegisterModifiedDateRange(controlId,minDate,maxDate)
{
    var departureDateId = controlId;
    if(document.getElementById(departureDateId + "_minValue"))
    {
        var hdnNewValues = document.getElementById(departureDateId + "_minValue");
    }
    else
    {
        var hdnNewValues = document.createElement("input");
        with(hdnNewValues)
        {
            type = "hidden";
            id = departureDateId + "_minValue";
        }
        document.body.appendChild(hdnNewValues);        
    }
    hdnNewValues.value = "var modifiedValues = new Array('" + minDate + "','" + maxDate + "');";
}

