// -- for Internet Explorer - stops background flickering --//
   /*@cc_on 
	@if (@_win32)
	try {
	  document.execCommand('BackgroundImageCache', false, true);
	} catch(e) {}
	@end
@*/
// -- addLoadEvent function from http://simonwillison.net --//
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

//---- DROPDOWN LIST SYNC ----//
addLoadEvent(filterDestinations);
function hideOpt(opt,select){
  //var opt = document.getElementById(id);
  var sel = select;
  opt && sel && sel.appendChild(opt.cloneNode(true));
}

function showOpt(opt,select){ 
  var dest = select;//document.getElementById('ctl00_FindHotel1_fDestinationselect');
  if (opt) {
    if (dest) {
      dest.appendChild(opt.cloneNode(true));
    }
  }
} 

function moveSelectOption(select,selectcopy,start1,start2) {
    selectcopy.options.length=start2;
    for(i=start1;i<select.length;i++)
	{  //ignore the first please select
       hideOpt(select.options[i],selectcopy);
	}
	select.options.length=start1;
}
function findByValue(select,value){
    var valueToSelect = value;
    var mySelect = select;
    for (var index = 0, roof = mySelect.options.length; index < roof; index++) {
       if (valueToSelect == mySelect.options[index].value) {
          return mySelect.options[index];
       }
    }
}
function filterDestinations(){
    
        if (typeof cIdTempSelectArrayId != 'undefined') 
            {for (var index = 0, roof = cIdTempSelectArrayId.length; index < roof; index++)
                {subFilterDestinations(cIdTempSelectArrayId[index][0],cIdTempSelectArrayId[index][1],cIdTempSelectArrayId[index][2]);}
        } 
    
}

function subFilterDestinations(tempId,mainSelect,subSelect){
  var temp = document.getElementById(tempId);
  var country,dest,selectedValue,mainS,subS;
  
  if (temp) if (mainSelect) country = document.getElementById(mainSelect);
  if (temp) if (mainSelect) dest = document.getElementById(subSelect);
  
  if (temp && country && dest) {
      selectedValue=dest.options[dest.selectedIndex].value;
      if (temp.length == 0 ) moveSelectOption(dest,temp,1,0);
      dest.options.length=1;
      if (country) {
        for (var currObj in CountrySlhDest){
           if (CountrySlhDest[currObj][country.value]) {showOpt(findByValue(temp,CountrySlhDest[currObj][country.value]),dest);}
        }
        if (country.selectedIndex==0) {moveSelectOption(temp,dest,0,1);}
        if (dest.options.length == 1 && (dest.options[0].text=='Please Choose' || dest.options[0].text=='-- Not Applicable --')) dest.options[0].text = '-- Not Applicable --'; else if (dest.options[0].text=='Please Choose' || dest.options[0].text=='-- Not Applicable --') dest.options[0].text='Please Choose';
      }
      var obj=findByValue(dest, selectedValue)
      if (obj) obj.setAttribute('selected',true);  
   }
}






//---- RESERVATION DROPDOWNS ----//  
function unSelect(dropdownId) {
    //selects the first element of a dropdown list
    if (document.getElementById(dropdownId)) { document.getElementById(dropdownId).selectedIndex = 0; }
}

//---- DATEPICKER ----//   

addLoadEvent(function() {
    if (document.getElementById("sd")) {
        //datePickerController(window, 'load', initialiseInputs);
        initialiseInputs();
    }

});

function makeTwoChars(inp) {
    return String(inp).length < 2 ? "0" + inp : inp;
}

function initialiseInputs() {
    // Clear any old values from the inputs (that might be cached by the browser after a page reload)
    document.getElementById("sd").value = "dd/mm/yyyy";
    document.getElementById("ed").value = "dd/mm/yyyy";

    // Add the onchange event handler to the start date input
    document.getElementById("sd").onchange = setReservationDates;

    //and end date
    document.getElementById("ed").onchange = setReservationDates;

    //setLowRangeToBeSixWeeksAfterToday();
}
function setLowRangeToBeSixWeeksAfterToday() {
    if (!("sd" in datePickerController.datePickers)) {
        setTimeout("setLowRangeToBeSixWeeksAfterToday()", 50);
        return;
    }

    var dt = new Date();
    dt.setDate(dt.getDate() + (6 * 7));

    var stringDt = dt.getFullYear() + String(makeTwoChars(dt.getMonth())) + makeTwoChars(dt.getDate());

    datePickerController.datePickers["sd"].setRangeLow(stringDt);
    datePickerController.datePickers["ed"].setRangeLow(stringDt);
}

