

function getForm()
{
    
                    return document.SearchResultsForm;
                
}

function trim(value){
  return value.replace(/^\s+|\s+$/,'');
}

function populatePuDate(dropList)
{
  var form = getForm();

  //if month selected is a month gone, select next year as the year.
  if(dropList != null && dropList == 'puMonth')
  {
    var date = new Date();

    if(form.puMonth.value < date.getMonth()+1)
    {
      form.puYear.value = Number(date.getFullYear())+1;

      dropList = 'puYear';
    }

    populateDaysOfMonth(form.puDay, getForm().puMonth.value - 1, getForm().puYear.value);
  }

  if(isPuAfterDo(form))
  {
    fixDoDate(form, dropList);
  }

//  getForm().doDay.selectedIndex=getForm().puDay.selectedIndex;
//  getForm().doMonth.selectedIndex=getForm().puMonth.selectedIndex;
//  getForm().doYear.selectedIndex=getForm().puYear.selectedIndex;
}

function populateDoDate(dropList)
{
  var form = getForm();

  if(dropList != null && dropList != 'doDay')
  {
      //if month selected is a month gone, select next year as the year.
      if(dropList == 'doMonth')
      {
        var date = new Date();
        if(form.doMonth.value < date.getMonth()+1)
        {
          form.doYear.value = Number(date.getFullYear())+1;

          dropList = 'doYear';
        }

        populateDaysOfMonth(form.doDay, form.doMonth.value - 1, form.doYear.value);
      }

      if(isPuAfterDo(form))
      {
        fixPuDate(form, dropList);
      }
  }
}

function populateDaysOfMonth(dayNode, monthInt, yearInt)
{

  var selectedDay = dayNode.value;
  var newDate = new Date(yearInt, monthInt, 1, 1, 1, 1, 0);
  var newOptionNode;

  var nextDate = new Date(yearInt, monthInt + 1, 1, 1, 1, 1, 0);
  nextDate.setTime(nextDate.getTime() - 86400000);
  var lastDay = nextDate.getDate();
  var daySelected = false;

  //remove all children (options) of the dayNode
  while(dayNode.hasChildNodes())
  {
    dayNode.removeChild(dayNode.lastChild);
  }

  //add days for selected month
  while(newDate.getMonth() == monthInt)
  {

        var dayString = newDate.getDate();

        if(newDate.getDate() < 10)
    {
            dayString = "0"+dayString;
    }

    optionNode = document.createElement("option");
    optionNode.setAttribute("value", newDate.getDate());
    var inHtml = document.createTextNode(dayString);
    optionNode.appendChild(inHtml);

    if((newDate.getDate() == selectedDay || newDate.getDate() == lastDay) && ! daySelected)
    {
        optionNode.setAttribute("selected", "selected");
     daySelected = true;
    }
    dayNode.appendChild(optionNode);

    newDate.setTime(newDate.getTime() + 86400000);
  }

  dayNode.parentNode.normalize();
}

function isPuAfterDo(searchForm)
{
  var puDate = new Date(searchForm.puYear.value, searchForm.puMonth.value-1, searchForm.puDay.value, 12, 0);
  var doDate = new Date(searchForm.doYear.value, searchForm.doMonth.value-1, searchForm.doDay.value, 12, 0);

  return puDate.valueOf() > doDate.valueOf();
}

function setPuMultipleValues(y,m,d) {
    getForm().puDay.value=d;
    getForm().puMonth.value=m;
    getForm().puYear.value=LZ(y);
}

function setDoMultipleValues(y,m,d) {
    getForm().doDay.value=d;
    getForm().doMonth.value=m;
    getForm().doYear.value=LZ(y);
}

