$(document).ready(function(){

  //this function for page pre reserve
  if( $("input#reservation_begin_date" ).val() != "" )
    notSaturday();
    
  $('#indicator').dialog({
    autoOpen: false,
    modal: true,
    draggable: false,
    minHeight: 50,
    midWidth: 250,
    resizable: false,
    closeOnEscape: false,
    open: function(event, ui) { $(this).parent().children().children('.ui-dialog-titlebar-close').hide(); }
  });
    
    
  $('.birthdate_el').live("change",function(){
	  var parent = $(this).parent();
	  var day = parent.find('input[id*="_birthday"]').val();
	  var month = parent.find('select[id*="_birthmonth"]').val();
	  var year = parent.find('input[id*="_birthyear"]').val();
	  parent.find('input[id*="_birthdate"]').val(day + "/" + month + "/" + year);
  });
    
  $("#customer_request_call_back").click(function() {
    update_request_call_back();
  });
  
  $('.plus').click(function(){
	  var valueElement = $(this).prev();
	  var value = valueElement.val();
	  if(isNaN(value) || value >= 99){
		  valueElement.val(1);
	  } else {
		  valueElement.val(++value);
	  }
  });
  $('.minus').click(function(){
	  var valueElement = $(this).next();
	  var value = valueElement.val();
	  if(isNaN(value) || value <= 0){
		  valueElement.val(0);
	  } else {
		  valueElement.val(--value);
	  }
  });
  
  
  $("#box_product_desc").dialog({
      autoOpen: false
      ,title: "Description"
      ,draggable: false
      ,resizable:false
      ,modal: true
      ,width: 500
      ,buttons:{
        Close: function(){
        $(this).dialog("close");
        }
       } 
  });
  
  
  $(".show_product_desc").live("click", function(){
     
     var the_id = $(this).attr("id");
     //$("#"+the_id).addClass("loading_gif");
     //$("#"+the_id).removeClass("loading_gif");
     
     $('#'+the_id).qtip({
       overwrite: false,
       position: {
          my: 'bottom left',
          at: 'top right',
          adjust: {
              x: -3,
              y: -5
           },
        },
        show: {
          event: 'click',
          ready: true
        },
        hide: {
          event: 'mouseleave',
          distance: '15',
          inactive: 5000
        },
        style: {
          classes: 'ui-tooltip-plain tool-tip-reservation ui-tooltip-rounded ui-tooltip-product' ,
          width: 'auto'
        },
        content: {
          text: MSG_0001, // The text to use whilst the AJAX request is loading
          ajax: {
             type: "POST",
             dataType: 'json',
             url: $('input#url_show_product_desc').val(),
             data: { product_id : $(this).attr("id")},
             success: function(data)
             {
                this.set('content.text', data);
             },
             error: function (data){
               $("#"+the_id).removeClass("loading_gif");
             }
          }
       }
    });


  });
  
});

function update_request_call_back()
{
/*  if($("#customer_request_call_back:checked").val() != undefined )
  {
    $('#customer_paymentType').removeClass('required')
    $("#customer_paymentType").attr('disabled','disabled');
  }
  else
  {
    $('#customer_paymentType').addClass('required')
    $("#customer_paymentType").removeAttr('disabled');
  }*/
}

function updateHeightOfFrame()
{
  
}

function showLoading()
{
  //this for handling overlapping comobobox in ie6
  if ($.browser.msie && $.browser.version == 6)
    $("select").hide();
  $('#indicator').dialog( 'open' );

}
function hideLoading()
{
 //this for handling overlapping comobobox in ie6
  if ($.browser.msie && $.browser.version == 6)
    $("select").show();
  $('#indicator').dialog( 'close' );
 
}
      
