var USA_SEARCH_DESTINATION_DEFAULT_TEXT = 'New york, France, Andalucia,  ...';

function initCals() {
   //   YAHOO.util.Dom.get("city").value = USA_SEARCH_DESTINATION_DEFAULT_TEXT;
   init("checkin","checkout",true);
   init("checkout","checkin",false);
}

function init(self,other,before) {
   var cal = new YAHOO.widget.Calendar("cal"+self,"cal"+self+"Container");
   cal.cfg.setProperty('mindate', YAHOO.widget.DateMath.add(new Date(), YAHOO.widget.DateMath.DAY, (before)?0:1));          
   cal.elDate = YAHOO.util.Dom.get(self);
   cal.elOtherDate = YAHOO.util.Dom.get(other);
   cal.isBefore = before;
   cal.over = false;
   cal.selectEvent.subscribe(getDate, cal, true);
   cal.renderEvent.subscribe(setupListeners, cal, true);
   YAHOO.util.Event.addListener(cal.elDate, 'focus', showCal,cal);
   YAHOO.util.Event.addListener(cal.elDate, 'blur', hideCal,cal);
   YAHOO.util.Event.addListener('img'+cal.elDate.name, 'click', function(){cal.elDate.focus()});
   cal.render();
}

function setupListeners(type,args,cal) {
   YAHOO.util.Event.addListener('cal'+this.elDate.name+'Container', 'mouseover', function (){cal.over = true;});
   YAHOO.util.Event.addListener('cal'+this.elDate.name+'Container', 'mouseout', function (){cal.over = false;});
}   

function getDate(type,args,cal) {
   var newDate = args[0][0];
   calDate = newDate[1]+'/'+newDate[2]+'/'+newDate[0];
   cal.elDate.value = calDate;
   cal.over = false;
   cal.hide();
   
   //sincronizzo l'altra data
   syncDates(cal);
}

function showCal(e,cal) {
   var curDate = cal.elDate.value;
   
   if (!isNaN(Date.parse(curDate))) {
      cal.cfg.setProperty('selected', curDate);
      
      //Si assume la stringa del formato dd/mm/yyyy
      var dy = curDate.substring(1+curDate.indexOf("/"));
      cal.cfg.setProperty("pagedate", 
    		  curDate.substring(0,curDate.indexOf("/")) + 
    		  dy.substring(dy.indexOf("/")));
      
      cal.render();         
   }
	
   
   cal.show();
   var xy = YAHOO.util.Dom.getXY(cal.elDate);
   xy[1] = xy[1] + 25;
   YAHOO.util.Dom.setXY('cal'+cal.elDate.name+'Container',xy);
         
}

function hideCal(e,cal) {
   if (!cal.over) {
      cal.hide(); 
   }
}

function syncDates(cal) {
   var curDate = new Date(cal.elDate.value);
   var curOtherDate = new Date(cal.elOtherDate.value);
   if(curOtherDate == 'Invalid Date') {
      curOtherDate = YAHOO.widget.DateMath.add(curDate, YAHOO.widget.DateMath.DAY, (cal.isBefore)?1:-1);
   } else {
      if(cal.isBefore && !YAHOO.widget.DateMath.before(curDate, curOtherDate)) {
         curOtherDate = YAHOO.widget.DateMath.add(curDate, YAHOO.widget.DateMath.DAY, 1);            
      } else if(!cal.isBefore && !YAHOO.widget.DateMath.after(curDate, curOtherDate)) {
         curOtherDate = YAHOO.widget.DateMath.add(curDate, YAHOO.widget.DateMath.DAY, -1);
      }
   }
   cal.elOtherDate.value = YAHOO.util.Date.format(curOtherDate, {format:'MM/DD/YYYY'});
}

YAHOO.util.Event.onDOMReady(initCals);

function execSearch(q, url) {
  if (typeof window.track_home_search_widget == 'function') {
     var form = document.getElementById("vSearch");
     window.track_home_search_widget(q, form.ac_text.value);
  }
  window.location = url;
}