function setReservationDates(e) {


    // Check the associated datePicker object is available (be safe)
    if (!("sd" in datePickerController.datePickers)) {
        document.getElementById("noOfNightsSpan").innerHTML = "--";
        return;
    }

    // Check the value of the input is a date of the correct format
    var dt = datePickerController.dateFormat(this.value, datePickerController.datePickers["sd"].format.charAt(0) == "m");

    // If the input's value cannot be parsed as a valid date then return
    if (dt == 0) {
        document.getElementById("noOfNightsSpan").innerHTML = "--";
        setDateDiff(e);
        return;
    }

    // Grab the value set within the endDate input and parse it using the dateFormat method
    // N.B: The second parameter to the dateFormat function, if TRUE, tells the function to favour the m-d-y date format
    var edv = datePickerController.dateFormat(document.getElementById("ed").value, datePickerController.datePickers["ed"].format.charAt(0) == "m");

    // Grab the end date datePicker Objects
    var ed = datePickerController.datePickers["ed"];

    //Set low range to be alway connected to the start date
    var lr = datePickerController.dateFormat(document.getElementById("sd").value, datePickerController.datePickers["sd"].format.charAt(0) == "m");
    var sdd;
    if (lr.length == 8) {
        sdd = new Date(lr.substring(0, 4), lr.substring(4, 6) - 1, lr.substring(6, 8));
        sdd.setTime(sdd.getTime() + (1000 * 24 * 60 * 60)); //add a day
        lr = sdd.getFullYear().toString() + LZ((sdd.getMonth() + 1).toString()) + LZ(sdd.getDate().toString());
        if (dt != 0) { ed.setRangeLow(lr); }
    }
    // If theres a value already present within the end date input and it's smaller than the start date
    // then clear the end date value
    if (edv < dt) {
        document.getElementById("ed").value = "";
        document.getElementById("noOfNightsSpan").innerHTML = "--";
    }

    var sdv = datePickerController.dateFormat(document.getElementById("sd").value, datePickerController.datePickers["sd"].format.charAt(0) == "m");

    //if date is ok, try to count the days and fill the span
    //if(document.getElementById("noOfNightsSpan")) {
    //        document.getElementById("noOfNightsSpan").innerHTML = (edv-sdv);
    //}
    setDateDiff(e);
}

function LZ(x) { return (x < 0 || x > 9 ? "" : "0") + x }

function setDateDiff(e) {

    var sdv = datePickerController.dateFormat(document.getElementById("sd").value, datePickerController.datePickers["sd"].format.charAt(0) == "m");
    var edv = datePickerController.dateFormat(document.getElementById("ed").value, datePickerController.datePickers["ed"].format.charAt(0) == "m");

    // Check the associated datePicker object is available (be safe)
    if (!("sd" in datePickerController.datePickers || sdv == 0)) {
        document.getElementById("noOfNightsSpan").innerHTML = "--";
        return;
    }
    if (!("ed" in datePickerController.datePickers || edv == 0)) {
        document.getElementById("noOfNightsSpan").innerHTML = "--";
        return;
    }
    var sdd, edd;
    if (sdv == edv) {
        document.getElementById("ed").value = "";
        document.getElementById("noOfNightsSpan").innerHTML = "--";
        return;
    }

    if (sdv.length == 8) { sdd = new Date(sdv.substring(0, 4), sdv.substring(4, 6) - 1, sdv.substring(6, 8)); }
    if (edv.length == 8) { edd = new Date(edv.substring(0, 4), edv.substring(4, 6) - 1, edv.substring(6, 8)); }

    //if date is ok, try to count the days and fill the span
    if (document.getElementById("noOfNightsSpan")) {
        //document.getElementById("noOfNightsSpan").innerHTML = (edv-sdv);
        var one_day = 1000 * 60 * 60 * 24;

        //Calculate difference btw the two dates, and convert to days
        var daysspan = Math.ceil((edd - sdd) / one_day);
        if (daysspan > 0) { document.getElementById("noOfNightsSpan").innerHTML = daysspan; } else { document.getElementById("noOfNightsSpan").innerHTML = "--"; }

    }
}