function notSaturday(){
  var date = $("input#reservation_end_date" );
  var date_str = new String($("input#reservation_begin_date" ).val());
  var year  = parseInt(date_str.substr(0,4), 10);
  var month = parseInt(date_str.substr(5,2), 10) - 1;
  month = (month <= 9)?"0" + month: month;
  var day   = parseInt(date_str.substr(8,2), 10) + (parseInt($("#the_duration_number_nights").val(), 10) );
  day = (day <= 9)?"0" + day: day;
  var date_end = new Date(year, month, day, 0, 0, 0);
  
  var new_date = date_end.getDate() ;
  new_date = (new_date <= 9)?"0" + new_date: new_date;
  var new_month =  (date_end.getMonth() + 1);
  new_month = (new_month <= 9)?"0" + new_month: new_month;
  
  date.val(new_date + "/" + new_month  + "/" + date_end.getFullYear());

}
/*
function check_rooms_qty()
{

	var txt = $('.txt_accom');
	var txt_len = txt.length;
	var total_rooms = 0;
	var total_person_number = 0; 
	for(var i=0; i<txt_len; i++)
	{
	  if( $("#accom_"+i).attr('checked') )
	  {
		  total_person_number += parseInt(txt.attr('person_number'));
		  total_rooms += parseInt(txt.val()) * total_person_number;
		}
	}
	
	return total_rooms
}


jQuery.validator.addMethod('phone', function(value) {
  var numbers = value.split(/\d/).length - 1;
  return (10 <= numbers && numbers <= 20 && value.match(/^(\+){0,1}(\d|\s|\(|\)){10,20}$/)); },
  '<?php echo __(addslashes("Please enter a valid phone number")); ?>'
);
*/
  
jQuery.validator.addMethod( 
   "checking_number", 
   function(value, element) { 
       var iChars = "+1234567890 ";
       for (var i = 0; i < value.length; i++) 
       {
            if (iChars.indexOf(value.charAt(i)) == -1) {
                return false;
            }
       }
       return true;
  }, 
  "Please fill with number not more than 15 digit" 
 ); 

 jQuery.validator.addMethod( 
       "checking_number_zero", 
       function(value, element) { 
           if (value.length > 0) 
           {
                var temp = parseFloat(value);
                if ( temp < 1 ) 
                     return false;
                else 
                     return true;
            }
            return true;
      }, 
      "Please fill with valid number" 
 ); 
 
  jQuery.validator.addMethod( 
       "checking_length_phone_number", 
       function(value, element) { 
           if(value.length > 0 )
           {
                if( (value.length > 15)  ) 
                     return false
                else 
                     return true;
           }
           return true;
      }, 
      "Please fill with number not more than 15 digit" 
 ); 
  
  jQuery.validator.addMethod( 
	       "check_phone_numbers", 
	       function(value, element) { 
	           if($($("#customer_mobile_phone")).val()=="" && $($("#customer_home_phone")).val()=="")
	           {
	              return false;
	           }
	           return true;
	      }, 
	      "Please specify at least one phone number" 
  ); 


function showRangeAvailableDay(date)
{
    var tmp_date = $("#all_available_date_detail").val();
    
    var year            = date.getFullYear();
    var month           = date.getMonth() + 1;
    month               = (month <= 9)?"0" + month: month;
    var day             = date.getDate();
    day                 = (day <= 9)?"0" + day: day;
    var new_date        =  year + "-" + month + "-" + day;
      
    var today_object_date = new Date();
    var today_year        = today_object_date.getFullYear();
    var today_month       = today_object_date.getMonth() + 1;
    today_month           = (today_month <= 9)?"0" + today_month: today_month;
    var today_day         = today_object_date.getDate();
    today_day             = (today_day <= 9)?"0" + today_day: today_day;
    var today_date        = parseInt( today_year + today_month + today_day);
      
    if(tmp_date == "ActivityCanoe")
    {
      //don't display date less than today
      if( parseInt(new_date.replace(/-/ig, "")) < today_date )
        return [false,""]; 
      else
        return [true,""];
    }
    else if(tmp_date != "" )
    {
      var start_date  = ""; 
      var end_date    = ""; 
      var start_end_date  = tmp_date.split("|");
       
      for(i=0; i<start_end_date.length; i++)
      {
       if(new_date == start_end_date[i])
       {
          //don't display date less than today
          if( parseInt(new_date.replace(/-/ig, "")) < today_date )
            return [false,""]; 
          else
            return [true,""];
        }   
      }
    }
    return [false,""]; 
  }