function doHPUSASubmit()
{
   var q = buildQueryObj();
   delete q.pname;
   var form = document.getElementById("vSearch");
   
   var city_entered = USA_city_entered(form.city.value);
   var dates_entered = false;
   
   var b_widget_search_notext = ( form.widget_search_notext != undefined && form.widget_search_notext.value == 1 );
   
   
   if (form.checkin){

      var date_control = true;
      var checkinDate = new Date(form.checkin.value);
      var checkoutDate = new Date(form.checkout.value);      
                 
      if (form.checkin.value != 'mm/dd/yyyy' && form.checkout.value != 'mm/dd/yyyy'){
         dates_entered = true;
      
         if(checkinDate == 'Invalid Date') {
            alert(err_wrong_ci_date);
            date_control = false;
         } else if(checkoutDate == 'Invalid Date') {
	         alert(err_wrong_co_date);
	         date_control = false;
	      }          
         
         if (CheckPR(form)) {        
            if (!b_widget_search_notext){   
               if (!city_entered) {
                  date_control = city_entered;
                  alert(err_textcity);
               }
            }
            
            if(date_control) {
                  date_control = USA_myCheckDate(checkinDate,checkoutDate,form.pval.value,form.rval.value);
            }            
         } else {
            date_control = false;
         }
         
      }else{
         if (b_widget_search_notext){
            alert(err_checkin_checkout);
            date_control = false;
         }else {
            if (!city_entered){
               EraseCookies();
               alert(err_textcity);
               date_control = false;
            }
         }
      }

      if( date_control ) {
         
         // build an javascript object with all parameters on query string
         if(dates_entered) {
            q.sd = padZero(String(checkinDate.getDate()));
            q.sm = padZero(String(checkinDate.getMonth()+1));
            q.sy = checkinDate.getFullYear();
            q.ed = padZero(String(checkoutDate.getDate()));
            q.em = padZero(String(checkoutDate.getMonth()+1));
            q.ey = checkoutDate.getFullYear();
	         q.pval = form.pval.value;
	         q.rval = form.rval.value;
         }
         
         if (!(b_widget_search_notext)){
            if( city_entered )    q.city   = form.city.value.replace(/[\',\\]/g," "); else delete q.city;
            if( !empty(form.geoid.value) )   q.geoid  = form.geoid.value; else delete q.geoid;
            if( !empty(form.lg.value) )      q.lg     = form.lg.value; else delete q.lg;
         }
         
         if (b_widget_search_notext){
        	    execSearch(q, form.action + buildQueryStr(q));
         }else{
        	    execSearch(q, "http://www.venere.com/site/index.php" + buildQueryStr(q));
         }
      }

   }else{
      
      if(city_entered) {
         // build an javascript object with all parameters on query string
   
         if( city_entered )    q.city   = form.city.value.replace(/[\',\\]/g," "); else delete q.city;
         if( !empty(form.geoid.value) )   q.geoid  = form.geoid.value; else delete q.geoid;
         if( !empty(form.lg.value) )      q.lg     = form.lg.value; else delete q.lg;
   
         execSearch(q, "http://www.venere.com/site/index.php" + buildQueryStr(q));
      }

   }
   
}

function USA_set_cookies_onsubmit (checkinDate,checkoutDate,pval,rval){
   sd = String(checkinDate.getDate());
   if(sd.length==1) sd = '0'+sd;
   sm = String(checkinDate.getMonth()+1);
   if(sm.length==1) sm = '0'+sm;
   sy = checkinDate.getFullYear();
   
   ed = String(checkoutDate.getDate());
   if(ed.length==1) ed = '0'+ed;   
   em = String(checkoutDate.getMonth()+1);
   if(em.length==1) em = '0'+em;   
   ey = checkoutDate.getFullYear();
   
   smy = sm+'/'+sy;
   emy = em+'/'+ey;
   
   setAvailabilityCookies(sd,smy,ed,emy,pval,rval);
}

function USA_CheckDate(checkinDate,checkoutDate) {

   var today = new Date();
   today.setHours(0,0,0,0);

   if (typeof(err_wrong_ci_date) != 'string') {
      err_wrong_ci_date = 'The check-in date you entered is not valid.';
   }
   if (typeof(err_wrong_co_date) != 'string') {
      err_wrong_co_date = 'The check-out date you entered is not valid.';
   }
   if (typeof(err_wrong_ci_90max) != 'string') {
      err_wrong_ci_90max = 'The maximum length of your stay cannot exceed 90 days.';
   }
   if (typeof(err_co_before_ci) != 'string') {
      err_co_before_ci = 'The check-in date must be before the check-out date.';
   }
   if (typeof(err_room_le_person) != 'string') {
      err_room_le_person = 'Number of persons must be greater or equal of number of rooms';
   }
   if (typeof(err_person_number) != 'string') {
      err_person_number = 'Please specify the number of persons';
   }
   if (typeof(err_room_number) != 'string') {
      err_room_number = 'Please specify the number of rooms';
   }
   
   //check-in
   var start_day     = checkinDate.getDate();
   var start_month   = checkinDate.getMonth()+1;
   var start_year    = checkinDate.getFullYear();

   //check-out
   var end_day       = checkoutDate.getDate();
   var end_month     = checkoutDate.getMonth()+1;
   var end_year      = checkoutDate.getFullYear();

   //check-in wrong date
   if (  (start_day == 31 && ((start_month == 4) || (start_month == 6) || (start_month == 9) || (start_month == 11))) 
      || ((start_day > 29) && (start_month == 2))
      || ((start_year %4 != 0) && (start_month == 2) && (start_day > 28))) {
      alert(err_wrong_ci_date);
      return false;
   } 
   
   if (YAHOO.widget.DateMath.before(checkinDate, today)){ //check-in before today
      alert(err_wrong_ci_date);
      return false;
   }

   //check-out wrong date
   if (  (end_day == 31) && ((end_month == 4) || (end_month == 6) || (end_month == 9) || (end_month == 11))
      || ((end_day > 29) && (end_month == 2)) 
      || ((end_year %4 != 0) && (end_month == 2) && (end_day > 28))) {
      alert(err_wrong_co_date);
      return false;
   } 
   
   // extra check on start - end date range       
   var maxCheckoutDate = YAHOO.widget.DateMath.add(checkinDate, YAHOO.widget.DateMath.MONTH, 3);
   
   if(YAHOO.widget.DateMath.after(checkoutDate, maxCheckoutDate)) { //max 3 month reservation
      alert(err_wrong_ci_90max);
      return false;
   } 
   
   if(YAHOO.widget.DateMath.before(checkoutDate, checkinDate)) { //check-out date before check-in date
      alert(err_co_before_ci);
      return false;
   }

   return true;
}

function USA_myCheckDate(checkinDate,checkoutDate,pval,rval)
{
   if (USA_CheckDate(checkinDate,checkoutDate)) {
      USA_set_cookies_onsubmit (checkinDate,checkoutDate,pval,rval);
      return true;
   }else {
      return false;
   }
}

function USA_city_entered(city) {
   if(empty(city) || city == USA_SEARCH_DESTINATION_DEFAULT_TEXT) {
      return false;
   }
   return true;
}