function validateSearchResultsForm(searchForm){
    /* searchForm.action=searchForm.action+"?puDay="+searchForm.puDay.value+"&location="+searchForm.location.value+"&dropLocation="+searchForm.dropLocation.value+"&driversAge="+searchForm.driversAge.value+"&puMonth="+searchForm.puMonth.value+"&puYear="+searchForm.puYear.value+"&doDay="+searchForm.doDay.value+"&doMonth="+searchForm.doMonth.value+"&doYear="+searchForm.doYear.value+"&puHour="+searchForm.puHour.value+"&puMinute="+searchForm.puMinute.value+"&doHour="+searchForm.doHour.value+"&doMinute="+searchForm.doMinute.value; */
    var errors = "";

    errors = validateDriversAge(searchForm.driversAge, "Age du conducteur", errors);

    
        errors = validateMandatoryDroplist(searchForm.country, "Le pays de prise en charge", errors);
    

    errors = validateMandatoryDroplist(searchForm.city, "La ville de prise en charge ", errors);

    
        errors = validateMandatoryDroplist(searchForm.location, "Le lieu de prise en charge", errors);
    

    var puSameAsDo = false;

    try
    {
       if(searchForm.puSameAsDo.checked)
       {
          puSameAsDo = true;
       }
    }
    catch(e){}

    if(! puSameAsDo)
    {
        
            errors = validateMandatoryDroplist(searchForm.dropCountry, "Le pays de restitution", errors);
        
        errors = validateMandatoryDroplist(searchForm.dropCity, "La ville de restitution", errors);

        
            errors = validateMandatoryDroplist(searchForm.dropLocation, "Lieu de restitution :", errors);
        
    }

    errors = validateDate(searchForm.puYear.value, searchForm.puMonth.value-1, searchForm.puDay.value, "La date de prise en charge", errors);
    errors = validateDate(searchForm.doYear.value, searchForm.doMonth.value-1, searchForm.doDay.value, "La date de restitution", errors);
    errors = validateDates(searchForm,
                searchForm.puYear.value, searchForm.puMonth.value-1, searchForm.puDay.value, searchForm.puHour.value, searchForm.puMinute.value, "La date de prise en charge",
                searchForm.doYear.value, searchForm.doMonth.value-1, searchForm.doDay.value, searchForm.doHour.value, searchForm.doMinute.value, "La date de restitution", errors);

    errors = validateCutOffDate(searchForm.puYear.value, searchForm.puMonth.value-1, searchForm.puDay.value, "La date de prise en charge", errors);

    if(errors==""){
        return true;
    } else {
        alert(errors);
        return false;
    }
}

function validateFreeTextSearchResultsForm(searchForm){
    var errors = "";
    if(searchForm.puSearchInput.value == ""){
        errors = errors + "lieu de location" + " doit être précisé\n";
    }
    if($("#not_return_on_off").is(":checked")){
      if(searchForm.doSearchInput.value == ""){
        errors = errors + "???fr_rc.de.searchPanel.text.rcdroplocation???" + " doit être précisé\n";
      }
    }
    errors = validateDriversAge(searchForm.driversAge, "Age du conducteur", errors);
    errors = validateDate(searchForm.puYear.value, searchForm.puMonth.value-1, searchForm.puDay.value, "La date de prise en charge", errors);
    errors = validateDate(searchForm.doYear.value, searchForm.doMonth.value-1, searchForm.doDay.value, "La date de restitution", errors);

    if (searchForm.twelveHrPuTime != null) {
    errors = validateRcDates(searchForm,
                searchForm.puYear.value, searchForm.puMonth.value-1, searchForm.puDay.value, searchForm.twelveHrPuTime.selectedIndex, "La date de prise en charge",
                searchForm.doYear.value, searchForm.doMonth.value-1, searchForm.doDay.value, searchForm.twelveHrDoTime.selectedIndex, "La date de restitution", errors);
    }
    if(searchForm.puYear.value != "" && searchForm.puMonth.value != "" && searchForm.puDay.value != ""){
        errors = validateCutOffDate(searchForm.puYear.value, searchForm.puMonth.value-1, searchForm.puDay.value, "La date de prise en charge", errors);
    }

    if($('#return_on_off').is(':checked')){
        $('input[name=dropCoordinates]').val($('input[name=coordinates]').val());
    }

    if(errors==""){
        return true;
    } else {
        alert(errors);
        return false;
    }
}

function validateMandatoryDroplist(droplist, name,  errors){
    if(droplist.value=="" || droplist.value==0){
        errors = errors + name + " doit être précisé\n";
    }
    return errors;
}

