////////////////////////////////////////////////////////// // WEBROOMS: INTEGRATION SCRIPT // // Guest Traction Ltd // // http://www.guesttraction.com // // ver: v18.12.21-1518 // ////////////////////////////////////////////////////////// // NOTE: This script has been dynamically generated, // // using settings for a specific customer. It changes // // frequently and without warning. // // // // PLEASE EXTERNALLY REFERENCE THIS FILE! // // -Do not store it on your own web host- // // // // Contact Guest Traction for assistance. // // Settings may be adjusted via the customer login at // // https://secure.web-rooms.co.nz // ////////////////////////////////////////////////////////// // 22/12/2018 8:26:18 p.m. var rwrSiteId = 509; var bookingEngineBaseUrl = 'https://secure.web-rooms.co.nz/'; var rwrSubId = 623; var rwrTargetUrl = 'http://www.asurewanaka.nz'; var rwrTargetWinName = '_self'; var rwrInDateIxOffset = 0; var rwrOutDateIxOffset = 1; var rwrMaxOutDateIx = 6939; var maxDaysInAdvance = 365; var bUseAnalytics = true; var displayType = 0; var goButtonLabel = 'GO'; var rootDate = new Date(); rootDate.setFullYear(2000,11,31); var dpDateToday = new Date(); dpDateToday.setFullYear(2018,11,22); var rwrOne_Day_Ms = 1000*60*60*24; var rwrIFrameTop = 0; var bMonitorFrame = false; var bPostListenerTriggered = false; var oMonitor; var frameLoadTimeoutDelay = 4*1000; var frameMonitorRetryAttempt = 0; var trackBookingFrameAttempt = 0; var maxTrackerAttempts = 50; var linker,thisLinker; writeDebug('wr:start'); if(window.jQuery) { writeDebug('wr:jq1'); jQuery(document).ready(function($) { if($.ui) { writeDebug('wr:jq1'); $('.webrooms-datepicker a').each( function( index ) { writeDebug('wr:dp elem'); var sTarget = $(this).attr('href'); var sLabel = $(this).attr('title'); var sText = $(this).text(); var oLabel,oButton,oPicker; if(typeof sLabel == 'undefined' || sLabel == '') { oLabel = $(''); }else{ oLabel = $('
'+sLabel+'
'); } var sHash = ''; if(typeof sText == 'undefined' || sText == '') { sText = 'Book Online'; } oButton = $(''); if(typeof sTarget == 'undefined' || sTarget == '') { sTarget = bookingEngineBaseUrl+'Home.html?dp=jq'; }else{ if(sTarget.indexOf('#') != -1) { sHash = sTarget.split('#')[1]; sTarget = sTarget.split('#')[0]; } if(sTarget.indexOf('?') == -1) { sTarget+='?dp=jq'; }else{ sTarget+='&dp=jq'; } } oPicker = $(''); $( oPicker ).datepicker({ minDate:0,maxDate: '+2Y',dateFormat:'DD, d M yy',defaultDate:new Date(), changeMonth:true,changeYear:true}); $( oPicker ).attr('readonly', true); var myTime = parseFloat(getQuerystring('time')); var myDefaultDate = new Date(); myDefaultDate.setTime(myTime); if(isNaN(myTime)) { $( oPicker ).datepicker('setDate', '-0d'); }else{ $( oPicker ).datepicker('setDate', myDefaultDate); } $( oButton ).click(function() { var sBookingTarget = sTarget+'&sid='+rwrSubId+'&time='+$(oPicker).datepicker('getDate').getTime(); if(sHash != '') { sBookingTarget+='#'+sHash; } window.location.href=sBookingTarget; }); $(this).parent().append(oLabel, oPicker, oButton); $(this).remove(); }); }else{ writeDebug('jquery UI not found'); } }); }else{ writeDebug('jquery not found'); } function insertDatePicker(sId) { // adds a date picker using a block element // myDatePicker accessible outside of scope by necessity writeDebug('wr:insert dp'); myDatePicker = new rwr_ResMask(sId,'myDatePicker'); var sDatePickerHtml = myDatePicker.getHtml(); document.getElementById(sId).innerHTML = sDatePickerHtml; rwr_dpInit(sId); } function getOffset( el ) { var _x = 0; var _y = 0; while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) { _x += el.offsetLeft - el.scrollLeft; _y += el.offsetTop - el.scrollTop; el = el.offsetParent; } return { top: _y, left: _x }; } function initFrameMonitor() { writeDebug('wr:initFrameMonitor'); var ifr=document.getElementById('rwrBookingFrame'); ifr.onload=function(){ if(bMonitorFrame) { writeDebug('wr:iframe loaded, monitored'); oMonitor = setTimeout('frameMonitor()',frameLoadTimeoutDelay) }else{ writeDebug('wr:iframe loaded, unmonitored'); } }; } function insertBookingEngine(sId) { // creates iframe with booking engine embedded, using a block element writeDebug('wr:insert be:'+sId); var sHtml = ''; document.getElementById(sId).innerHTML = sHtml; initFrameMonitor(); setBookingDates(); rwrIFrameTop = getOffset( document.getElementById(sId) ).top; } function rwr_dpInit(sIdent) { writeDebug('wr:rwr_dpInit:'+sIdent); var oCheckIn = document.getElementById('cid_'+sIdent); var oCheckOut = document.getElementById('cod_'+sIdent); var dInSet = new Date() dInSet.setTime(dpDateToday.getTime()); var dOutSet = new Date() dOutSet.setTime(dpDateToday.getTime()); if(getQuerystring('cid',0) != 0) { try { var iDay = getQuerystring('cid',0); var iMth = getQuerystring('cimy',0).split('-')[0]; var iYear = getQuerystring('cimy',0).split('-')[1]; dInSet.setDate(iDay); dInSet.setMonth(iMth-1); dInSet.setFullYear(iYear); iDay = getQuerystring('cod',0); iMth = getQuerystring('comy',0).split('-')[0]; iYear = getQuerystring('comy',0).split('-')[1]; dOutSet.setDate(iDay); dOutSet.setMonth(iMth-1); dOutSet.setFullYear(iYear); }catch(err) { dInSet = dpDateToday; dOutSet = dpDateToday; } } rwr_setDate(oCheckIn,dInSet); rwr_setDate(oCheckOut,dOutSet); rwr_dpEval(oCheckIn); rwr_dpEval(oCheckOut); rwr_catch = 0; } function writeDebug(sDebug) { try { console.log(sDebug) }catch(Err){} } function rwr_dpEval(oControl) { writeDebug('wr:rwr_dpEval'); rwr_setDayLabel(oControl); var sIdent = oControl.id.split('_')[1]; var oCheckIn = document.getElementById('cid_'+sIdent); var oCheckOut = document.getElementById('cod_'+sIdent); var dCheckInDate = rwr_getDate(oCheckIn); var dCheckOutDate = rwr_getDate(oCheckOut); var dCheckOutDateNextMonth = new Date() dCheckOutDateNextMonth.setTime(dCheckOutDate.getTime()); dCheckOutDateNextMonth.setMonth(dCheckOutDate.getMonth()+1); var iCheckInDateIx = dateToIx(dCheckInDate); var iCheckOutDateIx = dateToIx(dCheckOutDate); var thisDateNextMonth = new Date() thisDateNextMonth.setTime(dCheckInDate.getTime()); thisDateNextMonth.setMonth(dCheckInDate.getMonth()+1); if(iCheckInDateIx < dateToIx(dpDateToday)) { rwr_setDate(oCheckIn,thisDateNextMonth); return rwr_dpEval(oCheckIn); } if(iCheckOutDateIx < iCheckInDateIx && iCheckOutDateIx < dateToIx(dpDateToday)) { rwr_setDate(oCheckOut,dCheckOutDateNextMonth); return rwr_dpEval(oCheckOut); } if(iCheckOutDateIx > rwrMaxOutDateIx) { rwr_setDate(oCheckOut,rwrMaxOutDateIx); return rwr_dpEval(oCheckOut); } if(iCheckInDateIx >= iCheckOutDateIx) { switch(oControl.id.substr(0,2)) { case 'ci': rwr_setDate(oCheckOut,ixToDate(iCheckInDateIx)); return rwr_dpEval(oCheckOut); break; case 'co': rwr_setDate(oCheckIn,ixToDate(iCheckOutDateIx-2)); return rwr_dpEval(oCheckIn); break; } } return true; } function rwr_dpSubmit(oResMask) { var sIdent = oResMask._ident; var oCheckIn = document.getElementById('cid_'+sIdent); var oCheckOut = document.getElementById('cod_'+sIdent); var dCheckInDate = rwr_getDate(oCheckIn); var dCheckOutDate = rwr_getDate(oCheckOut); var sQuery = 'cid='+dCheckInDate.getDate(); sQuery += '&cimy='+(dCheckInDate.getMonth()+1)+'-'+dCheckInDate.getFullYear(); sQuery += '&cod='+dCheckOutDate.getDate(); sQuery += '&comy='+(dCheckOutDate.getMonth()+1)+'-'+dCheckOutDate.getFullYear(); if(oResMask._rooms > 0) { sQuery += '&rooms='+oResMask._rooms; } if(oResMask._targetUri.indexOf('?') > 5) { sQuery = '&'+sQuery; }else{ sQuery = '?'+sQuery; } var sTargetUrl = oResMask._targetUri + sQuery; if(oResMask._targetUri.length == 0) { alert('Please select a property.'); return false; } writeDebug('wr:rwr_dpSubmit:'+oResMask._targetWinName+' --- '+sTargetUrl); switch(oResMask._targetWinName) { case '_blank': window.open(sTargetUrl,''); break; case '_self': case '': top.window.location = sTargetUrl; break; default: window.open(sTargetUrl,oResMask._targetWinName); break; } return true; } function rwr_setDate(oControl,dNewDate) { // sets given date control to the given date, including day label var oDay,oMonthYear; var sIdent = oControl.id.split('_')[1]; //alert(oControl.id); switch(oControl.id.substr(0,2)) { case 'ci': oDay = document.getElementById('cid_'+sIdent); oMonthYear = document.getElementById('cimy_'+sIdent); break; case 'co': oDay = document.getElementById('cod_'+sIdent); oMonthYear = document.getElementById('comy_'+sIdent); break; } oDay.value = dNewDate.getDate(); oMonthYear.value = (dNewDate.getMonth()+1)+'-'+dNewDate.getFullYear(); rwr_setDayLabel(oControl); } function rwr_getDate(oControl) { // returns a jsDate object for the given date control // if the month evaluated is different from that in the control, reset the control to the new date var oDay,oMonthYear; var sIdent = oControl.id.split('_')[1]; var iDay,iMonth,iYear; switch(oControl.id.substr(0,2)) { case 'ci': oDay = document.getElementById('cid_'+sIdent); oMonthYear = document.getElementById('cimy_'+sIdent); break; case 'co': oDay = document.getElementById('cod_'+sIdent); oMonthYear = document.getElementById('comy_'+sIdent); break; } var dReturn = new Date(); iDay = parseInt(oDay[oDay.selectedIndex].value,10); iMonth = parseInt(oMonthYear[oMonthYear.selectedIndex].value.split('-')[0],10); iYear = parseInt(oMonthYear[oMonthYear.selectedIndex].value.split('-')[1],10); dReturn.setFullYear(iYear, iMonth-1, iDay); if(iMonth-1 != dReturn.getMonth()) { rwr_setDate(oControl,dReturn); } return dReturn; } function rwr_setDayLabel(oControl) { // sets the appropriate day label var sLabelId; var sIdent = oControl.id.split('_')[1]; var weekdays = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); switch(oControl.id.substr(0,2)) { case 'ci': sLabelId = 'checkInDayLabel_'+sIdent; break; case 'co': sLabelId = 'checkOutDayLabel_'+sIdent; break; } var oDayLabel = document.getElementById(sLabelId); var dSetDate = rwr_getDate(oControl); oDayLabel.innerHTML = weekdays[dSetDate.getDay()]; //alert('rwr_setDayLabel'); } function rwr_ResMask(ident,objName) { if(ident == null) { ident = 'default'; } var oResMask = this; this._ident = ident; this._objName = objName; this._displayType = displayType; this._targetUri = rwrTargetUrl; this._targetWinName = rwrTargetWinName; this._inDateIxOffset = rwrInDateIxOffset; this._outDateIxOffset = rwrOutDateIxOffset; this._maxOutDateIx = rwrMaxOutDateIx; this._maxDaysInAdvance = maxDaysInAdvance; this._goButtonLabel = goButtonLabel; this._rooms = ''; this._checkInDateLabel = 'Check In:'; this._checkOutDateLabel = 'Check Out:'; this._checkInDate = new Date(); this._displayType_block = 1; this._displayType_wide = 2; this._displayType_single = 3; this.getHtml = function() { var sHtml; var buttonColSpan; switch(this._displayType) { case this._displayType_block: buttonColSpan = 2; break; case this._displayType_wide: buttonColSpan = 4; break; case this._displayType_single: break; } var maxDate = new Date(); maxDate.setDate(dpDateToday.getDate()+this._maxDaysInAdvance); maxDate.setDate(20); var dDate; var monthName = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); sHtml = '
'; //sHtml+= ''; sHtml+= ''; sHtml += ''; sHtml += ''; if(this._displayType == this._displayType_block) { sHtml += ''; sHtml += ''; } sHtml += ''; sHtml += ''; switch(this._displayType) { case this._displayType_block: case this._displayType_wide: sHtml += ''; sHtml += ''; break; case this._displayType_single: sHtml += ''; break; } sHtml += ''; if(this._displayType == this._displayType_block) { sHtml += ''; sHtml += ''; } sHtml += ''; sHtml += '' if(this._displayType != this._displayType_single) { sHtml += ''; sHtml += ''; } sHtml += ''; sHtml += ''; sHtml += '
'; sHtml += '
'+this._checkInDateLabel+'
'; sHtml += '
'; sHtml += '
'; sHtml += '
'; sHtml += ''; sHtml += ''; sHtml += '
'; sHtml += '   '; sHtml += ''; sHtml += '
'+this._checkOutDateLabel+'
'; sHtml += '
'; sHtml += '
'; sHtml += '
'; sHtml += ''; sHtml += '' sHtml += '
'; sHtml += ''; sHtml += '
' sHtml += '
'; return sHtml; }; } function dateToIx(myDate) { // returns the ix represented by the given jsDate var iResult = myDate.getTime() - rootDate.getTime(); iResult = Math.ceil(iResult / rwrOne_Day_Ms,0); // iResult += 1; return iResult; } function ixToDate(ix) { // returns the jsDate represented by the given ix var dResult = new Date(); dResult.setTime(rootDate.getTime() + (rwrOne_Day_Ms*ix)) return dResult; } function getQuerystring(key, default_) { if (default_==null) default_=""; key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); var regex = new RegExp("[\\?&]"+key+"=([^&#]*)"); var qs = regex.exec(window.location.href); if(qs == null) return default_; else return qs[1]; } function setBookingDates() { // passes querystring args to rwr iframe var bookingFrame = document.getElementById('rwrBookingFrame'); var dateQuery = window.location.search; var frameSrc; var myGuestQs = ''; try{ myGuestQs = '&gid='+$.cookie('guestId')+'&gh='+$.cookie('guestHash'); // for passthru of group smartsite creds }catch(err){ } if(dateQuery.length > 0) { frameSrc = bookingEngineBaseUrl+'Home.html'+dateQuery+'&sid='+rwrSubId+myGuestQs; }else{ frameSrc = bookingEngineBaseUrl+'Home.html?sid='+rwrSubId+myGuestQs; } writeDebug('wr:setBookingDates:'+frameSrc); trackBookingFrame(frameSrc); return true; } function trackBookingFrame(sFrameSrc) { var bookingFrame = document.getElementById('rwrBookingFrame'); trackBookingFrameAttempt++; frameMonitorRetryUrl = sFrameSrc; var mySrc = ''; var myCardArg = ''; if(document.getElementById('hostrewardscard')) { myCardArg = '&hcard='+document.getElementById('hostrewardscard').value; } // remove the prior retry trackers sFrameSrc = sFrameSrc.replace('&frameretry=0',''); sFrameSrc = sFrameSrc.replace('&trackretry='+(trackBookingFrameAttempt-1),''); sFrameSrc = sFrameSrc+'&frameretry='+frameMonitorRetryAttempt+'&trackretry='+trackBookingFrameAttempt; writeDebug('wr:trackBookingFrame:['+trackBookingFrameAttempt+']---'+sFrameSrc); if(bUseAnalytics) { if (typeof window.ga == 'function') // universal analytics { var linkedUrl = ''; linkedUrl = ga(setUniversalLinker( sFrameSrc)); if(!thisLinker) { // got gaq but didnt get url. try again. if(trackBookingFrameAttempt < maxTrackerAttempts) { writeDebug('wr:trackBookingFrame retry A'); setTimeout('trackBookingFrame(\''+sFrameSrc+'\')',30); return false; }else{ // give up, no tracking mySrc = sFrameSrc; } }else{ mySrc = thisLinker+'&ua=1'; // append ua=1 to enable universal analytics in webrooms } }else{ if(window._gaq) // gaq { var linkedUrl = ''; _gaq.push(function() { var t = _gat._getTrackerByName(); linkedUrl = t._getLinkerUrl(sFrameSrc) }); mySrc = linkedUrl; if(mySrc == '') { // got gaq but didnt get url. try again. if(trackBookingFrameAttempt < maxTrackerAttempts) { writeDebug('wr:trackBookingFrame retry B'); setTimeout('trackBookingFrame(\''+sFrameSrc+'\')',30); return false; }else{ // give up, no tracking mySrc = sFrameSrc; } } }else{ // pagetracker if(window.pageTracker) { mySrc = pageTracker._getLinkerUrl(sFrameSrc); }else{ if(trackBookingFrameAttempt < maxTrackerAttempts) { // maybe pagetracker isnt initialised. try again. writeDebug('wr:trackBookingFrame retry C'); setTimeout('trackBookingFrame(\''+sFrameSrc+'\')',30) return false; }else{ // give up, no tracking mySrc = sFrameSrc; } } } } } if(!mySrc.length) { // we probably got adblocked, use a non-tracked url writeDebug('wr:blocked?'); mySrc = sFrameSrc + myCardArg +'#-dom|'+location.protocol+'//'+location.host+'|dom-'; }else{ // append domain info to hash for iframe resize postMessages writeDebug('wr:ok'); mySrc = mySrc + myCardArg +'#-dom|'+location.protocol+'//'+location.host+'|dom-'; } // got the url - go there! //bookingFrame.src = mySrc; // use timeout to increase reliability writeDebug('wr:set frame src:'+mySrc); bMonitorFrame = true; setTimeout('document.getElementById(\'rwrBookingFrame\').src = \''+mySrc+'\'',0); } function setUniversalLinker( url, opt_hash) { return function(tracker) { window.linker = window.linker || new window.gaplugins.Linker(tracker); thisLinker = window.linker.decorate(url, opt_hash); }; } function frameMonitor() { writeDebug('wr:frameMonitor'); if(!bPostListenerTriggered) { // frame hasnt loaded, maybe blocked, try again writeDebug('wr:frameMonitor RETRY'); frameMonitorRetryAttempt++; trackBookingFrame(frameMonitorRetryUrl) } } function postListener(event) { writeDebug('wr:postlistener'); bPostListenerTriggered = true; var myHeight = parseFloat(event.data['height'])+100; clearTimeout(oMonitor); try{ document.getElementById('rwrBookingFrame').scrolling = 'yes'; }catch(err) { writeDebug('wr:postlistener err A'); } try{ document.getElementById('rwrBookingFrame').style.height = myHeight+'px'; document.getElementById('rwrBookingFrame').scrolling = 'no'; }catch(err) { writeDebug('wr:postlistener err B'); } } function webRoomsDatePicker() { // adds a date picker inline using document.write (deprecated) // myDatePicker accessible outside of scope by necessity writeDebug('wr:webRoomsDatePicker'); var myIdent = 'webRoomsDatePicker'; myDatePicker = new rwr_ResMask(myIdent,'myDatePicker'); document.write(myDatePicker.getHtml()); rwr_dpInit(myIdent); } function insertBookingSystem() { // creates iframe with booking engine embedded, using document.write (deprecated) var sHtml = ''; writeDebug('wr:insertBookingSystem'); document.write(sHtml); initFrameMonitor(); setBookingDates(); } if(window.addEventListener) { addEventListener("message", postListener, false) }else{ attachEvent("onmessage", postListener) }