function recommendAccommodation(number_of_participants, event){
	
	$("#boxErrorMessage").html("");
    var room_total_number_person = 0;
     var res_total_number_person = number_of_participants.val();
     var unchecked_rooms = Array();
     var adult_count = 0;
     var child_count = 0;
     var check_ages = false;

     var departure_date = $("#reservation_begin_date_show").datepicker( "getDate" );     
     
     $("input[id$='_birthdate']").each(function(){
	   	  //var birthdate = $.datepicker.formatDate('yy-mm-dd',$(this).datepicker( "getDate" ));
	   	  var birthdate = $(this).datepicker( "getDate" );
	   	  var age = departure_date.getFullYear() - birthdate.getFullYear(); 
	   	  if(birthdate.getMonth() > departure_date.getMonth()){
	   		  age++;
	       } 
	   	
	   	  if(isFinite(age) && age < 18){
	   		  child_count++;
	       } else {
	       	adult_count++;
	       }
	   });
     
       adult_count += res_total_number_person - (adult_count + child_count);
	
	   if($("input[id$='_birthdate']").length > 0){
	   	check_ages = true;
	   }

     $(".room_check:checked").each(function(){
       var id = $("." + $(this).attr('id') + "_qty");
       $(id[0]).val("");
       $(this).attr('checked', false);
     });

     res_total_number_person -= room_total_number_person;

     $('.room_check').not(':checked').each(function(){
       unchecked_rooms.push($(this));
     })
     var sort_desc = unchecked_rooms; 
     //var sort_asc  = unchecked_rooms.clone(); 
     
     sort_desc.sort(sortElementsDesc);
     //sort_asc.sort(sortElementsAsc);
     
     lookForRooms(sort_desc, adult_count, child_count, room_total_number_person, res_total_number_person, event);
 }  

function lookForRooms(sort_desc, adult_count_orig, child_count_orig, room_total_number_person_orig, res_total_number_person_orig, event){

  if(sort_desc.length == 0){
	 $(".room_check:checked").each(function(){
	     var id = $("." + $(this).attr('id') + "_qty");
	     $(id[0]).val("");
	     $(this).attr('checked', false);
	   });
	  $("#boxErrorMessage").html(ERR_MESSAGE_001);
	  event.preventDefault();
    return false;
  }
  var adult_count = adult_count_orig;
  var child_count = child_count_orig;
  var room_total_number_person = room_total_number_person_orig;
  var res_total_number_person = res_total_number_person_orig;
  var adult_max_assign = 0;
  var child_max_assign = 0;  
  
  for(var i = 0; i < sort_desc.length; i++){
	  var room_check_info = sort_desc[i];
	  var check_id = room_check_info.attr('id');
	  var room_qty_info = $("." + check_id + "_qty");
	  var per_room_qty = room_qty_info.attr("person_number");
	  var room_qty = res_total_number_person/per_room_qty;
	  
	  var adult_max = $("#" + check_id + "_adult_max").val();
	  var adult_min = $("#" + check_id + "_adult_min").val();
	  var child_max = $("#" + check_id + "_child_max").val();
	  var child_min = $("#" + check_id + "_child_min").val();
	

	  //only happen in odd value
    if ( (per_room_qty % res_total_number_person == 1) && (per_room_qty%2==0) )
    {
      room_qty = setRoomQty(i, room_qty, sort_desc);
    }
    
      if(room_qty >= 1){
          if((adult_count >= adult_min*Math.floor(room_qty)) && (child_count >= child_min*Math.floor(room_qty))){
    	      if(res_total_number_person%per_room_qty > 0 || ((child_count - child_max_assign) <= child_max*Math.floor(room_qty)) && ((adult_count - adult_max_assign) <= adult_max*Math.floor(room_qty))){
              adult_count -= adult_min*Math.floor(room_qty);
              child_count -= child_min*Math.floor(room_qty);
              adult_max_assign +=  adult_max*Math.floor(room_qty) - adult_min*Math.floor(room_qty);
            child_max_assign +=  child_max*Math.floor(room_qty) - child_min*Math.floor(room_qty);
              res_total_number_person -= Math.floor(room_qty)*per_room_qty;
              room_check_info.attr('checked', true);
              room_qty_info.val(Math.floor(room_qty));
              room_qty -= Math.floor(room_qty);
    	      }
          }
        }
      
      if(res_total_number_person > 0 && i == sort_desc.length - 1){
          if(adult_count >= (adult_min * Math.ceil(room_qty)) && child_count >= (child_min * Math.ceil(room_qty))
        		  && (adult_count - adult_max_assign) <= (adult_max * Math.ceil(room_qty)) && (child_count - child_max_assign) <= (child_max * Math.ceil(room_qty))
    	          ){
            room_check_info.attr('checked', true);
            room_qty_info.val(parseInt(room_qty_info.val()==""?0:room_qty_info.val()) + Math.ceil(room_qty));
          } else {
            sort_desc.pop();
            lookForRooms(sort_desc, adult_count_orig, child_count_orig, room_total_number_person_orig, res_total_number_person_orig, event);
          }
      }
	}
}
function setRoomQty(i, room_qty, sort_desc)
{
  if( (i+1) < sort_desc.length )
  {
     
    var check_id = sort_desc[i].attr('id');
    var room_qty_info = $("."+check_id + "_qty");
    
    var temp_check_id = sort_desc[(i+1)].attr('id');
    var temp_room_qty_info = $("."+temp_check_id + "_qty");

    if(room_qty_info.attr("person_number") == temp_room_qty_info.attr("person_number") )
    {
      setRoomQty( (i+1), room_qty, sort_desc)
    } 
    else 
    {
      if(temp_room_qty_info.attr("person_number") %2 == 0)
        room_qty += 1;
    }
  }
  return room_qty;
}
 
 function sortElementsDesc(a, b){
	  var a_id = $("." + a.attr('id') + "_qty");
  var b_id = $("." + b.attr('id') + "_qty");

  return $(b_id[0]).attr('person_number') - $(a_id[0]).attr('person_number'); 
}