function validateRcDates(searchForm, yearFrom, monthFrom, dayFrom, timeFrom, nameFrom, yearTo, monthTo, dayTo, timeTo, nameTo, errors){
    var date = new Date();
    var puTimeString = searchForm.twelveHrPuTime.options[searchForm.twelveHrPuTime.selectedIndex].value;
    var puHour = getHourFromTwelveHrString(puTimeString);
    var puMin = getMinFromTwelveHrString(puTimeString);

    var doTimeString = searchForm.twelveHrDoTime.options[searchForm.twelveHrDoTime.selectedIndex].value;
    var doHour = getHourFromTwelveHrString(doTimeString);
    var doMin = getMinFromTwelveHrString(doTimeString);

    var dateFrom = new Date(yearFrom, monthFrom, dayFrom, puHour, puMin, 0, 0);
    var dateTo = new Date(yearTo, monthTo, dayTo, doHour, doMin, 0, 0);
    var nowDate = new Date();

    var doDateBeforePuDate = dateFrom.valueOf() > dateTo.valueOf();
    date.setTime(date.getTime() + (86400000 * 2));
    var defaultPuDate = new Date();
    defaultPuDate.setTime(defaultPuDate.getTime() + (86400000 * 2));

   	if(doDateBeforePuDate)
   	{
      errors = errors + nameFrom + " doit être antérieur à " + nameTo + "\n";
    }
    else if(dateFrom.valueOf() == dateTo.valueOf() && (timeTo - timeFrom) < 2)
    {
        errors = errors + " Il doit y avoir au moins une heure entre la prise en charge et la restitution\n";
    }

    if($("body").data('offset') != ""){
        timestamp = parseInt($("body").data('serverTime'))+(parseInt($("body").data('offset'))*3600000);
        var currenLocalTime = new Date(timestamp);
        var puDate = new Date(yearFrom, monthFrom, dayFrom,getHourFromTwelveHrString(searchForm.twelveHrPuTime.value),getMinFromTwelveHrString(searchForm.twelveHrPuTime.value));
        if((puDate.getTime() - currenLocalTime.getTime())/3600000 <= 1){
            errors = errors + " l'heure du retrait du vehicule doit être au moins 1 heure dans le futur\n";
        }
    }
    return errors;
}

function updatePuDate(searchForm, timeFrom)
{
    var times = ['1:00 pm','1:00 p.m.','1:00 p','1:00pm',
          '1:00p.m.','1:00p','1 pm','1 p.m.','1 p','1pm','1p.m.', '1p','13:00','13'];

    for ( var i = 0; i < times.length; i++ ) {
      var d = new Date();
      var time = times[i].match(/(\d+)(?::(\d\d))?\s*(p?)/);
      d.setHours( parseInt(time[1]) + (time[3] ? 12 : 0) );
      d.setMinutes( parseInt(time[2]) || 0 );
      alert( d );
    }
}

function validateDates(searchForm, yearFrom, monthFrom, dayFrom, hourFrom, minuteFrom, nameFrom, yearTo, monthTo, dayTo, hourTo, minuteTo, nameTo, errors){
    var index = searchForm.elements["city"].selectedIndex;
    var offset = searchForm.elements["city"].options[index].getAttribute("timezone");
    var tz = fetchTimeZone(offset);
    var date = new Date();
    var dateFrom = new Date(yearFrom, monthFrom, dayFrom, hourFrom, minuteFrom, 0);
    var dateTo = new Date(yearTo, monthTo, dayTo, hourTo, minuteTo, 0);
    var nowDate = new Date();

    // get dst offset
    if(tz != '') {
	    var dst = nowDate.getTimezoneOffset();
	    var timeLocal = nowDate.getTime() + (dst*60*1000) + (tz * 3600000);
	    nowDate = new Date(timeLocal);
	}
    var doDateBeforePuDate = dateFrom.valueOf() > dateTo.valueOf();
    date.setTime(date.getTime() + (86400000 * 2));
    var defaultPuDate = new Date();
    defaultPuDate.setTime(defaultPuDate.getTime() + (86400000 * 2));

    if(dateFrom.valueOf() < nowDate.valueOf()){
        errors = errors + nameFrom + " est antérieur à la date d'aujourd'hui\n";
    }
    if((dateFrom.getTime() - nowDate.getTime()) < 3600000)
    {
        errors = errors + " l'heure du retrait du vehicule doit être au moins 1 heure dans le futur\n";
    }

    if(doDateBeforePuDate){
        errors = errors + nameFrom + " doit être antérieur à " + nameTo + "\n";
    }
    else if((dateTo - dateFrom) < 3600000)
    {
        errors = errors + " Il doit y avoir au moins une heure entre la prise en charge et la restitution\n";
    }

    return errors;
}

