// Need utilities.js
  
$(document).ready(function() {          
  // set the events
  $('input[name=hotelCheckIn]').bind(
    'dpClosed', function(e, selectedDates) {
      var checkInText = selectedDates[0];
      if (checkInText) {
        var d = new Date(checkInText);
        var $secondCalendar = $('input[name=hotelCheckOut]');
        $secondCalendar.dpSetStartDate(d.addDays(1).asString());
        $secondCalendar.dpSetEndDate(d.addDays(reh.data.hotelMaxNights-1).asString());
        $secondCalendar.datePicker().val(d.addDays(2-reh.data.hotelMaxNights).asString());
        //reh.displayNightNr();
      }
    }
  );
  
  $('input[name=hotelCheckOut]').bind('change', function(event) {
    //reh.displayNightNr();
  });

  $('select[name=hotelRoomNr]').bind('change', function(event) {
    reh.populateRoomInfo(false);
  });
  /*
  $('input[name=hotelCheckOut]').bind(
    'dpClosed', function(e, selectedDates) {
      var d = selectedDates[0];
      if (d) {
        d = new Date(d);
        $('input[name=hotelCheckIn]').dpSetEndDate(d.addDays(-1).asString());
      }
    }
  );
  */
  $.cookie('waitPageVisited', 'N', { expires: 1, path: '/' });
});
  
function HotelSearch(){
  this.options = {'doModal':2};
  this.msg = new Array();
}

HotelSearch.prototype.populateRoomInfo = function(refresh) {
  var roomNr = $('select[name=hotelRoomNr] option:selected').val();
  var buf = new StringBuffer(1024);
  var startPos = refresh? 0 : this.getDisplayedRoomNr(); //alert('startPos='+startPos)
  for(var i=startPos; i<roomNr; i++) {
    buf.append(this.buildRoomDetails(i, refresh));
  }
  if(refresh) {
    $('#room-details-block').html(buf.toString());
  }
  else {
    if(startPos>roomNr) {
      while(startPos>roomNr) {
        startPos--;
        $(this.getRoomRowId(startPos)).remove();
      }
    }
    else {
      $('#room-details-block').append(buf.toString());
    }
  }
}
  
HotelSearch.prototype.getRoomRowId = function(index) {
  var position = index+1;
  var name = '#room'+position+'-block';
  return name;
}
  
HotelSearch.prototype.getDisplayedRoomNr = function() {
  var maxRooms = this.data.hotelMaxRooms;
  var result=0;
  for(var i=0; i<maxRooms; i++){
    var name = this.getRoomRowId(i);
    if($(name).length==0){
      break;
    }
    else {
      result = i+1;
    }
  }
  return result;
}
  
HotelSearch.prototype.buildRoomDetails = function(roomIndex, refresh) {
  var roomNr = roomIndex+1;
  var rooms = this.rooms.length;
  var useData = rooms>=roomNr; //alert('useData='+useData)
  
  var defaultAdults = this.data.hotelDefaultAdults;
  var minAdults = this.data.hotelMinAdults;
  var maxAdults = this.data.hotelMaxAdults;
  
  var defaultChildren = this.data.hotelDefaultChildren;
  var minChildren = this.data.hotelMinChildren;
  var maxChildren = this.data.hotelMaxChildren;
  
  var defaultChildren = this.data.hotelDefaultChildren;
  var minChildren = this.data.hotelMinChildren;
  var maxChildren = this.data.hotelMaxChildren;
  
  var adults = useData? this.rooms[roomIndex].adults : defaultAdults;
  var children = useData? this.rooms[roomIndex].children : defaultChildren;
  
  var buf = new StringBuffer(512);
  buf.append('<div id="room'+roomNr+'-block" class="deals-form-holder">\n');
  buf.append('<div class="deals-form-field">\n');
  buf.append('Adults <br/>in room '+roomNr+':<br/>\n');
  buf.append(this.buildSelectOneCtr('room'+roomNr+'adults', 'number', adults, '', minAdults, maxAdults));
  buf.append('</div>\n');
  buf.append('<div class="deals-form-field">\n');
  buf.append('Children<br/>in room '+roomNr+':<br/>\n');
  buf.append(this.buildSelectOneCtr('room'+roomNr+'children', 'number', children, 'onChange="reh.childrenChanged('+roomNr+')"', minChildren, maxChildren));
  buf.append('</div>\n');
  buf.append('<span id="room'+roomNr+'-age-block">\n');
  if(refresh) { 
    buf.append(this.populateChildAges(roomNr, children, refresh));
  }
  buf.append('</span>\n');
  buf.append('<div class="clear"></div><!--DO NOT DELETE-->\n');
  buf.append('</div><!--deals-form-holder-->\n');
  return buf.toString();
}
  