function sortElementsAsc(a, b){
  var a_id = $("." + a.attr('id') + "_qty");
  var b_id = $("." + b.attr('id') + "_qty");

  return $(a_id[0]).attr('person_number') - $(b_id[0]).attr('person_number'); 
}
function putValueInQty(room){
    var id = $("." + room.attr('id') + "_qty");
    if(room.attr('checked')){
        $(id[0]).val(1);
    } else {
        $(id[0]).val("");
    }
}  

function errorValidator(error, element)
{
    // Set positioning based on the elements position in the form
    var elem = $(element),
      corners = ['left center', 'right center'],
      flipIt = elem.parents('span.right').length > 0;

    // Check we have a valid error message
    if(!error.is(':empty')) {
      // Apply the tooltip only if it isn't valid
      elem.filter(':not(.valid)').qtip({
        overwrite: false,
        content: error,
        position: {
          my: 'bottom left',
          at: 'top right',
          adjust: {
              x: -20,
              y: 10
           },
          viewport: $(window)
          //corner: {
          //  target: 'topRight',
          //  tooltip: 'bottomLeft'
          //}
        },
        show: {
          event: false,
          ready: true
        },
        hide: false,
        style: {
          classes: 'ui-tooltip-red tool-tip-reservation ui-tooltip-rounded' // Make it red... the classic error colour!
        }
      })

      // If we have a tooltip on this element already, just update its content
      .qtip('option', 'content.text', error);
    }

    // If the error is empty, remove the qTip
    else { elem.qtip('destroy'); }
  }

  preload_image_object = new Image();
  // set image url
  image_url = new Array();
  image_url[0] = "/images/step_1_0.png";
  image_url[1] = "/images/step_1_1.png";
  image_url[2] = "/images/step_2_0.png";
  image_url[3] = "/images/step_2_1.png";
  image_url[4] = "/images/step_3_0.png";
  image_url[5] = "/images/step_3_1.png";
  image_url[6] = "/images/step_4_0.png";
  image_url[7] = "/images/step_4_1.png";

   var i = 0;
   for(i=0; i<8; i++) 
     preload_image_object.src = image_url[i];