function fetchTimeZone(offset){
	var tz = "";
	if(offset){
		var index = offset.indexOf("GMT");
		if(index != -1) {
			var tz = offset.substring(index + 3);
		}
	}
	return tz;

}

function validateDate(year, month, day, name, errors){
    if(!isValidDate(year, month, day)){
        errors = errors + name + " n'est pas une date valide\n";
    }
    return errors;
}

function validateCutOffDate(year, month, day, name, errors){
    var cutOffDate = new Date(2005, 11, 28);
    var newDate = new Date(year, month, day);
    if(cutOffDate.valueOf()>newDate.valueOf()){
        errors = errors + "la date de prise en charge doit &ecirc;tre avant le 27 D&eacute;cembre 2005\n";
    }
    return errors;
}
function isValidDate(year, month, day){
    var tempDate = new Date(year, month, day);
    var tempYear = tempDate.getYear()<2000?tempDate.getYear()+1900:tempDate.getYear();
    return (tempYear==year && tempDate.getMonth()==month && tempDate.getDate()==day);
}

function isNumeric(sText){
   var validChars  = "0123456789";
   var returnValue = true;
   var currentChar;

   for (var i = 0; i < sText.length && returnValue == true; i++) {
      currentChar = sText.charAt(i);
      if (validChars.indexOf(currentChar) == -1) {
         returnValue = false;
      }
   }
   return returnValue;
}

function validateDriversAge(driversAge, name, errors){
    
    var minDriversAge = 20;
    var maxDriversAge = 99;

    if(driversAge.value==""){
        errors = errors + name + " doit être précisé\n";
    }
    else if(!isNumeric(driversAge.value))
    {
        errors = errors + name + " doit être un numéro\n";
    } else if(driversAge.value < minDriversAge) {
        errors = errors + name + " doit être au moins " + minDriversAge + "\n";
    } else if(parseInt(driversAge.value,10) > maxDriversAge) {
        errors = errors + name + " ne doit pas être supérieur à " + maxDriversAge + "\n";
    }
    return errors;
}


function headingClick(checkbox, options, index){
    var element = document.getElementById(options);
    if(checkbox.checked==true){
        element.style.display='none';
        var i=0;
        while(true){
            var subelem = document.getElementById("optionCB" + index + ":" + i++);
            if(subelem==null || i>100)
                break;
            subelem.checked = false;
        }
    } else {
        element.style.display='';
    }
}

function disableSearchResultsForm(isDisabled){
    if(isDisabled){
        
            getForm().country.disabled=isDisabled;
        
        getForm().city.disabled=isDisabled;
        
            getForm().location.disabled=isDisabled;
        
            getForm().dropCountry.disabled=isDisabled;
        
        getForm().dropCity.disabled=isDisabled;
        
            getForm().dropLocation.disabled=isDisabled;
        
    }
    getForm().puDay.disabled=isDisabled;
    getForm().puMonth.disabled=isDisabled;
    getForm().puYear.disabled=isDisabled;
    getForm().puHour.disabled=isDisabled;
    getForm().puMinute.disabled=isDisabled;

    getForm().doDay.disabled=isDisabled;
    getForm().doMonth.disabled=isDisabled;
    getForm().doYear.disabled=isDisabled;
    getForm().doHour.disabled=isDisabled;
    getForm().doMinute.disabled=isDisabled;
}


