/*!
* jQuery namspace plugin for reshub
* Author: Kim Richardson
* Copyright ResHub Pty Ltd https://reshub.com.au
*/

jQuery.extend({
	getHashParams: function getHashParams(hash) {
		var hashParams = {};
		var e,
			a = /\+/g,  // Regex for replacing addition symbol with a space
			r = /([^&;=]+)=?([^&;]*)/g,
			d = function (s) { return decodeURIComponent(s.replace(a, " ")); };

		while (e = r.exec(hash))
		   hashParams[d(e[1])] = d(e[2]);

		return hashParams;
	}
	,stringify  : function stringify(obj) {
        if ("JSON" in window) {
            return JSON.stringify(obj);
        }
        var t = typeof (obj);
        if (t != "object" || obj === null) {
            // simple data type
            if (t == "string") obj = '"' + obj + '"';

            return String(obj);
        } else {
            // recurse array or object
            var n, v, json = [], arr = (obj && obj.constructor == Array);

            for (n in obj) {
            v = obj[n];
            t = typeof(v);
            if (obj.hasOwnProperty(n)) {
            if (t == "string") {
            v = '"' + v + '"';
        } else if (t == "object" && v !== null){
            v = jQuery.stringify(v);
        }
        json.push((arr ? "" : '"' + n + '":') + String(v));
        }
        }
        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
        }
    }
});
var onloadCallback = function(){
	if(!document.getElementById('nocaptcha'))
	{
			setTimeout(onloadCallback,3000);
	}
	else
	{
		grecaptcha.render('nocaptcha', {
			  sitekey : '6Le6ZQETAAAAANCU7yvTxGli3sLFxB8JY56edFti'
			  ,size:'compact'
			});
	}
};
;(function ( $ ) {
	$.ajaxSetup({ cache: false });
	var baseUrl = 'https://public.reshub.com.au/api';
	var apiKey = '5d0a9379-58a9-4425-9a43-55d8f797166c';
	var gridStartDate="2020-03-01";
    var nights=3;   
	var clickRequest=null;
	// Quote form
	var loadArgs = null;
	function applyHashArgs (newHash,initial)
	{
		if (initial)
		{
			loadArgs = $.getHashParams(newHash);
		} 
	};
	
	$( document ).ready(function() {
		try{
		
		Hash.init(applyHashArgs);
	}
	catch(err)
	{
		
	}

	$.each($('.reshub-quote'),function(idx,item){
		// loop through the data 
		var quoteData=$(item).getData();
		quoteData.key=apiKey;
        $.ajax({
            url: baseUrl+"/quote?key="+apiKey
			,cache:false
			,dataType:'json'
			,method:'post'
			,crossDomain: true
			,xhrFields: {
				withCredentials: true
			}
            ,data:quoteData
       
            ,success: function( response ) {
                $(item).html(response.html);
             
				$.fn.reshubListenQuote(item);
            }
        });
    });
	$.each($('.reshub-booking'),function(idx,item){
		// loop through the data 
		var bookingData=$(item).getData();
	
		bookingData.key=apiKey;
        $.ajax({
            url: baseUrl+"/booking?key="+apiKey
			,cache:false
			,dataType:'json'
			,method:'post'
			,crossDomain: true
			,xhrFields: {
				withCredentials: true
			}
            ,data:bookingData
            ,success: function( response ) {
                $(item).html(response.html);
                // add listeners here
				$.fn.reshubListenBookingForm(item);
            }
        });
    });
    // retrieve the grids
    $.each($('.reshub-grid'),function(idx,item){
		
		// loop through the data 
		var gridData=$(item).getData();
		
		if(loadArgs)
		{
			gridData = $.extend({},gridData,loadArgs);
		}
		gridData.key=apiKey;
        $.ajax({
            url: baseUrl+"/grid?key="+apiKey
            ,cache:false
			,dataType:'json'
			,method:'post'
			,crossDomain: true
			,xhrFields: {
				withCredentials: true
			}
            ,data:gridData
            ,success: function( response ) {
				
                $(item).html(response.html);
				
				gridStartDate=response.gridStartDate;
				if($(item).data('success'))
				{
					// execute the success function
					try {
						
							eval($(item).data('success')+'();');
						
						
					}
					catch(err)
					{
						// do nothing
					}
				}
						
                // add listeners here
				$.fn.reshubListen();

            }
        });
    });
    $.each($('.reshub-full-search'),function(idx,item){
		var searchData=$(item).getData();
		if(loadArgs)
		{
			searchData = $.extend({},searchData,loadArgs);
		}
		searchData.key=apiKey;
        $.ajax({
            url:  baseUrl+"/full-search?key="+apiKey
            ,cache:false
			,dataType:'json'
			,method:'post'
			,xhrFields: {
				withCredentials: true
			}
            ,data:searchData
            ,success: function( response ) {
                $(item).html(response.html);
				$.fn.reshubListenFullSearch(item);
            }
        });
    });
    $.each($('.reshub-slim-search'),function(idx,item){
		var searchData=$(item).getData();
		if(loadArgs)
		{
			searchData = $.extend({},searchData,loadArgs);
		}
		searchData.key=apiKey;
        $.ajax({
            url: baseUrl+"/slim-search?key="+apiKey
            ,cache:false
			,dataType:'json'
			,crossDomain: true
			,method:'post'
			,xhrFields: {
				withCredentials: true
			}
            ,data:searchData
            ,success: function( response ) {
                $(item).html(response.html);
				$.fn.reshubListenSlimSearch(item);
            }
        });
    });
	$.each($('.reshub-booking-confirm'),function(idx,item){
		var confirmData=$(item).getData();
		confirmData.key=apiKey;
        $.ajax({
            url: baseUrl+"/booking/confirm?key="+apiKey
			,cache:false
			,dataType:'json'
			,method:'post'
			,crossDomain: true
			,xhrFields: {
				withCredentials: true
			}
            ,data:confirmData
            ,success: function( response ) {
                $(item).html(response.html);
				$('#booking-confirmation').submit();
				$.fn.reshubListenBookingConfirm(item);
            }
        });
    });
	$.each($('.reshub-booking-process'),function(idx,item){
		var processData=$(item).getData();
		processData.key=apiKey;
        $.ajax({
            url: baseUrl+"/booking/process?key="+apiKey
			,cache:false
			,dataType:'json'
			,crossDomain: true
			,method:'post'
			,xhrFields: {
				withCredentials: true
			}
            ,data:processData
            ,success: function( response ) {
                $(item).html(response.html);
            }
        });
    });
	});
	
	  $.fn.getData = function() {
	
		  if(this.length === 0) {
			return null;
		  }

		  var obj = {};
		  $.each(this[0].attributes, function() {
			if(this.specified && this.name.match(/^data\-/)) {
			  obj[this.name.replace(/^data\-/,'')] = this.value;
			}
		  });
		  return obj;
	
	  };
	$.extend($.fn, {
		reshubListenBookingConfirm: function(object)
		{
			$('.edit-booking').click(function(){
				$('#booking-form').submit();
			});
		}
		,reshubListenBookingForm: function(object){
			$('#booking-check-in-display').datepicker({
				dateFormat:'D d M y'
				,altField:'#booking-check-in'
				,defaultDate:Date.parseExact($('#booking-check-in').val(),'yyyy-MM-dd')
				,altFormat:'yy-mm-dd'
				,minDate: Date.today().add(1).days()
				,onSelect:function(){$.fn.reshubCalcBooking();}
			});
			
								if(parseInt(Foundation.version,10) >= 6)
					{
						$("[data-abide]").foundation();
						$("[data-reveal]").foundation();
					}
					else
					{
						$(document).foundation('reflow');
					}
								$('#booking-refresh').click($.fn.reshubCalcBooking);
			$('#booking-adult').change($.fn.reshubCalcBooking);
			$('#booking-child').change($.fn.reshubCalcBooking);
			$('#booking-nights').change($.fn.reshubCalcBooking);
			$('.extra-qty').change($.fn.reshubCalcBooking);
			$('select[name="cc_type"]').change($.fn.reshubCalcBooking);
			
			$.fn.reshubCalcBooking();
			var formFields={};
			$('#booking-form').find('input,select').change(function(e){
				var field = $(this);
				var field_name = field.attr('name');
				if(!field_name.match(/^cc_/))
				{
					formFields[field_name]=field.val();
			  
					if(formFields.email && formFields.email!='')
					{
						var formArray = $('#booking-form').serializeArray();
						var formData = {};
						for (var i = 0; i < formArray.length; i++){
							if(!formArray[i]['name'].match(/^cc_/))
								formData[formArray[i]['name']] = formArray[i]['value'];
						}
						// post to api
						$.ajax({
							url:baseUrl+'/booking/interim?key='+apiKey
							,cache:false
							,dataType:'json'
							,method:'post'
							,crossDomain: true
							,xhrFields: {
								withCredentials: true
							}
							,data:formData
							,success:function(response){
							
							}
						});
					}
				}
			});
		},
		reshubListenQuote: function(object){
			// bind the datepicker
			$('#quote-check-in-display').datepicker({dateFormat:'D d M y',altField:'#quote-check-in',defaultDate:Date.parseExact($('#quote-check-in').val(),'yyyy-MM-dd'),altFormat:'yy-mm-dd',minDate: Date.today().add(1).days()});
			// bind the slider
								if(parseInt(Foundation.version,10) >= 6)
					{
						$("[data-abide]").foundation();
						$("[data-reveal]").foundation();
					}
					else
					{
						$(document).foundation('reflow');
					}
								// bind the amenities
			$(object).find('form').on('submit',function(e)
			{
				e.preventDefault();
				e.stopPropagation();
				var data=$(this).closest('form').serializeObject();
				
				data.key=apiKey;
			
				$.ajax({
					url:baseUrl+"/quote/submit?key="+apiKey
					,cache:false
					,dataType:'json'
					,method:'post'
					,crossDomain: true
					,xhrFields: {
						withCredentials: true
					}
					,data:data
					,success:function(response){
						$(object).unbind();
						$(object).html(response.html);
						if(!response.success)
						{
							grecaptcha.render('nocaptcha', {
							  'sitekey' : '6Le6ZQETAAAAANCU7yvTxGli3sLFxB8JY56edFti'
							});
							
							$.fn.reshubListenQuote(object);
						}
					}
				});
				return false;
			});
		},
		reshubListenFullSearch: function(object){
			// bind the datepicker
			$('#check-in-display').datepicker({dateFormat:'D d M y',altField:'#check-in',defaultDate:Date.parseExact($('#check-in').val(),'yyyy-MM-dd'),altFormat:'yy-mm-dd',minDate: Date.today().add(1).days()});
			// bind the slider
								if(parseInt(Foundation.version,10) >= 6)
					{
						$("[data-abide]").foundation();
						$("[data-reveal]").foundation();
					}
					else
					{
						$(document).foundation('reflow');
					}
								// bind the amenities
			$('#show-filters').click(function(e){
				$('#filters').show();
				$('.filter-less').show();
				$('.filter-more').hide();
				return false;
			});
			$('#hide-filters').click(function(e){
				$('#filters').hide();
				$('.filter-more').show();
				$('.filter-less').hide();
				return false;
			});
			if(!$(object).find('form').attr('action'))
			{
				$(object).find('input[type=submit]').click(function(e)
				{
					e.preventDefault();
					e.stopPropagation();
					gridStartDate=$('#check-in').val();
					var data=$(this).closest('form').serializeObject();
					
					try{
		
						var hash_data = $.extend({}, data);
						delete hash_data.agent_code;
						delete hash_data.check_in_display;
						Hash.go($.param(hash_data));
					}
					catch(err)
					{
						
					}
					data.key=apiKey;
				
					$.ajax({
						url:baseUrl+"/grid?key="+apiKey
						,cache:false
						,dataType:'json'
						,crossDomain: true
						,method:'post'
						,xhrFields: {
							withCredentials: true
						}
						,data:data
						,success:function(response){
							$.fn.reshubUnbindGrid($('.reshub-grid'));
							$('.reshub-grid').html(response.html);
							// add listeners here
							if($('.reshub-grid').data('success'))
							{
								// execute the success function
								try {
									eval($('.reshub-grid').data('success')+'();');
								}
								catch(err)
								{
									// do nothing
								}
							}
							else
							{
								$('html, body').animate({
									scrollTop: $(".reshub-grid").offset().top
								}, 1000);
							}
							$.fn.reshubListen();
						}
					});
					return false;
				});
			}
		},
		reshubListenSlimSearch: function(object){
			// bind the datepicker
			$('#check-in-display').datepicker({dateFormat:'D d M y',altField:'#check-in',defaultDate:Date.parseExact($('#check-in').val(),'yyyy-MM-dd'),altFormat:'yy-mm-dd',minDate: Date.today().add(1).days()});
			if(!$(object).find('form').attr('action'))
			{
				$(object).find('input[type=submit],button[type=submit]').click(function(e)
				{
					e.preventDefault();
					e.stopPropagation();
					gridStartDate=$('#check-in').val();
					var data=$(this).closest('form').serializeObject();
					//
					try{
						var hash_data = $.extend({}, data);
						delete hash_data.agent_code;
						delete hash_data.check_in_display;
						Hash.go($.param(hash_data));
					}
					catch(err)
					{
						
					}
					//
					data.key=apiKey;
					//
					$.ajax({
						url:baseUrl+"/grid?key="+apiKey
						,dataType:'json'
						,cache:false
						,xhrFields: {
						   withCredentials: true
						}
						,crossDomain: true
						,method:'post'
						,data:data
						,success:function(response){
							$.fn.reshubUnbindGrid($('.reshub-grid'));
							$('.reshub-grid').html(response.html);
							// add listeners here
							
							if($('.reshub-grid').data('success'))
							{
								// execute the success function
								try {
									setTimeout(function(){
										eval($('.reshub-grid').data('success')+'();');
									},1000);
									
								}
								catch(err)
								{
									// do nothing
								}
							}
							else
							{
								$('html, body').animate({
									scrollTop: $(".reshub-grid").offset().top
								}, 1000);
							}
							$.fn.reshubListen();
						}
					});
					return false;
				});
			}
		}
		,reshubBindGrid: function(object){
			object.click(function(e){
            e.stopPropagation();
            var gridDiv=$(this).parents('.propertyrates')[0];
            var minNights=0;
            //
            if(e.currentTarget.nodeName!='INPUT')
            {
                $(e.target).find('.grid-check').prop('checked',!$(e.target).find('.grid-check').prop('checked'));
            }
            var daysSelected=$(gridDiv).find('.grid-check:checked');

            // check for consecutive selections
            var current_day,success=true,this_day,this_min_night,fullrate=0;
            var selected_days=[];
            $.each(daysSelected,function(index,item){
                this_day=parseInt($(item).attr('name').split('_')[2],10);
                this_min_night=parseInt($(item).attr('data-min-night'),10);
                if(this_min_night>minNights)
                    minNights=this_min_night;
                if(current_day>=0) {
                    if((this_day-current_day)>1)
                    {
                        success=false;
                    }
                    else
                    {
                        selected_days.push(this_day);
                    }
                }
                else
                {
                    selected_days.push(this_day);
                }

                fullrate+=parseInt($(item).attr('data-rate'),10);
                current_day=this_day;
            });

            var message='';
            if(!success) {fullrate=0;message='No Gaps';}
            if(success) {
                var rows=[];
                var row={};
                var nights = daysSelected.length;
                row.package_id = $(gridDiv).find('.ajax-rates-grid').attr('data-package-id');
                row.hotel_id = $(gridDiv).find('.ajax-rates-grid').attr('data-hotel-id');
                row.room_type = $(gridDiv).find('.ajax-rates-grid').attr('data-room-type');
                row.selected_days=selected_days;
                //
                if (clickRequest) {
                    clickRequest.abort();
                }
                rows.push(row);
                clickRequest=$.ajax({
					url:baseUrl+'/rates?key='+apiKey
					,cache:false
					,method:'post'
					,xhrFields: {
					   withCredentials: true
					}
					,crossDomain: true
					,data:{
						rows: $.stringify(rows)
						,nights:nights
						,start_date:gridStartDate.toString('yyyy-MM-dd')
					}
					,success:function(data){
					
						
						var grids=$(gridDiv).find('.ajax-rates-grid');
						$(grids[0]).html(data.rates[0].grid[0]);
						$(grids[1]).html(data.rates[0].grid[1]);
						//
						$(gridDiv).find('.full-rate').html(data.rates[0].message);
						if(!data.rates[0].bookable)
						{
							$(gridDiv).find('.book-now-button').attr('disabled','disabled');
						}
						else
						{
							$(gridDiv).find('.book-now-button').removeAttr('disabled');
						}
						$.fn.reshubUnbindGrid($(gridDiv).find('.ratecell:has(input)'));
						$.fn.reshubUnbindGrid($(gridDiv).find('.grid-check'));
						$.fn.reshubBindGrid($(gridDiv).find('.ratecell:has(input)'));
						$.fn.reshubBindGrid($(gridDiv).find('.grid-check'));
					}
                });
            }
            else {
                if ($(this).is(':checked')) $(this).parent().parent().addClass('selected'); else $(this).parent().parent().removeClass('selected');
                if (fullrate > 0) {
                    $(gridDiv).find('.book-now-button').removeAttr('disabled');
                    $(gridDiv).find('.full-rate').html('$' + fullrate);
                }
                else {
                    $(gridDiv).find('.book-now-button').attr('disabled','disabled');
                    $(gridDiv).find('.full-rate').html(message != '' ? message : 'N/A');
                }
            }
        });
		},
		reshubUnbindGrid: function(object){
			object.unbind();
		},
		reshubCalcBooking : function(){
	
			var package_id=$('#booking-package-id').val();
			var hotel_id=$('#booking-hotel-id').val();
			var adult=parseInt($('#booking-adult').val(),10);
			var child=parseInt($('#booking-child').val(),10);
			var nights=parseInt($('#booking-nights').val(),10);
			var check_in=$('#booking-check-in').val().replace(/.{3}\ /,'').replace(/\ /g,'-');
			var send_check_in=Date.parse(check_in);
			var check_out=Date.parse(check_in).add(nights).days();
			var promo_code=$('#booking-promo-code').val();
			$('input[name=check-out]').val(check_out.toString('ddd d MMM yyyy'));
			// build the extras data
			var extras_data=[];
			$('.extra-qty').each(function(idx,item){
				extras_data.push({
					id:$(item).data('id')
					,qty:parseInt($(item).val(),10)
				});
			});
			$.post(baseUrl+'/booking/update?key='+apiKey,{hotel_id:hotel_id,package_id:package_id,nights:nights,adult:adult,child:child,start_date:send_check_in.toString('yyyy-MM-dd'),cc_type:$('select[name=cc_type]').val(),promo_code:promo_code,extras:JSON.stringify(extras_data)},function(data){
				// Calculate Extras
				$('#booking-promo-message').html(data.promo_code_message);
				if(data.bookable)
				{
					$('.booking-fail').hide('slow');
					var accommodation_total=data.fullrate;
					var discount_total=-1*data.discount;
					var extras_total=data.extras;
					var booking_fee=data.fee;
					var surcharge=data.surcharge;
					var booking_total=data.total;

					var deposit_total=data.deposit;
					//

					var people=adult+child;
					var extra_people= people - data.guests_included;
					if(extra_people>0)
					{
						// find the mandatory extra and show it
						var ex=$('#extras').find("[data-type^=extra_person]");
						ex.val(extra_people);
						$('#extra-'+ex.data('id')).show();
						$('#extras').show();
					}
					else
					{
						var ex=$('#extras').find("[data-type^=extra_person]");
						ex.val(0);
						$('#extra-'+ex.data('id')).hide();
					}
					var extras=$('.extra-qty');
					$.each(extras,function(idx,extra){
						var id=$(extra).attr('data-id'),ex=null,amount=0,min,max,price;
						var pricing=$('.pricing-'+id);
						var qty=parseInt($(extra).val(),10);

						if(pricing.length==1)
						{

							$.each(data.extras_data,function(idx,item){

								if(id==parseInt(item.id,10))
								{
									ex=item;
								}
							});
							switch(ex.extra_type)
							{
								case 'booking':
								{
									amount=parseFloat(pricing.val())*qty;
									break;
								}
								case 'person':
								{
									amount=parseFloat(pricing.val())*qty*people;
									break;
								}
								case 'extra_person_night': case 'extra_person_booking':
								{
									if(qty>0) {

										amount=ex.total;
                                        $('#extras').find("[data-type^=extra_person]").val(ex.qty);
									}
									break;
								}
								case 'night':{
									amount=parseFloat(pricing.val()) * qty * nights;
									break;
								}
								case 'person_night':
								{
									if(qty>0) {
										amount = parseFloat(pricing.val()) * nights * people * qty;
									}
									break;
								}
								case 'qty_night':
								{
									amount=parseFloat(pricing.val())*nights*qty;
									break;
								}
							}

							if(amount>0&&amount<parseFloat(ex.minimum))
							{
								amount=parseFloat(ex.minimum);
							}
						}
						else{
							$.each(pricing,function(index,item){
								min=parseInt($(item).attr('data-min'),10);
								max=parseInt($(item).attr('data-max'),10);
								price=parseFloat($(item).val());
								if(qty>=min&&qty<=max)
								{
									amount=price;
								}
							});
						}
					
						$('#extras-total-'+id).html('$'+amount.toFixed(2));
					});
					$('.accommodation-total').html('$'+number_format(accommodation_total,2));

					$('.discount-total').html('<strong> - $'+number_format((discount_total*-1),2)+'</strong>');

					if(discount_total!=0) $('.discount-total').parent().show(); else $('.discount-total').parent().hide();

					if(extras_total!=0||discount_total!=0) $('.booking-total').parent().show(); else $('.booking-total').parent().hide();

					$('.booking-fee').html('$'+number_format(booking_fee,2));
					if(booking_fee!=0) $('.booking-fee').parent().show(); else $('.booking-fee').parent().hide();
					$('.surcharge').html('$'+number_format(surcharge,2));

					if(surcharge!=0) $('.surcharge').parent().show(); else $('.surcharge').parent().hide();
					$('.booking-total').html('<strong>$'+number_format(booking_total,2)+'</strong>');
					if(surcharge!=0||booking_fee!=0) $('.deposit-amount').parent().show(); else $('.deposit-amount').parent().hide();
					$('.deposit-amount').html('<strong>$'+number_format(deposit_total,2)+'</strong>');
					$('.deposit-total').html('<strong>$'+number_format(deposit_total+booking_fee+surcharge,2)+'</strong>');
					if(extras_total!=0) $('.extras-total').parent().show(); else $('.extras-total').parent().hide();
					$('.extras-total,.extras-subtotal').html('$'+number_format(extras_total,2));

					$('.booking-success').show();
				}
				else{
					$('.booking-message').html(data.message);
					$('.booking-success').hide();
					$('.booking-fail').show();
				}
			  
			},'json');
		}
        ,reshubListen: function(){
			
			$('.book-now-button').click(function(e){
				e.preventDefault();
				var gridDiv=$(this).parents('.propertyrates');
				var attr=$(this).attr('disabled');
				if(typeof attr === typeof undefined || attr === false)
				{
					var dates=[];
					$(gridDiv).find('.grid-check:checked').each(function(index,item){
						dates.push($(item).attr('data-date'));
					});
					//
					$('#booking-form > #booking-hotel-id').val($(gridDiv).attr('data-hotel-id'));
					$('#booking-form > #booking-package-id').val($(gridDiv).attr('data-package-id'));
					$('#booking-form > #booking-dates').val(dates.join(','));
					$('#booking-form').submit();

				}
				return false;
			});
			$.fn.reshubBindGrid($('.ratecell:has(input)'));
			$.fn.reshubBindGrid($('.grid-check'));
			$('a.days').click(function(e){
				var start_date=Date.parse(gridStartDate,'yyyy-MM-dd');
				e.preventDefault();
				var number=parseInt($(this).attr('data-days'),10);

				if($(this).hasClass('pull-left'))
				{
					start_date.add(-1*number).days();
				}
				else{
			
					start_date.add(number).days();
				}
				if(start_date < Date.today())
				{
					return false;
				}
				var j=1;
				var current_day=new Date(start_date.getTime());
				$.each($('.groupedrates .ratehead'),function(index,item)
				{

					for(var i=j;i<j+7;i++)
					{

						var idx=i>7?i-7:i;
						$(item).find('.ratecell:nth-child('+idx+')').html(current_day.toString('ddd')+'<strong>'+current_day.toString('d')+'</strong>'+current_day.toString('MMM'));
						current_day.add(1).days();
					}
					j=i;
					if(j==15){
						j=1;
						current_day=new Date(start_date.getTime());
					}
				});
				$.fn.reshubUnbindGrid($('.ratecell:has(input)'));
				$.fn.reshubUnbindGrid($('.grid-check'));
				var rows=[];
				$('.propertyrates').each(function(index,item){
					var row={};
					row.package_id=$(item).find('.ajax-rates-grid').attr('data-package-id');
					row.hotel_id=$(item).find('.ajax-rates-grid').attr('data-hotel-id');
					row.room_type=$(item).find('.ajax-rates-grid').attr('data-room-type');
					var this_day;
					//
					row.selected_days=[];
					var daysSelected=$(item).find('.grid-check:checked');
					$.each(daysSelected,function(index,item) {
						this_day=parseInt($(item).attr('name').split('_')[2],10);
						row.selected_days.push(this_day);
					});
					rows.push(row);
				});
				$.ajaxq('gridqueue',{
					url:baseUrl+'/rates?key='+apiKey
					,cache:false
					,xhrFields: {
					   withCredentials: true
					}
					,crossDomain: true
					,method:'post'
					,data:{
						rows: $.stringify(rows)
						,nights:nights
						,start_date:start_date.toString('yyyy-MM-dd')
					}
					,success:function(data){
						$('.propertyrates').each(function(index,item) {
						
							var grids=$(item).find('.ajax-rates-grid');
							$(grids[0]).html(data.rates[index].grid[0]);
							$(grids[1]).html(data.rates[index].grid[1]);
							//
							$(item).find('.full-rate').html(data.rates[index].message!=''?data.rates[index].message:'N/A');
							if(!data.rates[index].bookable)
							{
								$(item).find('.book-now-button').attr('disabled','disabled');
							}
							else
							{
								$(item).find('.book-now-button').removeAttr('disabled');
							}
						});
						$.fn.reshubBindGrid($('.ratecell:has(input)'));
						$.fn.reshubBindGrid($('.grid-check'));
					}
				});
				$('#selected-date').html(start_date.toString('ddd d MMM yy'));
				gridStartDate=start_date.toString('yyyy-MM-dd');
				if(start_date>Date.today().add(1).days())
				{

					$('a.days.pull-left').addClass('active');
					$('a.days.pull-left').removeAttr('disabled');
				}
				else{
					$('a.days.pull-left').removeClass('active');
					$('a.days.pull-left').attr('disabled','disabled');
				}
				return false;
			});
        }

    });
    $.fn.serializeObject = function()
    {
		var o = {};
		var a = this.serializeArray();

		$.each(a, function() {
			if (o[this.name]) {
				if (!o[this.name].push) {
					o[this.name] = [o[this.name]];
				}
				o[this.name].push(this.value || '');
			} else {
				o[this.name] = this.value || '';
			}
		});
		return o;
    };
})( jQuery );
