{"version":3,"file":"walt-disney-world-2.0.30.min.js","sources":["walt-disney-world/cogs/js/walt-disney-world-2.0.30.min.js"],"sourcesContent":["/* Custom script for Walt Disney World brand v2.0.0 */\n/* Includes all devices (mobile/desktop) */\n/* Author: Lindsay Prahalad/Tom Nelson, October 2015 */\n\n// -------------------------------------------------------------------------------------------------------------------\n\n// Global variables\n\n// Setup brand variable\nvar brand = 'wdw'\n\n// -------------------------------------------------------------------------------------------------------------------\n\n// Modal dialogs\n\n// Intermission\n\n// Set character/nickname/fact\nfunction intermissionData() {\n // Set random character\n var randomise = Math.floor(Math.random() * 10);\n character = [\n 'buzz',\n 'woody',\n 'rex',\n 'alien',\n 'sulley',\n 'mater',\n 'merida',\n 'dory',\n 'nemo',\n 'mr-potato-head'\n ][randomise];\n nickname = literal('wdw.nicknames[' + randomise + ']');\n\n // Set random fact\n var randomise = Math.floor(Math.random() * 11);\n fact = literal('wdw.facts[' + randomise + ']');\n}\n\n// -------------------------------------------\n\n// Prompt user upgrade to Hotel & Ticket package; user can disimss\nfunction upgrade(saving, upsellOverride) {\n // Unbind the existing listener on .cancel\n $('.cancel').unbind();\n // Set up response variable for GA event\n var response;\n // Bind new listener to 'No Thanks' button\n $('#upgrade .cancel').bind('click', function () { response = 'Decline'; });\n // Bind new listener to 'Add Tickets' button\n $('#upgrade .button').bind('click', function () { response = 'Accept'; });\n // Record upgrade selection in hidden field; delay form submission by 0.25 seconds to allow GAQ to fire\n $('#upgrade input').bind('click', function () { var action = $('', { type: 'hidden', name: 'action', value: response }); action.appendTo($(this)); GA.sendEvent( 'Book', 'Upgrade', response); setTimeout(function () { $('#form').submit(); }, 250); });\n // Override upsell message if passed in (set in data attribute on calling page)\n if (upsellOverride != null) { $('#offer-upsell').text(upsellOverride) }\n // Set Combine & Save value\n if (saving != null) { $('#saving').text(saving); }\n // Dialog is dismissable\n dismissable = true;\n $('#dialog').addClass('dismissable');\n // Add intermission class to dialog\n $('#dialog').addClass('upgrade warning has-buttons');\n // Show dialog\n modal('#upgrade', false);\n}\n\n// -------------------------------------------\n\n// Display overlay for tickets that require acknowledgement of missing dine plan option\nfunction acknowledgeDining(selectedTicketIdentifier) {\n // Dialog is dismissable\n $('#acknowledge-dining input').unbind();\n dismissable = true;\n $('#dialog').addClass('dismissable');\n // Add request class to dialog\n $('#dialog').addClass('warning has-buttons');\n //Add selected ticket identifier to hidden form element so it can be captured on postback\n $('#selectedTicketDetail').remove(); $('#acknowledge-dining input').bind('click', function () { var action = $('', { id: 'selectedTicketDetail', type: 'hidden', name: selectedTicketIdentifier, value: 'Select' }); action.appendTo($(this)); });\n // Show dialog\n modal('#acknowledge-dining', false);\n}\n\n// Display overlay for on request rooms that can only be booked via the call centre; user can disimss\nfunction request() {\n // Dialog is dismissable\n dismissable = true;\n $('#dialog').addClass('dismissable');\n // Track in GA\n GA.sendEvent( 'Book', 'Enquiry', 'Request Room');\n // Add request class to dialog\n $('#dialog').addClass('request has-image');\n // Show dialog\n modal('#request', false);\n}\n\n// -------------------------------------------\n\n// Display overlay for pre-registration rooms that can only be booked via the call centre; user can disimss\nfunction register() {\n // Dialog is dismissable\n dismissable = true;\n $('#dialog').addClass('dismissable');\n // Track in GA\n GA.sendEvent( 'Book', 'Enquiry', 'Pre-Registration Room');\n // Add register class to dialog\n $('#dialog').addClass('register has-image');\n // Show dialog\n modal('#register', false);\n}\n\n// -------------------------------------------\n\n// Display overlay for Cruise and Stay\nfunction cruise() {\n // Dialog is dismissable\n dismissable = true;\n $('#dialog').addClass('dismissable');\n // Track in GA\n GA.sendEvent( 'Book', 'Enquiry', 'Cruise and Stay');\n // Add cruise class to dialog\n $('#dialog').addClass('cruise has-image');\n // Show dialog\n modal('#cruise-stay', false);\n}\n\n// -------------------------------------------\n\n// Display verification overlay for ticket opt-out; user can dismiss\nfunction verify() {\n // Dialog is dismissable\n dismissable = true;\n $('#dialog').addClass('dismissable');\n // Set class\n $('#dialog').addClass('warning has-buttons');\n // Track view in GA\n GA.sendEvent( 'Book', 'Enquiry', 'Add Tickets');\n // Show dialog\n modal('#verify', false);\n}\n\n// -------------------------------------------\n\n// Display overlay for themed offline deals\nfunction offlineDeal() {\n // Dialog is dismissable\n dismissable = true;\n $('#dialog').addClass('dismissable');\n // Track in GA\n GA.sendEvent( 'Book', 'Enquiry', 'Offline Deal');\n // Add class to dialog\n $('#dialog').addClass('offline-cta has-image');\n // Show dialog\n modal('#offline-cta', false);\n}\n\n// -------------------------------------------------------------------------------------------------------------------\n\n// Submit interstitial after image has loaded\nfunction interstitial() {\n // Dialog is not dismissable\n dismissable = false;\n // Set body to position:fixed to force toolbars\n fixBody(true);\n // Get form action\n var url = $('form').attr('action');\n // set timeout to redirect to target page following image load\n setTimeout(function () { window.location.replace(url); }, 3000);\n\n}\n\n// -------------------------------------------------------------------------------------------------------------------\n\n// Geo-location\n\n// Display overlay for geo-location selection\nfunction geo() {\n // Dialog is dismissable\n dismissable = true;\n $('#dialog').addClass('dismissable');\n // Set class\n $('#dialog').addClass('warning');\n // Show dialog\n modal('#geo', true);\n}\n\n// Geo-location switching\n$('header .sublinks .geo').click(function (event) { geo(); });\n\n// Show modal when geo-location in off-canvas nav is tapped (mobile only)\n$('.mobile nav .geo').click(function () {\n snap(); // Snap off-canvas closed\n geo(); // Show popup\n});\n\n\n\n// -------------------------------------------------------------------------------------------------------------------\n\n// Bookflow\n\n// Google Analytics: track new searches with virtual pageview for funnel reporting\n$('#itinerary a, #parameters a').click(function (event) { event.preventDefault(); _gaq.push(['_trackPageview', '/walt-disney-world/book/new-search/']); var href = $(this).attr('href'); setTimeout(function () { window.location = href; }, 250); });\n\n// Manage popup for transfers\nfunction transfers() {\n GA.sendEvent( 'Book', 'Enquiry', 'Disney\\'s Magical Express');\n warning(literal('magical-express-title'), literal('magical-express-message'));\n};\n\n// Select flights\n$('.flight .transfers a').click(function (event) { event.preventDefault(); transfers(); });\n$(\".flight .information a\").click(function (event) { event.preventDefault(); $(this).toggleClass('open'); $(this).closest('hgroup').find('.details .itinerary').slideToggle(); });\n$('.filter #direct').change(function (event) { setTimeout(function () { if ($('.filter #direct').is(':checked')) { GA.sendEvent('Book', 'Direct Flights Toggle', 'True'); } else { GA.sendEvent('Book', 'Direct Flights Toggle', 'False');} $('#form').submit(); }, 500); });\nif ($('#direct').prop('disabled')) { $('.filter fieldset').click(function () { warning(literal('no-direct-flights-title'), literal('no-direct-flights-message')); GA.sendEvent( 'Book', 'Enquiry', 'No Direct Flights'); }); }\n\n// Track users switching to Hotel + Ticket package when flights are out of range\n$('.availability a').click(function (event) { event.preventDefault(); GA.sendEvent( 'Book', 'Switch', 'Hotel + Ticket'); _gaq.push(['_trackPageview', '/walt-disney-world/book/switch/from-flights/to-hotel-ticket/']); var href = $(this).attr('href'); setTimeout(function () { window.location = href; }, 250); });\n\n// Select room\nif ($('.room').length) {\n // Check action on room select\n $('#page input[type=\"submit\"], #page input[type=\"button\"]').click(function (event) {\n // Check for flight provider (optional)\n var supplier; if ($('#flights').length) { supplier = $('#flights').val(); }\n var flights = false; if (supplier == 'GoldMedal' || supplier == 'Dnata') { flights = true; }\n // Store room data in hidden field, where possible\n $('input[type=\"hidden\"][name=\"room\"]').remove(); if (jQuery(this).hasAttr('name')) { var room = $('', { type: 'hidden', name: 'room', value: $(this).attr('name') }); room.appendTo($(this)); };\n // Check if room is 'on request' and prevent form submission\n if (($(this).attr('data-request') == 'true') || ($('input:radio:checked').attr('data-request') == 'true')) { event.preventDefault(); request(); }\n // Check if room requires pre-registration and prevent form submission\n else if (($(this).attr('data-register') == 'true') || ($('input:radio:checked').attr('data-register') == 'true')) { event.preventDefault(); register(); }\n // Prompt user to add tickets if on Hotel Only path; pass Combine & Save discount if applicable\n else if ($('#upgrade').length) {\n var saving = null;\n var upsellOverride = null;\n if (jQuery(this).hasAttr('data-upsell-override')) { upsellOverride = $(this).attr('data-upsell-override') };\n if (jQuery(this).hasAttr('data-combine')) { saving = $(this).attr('data-combine'); } else if (jQuery('input:radio:checked').hasAttr('data-combine')) { saving = $('input:radio:checked').attr('data-combine'); };\n if (saving != \"0\") { event.preventDefault(); upgrade(saving, upsellOverride) };\n }\n });\n // Collapse on unload\n $(window).unload(function () { collapse(); }); $(window).bind('pagehide', function () { collapse(); });\n};\n\n// Select Tickets\nif ($('#ticket').length) {\n $('#page input[type=\"submit\"], #page input[type=\"button\"]').click(function (event) {\n var acknowledge = jQuery(this).attr('data-acknowledge');\n if (acknowledge != null) { event.preventDefault(); acknowledgeDining(acknowledge); };\n });\n $('.no-tickets a').click(function (event) { event.preventDefault(); verify(); });\n};\n\n// Select Dining\n$('.no-dining a').click(function (event) { event.preventDefault(); $('#form').submit(); })\n$('a.dining-plan').click(function () { GA.sendEvent( 'Download', 'Dining', $(this).attr('data-plan')); })\n\n// Itinerary\n$('.itinerary .transfers a').click(function (event) { event.preventDefault(); transfers(); });\n\n// -------------------------------------------------------------------------------------------------------------------\n\n// Static pages (e.g. non-bookflow)\n\n// Cruise & Stay\n$('#cruise .button, #cruise .launch').click(function (event) { event.preventDefault(); cruise(); });\n\n// Themed modal\n$('#themed-modal .launch').click(function (event) { event.preventDefault(); offlineDeal(); });\n\n// -------------------------------------------------------------------------------------------------------------------\n\n// Planning tools\n\n// Track online brochure and online LBBOM views\nif($(\"#body.free-planning\").length) {\n\t\n\t$(\".brochure .online\").click(function() {\n\t\tGA.sendEvent( 'Planning Tools', 'WDTC Brochure', 'View Online');\n\t});\n\n\t$(\".lbbom .online\").click(function() {\n\t\tGA.sendEvent( 'Planning Tools', 'The Little Big Book of Magic', 'View Online');\n\t});\n\n // Check if this is the confirmation screen and fire GA event\n\tif ($(\"#body.free-planning\").attr('data-step') == 'confirmation') {\n\t GA.sendEvent( 'Planning Tools', 'Order', 'Confirmation (1-Click)');\n\t}\n}\n\n// Check valid DoB\n$('#body.free-planning #day, #body.free-planning #month, #body.free-planning #year').change(function () {\n var ageError = [literal('over-18-title'), literal('over-18-tools')];\n validDoB('#body.free-planning #day', '#body.free-planning #month', '#body.free-planning #year', ageError);\n});\n\n//Room name change info modal on mmb\n$('#room-name-change-info a').click(function (event) { event.preventDefault(); warning(literal('room-name-change-title'), literal('room-name-change-message')); });\n\n// Check valid country\n$('#body.planning #country').change(function () {\n // Non UK or Ireland?\n if ($(this).val() == 'Rest of Europe') { warning(literal('overseas-tools'), literal('overseas-tools-message')); }\n})\n\n$('#country').change(AppendEUAdvisoryText);\n\nfunction AppendEUAdvisoryText() {\n var euAdvisory = $('#eu-advisory');\n\n if (euAdvisory) {\n euAdvisory.remove();\n }\n \n var contactDetailsPayment = $('.contact.details.payment');\n var euAdvisoryText = GetEUAdvisoryText($('#country :selected').val());\n if (euAdvisoryText) {\n contactDetailsPayment.after(\"
\" + euAdvisoryText + \"