/** * jQuery Cookie plugin * * Copyright (c) 2010 Klaus Hartl (stilbuero.de) * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * */ jQuery.cookie = function (key, value, options) { // key and at least value given, set cookie... if (arguments.length > 1 && String(value) !== "[object Object]") { options = jQuery.extend({}, options); if (value === null || value === undefined) { options.expires = -1; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } value = String(value); return (document.cookie = [ encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // key and possibly options given, get cookie... options = value || {}; var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; }; /** * Checks for cookie and if found sets the form */ function initBookingForm() { var sweet = $.cookie('quickreserve'); if ( sweet !== null ) { $.cookie('quickreserve', null); var frm_id = 'frmA'; var bits = sweet.split('.'); $('#aa_'+frm_id).val(bits[0]); $('#mm_'+frm_id).val(bits[1]); $('#gg_'+frm_id).val(bits[2]); $('#aaf_'+frm_id).val(bits[3]); $('#mmf_'+frm_id).val(bits[4]); $('#ggf_'+frm_id).val(bits[5]); $('#adult_'+frm_id).val(bits[6]); $('#child_'+frm_id).val(bits[7]); $('#room_'+frm_id).val(bits[8]); arrivalCbChanged(frm_id); departureCbChanged(frm_id); //console.debug('found cookie'); } else { //console.debug('no cookie'); } return true; } /** * Compute today's date at 00:00 - human format * @return array(dd, mm, yyyy) */ function getToday() { var rnow = new Date(); // set today's 00:00 var dnow = new Date(rnow.getFullYear(), rnow.getMonth(), rnow.getDate()); var today = new Array(); today['dd'] = dnow.getDate(); today['mm'] = dnow.getMonth()+1; today['yy'] = dnow.getFullYear(); return today; } /** * Compute tomorrow's date at 00:00 - human format * @param array date_today(dd, mm, yyyy) * @return array(dd, mm, yyyy) */ function getTomorrow(date_today) { var dtod = new Date(date_today['yy'], date_today['mm']-1, date_today['dd']); var dtom = new Date(); dtom.setTime(dtod.getTime()+86400000); var tomorrow = new Array(); tomorrow['dd'] = dtom.getDate(); tomorrow['mm'] = dtom.getMonth()+1; tomorrow['yy'] = dtom.getFullYear(); return tomorrow; } /** * Sets ARRIVAL (combo boxes and hidden datepicker) * @param string frm_id * @param array date_arrival */ function setArrival(frm_id, date_arrival) { // set arrival combo box $('#gg_'+frm_id).val(parseInt(date_arrival['dd']), 10); $('#mm_'+frm_id).val(parseInt(date_arrival['mm']), 10); $('#aa_'+frm_id).val(parseInt(date_arrival['yy']), 10); // set arrival hidden $('#date_arrival1_'+frm_id).val(date_arrival['mm']+'/'+date_arrival['dd']+'/'+date_arrival['yy']); return true; } /** * Sets DEPARTURE (combo boxes and hidden datepicker) * @param string frm_id * @param array date_arrival */ function setDeparture(frm_id, date_departure) { // set depatrure combo box $('#ggf_'+frm_id).val(parseInt(date_departure['dd']), 10); $('#mmf_'+frm_id).val(parseInt(date_departure['mm']), 10); $('#aaf_'+frm_id).val(parseInt(date_departure['yy']), 10); // set departure hidden $('#date_departure1_'+frm_id).val(date_departure['mm']+'/'+date_departure['dd']+'/'+date_departure['yy']); return true; } /** * Gets values of ARRIVAL combo boxes * @return array() */ function getArrivalCB(frm_id) { var date_arrival = new Array(); date_arrival['dd'] = parseInt($('#gg_'+frm_id).val(), 10); date_arrival['mm'] = parseInt($('#mm_'+frm_id).val(), 10); date_arrival['yy'] = parseInt($('#aa_'+frm_id).val(), 10); return date_arrival; } /** * Gets values of ARRIVAL combo boxes * @return array() */ function getDepartureCB(frm_id) { var date_departure = new Array(); date_departure['dd'] = parseInt($('#ggf_'+frm_id).val(), 10); date_departure['mm'] = parseInt($('#mmf_'+frm_id).val(), 10); date_departure['yy'] = parseInt($('#aaf_'+frm_id).val(), 10); return date_departure; } /** * Arrival date combo boxes changed, must recalculate departure */ function arrivalCbChanged(frm_id) { var date_arrival = getArrivalCB(frm_id); // set arrival hidden $('#date_arrival1_'+frm_id).val(date_arrival['mm']+'/'+date_arrival['dd']+'/'+date_arrival['yy']); // current departue var cur_arr_departure = getDepartureCB(frm_id); if ( arrivalIsAfterDeparture(date_arrival, cur_arr_departure) ) { // new departure var date_departure = getTomorrow(date_arrival); // set departure cb setCbSel('ggf_'+frm_id, date_departure['dd']); setCbSel('mmf_'+frm_id, date_departure['mm']); setCbSel('aaf_'+frm_id, date_departure['yy']); // set departure hidden $('#date_departure1_'+frm_id).val(date_departure['mm']+'/'+date_departure['dd']+'/'+date_departure['yy']); } return true; } /** * datepicker hidden field was changed */ function arrivalDpChanged(frm_id) { var dparr = $("#date_arrival1_"+frm_id).val().split('/'); // new arrival human date array var date_arrival = new Array(); date_arrival['dd'] = parseInt(dparr[1], 10); date_arrival['mm'] = parseInt(dparr[0], 10); date_arrival['yy'] = parseInt(dparr[2], 10); // set arrival combo boxes setCbSel('gg_'+frm_id, date_arrival['dd']); setCbSel('mm_'+frm_id, date_arrival['mm']); setCbSel('aa_'+frm_id, date_arrival['yy']); // current departue var cur_arr_departure = getDepartureCB(frm_id); if ( arrivalIsAfterDeparture(date_arrival, cur_arr_departure) ) { // new departure var date_departure = getTomorrow(date_arrival); // set departure cb setCbSel('ggf_'+frm_id, date_departure['dd']); setCbSel('mmf_'+frm_id, date_departure['mm']); setCbSel('aaf_'+frm_id, date_departure['yy']); // set departure hidden $('#date_departure1_'+frm_id).val(date_departure['mm']+'/'+date_departure['dd']+'/'+date_departure['yy']); } return true; } /** * departure date combo boxes changed, must update hidden datepicker */ function departureCbChanged(frm_id) { var date_departure = getDepartureCB(frm_id); // set arrival hidden $('#date_departure1_'+frm_id).val(date_departure['mm']+'/'+date_departure['dd']+'/'+date_departure['yy']); return true; } /** * datepicker hidden field was changed */ function departureDpChanged(frm_id) { var ddep = $("#date_departure1_"+frm_id).val().split('/'); // new arrival human date array var date_departure = new Array(); date_departure['dd'] = parseInt(ddep[1], 10); date_departure['mm'] = parseInt(ddep[0], 10); date_departure['yy'] = parseInt(ddep[2], 10); // set arrival combo boxes setCbSel('ggf_'+frm_id, date_departure['dd']); setCbSel('mmf_'+frm_id, date_departure['mm']); setCbSel('aaf_'+frm_id, date_departure['yy']); return true; } /** * Sets a combo box selected value * @param string fid * @param string cbid * @param string selval */ function setCbSel(cbid, selval) { $("select#"+cbid+" option[selected]").removeAttr("selected"); $("select#"+cbid+" option[value='"+selval+"']").attr("selected", "selected"); return true; } /** * Checks if departure date is before arrival date * @param array date_arrival * @param array date_departure * @return boolean */ function arrivalIsAfterDeparture(date_arrival, date_departure) { var darr = new Date(date_arrival['yy'], date_arrival['mm']-1, date_arrival['dd']); var ddep = new Date(date_departure['yy'], date_departure['mm']-1, date_departure['dd']); if ( darr.getTime() >= ddep.getTime() ) { return true; } else { return false; } } function computeNights(date1, date2) { var ONE_DAY = 24*60*60*1000; // hours*minutes*seconds*milliseconds var date1_ms = date1.getTime() var date2_ms = date2.getTime() // Calculate the difference in milliseconds var difference_ms = Math.abs(date1_ms - date2_ms) // Convert back to days and return return Math.round(difference_ms/ONE_DAY) } function frmcheck(frm_id) { var errmsg = new Array(); errmsg['1'] = 'Arrival date cannot be in the past!'; errmsg['2'] = 'Departure date cannot be before the arrival date!'; errmsg['3'] = 'You must select at least an adult before proceeding!'; errmsg['4'] = 'You must select at least a room before proceeding!'; errmsg['5'] = 'Please check arrival and departure dates, they cannot be equal!'; var arrivalDate = new Date($('#aa_'+frm_id).val(), parseInt($('#mm_'+frm_id).val())-1, $('#gg_'+frm_id).val()); var departureDate = new Date($('#aaf_'+frm_id).val(),parseInt($('#mmf_'+frm_id).val())-1,$('#ggf_'+frm_id).val()); var rnow = new Date(); var today = new Date(rnow.getFullYear(), rnow.getMonth(), rnow.getDate()); if ( arrivalDate < today ) { alert(errmsg['1']); return false; } if ( departureDate < arrivalDate ) { alert(errmsg['2']); return false; } var tot_adulti = $('#tot_adulti_'+frm_id).val(); var tot_bambini = $('#tot_bambini_'+frm_id).val(); if ( (tot_adulti<1) && (tot_bambini<1) ) { alert(errmsg['3']); return false; } var tot_camere = $('#tot_camere_'+frm_id).val(); if ( tot_camere < 1 ) { alert(errmsg['4']); return false; } var gg2 = parseInt($('#gg_'+frm_id).val()); if ( gg2 < 10 ) { gg2 = '0' + gg2; } var mm2 = parseInt($('#mm_'+frm_id).val()); if ( mm2 < 10 ) { mm2 = '0' + mm2; } var dateStart = gg2+'/'+mm2+'/'+$('#aa_'+frm_id).val(); $('#date1_'+frm_id).val(dateStart); var notti = computeNights(arrivalDate, departureDate); $('#night_'+frm_id).val(notti); if ( notti < 1 ) { alert(errmsg['5']); return false; } // set cookie var sugar = $('#aa_'+frm_id).val()+'.'+$('#mm_'+frm_id).val()+'.'+$('#gg_'+frm_id).val()+'.'+$('#aaf_'+frm_id).val()+'.'+$('#mmf_'+frm_id).val()+'.'+$('#ggf_'+frm_id).val()+'.'+$('#adult_'+frm_id).val()+'.'+$('#child_'+frm_id).val()+'.'+$('#room_'+frm_id).val(); $.cookie('quickreserve', sugar, '{domain: "albanihotels.com"}'); return true; }