function external_urlEncode(clearString) { if (typeof clearString == 'undefined') return ''; var output = ''; var x = 0; clearString = clearString.toString(); var regex = /(^[a-zA-Z0-9_.]*)/; while (x < clearString.length) { var match = regex.exec(clearString.substr(x)); if (match != null && match.length > 1 && match[1] != '') { output += match[1]; x += match[1].length; } else { if (clearString[x] == ' ' || clearString.charCodeAt(x).toString(16).toUpperCase() == '20' || clearString.charCodeAt(x).toString(16).toUpperCase() == 'A0') { output += '+'; } else { var charCode = clearString.charCodeAt(x); var hexVal = charCode.toString(16); output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase(); } x++; } } return output; } function external_trim(str) { if (typeof(str) != 'string') return str; return str.replace(/^\s+|\s+$/g, ''); } function checkpositivenumber(x) { var anum=/^\d+$/; return anum.test(x); } function checkdate() { if (document.getElementById('date').value.length == 0) { alert('Please select activity date'); return false; } return true; } function checkupgrade(requested, toolate, limited, available, name) { requested = external_trim(requested); if (!checkpositivenumber(requested)) { alert('Please enter valid upgrade amount(s)'); return false; } if (requested != 0 && toolate) { alert('Sorry, it\'s too late to book ' + name); return false; } if (limited && parseInt(requested) > available) { alert('Sorry, only ' + available + ' ' + name + '(s) available'); return false; } return true; } var ismobileapp = false; var isIframe = false; var cancellationPolicyConfirmed = false; var query = ''; var reservationmode = ''; var activitydate = ''; var googleanalyticsaccount = ''; var guestCountMap; var mode2Setup; var upgradeCountMap; // (What does the next comment mean??? - @ELA) // Deprecated but still supported: var seats1; var seats2; var seats3; var seats4; var seats5; // Works only after the upgrades page. function setMobileApp() { ismobileapp = true; } function setIframe() { isIframe = true; } // These two functions can be called before reservtion_init(): function checkcancellation(cancellationpolicy) { cancellationPolicyConfirmed = false; if (!cancellationpolicy.checked) { alert('You must check the box acknowledging reading & accepting our Terms & Conditions'); return false; } cancellationPolicyConfirmed = true; return true; } function setCancellationPolicyConfirmed() { cancellationPolicyConfirmed = true; } function reservation(dummy_referrerid, activityid, date, discountname, discountpercents) { reservation_init(dummy_referrerid, activityid, date, discountname, discountpercents, 0.0, discountpercents, 0.0, discountpercents, 0.0, discountpercents, 0.0, discountpercents, 0.0, discountpercents, discountpercents, window.location.href); } function reservation2(dummy_referrerid, activityid, date, discountname, discountpercentage1, discountvalue1, discountpercentage2, discountvalue2, discountpercentage3, discountvalue3, discountpercentage4, discountvalue4, discountpercentage5, discountvalue5, discountpercentagetransportation, discountpercentageupgrades) { reservation_init(dummy_referrerid, activityid, date, discountname, discountpercentage1, discountvalue1, discountpercentage2, discountvalue2, discountpercentage3, discountvalue3, discountpercentage4, discountvalue4, discountpercentage5, discountvalue5, discountpercentagetransportation, discountpercentageupgrades, window.location.href) } function reservation_init(dummy_referrerid, activityid, date, discountname, discountpercentage1, discountvalue1, discountpercentage2, discountvalue2, discountpercentage3, discountvalue3, discountpercentage4, discountvalue4, discountpercentage5, discountvalue5, discountpercentagetransportation, discountpercentageupgrades, referer) { query = '&referer=' + external_urlEncode(referer) + '&activityid=' + external_urlEncode(activityid) + (date != undefined ? '&date=' + external_urlEncode(date) : ''); reservationmode = ''; activitydate = external_trim(date); guestCountMap = {}; mode2Setup = false; upgradeCountMap = {}; // Deprecated: seats1 = 0; seats2 = 0; seats3 = 0; seats4 = 0; seats5 = 0; } function setGiftCertificate() { reservationmode = 'giftcertificate'; } function addGuests(guestTypeId, guestCount) { if (!mode2Setup) { query = query + '&externalpurchasemode=2'; mode2Setup = true; } if (guestCount == 0) { return; } query = query + '&guests_t' + guestTypeId + '=' + external_urlEncode(external_trim(guestCount)); guestCountMap[guestTypeId] = external_trim(guestCount); } function addUpgrades(upgradeId, upgradeCount) { if (upgradeCount == 0) return; query = query + '&upgrades_u' + upgradeId + '=' + external_urlEncode(external_trim(upgradeCount)); upgradeCountMap[upgradeId] = external_trim(upgradeCount); } function setUpgradesFixed() { query = query + "&upgradesfixed=1"; } function setHotel(hotelId) { query = query + "&hotelid=" + external_urlEncode(hotelId); } function setRoom(room) { query = query + "&room=" + external_urlEncode(external_trim(room)); } function setTransportationRoute(transportationRouteId) { query = query + "&transportationrouteid=" + external_urlEncode(transportationRouteId); } function setAccommodationFixed() { query = query + "&accommodationfixed=1"; } function setdiscount(discountcode) { query = query + '&discountcode=' + external_urlEncode(discountcode); } function setagency(agencyid) { query = query + '&agencyid=' + agencyid; } function setgoldcard(goldcardnumber) { query = query + '&goldcardnumber=' + external_urlEncode(external_trim(goldcardnumber)); } function setpromotionalcode(promotionalcode) { query = query + '&promotionalcode=' + external_urlEncode(external_trim(promotionalcode)); } function setpaylater(paylater) { query = query + '&paylater=' + paylater; } function setlanguage(language) { query = query + '&language=' + language; } function setgoogleanalytics(account) { googleanalyticsaccount = account; query = query + '&googleanalyticsaccount=' + external_urlEncode(account); } // Deprecated but still supported. function addseats1(seats, price, priceafterdiscount) { query = query + '&seats1=' + external_urlEncode(external_trim(seats)); seats1 = external_trim(seats); } function addseats2(seats, price, priceafterdiscount) { query = query + '&seats2=' + external_urlEncode(external_trim(seats)); seats2 = external_trim(seats); } function addseats3(seats, price, priceafterdiscount) { query = query + '&seats3=' + external_urlEncode(external_trim(seats)); seats3 = external_trim(seats); } function addseats4(seats, price, priceafterdiscount) { query = query + '&seats4=' + external_urlEncode(external_trim(seats)); seats4 = external_trim(seats); } function addseats5(seats, price, priceafterdiscount) { query = query + '&seats5=' + external_urlEncode(external_trim(seats)); seats5 = external_trim(seats); } function addseatsfromselect(select) { var id = select.options[select.selectedIndex].value; if (id.match(/^t(\d+)$/)) { var guestTypeId = RegExp.$1; addGuests(guestTypeId, 1); } else { query = query + '&seats' + id + '=1'; if (id == '1') seats1 = 1; if (id == '2') seats2 = 1; if (id == '3') seats3 = 1; if (id == '4') seats4 = 1; if (id == '5') seats5 = 1; } } // Not supported, but may be used somewhere. function addextras(name, amount, price, priceafterdiscount) { } function getBaseUrl() { var myName = /^(.*[\/\\])external\/functions\.js(?:\?|$)/; var scripts = document.getElementsByTagName("script"); for (var i = 0; i < scripts.length; i++) { var src = scripts[i].src; if (src && src.match(myName)) { return RegExp.$1; } } return ''; } function getJsVersion() { var scripts = document.getElementsByTagName('script'); for (var i = 0; i < scripts.length; ++i) { if (scripts[i].src && /external\/functions.js\?(?:.*&)?jsversion=([^&]+)(?:&|$)/.test(scripts[i].src)) { return RegExp.$1; } } return ''; } var baseurl = 'https://www.hawaiifun.org/reservation/'; if (getBaseUrl().match(/^https?:\/\/[a-z]+[:\/]/) || getBaseUrl().match(/reservation_test/)) // single-word hostname { baseurl = getBaseUrl(); } var jsVersion = getJsVersion(); function external_additionalQueryParams() { var params = ''; if (cancellationPolicyConfirmed) params += '&policy=1'; return params; } function availability_popup() { if (!external_validateActivityInfo()) return; var action = 'AVAILABILITYCHECKPAGE'; if (reservationmode == 'giftcertificate') { action = 'GIFTCERTIFICATESELECTUPGRADES'; } var d=window.open('', '_blank', 'width=800,height=200,scrollbars=yes,resizable=yes,top=100,left=100').document; d.open("text/html", "replace"); d.write("
" + "" + "" + "" + "" + (googleanalyticsaccount == '' ? '' : "") + "| C h e c k i n g . . . |