{"version":3,"sources":["cogs/js/framework-2.0.10.min.js"],"names":["billboard","fixBody","state","$","addClass","removeClass","logOrientation","deviceOrientation","window","width","height","_gaq","push","fn","hasAttr","name","undefined","this","attr","length","change","gaValue","prop","startBillboard","getScript","billboardSettings","autoplay","autoplaySpeed","desktop","pauseOnHover","fade","slick","logSlide","index","backgroundImage","billboardFrame","css","mobile","find","substring","lastIndexOf","trigger","slide","image","startBillboardOnContentPage","outboundClick","clicked","blank","hasClass","url","externalDomain","setTimeout","open","domain","outbound","match","indexOf","split","logErrors","lookupBrand","data","output","click","event","preventDefault","parent","href","action","parents","location","currentbrand","targeturl","targetbrand","portfolio","character","nickname","fact","dismissable","bounce","show","delay","fadeOut","addScroll","dialog","infoModal","modalLink","gaEvent","modal","scrollable","siblings","collapse","hide","dismiss","each","i","el","stopPropagation","document","keyup","keyCode","form","submit","submitForm","intermission","type","brandname","intermissionData","brand","html","load","warning","message","advisory","luggage","slideDown","jQuery","scrollTo","offset","axis","txt","is","text","slideToggle","pnlId","flagUseMoreLess","closest","focus","val","locale","country","stopImmediatePropagation","link","unload","bind","ready","initialiseBillboard","on","currentSlide","nextSlide","validDoB","day","month","year","ageError","now","moment","parseInt","isNaN","dob","isValid","isAfter","subtract"],"mappings":"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","file":"framework-2.0.10.min.js","sourcesContent":["/* Custom script for DisneyHolidays.xx framework v2.0.0 */\n/* Includes all brands (WDW/DLP/DCL) and all devices (mobile/desktop) */\n/* Author: Tom Nelson/Lindsay Prahalad, October 2015 */\n\n// -------------------------------------------------------------------------------------------------------------------\n\n// Global variables\n\n// Setup billboard on portfolio/brand homepages or content pages that use this e.g. WDW Ticket Store\nvar billboard;\n\n// -------------------------------------------------------------------------------------------------------------------\n\n// Global functions\n\n// jQuery plugin to check if tag has attribute\n// Important! Call with jQuery(this).hasAttr not $(this).hasAttr to avoid clash with Adobe Analytics\n$.fn.hasAttr = function (name) { return this.attr(name) !== undefined; };\n\n// Fix body to prevent scrolling (off canvas, modal, etc)\nfunction fixBody(state) { // Pass true/false\n if (state) { $('body').addClass('no-scroll'); }\n else { $('body').removeClass('no-scroll'); }\n}\n\n// Log device orientation in GA; include in shared framework to run on tablets which are served the 'desktop' framework\nfunction logOrientation() {\n // Determine device orientation\n var deviceOrientation = ($(window).width() > $(window).height()) ? 'Landscape' : 'Portrait';\n _gaq.push(['_trackEvent', 'Device', 'Orientation', deviceOrientation]);\n}\n\n// Select Extras\nif ($('#extras').length) {\n // Track Booker opt-in or opt-out in Google Analytics\n $('#earm').change(function () {\n var gaValue;\n if ($(this).prop('checked') == true) { gaValue = 'Opt-In'; }\n else { gaValue = 'Opt-Out'; }\n _gaq.push(['_trackEvent', 'Marketing', 'MyMagic+', gaValue]);\n });\n}\n\n// -------------------------------------------------------------------------------------------------------------------\n// -------------------------------------------------------------------------------------------------------------------\n\n// Homepage Billboard\n\n// Run billboard with device-specific parameters\nvar startBillboard = function () {\n // Get slick library\n $.getScript(\"/cogs/js/libs/slick-1.6.0.min.js\", function () {\n // Set parameters\n var billboardSettings = { \n\t autoplay: true, \n\t autoplaySpeed: 5000\n\t };\n\t \n // Add extra properties for desktop\n if (desktop) {\n billboardSettings.pauseOnHover = false;\n billboardSettings.fade = true;\n // billboardSettings.dots = true; // Disable dots until launch\n }\n // Initialise slick\n // TODO: catch when this is not a function?\n billboard.slick(billboardSettings);\n });\n};\n\n// Determine active billboard slide and track via Adobe Analytics framework\nvar logSlide = function (index) {\n // Get billboard frame\n var billboardFrame = $('a.slick-slide[data-slick-index=' + index + ']')\n // Setup backgroundImage to return full URL, e.g. http://www.disneyholidays.co.uk/images/homepage/billboard/desktop/young-girl-tree-of-life-animal-kingdom.jpg\n var backgroundImage\n // Desktop uses CSS of frame\n if (desktop) { backgroundImage = billboardFrame.css('background-image'); }\n // Mobile uses CSS of child frame\n if (mobile) { backgroundImage = billboardFrame.find('.frame').css('background-image'); }\n // Now get image filename, e.g. young-girl-tree-of-life-animal-kingdom.jpg\n if (backgroundImage) {\n // Get filename\n backgroundImage = backgroundImage.substring(backgroundImage.lastIndexOf('/') + 1)\n // Strip closing quote/bracket\n backgroundImage = backgroundImage.substring(0, backgroundImage.lastIndexOf('.jpg') + 4)\n }\n // Now log via Adobe Analytics\n // console.log(index) // Slide index; zero-indexed so increment to start at 1\n // console.log(backgroundImage) // Slide filename\n // Pass index and background image name to Adobe TMS (n.b. function courtesy of Donald Organ, DPRD)\n $(this).trigger('SlideChange', { slide: index, image: backgroundImage });\n}\n\n// -------------------------------------------------------------------------------------------------------------------\n\n// Billboard on content pages e.g. WDW Ticket Store\n\n// Run billboard with device-specific parameters\nvar startBillboardOnContentPage = function() {\n // Get slick library\n $.getScript(\"/cogs/js/libs/slick-1.6.0.min.js\", function() {\n // Set parameters\n var billboardSettings = { \n\t autoplay: true, \n\t autoplaySpeed: 5000,\n\t fade: true\n\t };\n\t \n // Add extra properties for desktop\n if(desktop) {\n billboardSettings.pauseOnHover = false;\n }\n \n // Initialise slick\n billboard.slick(billboardSettings);\n });\n};\n\n// -------------------------------------------------------------------------------------------------------------------\n// -------------------------------------------------------------------------------------------------------------------\n\n// Analytics (Google Analytics and Adobe Analytics, e.g. Omniture SiteCatalyst)\n\n// Manage and track outbound clicks if points to external domain\nfunction outboundClick(clicked, blank) {\n // Popup links (e.g. social buttons) automatically launch a pop up window, so suppress function; clicks are tracked via _trackSocial\n if (clicked.hasClass('popup')) { return; }\n // Get destination URL\n var url = clicked.attr('href');\n // Track clicks to external domains in GA\n externalDomain(url);\n // Delay by 0.25 seconds to allow GAQ to fire if same window\n if (!blank) { setTimeout(function () { window.open(url, '_parent'); }, 250); };\n};\n\n// -------------------------------------------\n\n// Log clicks to external domains in Google Analytics\nfunction externalDomain(domain) {\n // Setup outbound domain\n var outbound\n // Check destination domain and override value for GA, if necessary (e.g. DCL affiliate links)\n if (domain.match('disneyworld.disney.go.com|disneybeachresorts.com')) { outbound = 'disneyworld.co.uk' }\n if (domain.match('disneycruise.disney.go.com')) { outbound = 'disneycruise.co.uk' }\n if (domain.match('holidayextras.co.uk')) { outbound = 'holidayextras.co.uk' }\n if (domain.match('thetrainline.com')) { outbound = 'thetrainline.com' }\n if (domain.match('nationalexpress.com')) { outbound = 'nationalexpress.com' }\n // If domain is not matched then use regex to get base URL\n if (!outbound) { if (domain.indexOf(\"://\") > -1) { outbound = domain.split('/')[2]; } }\n // Google Analytics: track outbound clicks\n if (outbound) { _gaq.push(['_trackEvent', 'Outbound Link', outbound, domain]); }\n}\n\n// -------------------------------------------\n\n// Google Analytics: events for errors\nfunction logErrors() {\n if ($('.event-expired').length) { _gaq.push(['_trackEvent', 'Book', 'Error', 'Timeout']); }; // Timeout\n if ($('.event-hotel').length) { _gaq.push(['_trackEvent', 'Book', 'Error', 'Hotel Unavailable']); }; // No hotel availability\n if ($('.event-eurostar').length) { _gaq.push(['_trackEvent', 'Book', 'Error', 'Eurostar Unavailable']); }; // No Eurostar availability\n if ($('.event-flights').length) { _gaq.push(['_trackEvent', 'Book', 'Error', 'Flights Unavailable']); }; // No flight availability\n if ($('.event-selfdrive').length) { _gaq.push(['_trackEvent', 'Book', 'Error', 'Self Drive Unavailable']); }; // No self drive availability\n if ($('.event-seats').length) { _gaq.push(['_trackEvent', 'Book', 'Error', 'Seats Unavailable']); }; // No seat availability (Gold Medal second call)\n if ($('.event-outofrange').length) { _gaq.push(['_trackEvent', 'Book', 'Error', 'Flights Out of Range']); }; // Flights are out of range (11 months+)\n if ($('.event-noflights').length) { _gaq.push(['_trackEvent', 'Book', 'Error', 'No Flights (11+ Months)']); }; // Flights are out of range (11 months+)\n if ($('.event-booking').length) { _gaq.push(['_trackEvent', 'Book', 'Error', 'Booking Failure']); }; // Booking fails (payment or transport availabilty)\n}\n\n// -------------------------------------------\n\n// Google Analytics: track clicks on launch panel button\n$('.launch a.url').click(function (event) {\n // Prevent default to track click in GA\n event.preventDefault();\n // Get data\n var href = $(this).attr('href');\n var action = $(this).attr('data-action');\n // Determine if parent is section or aside\n var parent; if ($(this).parents('section').length) { parent = 'Body' } else { parent = 'Sidebar' };\n // Track in GA\n _gaq.push(['_trackEvent', 'Book', 'Click (' + parent + ')', action]);\n // Redirect to Target URL after .25 second delay\n setTimeout(function () { window.location = href; }, 250);\n});\n\n// -------------------------------------------\n\n// Google Analytics: lookup brands by url or short code (e.g. wdw)\nfunction lookupBrand(data, output) { // data = URL or code, output = url/code/name\n // Use fall-through for multiple matches\n switch (data) {\n // ------------------\n // Disneyland Paris\n case 'dlp':\n case '/disneyland-paris/':\n // Return output\n if (output == 'url') { return '/disneyland-paris/' }\n if (output == 'code') { return 'dlp' }\n if (output == 'name') { return 'Disneyland Paris' }\n // ------------------\n // Walt Disney World\n case 'wdw':\n case '/walt-disney-world/':\n // Return output\n if (output == 'url') { return '/walt-disney-world/' }\n if (output == 'code') { return 'wdw' }\n if (output == 'name') { return 'Walt Disney World' }\n // ------------------\n // Disney Cruise Line\n case 'dcl':\n case '/disney-cruise-line/':\n // Return output\n if (output == 'url') { return '/disney-cruise-line/' }\n if (output == 'code') { return 'dcl' }\n if (output == 'name') { return 'Disney Cruise Line' }\n // ------------------\n // Walt Disney Travel Company\n default:\n // Return output\n if (output == 'url') { return '/' }\n if (output == 'code') { return 'wdtc' }\n if (output == 'name') { return 'Walt Disney Travel Company' }\n }\n}\n\n// -------------------------------------------\n\n// Google Analytics: track activity in the chrome/offcanvas when switching between brands\n$('#chrome dfn a, nav li.sublink.brand a').click(function (event) {\n // Pause\n event.preventDefault();\n // Check current brand\n var currentbrand = $('body').attr('data-brand');\n // Get clicked destination URL\n var targeturl = $(this).attr('href');\n // Determine target brand\n var targetbrand = lookupBrand(targeturl, 'code');\n // No action from portfolio homepage, or if switching from/to the same brand\n if ((currentbrand == 'wdtc') || (currentbrand == targetbrand)) {\n window.location = targeturl;\n } else {\n // Otherwise build trackEvent data\n var portfolio = lookupBrand(currentbrand, 'name') + ' to ' + lookupBrand(targetbrand, 'name');\n // Track in GA\n _gaq.push(['_trackEvent', 'Chrome', 'Portfolio', portfolio]);\n // Redirect to target URL after .25 second delay\n setTimeout(function () { window.location = targeturl; }, 250);\n };\n});\n\n// -------------------------------------------------------------------------------------------------------------------\n// -------------------------------------------------------------------------------------------------------------------\n\n// Manage modal dialog (generic)\n\n// User dismissable dialog; false by default\nvar dismissable = false;\n\n// Show bouncing arrow for scrollable content\nfunction bounce() {\n $('#dialog p.arrow').show().delay(4000).fadeOut();\n}\n\n// Check if content height exceeds viewable container height (mobile only)\nfunction addScroll(dialog) {\n // Mobile only\n if (mobile) {\n // Get heights of container/content\n var container = $('#dialog').height(); // Viewable height of #dialog\n var content = $(dialog + ' > div').height(); // Total height of content\n // If content exceeds container then make scrollable\n if (content > container) {\n $('#dialog').addClass('scrollable');\n bounce();\n fixBody(true);\n }\n }\n}\n// Set info modal onclick event\n$(\"a[id$='info-modal-trigger']\").each(function (i, el) {\n $(el).click(function () {\n infoModal(el);\n })\n})\n//Show info modals\nfunction infoModal(modalLink) {\n var gaEvent = $(modalLink).attr('data-ga-event').split(\"|\");\n dismissable = true;\n $('#dialog').addClass('dismissable information');\n _gaq.push(['_trackEvent', gaEvent[0], gaEvent[1], gaEvent[2]]);\n modal($(modalLink).attr('data-modal-id'), true);\n}\n// Show modal with delay to allow for fixBody() to complete\nfunction modal(dialog, scrollable) {\n // Show overlay\n $(dialog).removeClass('hide').siblings('.modal').addClass('hide');\n $('#overlay').show();\n // Show modal\n $('#interstitial').show();\n // If content may be scrollable, check relative heights\n if (scrollable) { addScroll(dialog); }\n}\n\n// Collapse modal dialog and remove class\nfunction collapse() {\n $('#overlay').hide();\n $('#interstitial').hide();\n $('#dialog').removeClass();\n $('.modal').addClass('hide');\n fixBody(false);\n}\n\n// Dismiss dialog\nfunction dismiss() {\n if (dismissable) {\n collapse();\n dismissable = false;\n };\n}\n\n// Listen for esc press, or users click on overlay outside of modal dialog\n$(function () {\n $('#modal').click(function (event) { event.stopPropagation(); });\n $('#interstitial, .cancel, .close, .close:before').click(dismiss);\n $(document).keyup(function (event) { if (event.keyCode == 27) { dismiss(); } });\n});\n\n// -------------------------------------------\n\n// Manage modal dialog (specific)\n\n// Setup variables to be populated by brand level functions\nvar character;\nvar nickname;\nvar fact;\n\n// -------------------------------------------\n\n// Delay submission by default to allow image to load\nvar submit = false;\n\n// Setup variables for form submission\nvar form;\nvar delay;\n\n// Wait for image to load before submitting form\nfunction submitForm() {\n // Re-check if we can submit form every 0.5 seconds\n if (submit == false) { setTimeout(function () { submitForm() }, 500); }\n // Submit form when flag equals true (e.g. image is loaded or 3 seconds has elapsed)\n else { setTimeout(function () { form.submit(); }, delay); }\n}\n\n// -------------------------------------------\n\n// Display intermission message; user cannot dismiss\nfunction intermission(type) { // Optional 'type' parameter for booking message\n // Set body to posiiton:fixed to force toolbars\n fixBody(true);\n // Set character/nickname/fact\n intermissionData();\n // Set brand\n var brandname\n switch (brand) {\n case 'dlp': brandname = 'Disneyland® Paris'; break;\n case 'wdw': brandname = 'Walt Disney World®'; break;\n case 'dcl': brandname = 'Disney Cruise Line®'; break;\n }\n // Setup messages\n $('#intermission h2').html('Just a moment, ' + nickname + '!');\n $('#intermission h3').html('Please wait a moment while we\\'re searching for your ' + brandname + ' holiday!');\n $('#intermission p:first').html('Did you know? ' + fact);\n // Load image\n $('#intermission .image').addClass(character);\n $('#intermission .image img').attr('src', '/images/modal/' + character + '.png');\n // Listen for callback or give up after 3 seconds\n $('#intermission .image img').load(function () { submit = true; });\n setTimeout(function () { submit = true; }, 3000); // Fallback\n // Alternative message for payment/booking\n if (type == 'booking') { $('#intermission h3').html('Please wait while we process your holiday payment - this may take a few minutes!'); }\n // Add intermission class to dialog\n $('#dialog').addClass('intermission has-image');\n // Show dialog\n modal('#intermission', false);\n // Dialog is not dismissable\n dismissable = false;\n}\n\n// -------------------------------------------\n\n// Display warning message; user can dismiss\nfunction warning(message, advisory) {\n // Dialog is dismissable\n dismissable = true;\n $('#dialog').addClass('dismissable');\n // Set class and content\n $('#dialog').addClass('warning');\n $('#warning h3').html(message); $('#warning p:first').html(advisory);\n // Show dialog\n modal('#warning', true);\n}\n\n// -------------------------------------------------------------------------------------------------------------------\n// -------------------------------------------------------------------------------------------------------------------\n\n// Generic\n\n// Sliding panel for Disney deal terms, etc.\nif ($('#terms').length) { $('.footer a').click(function () { $('#terms').slideDown(); }); };\n\n// Clicking wrapper also clicks button; stopPropagation on input to prevent loop\n$('span.button,span.cancel,span.disabled').click(function () { $(this).find(\"input\").click(); }); $('span > input').click(function (event) { event.stopPropagation(); });\n\n// Scroll to corresponding anchor on page; applies to any with 'anchor' attribute\n$('a[anchor]').click(function () { jQuery.scrollTo($(this).attr('anchor'), 400, { offset: -10, axis: 'y' }); });\n\n// Scroll to terms in footer from sample itinerary package\n$('.synopsis small a').click(function () { jQuery.scrollTo('.footer', 400, { offset: -10, axis: 'y' }); });\n\n//Read more/less t&c's button\n$(\"a.show-hide\").click(function () {\n var txt = $(\"#terms\").is(':visible') ? 'More...' : 'Less...';\n $(\".show-hide\").text(txt);\n $('#terms').slideToggle(200);\n});\n\n$(\"a.show-hide-generic\").click(function () {\n // get panel to show and hide\n var pnlId = $(this).attr(\"data-panel\");\n var flagUseMoreLess = $(this).attr(\"data-panelusemoreless\");\n \n if (flagUseMoreLess == \"1\" || flagUseMoreLess == \"true\") {\n var txt = $(\"#\" + pnlId).is(':visible') ? 'More...' : 'Less...';\n $(this).text(txt);\n }\n\n $(\"#\" + pnlId).slideToggle(200);\n});\n\n// -------------------------------------------------------------------------------------------------------------------\n// -------------------------------------------------------------------------------------------------------------------\n\n// Bookflow\n\n// -------------------------------------------\n\n/* Popups */\n\n// Manage popup for luggage\nfunction luggage() {\n _gaq.push(['_trackEvent', 'Book', 'Enquiry', 'Hold Luggage']);\n warning('Hold Luggage.', 'Your booking includes hold luggage, typically one hold bag per person, although this may vary for infants. Luggage weight allowance will differ dependant on your airline carrier. You should check with your airline for specific luggage rules before travel.');\n};\n\n// -------------------------------------------\n\n// Select hotel\n$('.accommodation .images img').click(function () { $(this).closest('.accommodation').find('input').click(); });\n\n// Select room\n$('.errata .expand a').click(function (event) { event.preventDefault(); $('.errata .expand').hide(); $('.errata .details').show(); _gaq.push(['_trackEvent', 'Book', 'Enquiry', 'Errata']); });\n\n// Itinerary\n$('.itinerary .luggage a').click(function (event) { event.preventDefault(); luggage(); });\n\n// Passenger details: check input on DoB field on click, then clear and remove 'grey' class if value is DD/MM/YYYY\n$('#passengers .details input[name*=\"dob\"]').focus(function () { if ($(this).val() == 'DD/MM/YYYY') { $(this).val(''); }; $(this).removeClass('grey'); });\n\n// -------------------------------------------\n\n//Suppressed as part of DEV-1137 GDPR: First Layer Fair Privacy Notice\n\n// Toggle the T&C checkboxes on country in contact details forms\n//function toggleCountrySpecificContent(country, locationChanged) {\n// if (locationChanged) { $(\"label[for='group']\").removeClass('error'); };\n// var selectedCountry = country.toLowerCase();\n// var elements = $(\"[data-location~='\" + selectedCountry + \"']\");\n// if (elements.length > 0)\n// {\n// $(\"[data-location!='\" + selectedCountry + \"'][data-location]\").css('display', 'none');\n// $(\"[data-location~='\" + selectedCountry + \"']\").show();\n// } else {\n// $(\"[data-location='']\").show();\n// $(\"[data-location][data-location!='']\").css('display', 'none');\n// }\n//}\n\n// Check retained selected country value on page refresh to ensure country-specific content remains visible/hidden\n//if ($(\"#country\").length) {\n //toggleCountrySpecificContent($('#country').find(':selected').text(), false);\n//};\n\n// Check country and advise that payment is in local currency\n$('.contact #country').change(function () {\n var locale = $('#country').attr('data-locale');\n var country = $('#country').val();\n// toggleCountrySpecificContent(country, true);\n if (locale == \"gbr\" && country != 'United Kingdom') { warning('Please note that all payments are in pounds sterling.', 'Payment for your holiday will be taken against your credit or debit card in British pounds sterling (GBP), rather than in your local currency.'); _gaq.push(['_trackEvent', 'Alert', 'Checkout', 'GBP Payment']); }\n else if ((locale == \"irl\" || locale == \"eur\") && (country == 'Bulgaria' || country == 'Croatia' || country == 'Czech Republic' || country == 'Denmark' || country == 'Hungary' || country == 'Poland' || country == 'Romania' || country == 'Sweden' || country == 'United Kingdom')) {\n warning('Please note that all payments are in euros.', 'Payment for your holiday will be taken against your credit or debit card in euros (EUR), rather than in your local currency.'); _gaq.push(['_trackEvent', 'Alert', 'Checkout', 'EUR Payment']);\n }\n});\n// -------------------------------------------\n\n// Non-EU\n$('.billing a').click(function () { warning('Sorry, we can only take payment within the European Union.', 'If you reside outside of the European Union please visit your local travel provider for information on Walt Disney World or to book your holiday.'); _gaq.push(['_trackEvent', 'Book', 'Enquiry', 'European Union Only']); });\n\n// Track marcomms opt-in/outs in Google Analytics\n$('#contact .updates input').change(function () {\n // Opt-in/out\n if ($('input:checked').val() == 'Y') { _gaq.push(['_trackEvent', 'Marketing', 'Booking', 'Opt-In']); }\n if ($('input:checked').val() == 'N') { _gaq.push(['_trackEvent', 'Marketing', 'Booking', 'Opt-Out']); }\n});\n\n// -------------------------------------------\n\n// Hotels\n\n// Clicking anywhere on a hotel clicks through to details, not just the link\n$('.resort img').click(function () { window.location = $(this).parent().find('a').attr('href'); })\n\n// Track outbound clicks on TripAdvisor links\n$('.resort p.reviews').click(function (event) {\n // Prevent event from bubbling up the DOM tree\n event.preventDefault();\n event.stopImmediatePropagation();\n // Get TripAdvisor link\n var link = $(this).attr('data-review');\n // Track in GA\n _gaq.push(['_trackEvent', 'Outbound Link', 'TripAdvisor', link, ]);\n // Redirect to Target URL after .25 second delay\n setTimeout(function () { window.open(link, '_blank') }, 250);\n});\n\n// -------------------------------------------\n\n// Deals\n$('.offer img').click(function () { window.location = $(this).parent().find('a').attr('href'); })\n\n// -------------------------------------------------------------------------------------------------------------------\n// -------------------------------------------------------------------------------------------------------------------\n\n// Ensure interstitial and overlay are hidden on unload in case user goes 'Back' in browser; bind 'pagehide' for iOS\n$(window).unload(function () { collapse(); });\n$(window).bind('pagehide', function () { collapse(); });\n\n// -------------------------------------------------------------------------------------------------------------------\n// -------------------------------------------------------------------------------------------------------------------\n\n// On ready\n$(document).ready(function () {\n\n // -------------------------------------------------------------------------------------------------------------------\n\n // Generic\n\n // Track outbound click in current window (target=_self)\n $('a[href^=\"http\"][target!=\"_blank\"]').click(function (event) {\n // Pause click\n event.preventDefault();\n // Track outbound click\n outboundClick($(this), false);\n });\n\n // Track outbound click in new window (target=_blank)\n $('a[href^=\"http\"][target=\"_blank\"]').click(function (event) {\n // Track outbound click\n outboundClick($(this), true);\n });\n\n // -------------------------------------------------------------------------------------------------------------------\n\n // On load\n\n // Ensure interstitial and overlay are hidden on load; bind 'pageshow' for iOS; exclude interstitial\n if (!$('body').hasClass('interstitial')) { collapse(); $(window).bind('pageshow', function () { collapse(); }); }\n\n // Log errors in Google Analytics\n logErrors();\n\n // -------------------------------------------------------------------------------------------------------------------\n\n // Homepage and WDW Ticket Store\n\n // Setup billboard carousel on portfolio/brand homepages\n if($('body').hasClass('homepage')) {\n // Setup\n billboard = $('.billboard');\n initialiseBillboard();\n // On initialise\n $('.billboard').on('init', function(event, slick) { \n\t logSlide(0); \n\t });\n // On after slide change\n $('.billboard').on('afterChange', function(event, slick, currentSlide, nextSlide) { \n\t logSlide(currentSlide); \n\t });\n }\n\n // Setup billboard carousel on content pages e.g. WDW Ticket Store\n if($('#body').hasClass('carousel')) {\n // Setup\n billboard = $('.billboard');\n initialiseBillboard('contentPage');\n }\n\n\tif($('#body.carousel #banner-message').length != 0) {\n\t\t$('.billboard').addClass('top-border-radius');\n\t}\n\t\n // -------------------------------------------\n\n // Submit form on FAQs drop menu selection\n $('.faq #category').change(function () { $('#form').submit(); });\n\n // -------------------------------------------\n\n});\n\n// -------------------------------------------\n//planning\n// Check date of birth\nvar validDoB = function (day, month, year, ageError) {\n // Get now\n var now = moment();\n // Build DoB\n day = parseInt($(day).val());\n month = parseInt($(month).val());\n year = parseInt($(year).val());\n // Do we have three valid date values?\n if (!isNaN(day) && !isNaN(month) && !isNaN(year)) {\n // Convert to moment\n var dob = moment([year, month - 1, day]);\n // Is this a valid date of birth?\n if (dob.isValid()) {\n // Does this DoB make the guest less than 18 years old?\n if (dob.isAfter(now.subtract(18, 'y'))) { warning(ageError[0], ageError[1]); }\n }\n }\n};\n\n//Signup validation\nif ($(\"#body.signup\").length) {\n //initialization\n var ageError = ['Sorry, you must be 18+.', 'You must be over 18 years old to sign up for our special offers and news, so please ask a grown-up for help.'];\n var day = '#body.signup #day', month = '#body.signup #month', year = '#body.signup #year';\n\n // Check valid DoB\n $(day + \", \" + month + \", \" + year).change(function () {\n validDoB(day, month, year, ageError);\n });\n\n // Check if this is the confirmation screen and fire GA event\n if ($(\"#body.signup\").attr('data-step') == 'confirmation') { _gaq.push(['_trackEvent', 'Marketing', 'Signup', 'Opt-In']); }\n};\n\n\n\n// -------------------------------------------"]}