HotelSearch.prototype.getAgeId = function(roomNr, childIndex) {
  var childPos = childIndex+1;
  var name = '#room'+roomNr+'age'+childPos;
  return name;
}
  
HotelSearch.prototype.getDisplayedAgeNr = function(roomNr) {
  var maxAge = this.data.hotelMaxChildren;
  var result=0;
  for(var i=0; i<maxAge; i++){
    var name = this.getAgeId(roomNr, i);
    if($(name).length==0){
      break;
    }
    else {
      result = i+1;
    }
  }
  return result;
}
  
HotelSearch.prototype.childrenChanged = function(roomNr) {
  var name = 'room'+roomNr+'children';
  var children = $('select[name='+name+'] option:selected').val();
  this.populateChildAges(roomNr, children, false);
}
  
HotelSearch.prototype.populateChildAges = function(roomNr, children, refresh) {
  //alert('Inside populateChildAges with roomNr='+roomNr+', and children='+children+', refresh='+refresh);
  var defaultChildAge= this.data.hotelDefaultChildAge;
  var minChildAge= this.data.hotelMinChildAge;
  var maxChildAge = this.data.hotelMaxChildAge;
  var rooms = this.rooms.length;
  var kids = (rooms>=roomNr)? this.rooms[roomNr-1].ages.length: 0;
  var useData = (refresh && kids>=children)? true : false;
  var buf = new StringBuffer(1024);
  var startPos = refresh? 0 : this.getDisplayedAgeNr(roomNr);
  for(var i=startPos; i<children; i++) {
    var position = i+1;
    var controlName = 'room'+roomNr+'age'+position;
    var childAge = useData? this.rooms[roomNr-1].ages[i] : defaultChildAge;
    //alert('useKids='+useData+', childAge='+childAge )
    buf.append('<div class="deals-form-field" id="'+controlName+'-block">\n');
    buf.append('Age of<br/>child #'+position+':<br/>\n');
    buf.append(this.buildSelectOneCtr(controlName, 'select-box-small', childAge, 'onChange="reh.ageChanged('+roomNr+','+i+')"', minChildAge, maxChildAge)+'\n');
    buf.append('</div>\n');
  }
  if(refresh) {
    return buf.toString();
  }
  else {
    if(startPos>children) {
      while(startPos>children) {
        startPos--;
        $(this.getAgeId(roomNr, startPos)+'-block').remove();
      }
    }
    else {
      $('#room'+roomNr+'-age-block').append(buf.toString());
    }
  }
}
  
HotelSearch.prototype.ageChanged = function(roomNr, ageIndex) {
  // alert('roomNr='+roomNr+', ageIndex='+ageIndex)
}

HotelSearch.prototype.buildSelectOneCtr = function(name, klass, val, fun, startVal, endVal) {
  var con = new StringBuffer();
  con.append('\n<select name="'+name+'" id="'+name+'" class="'+klass+'"  '+fun+'>');
  for(var i=startVal; i<endVal+1; i++) {
    var sel = (val==i)? " selected": "";
    con.append('\n<option value="'+i+'"'+sel+'>'+i+'</option>');
  }  
  con.append('\n</select>');  
  return con.toString();
}

HotelSearch.prototype.validateAge = function(ctr, index) {
  var nr = $(ctr).attr('value');
  var isOk = this.isValidNumber(nr, this.minAge, this.maxAge);
  if( isOk ) {
    this.ages[index]=nr;
  }
  else {
    alert(this.msg['childAge']+(index+1)+this.msg['age1']+" "+this.minAge+this.msg['age2']+" "+this.maxAge+this.msg['age3']);
  }
  return isOk;
}

HotelSearch.prototype.isValidNumber = function(num, min, max) {
  var isOk = false;
  if( !isNaN(num) ) {
    var number = num*1;
    isOk = number>=min && number<=max;
  }
  return isOk;
}

HotelSearch.prototype.displayNightNr = function() {
  var sta = $('input[name=hotelCheckIn]').attr('value');
  var end = $('input[name=hotelCheckOut]').attr('value');
  var d1 = d2 = null;
  try { 
    d1 = new Date(sta);
    d2 = new Date(end);
  }
  catch(e) {
    // ignore on purpose
  }
  if( d1!=d2 && d1.getTime()<d2.getTime() ) {
    var diff = Math.floor((d2.getTime()-d1.getTime())/(1000 * 60 * 60 * 24));
    $('#nights-nr-block').html("("+diff+"-night"+((diff>1)? 's' : '')+" stay)")
  }
  else {
    $('#nights-nr-block').html("");
  }
}

HotelSearch.prototype.unload = function() {
  GUnload();  // map memory release
}
  
  