function ptSetup()
{
    var e;
    
    e = document.getElementsByName('promoLoc5162');
    for(var i=0; i < e.length; i++) {
        e[i].disabled = !(((!(0))&&((0+1)))&&(((true||false)&&(true&&false))||((true||false)&&(1))));
    }
    
    e = document.getElementsByName('promoCountry7923');
    for(var i=0; i < e.length; i++) {
        e[i].disabled = !((((0)||(false||false))||((!false)&&(false&&true)))||(((false&&true)&&(1))&&(!(0))));
    }
    
    e = document.getElementsByName('promoCity3797');
    for(var i=0; i < e.length; i++) {
        e[i].disabled = !((!((true||false)&&(true||false)))&&(((1/1)*(1))));
    }
    
    e = document.getElementsByName('promoAge1176');
    for(var i=0; i < e.length; i++) {
        e[i].disabled = !((((0)&&(true||false))||((false||false)&&(!false)))&&((!(false||false))||((0*true))));
    }
    
}
function makeUrl(start, parameters)
{
    var url = start;
    for(var i=0; i < parameters.length; i++)
    {
        if(i==0){
            url += "?";
        }else{
            url += "&";
        }
        url += parameters[i][0] + "=" + parameters[i][1];
    }
    return url;
}

function makeDynaDroplistUrl(dropList, serverUrl)
{
    var debug="";
    if(debug!=""){
        disableSearchResultsForm(true);
    }

    var dynaParams = new Array();

    
    dynaParams[dynaParams.length] = new Array("formName", "");

    
    dynaParams[dynaParams.length] = new Array("currentForm", "");

    
            dynaParams[dynaParams.length] = new Array("country", getForm().country.value);
            if(dropList!="country"){
                dynaParams[dynaParams.length] = new Array("city", getForm().city.value);
                if(dropList!="city"){
                    dynaParams[dynaParams.length] = new Array("location", getForm().location.value);
                    if(dropList!="location"){
                        dynaParams[dynaParams.length] = new Array("dropCountry", getForm().dropCountry.value);
                        if(dropList!="dropCountry"){
                            dynaParams[dynaParams.length] = new Array("dropCity", getForm().dropCity.value);
                            if(dropList!="dropCity"){
                                dynaParams[dynaParams.length] = new Array("dropLocation", getForm().dropLocation.value);
                                if(dropList!="puYear"){
                                    dynaParams[dynaParams.length] = new Array("puYear", getForm().puYear.value);
                                    if(dropList!="puMonth"){
                                        dynaParams[dynaParams.length] = new Array("puMonth", getForm().puMonth.value);
                                        if(dropList!="puDay"){
                                            dynaParams[dynaParams.length] = new Array("puDay", getForm().puDay.value);
                                            if(dropList!="puHour"){
                                                dynaParams[dynaParams.length] = new Array("puHour", getForm().puHour.value);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        

    /* Add debug parameter */
    if(debug!=""){
        dynaParams[dynaParams.length] = new Array("debug", "true");
    }

    dynaParams[dynaParams.length] = new Array("dropdownName", dropList);

    /* Get IE Version number */
    var ua = navigator.userAgent;
    var MSIEOffset = ua.indexOf("MSIE ");
    var IEVerNum=6;
    if (MSIEOffset != -1){
        IEVerNum=parseFloat(ua.substring(MSIEOffset + 5, ua.indexOf(";", MSIEOffset)));
    }

    if (IEVerNum<5.5)
    {
        /* Encode each parameter */
        for(var i=0; i < dynaParams.length; i++)
        {
            dynaParams[i][1] = escape(dynaParams[i][1]);
        }
    }

    var serverPart = "";
    if(serverUrl!=null){
        serverPart = serverUrl;
    }

    
            var dynaURL = makeUrl(serverPart+"/DynaDroplist.do", dynaParams);
        

    if(IEVerNum >= 5.5)
    {
        /* encode whole url */
        dynaURL = encodeURI(dynaURL);
    }

    /* Show url to debug */
    if(debug!=""){
        alert(dynaURL);
    }

    return dynaURL;
}

function populateDroplists(dropList, serverUrl)
{
    if(typeof ClickTaleExec=='function')
        ClickTaleExec("populateDroplists(document.getElementById('" + dropList + "'))");
    var dynaURL = makeDynaDroplistUrl(dropList, serverUrl);

    document.getElementById("dynaFrame").src = dynaURL;
}

function populateSecureDroplists(dropList, serverUrl)
{
    var dynaURL = makeDynaDroplistUrl(dropList, serverUrl);

    var response=makeRequest(dynaURL);
    eval(response);
}

function makeRequest(url)
{
    var req=false;
    var returnValue = "";
    if(window.XMLHttpRequest) {
     try {
            req = new XMLHttpRequest();
        } catch(e) {
            req = false;
        }
    } else if(window.ActiveXObject) {
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
       } catch(e) {
            try {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                req = false;
            }
 }
    }
    if(req){
        req.open("GET", url, false);
        req.send(null);
        if (req.readyState==4) {
            returnValue = req.responseText;
        }
    }
    return returnValue;
}
function addOption(droplist, name, value){
    droplist.options[droplist.options.length] = new Option(name, value);
}

function fixDoDate(form, dropList)
{
    var nowDate = new Date();

    if(dropList != null)
    {
        if(dropList == 'puYear')
        {
            form.doYear.options[form.puYear.value -nowDate.getFullYear()].selected = true;

            dropList = 'puMonth';
        }

        if(dropList == 'puMonth' && isPuAfterDo(form))
        {
            form.doMonth.options[form.puMonth.value - 1].selected = true;

            dropList = 'puDay';
        }

        if(dropList == 'puDay' && isPuAfterDo(form))
        {
            var newDate = new Date(form.puYear.value, form.puMonth.value-1, form.puDay.value, form.puHour.value, form.puMinute.value);
            newDate.setTime(newDate.getTime() + (86400000 * 3));

            if(newDate.getFullYear() > (nowDate.getFullYear() + 1))
            {
              newDate.setTime(newDate.getTime() - (86400000 * 3));
            }

            form.doDay.options[newDate.getDate() - 1].selected = true;
            form.doMonth.options[newDate.getMonth()].selected = true;
            form.doYear.options[newDate.getFullYear() - nowDate.getFullYear()].selected = true;
        }

        populateDaysOfMonth(form.doDay, form.doMonth.value - 1, form.doYear.value);

    }
}

function fixPuDate(form, dropList)
{
    var nowDate = new Date();

    if(dropList != null)
    {
        if(dropList == 'doYear')
        {
            form.puYear.options[form.doYear.value - nowDate.getFullYear()].selected = true;

            dropList = 'doMonth';
        }

        if(dropList == 'doMonth' && isPuAfterDo(form))
        {
            form.puMonth.options[form.doMonth.value - 1].selected = true;

            dropList = 'doDay';
        }

        if(dropList == 'doDay' && isPuAfterDo(form))
        {
            var newDate = new Date(form.doYear.value, form.doMonth.value-1, form.doDay.value, form.doHour.value, form.doMinute.value);
            newDate.setTime(newDate.getTime() - (86400000 * 3));

            if(newDate.getFullYear() < nowDate.getFullYear())
            {
              newDate.setTime(newDate.getTime() + (86400000 * 3));
            }

            form.puDay.options[newDate.getDate() - 1].selected = true;
            form.puMonth.options[newDate.getMonth()].selected = true;
            form.puYear.options[newDate.getFullYear() - nowDate.getFullYear()].selected = true;
        }

        populateDaysOfMonth(form.puDay, form.puMonth.value - 1, form.puYear.value);
    }
}

function getHourFromTwelveHrString(timeString)
{
    if(timeString.indexOf("Midi") != -1 ){
        return "12";
    }
    if(timeString.indexOf("Minuit") != -1 ){
        return "0";
    }
    var indexOfColon = timeString.indexOf(':');
    var hour = parseInt(timeString.substring(0, indexOfColon));
    if(timeString.indexOf("PM")!=-1){
        hour += 12;
        if(hour >= 24){
            hour = 0;
        }
    }
    return hour;
}

function getMinFromTwelveHrString(timeString)
{
    if(timeString.indexOf("Midi") != -1 || timeString.indexOf("Minuit") != -1){
        return "00";
    }
    var indexOfColon = timeString.indexOf(':');
    return timeString.substring(indexOfColon +1, indexOfColon+3);
}
