/// <asp:ScriptReference Path="~/js/jquery-1.7.2.min.js" />
/// <asp:ScriptReference Path="~/js/jquery-ui-1.8.20.custom.min.js" />

// jQuery v1/v2 XSS vulnerability fix
jQuery.htmlPrefilter = function( html ) {
	return html;
};
//

/*
Namespacing
*/
//http://addyosmani.com/blog/essential-js-namespacing/
function extend(destination, source) {
    var toString = Object.prototype.toString,
        objTest = toString.call({});
    for (var property in source) {
        if (source[property] && objTest == toString.call(source[property])) {
            destination[property] = destination[property] || {};
            extend(destination[property], source[property]);
        } else {
            destination[property] = source[property];
        }
    }
    return destination;
};

var saffire = saffire || {};

extend(saffire, {
    utils: {

        getWidgetData: function(opts) {
          return new Promise(function(resolve, reject) {
            $.ajax({
              type: "POST",
              url: opts.scriptPath,
              data: "{'widgetModuleItemID':" + opts.currentWidgetModuleItemID + "}",
              contentType: opts.contentType,
              dataType: opts.dataType,
              success: function(data) {
                resolve(data.d)
              },
              error: function(data) {
                console.log('Sponsor Widget failed to load', '\n' + 'Status: ' + data.status + ' ' + data.statusText, '\n' + data.responseText);
                reject(data.responseText);
              }
            });
          });
        }

    }
});

/*********************************
Global Variables
**********************************/

var windowTopValue = 5;  // value used for "sticky headers" - can be redeclared in local ascx files ... re-evaluate if still needed
var isIE = /*@cc_on!@*/false || !!document.documentMode;

/*********************************
General Functions
**********************************/

/**
 Function to add numbers (ints and floats) and keep 2 decimals
 The + forces a number to be returned since toFixed returns a string
**/
function AddNumbers(num1, num2) {
    return +(num1 + num2).toFixed(2)
}


// "IE not supported" Banner & IE body class
(function () {
  if (isIE) {
    var $body = $('body');
    var ieBannerHTML = '\
      <div id="ie-banner" class="ie-banner">\
        <div>\
          <span class="ie-banner__title">\
          <img src="/images/icon-exclamation-orange.png" alt="warning">\
          Whoops! Looks like you are using an outdated browser. <br>You might experience display issues.</span>\
          <p>We recommend viewing this site with one of the following browsers:</p>\
          <div class="ie-banner__browsers">\
            <a href="https://www.google.com/chrome/" class="ie-banner__browsers__ch" target="_blank">\
              <img src="/images/logo-gchrome.svg" alt="Google Chrome">\
              <span>Google Chrome</span>\
            </a>\
            <a href="https://www.mozilla.org/en-US/firefox/new/" class="ie-banner__browsers__ff" target="_blank">\
              <img src="/images/logo-mfirefox.svg" alt="Mozilla Firefox">\
              <span>Mozilla Firefox</span>\
            </a>\
            <a href="https://www.microsoft.com/en-us/edge/" class="ie-banner__browsers__ed" target="_blank">\
              <img src="/images/logo-msedge.svg" alt="Microsoft Edge">\
              <span>Microsoft Edge</span>\
            </a>\
          </div>\
        </div>\
      </div>\
    ';
    $body.prepend(ieBannerHTML);
    $body.addClass('browser-ie');
    console.log('Whoops! Looks like you are using an outdated browser. You might experience display issues.');
  } else {
    return false;
  }
})();  
// -----

function toggleEventPane() {
    var checkClass = $('.eventCol1').hasClass('calendarControlsOpen');
    if (checkClass) {
        if ($('body').hasClass('saffireMobileSize')) {
            $('.eventCol1').removeClass('calendarControlsOpen');
            $('.eventCol1 .clickEventUpload').removeClass("button");
            $('body').removeClass('calendarControlsCurrentlyOpen');
            $('.eventCol2 #calendarMobileToggle').addClass('button');
            $('#businessListing .eventCol1 .planner-link').css("font-size", "0");
        }
    } else {
        if ($('body').hasClass('saffireMobileSize')) {
            $('.eventCol1').addClass('calendarControlsOpen');
            $('.eventCol1 .clickEventUpload').addClass("button");
            $('body').addClass('calendarControlsCurrentlyOpen');
            $('.eventCol1').scrollTop(0);
            $('.eventCol2 #calendarMobileToggle').removeClass('button');
            $('#businessListing .eventCol1 .planner-link').css("font-size", "inherit");
        }
    }
}

function openSinglePlayer(singleSong, songTitle) {
    singleSong = escape(singleSong);
    songTitle = escape(songTitle);
    window.open(SITEBASEURL + 'MusicPlayer.aspx?sf=' + singleSong + '&sfn=' + songTitle, 'null', 'width=480,height=160,toolbar=no,scrollbars=no,location=no,resizable=no');
};

function processCartTimers() {

    for (ce = 0; ce < cartExpirations.length; ce++) {

        var cartExpiration = cartExpirations[ce];
        var secondsLeft = cartExpiration.secondsLeft - parseInt((new Date().getTime() - pageLoadedDate) / 1000);
        var elements = $('.cartTimer_' + cartExpiration.cartItemID.toString());

        for (cee = 0; cee < elements.length; cee++) {
            var element = $(elements[cee]);
            var cartTimer = element.find('.cartCountDown')
            var cartNonExpiredMessage = element.find('.cartNonExpiredMessage')
            var cartExpiredMessage = element.find('.cartExpiredMessage')

            cartTimer.html(secondsToTime(secondsLeft));

            if (secondsLeft > 0) {
                cartNonExpiredMessage.css('display', 'block');
                cartExpiredMessage.css('display', 'none');
            } else {
                cartNonExpiredMessage.css('display', 'none');
                cartExpiredMessage.css('display', 'block');
            }

            element.css('visibility', 'visible');
        }

        if (secondsLeft <= 0 && cartExpiration.showNotifications && !cartExpiration.notificationShown) {
            cartExpiration.notificationShown = true;
            openInvalidCartItemsModal();
        }

    }

}

function openInvalidCartItemsModal() {

    OpenModal('modal', SITEBASEURL + 'modalucLoader.aspx?controlPath=~/Core/Checkout/CheckoutInvalidCart.ascx', '450', '400', { 'OnClosePostBack': true, 'OnCloseTargetID': 'cartUpdated', 'Parent': window, 'ScrollFrame': true })
}

function ShowMessage() {
    OpenModal('modal', '', '400px', '200px', { 'Parent': window, 'dialogID': 'messageModal' });
}

function updateClonedSubmit() {
    var keywords = $('.clonedSearchBox .searchBoxInput input').val();
    search(keywords);
}

function searchByInputID(id) {
    var keywords = $('#' + id).val();
    search(keywords);
}

function search(keywords) {
    if (keywords != '') {
        window.location = SITEBASEURL + 'search.aspx?q=' + keywords;
    }
}

String.prototype.format = function () {
    var args = arguments;
    return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
        if (m == "{{") { return "{"; }
        if (m == "}}") { return "}"; }
        return args[n];
    });
};

String.prototype.toInteger = function () {
    if ($.isNumeric(this)) {
        return parseInt(this);
    }

    return 0;
}

Number.prototype.toInteger = function () {
    return this;
}

Number.prototype.formatMoney = function (c) {
    var n = this,
        c = isNaN(c = Math.abs(c)) ? 2 : c,
        d = ".",
        t = ",",
        s = n < 0 ? "-" : "",
        i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))),
        j = (j = i.length) > 3 ? j % 3 : 0;
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};

Number.prototype.pad = function (size) {
    var s = String(this);
    while (s.length < (size || 2)) { s = "0" + s; }
    return s;
}

Number.prototype.roundToDecimal = function (decimals) {
    return parseFloat(this.toFixed(decimals))
}

// IE Polyfill for Number.isInteger
if (isIE) {
  Number.isInteger = Number.isInteger || function(value) {
    return typeof value === 'number' && 
      isFinite(value) && 
      Math.floor(value) === value;
  };
}

function rgb2hex(rgb) {
    if(rgb != '' && rgb != undefined) {
        rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);
        function hex(x) {
            return ("0" + parseInt(x).toString(16)).slice(-2);
        }
        return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
    }
    return '';
}

function redirect(page) {
    window.location.href = page
}

function OpenWindow(page, params) {
    open_window(page, params)
}

function open_window(page, params) {
    window.open(page, "popup", params)
}

function getWindowTop() {

    var topWindow = window
    var withinDomain = true;

    while (topWindow != window.top && withinDomain) {

        try{
            var parentWindowLocation = topWindow.parent.location.host.toLowerCase();

            topWindow = topWindow.parent
        }
        catch(err){
            withinDomain = false;
        }

    }
  
    return topWindow

}

function isInCrossDomainIframe() {

    var topWindow = window
    var withinDomain = true;

    while (topWindow != window.top && withinDomain) {

        try{
            var parentWindowLocation = topWindow.parent.location.host.toLowerCase();

            topWindow = topWindow.parent
        }
        catch(err){
            withinDomain = false;
        }

    }

    return !withinDomain

}

function resizeIframe(obj) {
    obj.style.height = 0;
    obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';
}

function IsNumeric(sText) {
    var ValidChars = "0123456789.";
    var IsNumber = true;
    var Char;

    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
}

function secondsToTime(seconds) {

    if (seconds < 0) {
        seconds = 0;
    }

    var minutes = parseInt(seconds / 60);
    seconds = seconds - (minutes * 60);

    var hours = parseInt(minutes / 60);
    minutes = minutes - (hours * 60);

    var times = [];

    if (hours) {
        times.push(hours.pad(2).toString());
    }
    times.push(minutes.pad(2).toString());
    times.push(seconds.pad(2).toString());

    return times.join(":")

}

function guid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}

function stringIsNullOrEmpty(text) {
    if (text == undefined) {
        return true;
    }
    else if (text.trim() == '') {
        return true;
    }

    return false
}

function stopBubbling(e) {

    if (!e)
        e = window.event;

    if (e.stopPropagation)
        e.stopPropagation();

    if (e.preventDefault)
        e.preventDefault();

    e.cancelBubble = true;
    e.cancel = true;
    e.returnValue = false;
    return false;

}

function DefaultButton(btnID, e) {
    default_button(btnID, e);
}

function default_button(btnID, e) {
    var btn = document.getElementById(btnID);

    if (document.all) {
        var code = null;
        code = (e.keyCode ? e.keyCode : e.which);
        if (code == 13 || code == 10) {
            stopBubbling(e);
            btn.click();
        }
    } else if (document.getElementById || document.layers) {

        if (e.which == 13 || e.which == 10) {

            if (btn && btn.tagName == 'A') {
                if (btn.onclick) {
                    result = btn.onclick;
                }

                if (typeof (result) == 'undefined') {
                    eval(btn.getAttribute('href'));
                }
                else {
                    stopBubbling(e)
                    $('.textbox').blur();
                    result();
                }

            } else if (btn && btn.click) {

                stopBubbling(e)
                btn.click();

            } else if (btn && btn.onclick) {

                var temp = eval(btn.onclick);
                if (temp) {
                    stopBubbling(e);
                    temp(e);
                }

            }
        }
    }
}

escapeRegularExpression = function (text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

/*********************************
Google Translate
**********************************/

function googleTranslateElementInit() {
    new google.translate.TranslateElement({
        pageLanguage: 'en',
        autoDisplay: false,
        includedLanguages: 'en,tl,fr,de,id,pl,pt,ru,es,th,ko',
        layout: google.translate.TranslateElement.InlineLayout.SIMPLE
    }, 'google_translate_element');
}

/*********************************
Google Analytics
**********************************/

function sendGA4PurchaseEvent(data, aggregate, targetID) {

    var gItems = [];

    for (var i = 0; i < data.items.length; i++) {

        var item = data.items[i];

        var gItem = {
            item_id: item.id,
            item_name: item.name,
            affiliation: aggregate ? ORGANIZATIONNAME : '',
            currency: data.currency,
            item_category: item.category,
            item_category2: item.subcategory,
            price: item.pricePer,
            quantity: item.quantity
        }

        gItems.push(gItem);
    }

    gtag("event", "purchase", {
        send_to: targetID,
        transaction_id: aggregate ? '{0}_{1}'.format(data.id, RID) : data.id,
        affiliation: aggregate ? ORGANIZATIONNAME : '',
        value: data.total,
        currency: data.currency,
        coupon: data.discountApplied,
        items: gItems
    });
}

/***Email Signup****/

var emailSignupInitialText;
var emailSignupTbx;

function EmailSignup(tbxID, initialText, listName, mobile, e) {
    var tbx = $get(tbxID);

    if (tbx) {

        emailSignupInitialText = initialText;
        emailSignupTbx = tbx;

        if (tbx.value == '' || tbx.value == initialText) {
            setTimeout('alert(\'Invalid Email Address\');', 100);
        } else {
            if (mobile) {
                saffire.web.services.general.emailSignup(tbx.value, listName, EmailSignupSuccessMobile, EmailSignupError);
            } else {
                saffire.web.services.general.emailSignup(tbx.value, listName, EmailSignupSuccess, EmailSignupError);
            }

        }
    } else {
        setTimeout('alert(\'Invalid Email Address\');', 100);
    }
}

function EmailSignupSuccess(result) {
    if (result.result == 1) {
        emailSignupTbx.value = emailSignupInitialText;

        OpenModal('modal', SITEBASEURL +'I_thanks.aspx?e=' + result.message, '510px', '140px', 'no')
    } else {
        alert(result.message)
    }
}

function EmailSignupSuccessMobile(result) {
    if (result.result == 1) {
        var redirectPage = 'I_thanks.aspx?e=' + result.message
        emailSignupTbx.value = emailSignupInitialText;

        window.location = redirectPage;
    } else {
        alert(result.message)
    }
}

function EmailSignupError(result) {
    if (result.message == null) {
        alert('There was an error processing your submission.  Please try again shortly.')
    } else {
        alert(result.message);
    }
}


function Search(initialText, tbx) {
    if (tbx) {
        var Query = tbx.value;

        if (Query == '' || Query == initialText) {
            setTimeout('alert(\'Invalid Search Criteria\');', 100)
        } else {
            redirect(SITEBASEURL + 'search.aspx?q=' + escape(Query));
        }
    }
}

function crossBrowserOuterHTML(node) {
    return node.outerHTML || new XMLSerializer().serializeToString(node);
}

function getURLRewriteParameterFromDate(parameterDate) {

    var year = parameterDate.getFullYear().toString();
    var month = (parameterDate.getMonth() + 1).toString();
    var day = parameterDate.getDate().toString();

    if (month.length == 1) {
        month = "0" + month;
    }

    if (day.length == 1) {
        day = "0" + day;
    }

    return month + day + year;
}

/***Update Signup****/

var updateSignupInitialText;
var updateSignupTbx;


function UpdateSignup(tbxID, initialText, listName, mobile, textSupported, e) {
    var tbx = $get(tbxID);

    if (tbx) {

        var errorMsg = 'Invalid Email Address'

        if (textSupported) {
            errorMsg = 'Invalid Email Address or Phone Number'
        }

        updateSignupInitialText = initialText;
        updateSignupTbx = tbx;

        if (tbx.value == '' || tbx.value == initialText) {
            setTimeout('alert(\'' + errorMsg + '\');', 100);
        } else {

            var isEmail = (tbx.value.indexOf("@") > 0)

            if (isEmail || textSupported == false) {
                if (mobile) {

                } else {
                    var leadEventID =  guid();
                    saffire.web.services.general.emailSignup(tbx.value, listName, EmailSignupSuccess, EmailSignupError, leadEventID);

                    if (window.top.FB_CONFIG && window.top.fbq) {
                        window.top.fbq('track', 'Lead', null, { eventID: leadEventID });
                    }
                }
            }
            else {

                var phoneNumber = tbx.value.replace(/-/gi, "").replace(/\(/gi, "").replace(/\)/gi, "").replace(/ /gi, "")

                if (IsNumeric(phoneNumber) && phoneNumber.length == 10) {

                    window.top.OpenModal('modal', SITEBASEURL + 'modalUCLoader.aspx?controlPath=~/Events/General/TextSignup.ascx&pn=' + tbx.value + '&list=' + listName, '510px', '246px', 'no')

                    updateSignupTbx.value = updateSignupInitialText;

                }
                else {
                    setTimeout('alert(\'Invalid phone number\');', 100);
                }
            }



        }
    } else {
        setTimeout('alert(\'' + errorMsg + '\');', 100);
    }
}

function EmailSignupSuccess(result) {

    var isInTopWindow = window.location.href === window.top.location.href;

    switch (result.result) {
        case 1:
            //No extra email fields
            updateSignupTbx.value = updateSignupInitialText;

            var url = SITEBASEURL + 'I_thanks.aspx?e=' + result.message;

            if (isInTopWindow) {
                window.top.OpenModal('modal', url, '510px', '140px', 'no');
            } else {
                window.location.href = url;
            }

            break;
        case 2:
            //Needs more info

            var url = SITEBASEURL + 'modalUCLoader.aspx?controlPath=~/Core/Content/EmailSignupFields.ascx&em=' + updateSignupTbx.value + '&list=' + result.message;

            if (isInTopWindow) {
                window.top.OpenModal('modal', url, '510px', '300px', { 'ScrollFrame': true });
            } else {
                window.location.href = url;
            }


            updateSignupTbx.value = updateSignupInitialText;

            break;
        default:
            alert(result.message)
    }

}

function EmailSignupSuccessMobile(result) {
    if (result.result == 1) {
        var redirectPage = 'I_thanks.aspx?e=' + result.message
        emailSignupTbx.value = emailSignupInitialText;

        window.location = redirectPage;
    } else {
        alert(result.message)
    }
}

function EmailSignupError(result) {
    if (result.message == null) {
        alert('There was an error processing your submission.  Please try again shortly.')
    } else {
        alert(result.message);
    }
}

/***Search***/

function Search(initialText, tbx) {
    if (tbx) {
        var Query = tbx.value;

        if (Query == '' || Query == initialText) {
            setTimeout('alert(\'Invalid Search Criteria\');', 100)
        } else {
            redirect(SITEBASEURL + 'search.aspx?q=' + escape(Query));
        }
    }
}

function crossBrowserOuterHTML(node) {
    return node.outerHTML || new XMLSerializer().serializeToString(node);
}

/***IMAGE CACHING FUNCTIONS***/
function MM_swapImgRestore() { //v3.0

    var i, x, a = document.MM_sr; for (i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++) x.src = x.oSrc;
}

function MM_preloadImages() { //v3.0
    var d = document; if (d.images) {
        if (!d.MM_p) d.MM_p = new Array();
        var i, j = d.MM_p.length, a = MM_preloadImages.arguments; for (i = 0; i < a.length; i++)
            if (a[i].indexOf("#") != 0) { d.MM_p[j] = new Image; d.MM_p[j++].src = a[i]; }
    }
}

function MM_findObj(n, d) { //v4.01
    var p, i, x; if (!d) d = document; if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
        d = parent.frames[n.substring(p + 1)].document; n = n.substring(0, p);
    }
    if (!(x = d[n]) && d.all) x = d.all[n]; for (i = 0; !x && i < d.forms.length; i++) x = d.forms[i][n];
    for (i = 0; !x && d.layers && i < d.layers.length; i++) x = MM_findObj(n, d.layers[i].document);
    if (!x && d.getElementById) x = d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
    var i, j = 0, x, a = MM_swapImage.arguments; document.MM_sr = new Array; for (i = 0; i < (a.length - 2); i += 3)
        if ((x = MM_findObj(a[i])) != null) { document.MM_sr[j++] = x; if (!x.oSrc) x.oSrc = x.src; x.src = a[i + 2]; }
}
/***/
/**MODAL MANAGEMENT**/

CurrentModalDialogs = [];

$OpenModalAutoHide = function ($element, settings) {

    var effectiveSettings = {
        modal: false,
        autoHide: true,
        resizable: false,
        draggable: false,
        element: $element
    }

    effectiveSettings = $.extend(effectiveSettings, settings);

    $OpenModal(effectiveSettings);

}

$OpenModal = function (settings) {

    var effectiveSettings = {
        modal: true,
        autoOpen: true,
        closeOnEscape: true,
        draggable: true,
        resizable: false,
        forceFitInContainer: false,
        width: settings.width,
        height: settings.height,
        buttons: [],
        open: OpenDialogHandler, /*DONT CHANGE, CALLBACKS SHOULD BE HANDLED THROUGH customCallbacks PROPERTY*/
        close: CloseDialogHandler, /*DONT CHANGE, CALLBACKS SHOULD BE HANDLED THROUGH customCallbacks PROPERTY*/
        closeText: '&nbsp;',
        //custom settings (not part of jquery ui dialog defaults, but used in our implementation)
        dialogID: '',
        element: null,
        iframe: {
            url: null,
            scrolling: 'no'
        },
        customCallbacks: {
            open: function() {
              var thisModal = $('#dynamicModal iframe');
              thisModal.attr('tabindex','0');
              thisModal.load(function(){ 
                thisModal.contents().find('body').append('<a href="javascript:void(0)" class="modalTopJump" aria-label="jump to top of modal"></a>');
                $(".ui-dialog-titlebar a.modalCloseButton").attr('tabindex','0');
                var focusable = $("#dynamicModal iframe").contents().find('a.button');
                var closeButton = $(".modalClose a.modalCloseButton");
                var lastFocusable = focusable.last();
                if (focusable.length < 0) {
                  thisModal.contents().find('body').append('<a href="javascript:void(0)" class="modalTopJump"></a>');
                  thisModal.contents().find('#eventEntryModal').append('<a href="javascript:void(0)" class="modalTopJump" aria-label="jump to top of modal"></a>');
                  lastFocusable = thisModal.contents().find('.modalTopJump');
                }
                thisModal.contents().find('input:not([type="hidden"]), select, textarea').first().focus();
                lastFocusable = thisModal.contents().find('.modalTopJump');
                lastFocusable.keydown(function(e) {
                  if (e.which === 9) {
                    e.preventDefault();
                    closeButton.focus();
                  }
                });
                thisModal.contents().find('.modalTopJump').on('keydown', function(e) {
                  if (e.which === 13) {
                    e.preventDefault();
                    closeButton.focus();
                  }
                });
            });
            },
            close: null
        },
        postback: {
            parent: null,
            enabled: false,
            targetID: null,
            eventArgs: null
        },
        isDynamic: false,
        autoHide: false,
        autoHideDelay: 1000,
    };

    if (settings) {

        //handle legacy settings
        if (settings.OnCloseCallbackFunction && typeof settings.OnCloseCallbackFunction === 'function') {
            effectiveSettings.customCallbacks.close = settings.OnCloseCallbackFunction;
        }
        effectiveSettings.postback.enabled = !!settings.OnClosePostBack;
        effectiveSettings.postback.targetID = settings.OnCloseTargetID;
        effectiveSettings.postback.eventArgs = settings.OnCloseEventArg;
        effectiveSettings.postback.parent = settings.Parent;
        if (effectiveSettings.ScrollFrame) effectiveSettings.iframe.scrolling = 'auto';

        effectiveSettings = $.extend(effectiveSettings, settings);

    }

    if (window.top != window.self) {
        //effectiveSettings = $.extend(effectiveSettings, {position: {my: 'top', at: 'top', of: 'window'}});
    }

    var $element;
    if (effectiveSettings.element == null) {

        if (effectiveSettings.dialogID != '') {
            $element = $('#' + effectiveSettings.dialogID);
        }

        if ($element == null) {
            if (window.top != window.self) {
                var rand = Math.floor(Math.random() * (5 - 1) + 1);
                effectiveSettings = $.extend(effectiveSettings, {position: {my: "center",  at: "center", of: window.parent.$("body"), within: window.parent.$("body")}});
                $element = $("<div id='dynamicModal"+rand+"' class='modal nested'></div>");
                effectiveSettings.dialogID = 'dynamicModal' + rand;
                window.parent.$('body').append($element);
            } else {
                $element = $("<div id='dynamicModal' class='modal'></div>");
                effectiveSettings.dialogID = 'dynamicModal';
            }
            settings.isDynamic = true;
        }

    }

    var dialogID = effectiveSettings.dialogID;

    //set innerHtml of target (if a url is provided)
    if (effectiveSettings.iframe.url) {
        var isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);
        var scrollable = isIOS ? "no" : "undefined";
        $element.append('<iframe src="' + effectiveSettings.iframe.url + '" width="100%" height="100%" onload="keyboardFix(this)" scrolling="'+ scrollable +'" frameborder="0" />');
    }

    //adjust for padding
    effectiveSettings.height = parseInt(effectiveSettings.height) + 85
    effectiveSettings.width = parseInt(effectiveSettings.width) + 20

    //create title bar contents
    var modalCloseButtonClass;
    if(isResponsive){
        modalCloseButtonClass= "modalCloseButton button";
    } else {
        modalCloseButtonClass= "modalCloseButton";
    }
    $modalCloseContainer = $("<div class='modalClose' style='width:100%;text-align: right;'></div>");
    $modalCloseButton = $("<a title='Close' class='"+modalCloseButtonClass+"' href='javascript:void(0)'></a>");
    $modalCloseButton.on('click', function () { $HideModal($element) });
    $modalCloseContainer.append($modalCloseButton);

    //open the dialog
    console.log(effectiveSettings)
    $element.dialog(effectiveSettings).prev('.ui-dialog-titlebar').append($modalCloseContainer);

    //add to list of open dialogs
    var index = CurrentModalDialogs.indexOf(dialogID);
    if (index === -1) {
        CurrentModalDialogs.push(dialogID);
    }

    if (effectiveSettings.autoHide) {
        setTimeout(function () {
            $HideModal($element);
        }, effectiveSettings.autoHideDelay);
    }

    $modalCloseButton.blur();

    return false;

}

OpenModal = function (dialogID, url, width, height, settings) {

    if (width.indexOf('px') > -1) {
        width = width.replace('px', '');
    }

    if (height.indexOf('px') > -1) {
        height = height.replace('px', '');
    }

    var effectiveSettings = {
        iframe: {
            url: url
        },
        width: width,
        height: height
    }

    effectiveSettings = $.extend(effectiveSettings, settings);

    return $OpenModal(effectiveSettings);

}

OpenDialogHandler = function (event, ui) {
    window.parent.$('body').addClass('hideBackToTop');
    var callbacks = $(this).dialog('option', 'customCallbacks');
    var dialogID = $(this).attr('id');

    //handle callback(s)
    if (callbacks.open) {
        var args = {
            event: event,
            element: this
        }
        callbacks.open(args);
    }

    //$(this).css('overflow', 'hidden');

    var forceFitInContainer = $(this).dialog('option', 'forceFitInContainer');

    if (forceFitInContainer) {

        var $this = $(this);
        var $window = $(window);

        if ($this.width() > $window.width()) {
            $this.width($window.width());
        }

        if ($this.height() > $window.height()) {
            $this.height($window.height());
        }

    }

}

keyboardFix = function(target) {
    if (Modernizr.touch == true) {
        var isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);
        if (isIOS) {
            var $target = $(target);
            var $txtFields = $target.contents().find("input[type=text], textarea");
            $txtFields.on('focus', function(e){
                window.parent.scroll(0,0);
                window.parent.$('.ui-dialog').css({position:'absolute'});
            })
            $txtFields.on('blur', function(e){
                window.parent.$('.ui-dialog').css({position:'fixed'});
            })
        }
    }
}

CloseDialogHandler = function (event, ui) {

    window.parent.$('body').removeClass('hideBackToTop');

    var callbacks = $(this).dialog('option', 'customCallbacks');
    var postback = $(this).dialog('option', 'postback');
    var hideSettings = $(this).dialog('option', 'hideSettings');
    var isDynamic = $(this).dialog('option', 'isDynamic');
    var dialogID = $(this).attr('id');
    var eventArgs = null;
    var userContext = $(this).dialog('option', 'UserContext');

    if (hideSettings) {
        eventArgs = hideSettings.EventArgs;
        if (hideSettings.AddOnCloseDoPostBack && postback) {
            postback.enabled = true;
        }
    }

    //remove from open dialogs list
    var index = CurrentModalDialogs.indexOf(dialogID);
    if (index !== -1) {
        CurrentModalDialogs.splice(index, 1);
    }

    //handle callback(s)
    if (callbacks.close) {
        var args = {
            event: event,
            element: this,
            eventTargetID: null,
            eventArgs: eventArgs,
            userContext: userContext,
        }
        callbacks.close(args);
    }

    //handle postbacks
    if (postback && postback.enabled) {
        var evtArgs = postback.eventArgs;
        var doPostback = true;
        if (hideSettings) {
            if (typeof hideSettings.EventArgs != 'undefined') {
                evtArgs = hideSettings.EventArgs;
            } else if (!evtArgs) {
                evtArgs = '';
            }
            if (hideSettings.CancelOnCloseDoPostBack && !hideSettings.AddOnCloseDoPostBack) {
                doPostback = false;
            }
        }
        //do the postback
        if (doPostback) {
            if (postback.parent) {
                postback.parent.UpdatePage(postback.targetID, evtArgs);
            } else {
                UpdatePage(postback.targetID, evtArgs);
            }
        }
    }

    if (isDynamic) {
        $(this).dialog("destroy");
        $(this).remove();
    }
}

$HideModal = function ($element) {
    $element.dialog('close');
    $element.remove();
}

HideModal = function (hideSettings) {

    if (hideSettings && hideSettings.dialogID) {
        //close a specific dialog

        $('#' + hideSettings.dialogID).dialog('option', 'hideSettings', hideSettings);
        $('#' + hideSettings.dialogID).dialog("close");

    } else {
        //close all dialogs

        var selectors = '';
        for (var x = 0, len = CurrentModalDialogs.length; x < len; x++) {
            if (selectors != '') {
                selectors += ',';
            }
            selectors += '#{0}'.format(CurrentModalDialogs[x]);
        }

        if (selectors != '') {
            $(selectors).dialog('option', 'hideSettings', hideSettings);
            $(selectors).dialog("close");
            $(selectors).remove();

        }

    }

}

OpenModalParams = function () {
    this.OnClosePostBack = false;
    this.OnCloseTargetID = '';
    this.OnCloseArgument = '';
    this.UserContext = null;
    this.OnCloseCallbackFunction = '';
    this.Parent = null;
    this.ScrollFrame = false;
}

HideModalParams = function () {
    this.EventArgs;
    this.CancelOnCloseDoPostBack = false;
    this.AddOnCloseDoPostBack = false;
}

/***/
/**Window MANAGEMENT**/

var CurrentWindow;
var CurrentWindowOnCloseDoPostBack = false;
var CurrentWindowOnCloseTargetID = '';
var CurrentWindowOnCloseEventArg = '';

function OpenWindowModal(url, width, height, OpenWindowParams) {

    if (OpenWindowParams) {
        CurrentWindowOnCloseDoPostBack = OpenWindowParams.OnClosePostBack;
        CurrentWindowOnCloseTargetID = OpenWindowParams.OnCloseTargetID;
        CurrentWindowOnCloseEventArg = OpenWindowParams.OnCloseEventArg;
        if (OpenWindowParams.ScrollFrame && OpenWindowParams.ScrollFrame == true) {
            OpenWindowParams.ScrollFrame = '1';
        }
        else {
            OpenWindowParams.ScrollFrame = '0';
        }
    }

    if (CurrentWindowOnCloseDoPostBack) {
        url = url + '&OnCloseDoPostBack=true';
    }

    if (CurrentWindowOnCloseTargetID) {
        url = url + '&OnCloseTargetID=' + CurrentWindowOnCloseTargetID;
    }

    if (CurrentWindowOnCloseEventArg) {
        url = url + '&OnCloseEventArg=' + CurrentWindowOnCloseEventArg;
    }

    var CurrentWindowOptions = 'width=' + width + ',height=' + height + ',directories=no,location=no,menubar=no,resizable=no,scrollbars=' + OpenWindowParams.ScrollFrame + ',status=0, toolbar = no';

    CurrentWindow = window.open(url, 'window', CurrentWindowOptions);

    var scrolling = 'NO';

    return true;

}

function OpenWindowParams() {
    var OnClosePostBack = false;
    var OnCloseTargetID = '';
    var OnCloseCallbackFunction = '';
    var ScrollFrame = false;
}

function HideWindow(HideWindowParams) {

    var m = CurrentWindow;

    if (m) {

        m.close();

        var _EventArgs = m.CurrentWindowOnCloseEventArg;
        if (HideWindowParams) {

            if (HideWindowParams.EventArgs != undefined) {
                _EventArgs = HideWindowParams.EventArgs;
            } else {
                if (_EventArgs == '' || _EventArgs == undefined) {
                    _EventArgs = '';
                }
            }

            if (HideWindowParams.CancelOnCloseDoPostBack) {
                m.CurrentWindowOnCloseDoPostBack = false;
            }
        }

        if (m.CurrentWindowOnCloseDoPostBack) {
            UpdatePage(m.CurrentWindowOnCloseTargetID, _EventArgs);
        }

        CurrentWindow = null;
        CurrentWindowOnCloseDoPostBack = false;
        CurrentWindowOnCloseTargetID = '';

        //Fix bug in ie9 that continues to process the page after this script runs.
        window.onerror = function () { return true; };

    }
}

function HideWindowParams() {
    var EventArgs;
    var CancelOnCloseDoPostBack = false;
}

function WindowOnCloseCallbackParams() {
    var EventTargetID = '';
    var EventArgs = '';
}

/*End Window Management*/

function getQueryStringValueByName(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.search);
    if (results == null)
        return "";
    else
        return decodeURIComponent(results[1].replace(/\+/g, " "));
}

/***PopupControlExtender***/

function ShowQuickDialog(behaviorID, params) {
    var pce = $find(behaviorID);
    if (pce) {
        if (params) {
            pce._popupBehavior.set_parentElementID(params.targetElementID);
            pce.set_OffsetX(params.offSetX);
            pce.set_OffsetY(params.offSetY);
        }

        pce.showPopup();
    }
}

function HideQuickDialog(behaviorID) {
    var pce = $find(behaviorID);
    if (pce) {
        pce.hidePopup();
    }
}

function ShowQuickDialogParams() {
    offSetX = 0;
    offSetY = 0;
    targetElementID = '';
}

/***/

function UpdatePage(target, args) {
    setTimeout('__doPostBack(\'' + target + '\', \'' + args + '\')', 100)
}

function ChangePaginationPageSize(ddlID, baseURL) {
    var ddl = $get(ddlID);

    if (baseURL.indexOf('?') == -1) {
        baseURL += "?"
    } else {
        baseURL += "&"
    }

    redirect(baseURL + 'cp=1&ps=' + ddl[ddl.selectedIndex].value);
}

function GetFlashMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName]
    } else {
        return document[movieName]
    }
}

function ClearDefaultText(tbx, defaultText) {

    if (tbx) {
        if (tbx.value == defaultText) {
            tbx.value = '';
        }
    }
}




/***********************************************
* Textarea Maxlength script- � Dynamic Drive (www.dynamicdrive.com)
* This notice must stay intact for legal use.
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/

function ismaxlength(obj, maxLength) {
    var mlength = obj.getAttribute ? parseInt(maxLength) : ""
    if (obj.getAttribute && obj.value.length > mlength)
        obj.value = obj.value.substring(0, mlength)
}

/***********************************************
* Found at http://groups.google.com/group/microsoft.public.dotnet.framework.aspnet/msg/f2234ba565b8effa?dmode=source&output=gplain
***********************************************/

function SetUniqueRadioButton(nameregex, current) {
    re = new RegExp(nameregex);
    for (i = 0; i < document.forms[0].elements.length; i++) {
        elm = document.forms[0].elements[i]
        if (elm.type == 'radio') {
            if (re.test(elm.name)) {
                elm.checked = false;
            }
        }
    }
    current.checked = true;
}


/*********************************
Fan Pick
**********************************/
function ShowFanPickSavedDialog() {
    var bodyOffsetTop = $(window).scrollTop();
    var thanksDialog = $('<div id="myFanPickDialog" class="modalContent border content" Style="border: solid 10px #ffffff; padding: 15px; background-color:#fff; color:#313131;"></div>');
    $('body').append(thanksDialog);
    thanksDialog.html('<h1>Thanks!</h1>Your Fan Pick Saved');
    $(thanksDialog).dialog({
        height: 200,
        width: 320,
        closeText: '',
        show: 'blind',
        collision: 'fit',
        open: function () { setTimeout(function(){$('.ui-dialog[aria-describedby="myFanPickDialog"]').css('display','none');}, 5000); }
    });
    $(thanksDialog).dialog('open').position({ my: "center", at: "center", of: window.top }).delay(5000).hide('slide');
    window.scrollTo(0, bodyOffsetTop); //ie fix for versions 7 and under
}
function FanPick(sender, entityTypeName, entityID) {
    TrackBeAFan();

    saffire.web.services.events.saveFanPick(entityTypeName, entityID
                                , function (result, context) {
                                    if (result && result.result == 1) {

                                        var bodyOffsetTop = $(window).scrollTop();
                                       	$('.fan a').text('FAN').css('opacity','0.5');

                                        window.scrollTo(0, bodyOffsetTop); //ie fix for versions 7 and under

                                        sender.onclick = null;

                                        saffire.web.services.events.getEventFanPickCount(entityID
                                            , function (result, context) {
                                                if (result) {
                                                    if (result > 0) {
                                                        $(context).parent().children().filter("span").text(result + ' Fans')
                                                    }
                                                }
                                            }
                                            , function () { }
                                            , sender);
                                        ShowFanPickSavedDialog();

                                    }
                                }
                                , function (sender, args) { alert(args.message) }
                                , sender
                                );
}

/*********************************
Business Fan Pick
**********************************/
function ShowBusinessFanPickSavedDialog() {
    var bodyOffsetTop = $(window).scrollTop();
    var thanksDialog = $('<div id="myFanPickDialog" class="modalContent border content" Style="border: solid 10px #ffffff; padding: 15px; background-color:#fff; color:#313131;"></div>');
    $('body').append(thanksDialog);
    thanksDialog.html('<h1>Thanks!</h1>Your Fan Pick Saved');
    $(thanksDialog).dialog({
        height: 200,
        width: 320,
        closeText: '',
        show: 'blind',
        collision: 'fit',
        open: function () { setTimeout(function(){$('.ui-dialog[aria-describedby="myFanPickDialog"]').css('display','none');}, 5000); }
    });
    $(thanksDialog).dialog('open').position({ my: "center", at: "center", of: window.top }).delay(5000).hide('slide');
    window.scrollTo(0, bodyOffsetTop); //ie fix for versions 7 and under
}
function BusinessFanPick(sender, entityTypeName, entityID) {
    TrackBeAFan();

    saffire.web.services.businesses.saveFanPick(entityTypeName, entityID
                                , function (result, context) {
                                    if (result && result.result == 1) {

                                        var bodyOffsetTop = $(window).scrollTop();
                                        $('.fan a').text('FAN').css('opacity', '0.5');

                                        window.scrollTo(0, bodyOffsetTop); //ie fix for versions 7 and under

                                        sender.onclick = null;

                                        saffire.web.services.businesses.getBusinessFanPickCount(entityID
                                            , function (result, context) {
                                                if (result) {
                                                    if (result > 0) {
                                                        $(context).parent().children().filter("span").text(result + ' Fans')
                                                    }
                                                }
                                            }
                                            , function () { }
                                            , sender);
                                        ShowBusinessFanPickSavedDialog();

                                    }
                                }
                                , function (sender, args) { alert(args.message) }
                                , sender
                                );
}



/*********************************
Add To Cart
**********************************/

$(document).ready(function () {

    ConfigureAddToCartButtons();

});



function ConfigureAddToCartButtons() {

    $('.purchaseOptions').on('keypress click', '.buyButton[data-promptpurchasername="false"]', function (e) {

      if (e.which === 13 || e.type === 'click') {

        $this = $(this);
        var itemID = $this.data("itemid");
        var $itemContainer = $('.purchaseOptions[data-itemid="' + itemID + '"]');
        if ($itemContainer) {

            ClearPurchaseOptionMessage($itemContainer);

            var purchaser = $('.purchaserName', $itemContainer).val();

            var addToCartRequest = { itemID: itemID, options: [], purchaser: purchaser };

            var totalQtyAdded = 0;

            var freeFormRequired = $this.data('freeformrequired');
            var freeFormPrice = 0;

            if (freeFormRequired) {
                var freeFormPriceInput = $('.freeFormPriceInput', $itemContainer);

                if (freeFormPriceInput) {
                    if ($.isNumeric(freeFormPriceInput.val())) {

                        freeFormPrice = freeFormPriceInput.val();
                        addToCartRequest.freeFormPrice = freeFormPrice;

                        if (freeFormPrice > 0) {
                            totalQtyAdded = 1;
                        }

                    }
                }
            }

            addToCartRequest.detailURL = window.location.href;

            $('.purchaseOption', $itemContainer).each(function (i) {

                var $option = $(this);
                var productID = $option.data('productid');
                var qty = 0;

                var ddlQty = $('.dropdown', $option);

                if (ddlQty) {
                    qty = ddlQty.val();
                    if (qty < 0) {
                        qty = 0;
                    }
                }

                if (qty > 0) {
                    addToCartRequest.options.push({ productID: productID, qty: qty });
                    totalQtyAdded = totalQtyAdded + qty;
                }

                addToCartRequest.subProducts = [];

                var $subProductsContainer = $('.subProductsPurchaseOptions', $itemContainer);

                $('.subProductPurchaseOption', $subProductsContainer).each(function (i, $item) {

                    var $option = $(this);

                    var subProduct = { itemID: itemID, productID: $option.data('productid'), options: [] };

                    $('.subProductTicketTypePurchaseOption', $item).each(function (i) {
                        var $option = $(this);                        
                        subProduct.options.push({ productID: $option.data('productid'), quantity: parseInt($option.data('qty')) });
                    })

                    addToCartRequest.subProducts.push(subProduct);
                })
            });

            if (totalQtyAdded > 0) {
                AddItemToCart($this, addToCartRequest);
            } else {
                if (totalQtyAdded == 0) {

                    if (freeFormRequired && freeFormPrice == 0) {
                        ShowPurchaseOptionMessage($itemContainer, "Amount is required");
                    } else {
                        ShowPurchaseOptionMessage($itemContainer, "Quantity is required");
                    }

                }
            }
        }
      }

    });


    // true

    $('.purchaseOptions').on('keypress click', '.buyButton[data-promptpurchasername="true"]', function (e) {
      if (e.which === 13 || e.type === 'click') {
        $this = $(this);
        var itemID = $this.data("itemid");
        var $itemContainer = $('.purchaseOptions[data-itemid="' + itemID + '"]');

        ClearPurchaseOptionMessage($itemContainer);

        $OpenModal({
            width: '350px',
            height: '200px',
            iframe: { url: '{0}modalucloader.aspx?controlPath=~/Core/Content/I_mapMarkerPurchaserName.ascx'.format(SITEBASEURL) },
            customCallbacks: {
                close: function (data) {

                    $('.purchaserName', $this.parent()).val(data.eventArgs);
                    $this.attr('data-promptpurchasername', 'false');
                    $this.trigger('click');
                }
            }

        });
      }
    });



}

function ShowPurchaseOptionMessage($e, message) {
    $e.append("<div class='purchaseOptionMessage'>{0}</div>".format(message));
}

function ClearPurchaseOptionMessage($e) {
    $('.purchaseOptionMessage', $e).remove();
}


var _addToCartCallInProgress = false;
function AddItemToCart(sender, options) {
    // console.log(sender);
    // console.log(options)

    if (!_addToCartCallInProgress) {
        _addToCartCallInProgress = true;

        if (FB_CONFIG) {
            options.fbEventID = guid();
        }

        $.ajax({
            url: SITEBASEURL + 'api/cart/additem'
            , dataType: 'json'
            , contentType: 'application/json; charset=utf-8'
            , type: 'POST'
            , data:  JSON.stringify(options)
        }).done(function(data) {
            _addToCartCallInProgress = false;

            if (data) {
                if (data.IsSuccess) {
                	if (FB_CONFIG) {
                        fbq('track', 'AddToCart', null, { eventID: options.fbEventID });
                    }
                        
                    if (data.RedirectURL) {
                      window.top.location.href = data.RedirectURL;
                    } else {
                        getWindowTop().ShowAddToCartSavedModal(sender, options.addToCartMessage, data, options.inCheckout, true);
                        getWindowTop().cartProductUnitCount = data.CartProductUnitCount;
                        getWindowTop().UpdateCartIndicator();
                    }
                } else {
                    alert(data.Message);
                }
            }

        }).fail(function(status, error) {
            _addToCartCallInProgress = false;

        });

    } else {
        _addToCartCallInProgress = false;
        console.log('skipping AddItemToCart because service is busy');
    }

}

function GetPriceTextboxValue(tbxID) {
    var priceTextbox = $('#' + tbxID);
    var price = 0;
    if (priceTextbox.length == 1) {
        if (priceTextbox.val() != '') {
            price = priceTextbox.val();
        }
    }
    return price;
}

// function ShowAddToCartSavedDialog(sender, addtocartmessage) {

//     if (addtocartmessage === undefined) {
//         addtocartmessage = "Added to cart!";
//     }

//     $('.addtocartsuccessmsg').remove();

//     var addToCartMsg = $('<div class="addtocartsuccessmsg subContainer" style="display:inline; visability:hidden; white-space:nowrap;  position:absolute; z-index=100" ></div>');

//     var crossDomainTest = isInCrossDomainIframe();
//     if (crossDomainTest) {
//         addToCartMsg.append('{0}<br/><a href="{1}cart.aspx" tabindex="0" target="_blank">Checkout Now</a>'.format(addtocartmessage, SITEBASEURL));
//     } else {
//         addToCartMsg.append('{0}<br/><a href="javascript:void(0)" tabindex="0" onclick="window.top.location = \'{1}cart.aspx\'">Checkout Now</a>'.format(addtocartmessage, SITEBASEURL));
//     }

//     $('body').append(addToCartMsg);

//     if (sender) {
//         $('.addtocartsuccessmsg:last').show().position({
//             of: sender,
//             my: "right top",
//             at: "right bottom"
//         }).css("zIndex", 100).delay(3000).hide('slide');
//     }
// }

function ShowAddToCartSavedModal(sender, addToCartMessage, data, incheckout, isJSCall) {

    var scope = angular.element(document.getElementById("cartItemAddedContainer")).scope();

    if (scope) {
       
        scope.sender = sender;
        scope.addedCartItem = data;
        scope.isRendered = true;

        if (incheckout === undefined) {
          incheckout = false;
        }

        if (isJSCall === undefined) {
            isJSCall = false;
        }

        scope.addedCartItem.incheckout = incheckout;

        if (addToCartMessage === undefined) {
            scope.addToCartMessage = "Added to Cart";
        }

        if (!incheckout && isJSCall) {
            scope.$apply();
        }
    }    
}

function getCartItemCountFromCookie() {

    //get the cart item count from the cookie if available
    var cartItemsCookie = Cookies.get('CartItemDetails2');

    if (cartItemsCookie) {

        try {
            var cookie = JSON.parse(cartItemsCookie)

            var itemCount = 0

            for (c = 0; c < cookie.length; c++) {
                var cartItem = cookie[c];

                if (cartItem.Units) {
                    for (u = 0; u < cartItem.Units.length; u++) {
                        itemCount += cartItem.Units[u].Quantity
                    }
                }
            }

            return itemCount;
        }
        catch (err) {}
    }

    return undefined;

}

function UpdateCartIndicator(suppressPopup) {
    updateCartProductUnitCountLink();
}

function updateCartProductUnitCountLink() {

    var cookieItemCount = getCartItemCountFromCookie();

    if (cookieItemCount != undefined) {
        cartProductUnitCount = cookieItemCount;
    }

    $cartLink = $('.cartMenuLink');

    if ($cartLink) {

        $cartLink.text(cartProductUnitCountTextFormat.format(cartProductUnitCount))

        $cartLink.data('itemcount', cartProductUnitCount)

        if (cartProductUnitCount == 0) {
            $cartLink.prop('disabled', true)
            $cartLink.prop('href', 'javascript:void(0)')
        } else {
            $cartLink.prop('disabled', false)
            $cartLink.prop('href', SITEBASEURL + 'cart.aspx')
        }
    }

}

/*********************************
Planner
**********************************/

function ConfigurePlannerButtons() {

    $('.btn-mypick').each(function () {

        var $this = $(this);
        var $thisAnchor = $this.children('a:not(.planner-link)');

        ConfigurePlannerButton($thisAnchor);

    });

}

function ConfigurePlannerButton($thisAnchor) {

    var $senderParent = $thisAnchor.parent();

    var plannerName = $thisAnchor.attr('data-plannerName');
    var addText = $thisAnchor.attr("data-addText");
    var removeText = $thisAnchor.attr("data-removeText");
    var entityType = $thisAnchor.attr("data-type");
    var entityID = $thisAnchor.attr('data-id');
    var isPicked = $thisAnchor.attr('data-isPicked');
    var userID = $thisAnchor.attr('data-uID');
    var successURL = $thisAnchor.attr('data-successURL');
    var cancelURL = $thisAnchor.attr('data-cancelURL');
    var $hoverMessage = $thisAnchor.children('.planner-dialog');

    if(isMobile){
        if (isPicked == 'false') {
            $thisAnchor.html(addText.format(plannerName));
            $senderParent.addClass('AddToPlanner');
            $thisAnchor.attr('title', 'Add to ' + plannerName);
        } else {
            $thisAnchor.html(removeText.format(plannerName));
            $senderParent.removeClass('AddToPlanner');
            $thisAnchor.attr('title', 'Remove from ' + plannerName);
        }
    } else {
        if (isPicked == 'false') {
            $senderParent.addClass('AddToPlanner');
            $hoverMessage.text('+ Add to ' + plannerName);
        } else {
            $senderParent.removeClass('AddToPlanner');
            $hoverMessage.text('- Remove from ' + plannerName);
        }
    }

    $thisAnchor.off('click');

    $thisAnchor.on('click', function () {

        if (isPicked == 'false') {
            if (!isMobile) {
                AddToPlanner($thisAnchor, entityID, entityType, userID);
            } else {
                AddToPlannerMobile($thisAnchor, entityID, entityType, userID, cancelURL, successURL);
            }
        } else {
            RemoveFromPlanner($thisAnchor, entityID, entityType, userID);
        }

    });

}

function RemoveFromPlanner($sender, entityID, entityType, userID, successCallback) {

    var confirmed = confirm('Are you sure you want to remove this ' + entityType + '');
    if (confirmed) {

        PersistRemoveFromPlanner({ 'userID': userID, 'entityID': entityID, 'entityType': entityType, 'sender': $sender });

    }

}

function AddToPlanner(sender, entityID, entityType, userID, successCallback) {
    PersistAddToPlanner({ 'userID': userID, 'entityID': entityID, 'entityType': entityType, 'successCallback': successCallback, 'sender': sender });
}

function AddToPlannerMobile(sender, entityID, entityType, userID, cancelURL, successURL) {
    PersistAddToPlanner({ 'userID': userID, 'entityID': entityID, 'entityType': entityType, 'sender': sender});
 }

function PersistAddToPlanner(data) {

    var userID = data.userID;
    var entityID = data.entityID;
    var entityType = data.entityType;
    var $sender = data.sender;

    var endpoint = 'AddEvent';
    if (entityType == 'business') {
        endpoint = 'AddBusiness';
    }

    $.ajax({
        type: "POST",
        url: SITEBASEURL + "services/planner.asmx/" + endpoint,
        data: "{'id': '" + entityID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function () {
            ShowAddedToPlannerDialog($sender, data);
            if (window.top.preventDescriptionRemoval != undefined) {
                window.top.preventDescriptionRemoval = false;
            }
        }
    });
}

function ShowAddedToPlannerDialog($sender, data) {

    var plannerName = $sender.attr('data-plannerName');
    var $dialog = $('<div class="mypickAddedMessage">Added to ' + plannerName + '</div>');
    var $senderParent = $sender.parent();

    $senderParent.append($dialog);

    $dialog.delay(1500).fadeOut(10, function () {

        $(this).remove();

        $sender.attr('data-isPicked', 'true');

        ConfigurePlannerButton($sender);

    });

}

function PersistRemoveFromPlanner(data) {

    var userID = data.userID;
    var entityID = data.entityID;
    var entityType = data.entityType;
    var $sender = data.sender;

    var endpoint = 'RemoveEvent';
    if (entityType == 'business') {
        endpoint = 'RemoveBusiness';
    }

    $.ajax({
        type: "POST",
        url: SITEBASEURL + "services/planner.asmx/" + endpoint,
        data: "{'id': '" + entityID + "', 'userID' : " + userID + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function () {
            $sender.attr('data-isPicked', 'false');
            ConfigurePlannerButton($sender);
        }
    });

}

/*********************************
My Business Pick
**********************************/

function ShowMyBusinessPickSavedDialog() {
    var bodyOffsetTop = $(window).scrollTop();
    var thanksDialog;

    thanksDialog = $('<div id="myEventPickDialog" class="modalContent border content" Style="border: solid 10px #ffffff; padding: 15px; background-color:#fff; color:#313131;"></div>');
    $('body').append(thanksDialog);

    thanksDialog.html('<h1>Thanks!</h1>Business added to My Businesses');
    $(thanksDialog).dialog({
        height: 200,
        width: 320,
        closeText: '',
        show: 'blind',
        collision: 'fit',
        close: function () { $('#myEventPickDialog').remove() }
    });
    $(thanksDialog).dialog('open').position({ my: "center", at: "center", of: window.top }).delay(5000).hide('slide');
    window.scrollTo(0, bodyOffsetTop); //ie fix for versions 7 and under
}

function MyBusinessPickRedirect(sender, entityID, userID, CancelURLEncoded, SuccessURLEncoded) {
    TrackSaveToMyFavorites();

    _currentMyPickSender = sender;

    saffire.web.services.users.isAuthenticated(userID, function (result) {

        if (result) {

            MyBusinessPickSave({ 'userID': userID, 'businessID': entityID, 'sender': sender });

        } else {
            window.location.href = SITEBASEURL + 'login.aspx' + '?cancelURL=' + CancelURLEncoded + '&successURL=' + SuccessURLEncoded;


        }


    }, function (result) {
        alert("Error communicating with the server");
    });

}

function MyBusinessPick(sender, entityID, userID, onSuccessCallback) {
    TrackSaveToMyFavorites();
    _currentMyPickSender = sender;
    saffire.web.services.users.isAuthenticated(userID, function (result) {

        if (result) {
            MyBusinessPickSave({ 'userID': userID, 'businessID': entityID, 'successCallback': onSuccessCallback, 'sender': sender })
        } else {
            window.top.OpenModal('modal', SITEBASEURL + 'i_login.aspx', '600px', '435px', {
                'OnClosePostBack': false,
                'UserContext': { 'sender': sender, 'businessID': entityID, 'successCallback': onSuccessCallback, 'sender': sender },
                'OnCloseCallbackFunction':
                    function (userID, context) {

                        if (userID > 0) {
                            MyBusinessPickSave({ 'businessID': entityID, 'userID': userID, 'successCallback': context.successCallback, 'sender': context.sender });
                        }

                    }
            }
            );
        }

    }, function (result) {
        alert("Error communicating with the server");
    });

}

/*******************************
Audio Button
********************************/

var CurrentImgID = '';
var CurrentTrack = '';
var isPlaying = false;

function playSoundClip(track, imgID) {

    var player = getSoundClipPlayer();

    if (player) {

        var isPlayCommand = true;

        if (CurrentImgID != '') {
            if (CurrentImgID != imgID) {
                if (track == CurrentTrack) {
                    player.PlayMusic(track);
                }
                stopSoundClip()
            } else {
                isPlayCommand = false
            }
        }


        swapAudioClipImg(imgID)
        if (isPlayCommand) {
            player.PlayMusic(track);
            swapAudioClipImg(imgID, true)
            CurrentImgID = imgID;
            CurrentTrack = track;
        } else {
            player.PlayMusic(track);
            swapAudioClipImg(imgID,false)
            CurrentImgID = '';
            CurrentTrack = '';
        }

    }


    if (player) {

    }

    //var isPlayCommand = true;

    //if (CurrentImgID != '') {
    //    if (CurrentImgID != imgID) {
    //        stopSoundClip()
    //    } else {
    //        isPlayCommand = false
    //    }
    //}

    //var player = getSoundClipPlayer();
    //if (player) {
    //    player.PlayMusic(track);
    //    swapAudioClipImg(imgID)
    //    if (isPlayCommand) {
    //        CurrentImgID = imgID;
    //        CurrentTrack = track;
    //    } else {
    //        CurrentImgID = '';
    //        CurrentTrack = '';
    //    }
    //}
}

function stopSoundClip() {
    swapAudioClipImg(CurrentImgID,false)
    CurrentImgID = '';
    CurrentTrack = '';
}

function getSoundClipPlayer() {
    var player = GetFlashMovie('soundClip');
    return player
}

function swapAudioClipImg(imgID,isPlaying) {
    var img = $get(imgID);
    if (img) {
        if (isPlaying) {
            img.src = SITEBASEURL + 'images/music_on.gif';
        } else {
            $('.flashMusicPlayerImage').each(function () {
                this.src = SITEBASEURL + 'images/music_off.gif';
            });
        }
    }
}


/***********************
Users Service
************************/
var userIsAuthenticated = false;
function isAuthenticated(uid) {

    Saffire.Web.Services.UsersService.IsAuthenticated(uid
                    , function (result) {
                        userIsAuthenticated = result;
                    }
                    , function (result) {
                        alert("Error communicating with the server")
                    })

    return userIsAuthenticated;
}

function updateLoginStatusLink() {

    var $loginWrapper = $('.loginstatus-wrapper');
    var $loginStatusLink = $('.login-status-link');
    var $loginStatusChangeLink = $('.loginstatus-change');

    if ($loginWrapper || $loginStatusLink) {

        if (isLoggedIn) {
            $loginStatusChangeLink.text('Log Out');
        } else {
            $loginStatusChangeLink.text('Log In');
        }

        $loginStatusChangeLink.on('click', function () {
            saffire.web.services.user.changeLoginStatusAndGetNextStepURL(
                function (result) {
                    window.location.href = result;
                }
                , function (result) {
                    alert("Error communicating with the server");
                })
        });

    }

}

function updateMyAccountLink() {

    var $myAccountLinkWrapper = $('.myAccountButton-wrapper');
    var $myAccountLink = $('.my-account-link');

    if ($myAccountLinkWrapper) {

        $myAccountLinkWrapper.css('display', isLoggedIn ? 'block' : 'none')
        $myAccountLink.prop('href', SITEBASEURL + 'myaccountinfo.aspx')

    }

    if ( ($myAccountLinkWrapper.length === 0) && $myAccountLink ) {
        $myAccountLink.prop('href', SITEBASEURL + 'myaccountinfo.aspx')
        if (isLoggedIn) {
            $('.my-account-link').each(function(i, item) {
                item.style.removeProperty('display');
            });
        }
    }
}

/*****************************
Calendar Service
******************************/

function ProduceVCalendarFile(entityType, entityID) {

    $('<iframe />', {
        id: 'vCalFrame'
        , src: SITEBASEURL + 'services/calendarFileServer.aspx?entityType=' + entityType + '&id=' + entityID
        , style: "width:0px; height:0px; display:none"
    }).appendTo('body');

}


/**photo gallery modal**/

(function ($) {

    $.fn.dialogPhotoGallery = function (options) {

        var $this = this;

        var _defaultOptions = {
            startID: 0,
            action: '',
            datasource: null,
            width: 400,
            height: 400,
            collision: 'fit',
            position: {my: "top-25%", at: "top-25%", of: window}
        }

        if (typeof (options) == 'string') {

            var action = options;

            options = _defaultOptions

            if (action == 'show') {
                options.action = "show";
            } else if (action == 'close') {
                options.action = "close";
            }

        } else {
            options = $.extend(_defaultOptions, options);
        }



        if (options.action == "show") {
            show();
        } else if (options.action == "close") {
            close();
        } else {
            set_currentID(0);
            set_currentIndex(0);
            init();
        }

        function init() {

            $this.dialog({
                modal: true,
                draggable: false,
                closeText: '',
                autoOpen: false,
                width: options.width,
                height: options.height,
                position: options.position
            });


            if (get_datasource() == null && options.datasource != null) {
                set_datasource(options.datasource);
            }

            $this.find(".previousButton").bind("click", _showPreviousPhoto);
            $this.find(".nextButton").bind("click", _showNextPhoto);
            $this.find(".closeButton").bind("click", close);

        }

        function show() {

            _setupDatasource()
            if (get_currentID() != options.startID) {
                set_currentID(options.startID);
                set_currentIndex(_getIDIndex(get_currentID()));
            }

            if (get_datasource().length > 0) {
                _setupPhoto(get_currentIndex())
            }

            _setupPreviousNextButtons()
            $this.dialog("open");
            $this.css("display", "block")

            $this.trigger("show", { currentPhotoID: get_currentID() })

        }

        function close() {

            $this.dialog("close");
            $this.css("display", "none")

            $this.trigger("closed")
        }

        /**Properties**/

        function get_datasource() { return $this.data("data") }
        function set_datasource(value) { $this.data("data", value) }

        function get_currentID() { return $this.data("currentID") }
        function set_currentID(value) { $this.data("currentID", value) }

        function get_currentIndex() { return $this.data("currentIndex") }
        function set_currentIndex(value) { $this.data("currentIndex", value) }

        /**PRIVATE MEMBERS**/

        function _setupDatasource() {

        }

        function _setupPhoto(indx) {
            var tmp = get_datasource();

            var pinitButton = $('.pin-it-button')

            if(pinitButton.length == 0){
                pinitButton = $('a[class^="PIN_"]')
            }

            // Pinterest.
            pinitButton.attr('href', 'http://pinterest.com/pin/create/button/?url=' + encodeURIComponent(document.URL) + '&media=' + encodeURIComponent(tmp[indx].src.split(' ').join('%20')) + "&description=" + encodeURIComponent(tmp[indx].eventname + " - " + tmp[indx].caption));
            if (($('iframe[src^="http://pinit-cdn.pinterest.com/pinit.html"]').length))
                $('iframe[src^="http://pinit-cdn.pinterest.com/pinit.html"]').attr('src', 'http://pinit-cdn.pinterest.com/pinit.html?url=' + encodeURIComponent(document.URL) + '&media=' + encodeURIComponent(tmp[indx].src.split(' ').join('%20')) + "&description=" + encodeURIComponent(tmp[indx].eventname + " - " + tmp[indx].caption));
            else
            $.ajax({ url: location.protocol + '://assets.pinterest.com/js/pinit.js', dataType: 'script', cache: true});

            var $featImg = $(".featureImage");
            $featImg.attr('src', tmp[indx].src);
            $featImg.attr('alt', tmp[indx].caption);
            $this.find(".caption").html(tmp[indx].caption);

            if (tmp[indx].showsocial == 'true') {
                $('.shareThisToolbox').show();
            } else {
                $('.shareThisToolbox').hide();
            }

            set_currentIndex(indx);
            set_currentID(tmp[indx].id);
        }

        function _showPreviousPhoto() {


            var indx = get_currentIndex()

            if (indx > 0) {
                _setupPhoto(indx - 1);
                _setupPreviousNextButtons();
                $this.trigger("show", { currentPhotoID: get_currentID() })
            }

        }

        function _showNextPhoto() {

            var indx = get_currentIndex()

            if (indx < get_datasource().length - 1) {
                _setupPhoto(indx + 1);
                _setupPreviousNextButtons()
                $this.trigger("show", { currentPhotoID: get_currentID() });
            }
        }

        function _getIDIndex(id) {

            var tmp = get_datasource()

            if (id > 0) {
                for (var x = 0; x < tmp.length; x++) {
                    if (tmp[x].id == id) {
                        return x
                    }
                }
            }
            return 0;
        }

        function _setupPreviousNextButtons() {

            var tmp = get_datasource();
            var indx = get_currentIndex()


            if (indx == 0) {
                $this.find(".previousButton").css("display", "none")
            } else {
                $this.find(".previousButton").css("display", "block")
            }

            if (indx == tmp.length - 1) {
                $this.find(".nextButton").css("display", "none")
            } else {
                $this.find(".nextButton").css("display", "block")
            }
        }

        function _retrieveDataFromService(serviceMethod) {

        }

        return this;

    };
})(jQuery);

var addthis_config = {
    data_use_cookies_ondomain: false,
    data_use_cookies: false
};

/*Add This*/
function initAddThis(gaKey) {
    addthis_config.data_ga_property = gaKey;
    addthis_config.data_ga_social = true;

    if (typeof addthis != "undefined") {
        addthis.init();
    }
}
/**media gallery modal**/

(function ($) {

    $.fn.dialogMediaGallery = function (options) {

        var $this = this;

        var _defaultOptions = {
            startID: 0,
            action: '',
            datasource: null,
            width: 400,
            height: 400
        }

        if (typeof (options) == 'string') {
            var action = options;

            options = _defaultOptions

            if (action == 'show') {
                options.action = "show";
            } else if (action == 'close') {
                options.action = "close";
            }

        } else {
            options = $.extend(_defaultOptions, options);
        }


        if (options.action == "show") {
            show();
        } else if (options.action == "close") {
            close();
        } else {
            set_currentID(0);
            set_currentIndex(0);
            init()
        }

        function init() {


            $this.dialog({
                modal: true,
                draggable: false,
                closeText: '',
                autoOpen: false,
                width: options.width,
                height: options.height
            });

            if (options.datasource != null) {
                set_datasource(options.datasource);
            }

            $this.find(".previousButton").bind("click", _showPreviousPhoto);
            $this.find(".nextButton").bind("click", _showNextPhoto);
            $this.find(".closeButton").bind("click", close);

        }

        function show() {


            _setupDatasource();

            if (get_currentID() != options.startID) {
                set_currentID(options.startID);
                set_currentIndex(_getIDIndex(get_currentID()));
            }

            if (get_datasource().length > 0) {
                _setupPhoto(get_currentIndex())
            }

            _setupPreviousNextButtons()

            $this.dialog("open");
            $this.css("display", "block")

            $this.trigger("show", { currentPhotoID: get_currentID() })

        }

        function close() {

            var $featDiv = $(".featureDiv");

            $featDiv.html('');

            $this.dialog("close");
            $this.css("display", "none")

            $this.trigger("closed")
        }

        /**Properties**/

        function get_datasource() { return $this.data("data") }
        function set_datasource(value) { $this.data("data", value) }

        function get_currentID() { return $this.data("currentID") }
        function set_currentID(value) { $this.data("currentID", value) }

        function get_currentIndex() { return $this.data("currentIndex") }
        function set_currentIndex(value) { $this.data("currentIndex", value) }

        /**PRIVATE MEMBERS**/

        function _setupDatasource() {

        }

        function _setupPhoto(indx) {
            var tmp = get_datasource();

            var $featDiv = $(".featureDiv");

            $featDiv.html(tmp[indx].src);
            $this.find(".caption").html(tmp[indx].caption);

            $this.find('.galleryTitle').html(tmp[indx].title)

            set_currentIndex(indx);
            set_currentID(tmp[indx].id);

            var img = $('.featureDiv').find('img');
            var video = $('.featureDiv').find('iframe');

            var pinitButton = $('.pin-it-button')

            if(pinitButton.length == 0){
                pinitButton = $('a[class^="PIN_"]')
            }

            if (img.length > 0) {

                // Pinterest.
                if (img.attr('src') != undefined) {
                    pinitButton.attr('href', 'http://pinterest.com/pin/create/button/?url=' + encodeURIComponent(document.URL) + '&media=' + encodeURIComponent(img.attr('src').split(' ').join('%20')) + "&description=" + encodeURIComponent(tmp[indx].eventname + " - " + tmp[indx].caption));
                    if (($('iframe[src^="http://pinit-cdn.pinterest.com/pinit.html"]').length))
                        $('iframe[src^="http://pinit-cdn.pinterest.com/pinit.html"]').attr('src', 'http://pinit-cdn.pinterest.com/pinit.html?url=' + encodeURIComponent(document.URL) + '&media=' + encodeURIComponent(img.attr('src').split(' ').join('%20')) + "&description=" + encodeURIComponent(tmp[indx].eventname + " - " + tmp[indx].caption));
                    else
                        $.ajax({ url: location.protocol + '//assets.pinterest.com/js/pinit.js', dataType: 'script', cache: true });
                }


                if (img.attr('share-email') == 'true') {
                    $('.emailPhoto').show();
                } else {
                    $('.emailPhoto').hide();
                }

                if (img.attr('share-social') == 'true') {
                    $('.shareThisToolbox').show();
                } else {
                    $('.shareThisToolbox').hide();
                }

                if (img.attr('link-email') != null && img.attr('link-email') != '') {
                    $('.linkEmail').attr('href', img.attr('link-email'))
                    $('.linkEmail').show();
                } else {
                    $('.linkEmail').hide();
                }

                if (img.attr('link-more') != null && img.attr('link-more') != '') {
                    $('.linkMore').attr('href', img.attr('link-more'))
                    $('.linkMore').show();

                    if (img.attr('link-target') != null && img.attr('link-target') != '') {
                        $('.linkMore').attr('target', img.attr('link-target'));
                    }
                    else {
                        $('.linkMore').attr('target', '');
                    }
                } else {
                    $('.linkMore').hide();
                }

            }
            else {
                //video

                if (video.attr('link-email') != null && video.attr('link-email') != '') {
                    $('.linkEmail').attr('href', video.attr('link-email'))
                    $('.linkEmail').show();
                } else {
                    $('.linkEmail').hide();
                }

                if (video.attr('link-more') != null && video.attr('link-more') != '') {
                    $('.linkMore').attr('href', video.attr('link-more'))
                    $('.linkMore').show();

                    if (video.attr('link-target') != null && video.attr('link-target') != '') {
                        $('.linkMore').attr('target', video.attr('link-target'));
                    }
                    else {
                        $('.linkMore').attr('target', '');
                    }
                } else {
                    $('.linkMore').hide();
                }
            }
        }

        function _showPreviousPhoto() {

            var indx = get_currentIndex()

            if (indx > 0) {
                _setupPhoto(indx - 1);
                _setupPreviousNextButtons();
                $this.trigger("show", { currentPhotoID: get_currentID() })
            }

        }

        function _showNextPhoto() {

            var indx = get_currentIndex()

            if (indx < get_datasource().length - 1) {
                _setupPhoto(indx + 1);
                _setupPreviousNextButtons();

                $this.trigger("show", { currentPhotoID: get_currentID() });
            }
        }

        function _getIDIndex(id) {

            var tmp = get_datasource()

            if (id > 0) {
                for (var x = 0; x < tmp.length; x++) {
                    if (tmp[x].id == id) {
                        return x
                    }
                }
            }
            return 0;
        }

        function _setupPreviousNextButtons() {

            var tmp = get_datasource();
            var indx = get_currentIndex()


            if (indx == 0) {
                $this.find(".previousButton").css("display", "none")
            } else {
                $this.find(".previousButton").css("display", "block")
            }

            if (indx == tmp.length - 1) {
                $this.find(".nextButton").css("display", "none")
            } else {
                $this.find(".nextButton").css("display", "block")
            }
        }

        function _retrieveDataFromService(serviceMethod) {

        }

        return this;

    };
})(jQuery);

var youTubeIframeLoading = false;
var youTubeIframeAPIReady = false;

var loadYoutubeIframeAPI = null;

if (typeof Promise !== "undefined" && Promise.toString().indexOf("[native code]") !== -1) {

    loadYoutubeIframeAPI = new Promise(function (resolve, reject) {

        if (!youTubeIframeLoading) {
            youTubeIframeLoading = true;
            var tag = document.createElement('script');
            var firstScriptTag = document.getElementsByTagName('script')[0];
            tag.src = "https://www.youtube.com/iframe_api";
            firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

            window.onYouTubeIframeAPIReady = function () {
                resolve();
            }
        }

    })

}



var lightBoxYouTubePlayers = [];

function LightBox(data, id, callback) {
    var popupID = '#light-box'+ id;
    var player = 'player' + id;
    this.YTplayer = '';
    this.currentIndex = 0;
    this.data = data;
    this.playerID = id;
    // console.log(data)
    this.$el = {
        player: $(popupID + ' #player' + id),
        currentNum: $(popupID + ' .lb-item-count-num'),
        closeBtn: $(popupID + ' .close-lightbox'),
        lightBox: $(popupID),
        leftArrow: $(popupID + ' .gallery-control.arrow-previous'),
        rightArrow: $(popupID + ' .gallery-control.arrow-next'),
        expandImage: $(popupID + ' .lb-expand-image'),
        title: $(popupID + ' .lb-title'),
        videoTranscriptURL: $(popupID + ' .lb-transcript-link'),
        itemCount: $(popupID + ' .lb-item-count-num'),
        maxCount: $(popupID + ' .lb-item-count_max'),
        img: $(popupID + ' .lb-image'),
        textContainer: $(popupID + ' .lb-text-container'),
        caption: $(popupID + ' .lb-caption'),
        emailPhotoLink: $(popupID + ' .lb-email-photo'),
        externalLink: $(popupID + ' .lb-externalLink'),
        socialSharingContainer: $(popupID + ' .lb-social-sharing-container'),
        shareSocialContainer: $(popupID + ' .lb-share-social-container'),
        shareThisToolbox: $(popupID + ' .shareThisToolbox'),
        shareFacebookLink: $(popupID + ' .lb-facebook'),
        shareTwitterLink: $(popupID + ' .lb-twitter'),
        sharePinterestLink: $(popupID + ' .lb-pinterest'),
    }

    if (data.length == 1) {
        this.$el.lightBox.addClass('single-photo');
    }
    else {
        this.$el.lightBox.removeClass('single-photo');
    }

    this.resetData = function (data) {
        this.currentIndex = 0;
        this.data = data;
    }

    this.bindUIEvents = function () {

        var boxObj = this;
        this.$el.rightArrow.click(function () {
            boxObj.changeView('next');
        });
        this.$el.leftArrow.on('keypress click', function (e) {
          if (e.which === 37 || e.type === 'click') {
            boxObj.changeView('last');
          }
        });
        this.$el.closeBtn.click(function () {
            boxObj.close();
        });

        $(document).keydown(function(event) {

            switch(event.which) {
            case 27:
            boxObj.close();
            break;

            case 37:
            boxObj.$el.leftArrow.click();
            break;

            case 39:
            boxObj.$el.rightArrow.click();
            break;

            default: return; // exit this handler for other keys
            }
        });
    }

    this.changeView = function (direction) {

        if (direction === 'next') {
            if ((this.currentIndex+1) === this.data.length ) {
            this.currentIndex = 0;
            } else {
            this.currentIndex++;
            }
        } else if (direction === 'last') {
            if (this.currentIndex === 0 ) {
            this.currentIndex = (this.data.length - 1);
            } else {
            this.currentIndex--;
            }
        }

        var mediaItem = this.data[this.currentIndex];

        var elem = this.$el;
        var alternateText = ""
        if (mediaItem.alternateText)
        {
            alternateText = mediaItem.alternateText;
        }
        //title
        if (mediaItem.title) {
            elem.title.show();
            elem.title.html('<strong>'+mediaItem.title+'</strong>');
        }
        else {
            elem.title.hide();
        }


        //caption
        if (mediaItem.caption) {
            elem.caption.show();
            elem.caption.html(mediaItem.caption);
        }
        else {
            elem.caption.hide();
        }
        //transcript
        if (mediaItem.videoTranscriptURL) {
            elem.videoTranscriptURL.show();
            elem.videoTranscriptURL.attr('href', mediaItem.videoTranscriptURL);
            elem.videoTranscriptURL.attr('target', '_blank');
        }
        else {
            elem.videoTranscriptURL.hide();
        }

        //link
        if (mediaItem.hasLink) {
            if (mediaItem.linkIsEmail) {
                elem.externalLink.hide();
                elem.emailPhotoLink.show();
                elem.emailPhotoLink.prop('href','mailto:' + mediaItem.linkURL)
            }
            else {
                elem.emailPhotoLink.hide();
                elem.externalLink.show();
                elem.externalLink.prop('href', mediaItem.linkURL)
                if (mediaItem.linkOpenInNewWindow) {
                    elem.externalLink.prop('target', '_blank');
                }
                else {
                    elem.externalLink.prop('target', '');
                }
            }
        }
        else {
            elem.emailPhotoLink.hide();
            elem.externalLink.hide();
        }

        //social sharing
        if (mediaItem.socialShareURL && mediaItem.img) {
            elem.shareSocialContainer.show();

            //facebook
            elem.shareFacebookLink.attr('addthis:url', mediaItem.socialShareURL);


            //twitter
            elem.shareTwitterLink.attr('addthis:url', mediaItem.socialShareURL);
            elem.shareTwitterLink.attr('addthis:title', mediaItem.title);
            elem.shareTwitterLink.attr('addthis:description', mediaItem.caption);
            elem.shareTwitterLink.attr('addthis:media', mediaItem.img);

            //pinterest
            elem.sharePinterestLink.attr('addthis:url', mediaItem.socialShareURL);
            elem.sharePinterestLink.attr('addthis:title', mediaItem.title);
            elem.sharePinterestLink.attr('addthis:description', mediaItem.caption);
            elem.sharePinterestLink.attr('addthis:media', mediaItem.img);

            if (window.addthis) {
                window.addthis.toolbox('.shareThisToolbox');
            }

        }
        else {
            elem.shareSocialContainer.hide();
        }



        if (mediaItem.video) {
            elem.YTiframe.show();
            elem.img.hide();
            elem.expandImage.hide();
            this.YTplayer.loadVideoById(mediaItem.video);
        }
        else {
            if (elem.YTiframe) {
                elem.YTiframe.hide();
            }
            elem.img.show();
            elem.expandImage.show();

            if (this.YTplayer != "") {
                this.YTplayer.pauseVideo();
            }

            elem.img.prop('alt', alternateText);
            elem.img.attr('tabindex', '0');
            elem.img.attr('aria-label', alternateText);
            elem.img.prop('src', mediaItem.img);

        }

        this.updateCount();

    };


    this.close = function() {
        $("#body").removeClass('lightbox-showing');
        // $(document).unbind('keydown');
        this.$el.lightBox.removeClass('show-lightbox');
        this.$el.lightBox.attr('tabindex', '-1');
        if (this.YTplayer) {
            this.YTplayer.pauseVideo();
        }
    };



    this.open = function(uniqueID) {

        this.currentIndex = 0;

        for (i = 0; i < this.data.length; i++) {
            if (this.data[i].uniqueID == uniqueID) {
                this.currentIndex = i;
            }
        }

        this.updateCount();
        $("#body").addClass('lightbox-showing');
        this.$el.lightBox.addClass('show-lightbox');
        this.$el.lightBox.attr('tabindex', '0');
        this.$el.lightBox.attr('aria-label', 'image lightbox');
        this.$el.lightBox.focus();
        this.changeView(null);
        
        // trap tab focus in lightbox
        var focusableEls = this.$el.lightBox.find('a:visible, button:visible');
        var firstFocusableEl = focusableEls[0];  
        var lastFocusableEl = focusableEls[focusableEls.length - 1];
        $(lastFocusableEl).keydown(function(e) {
          if(e.which == 9) { 
            e.preventDefault();          
            $(firstFocusableEl).focus();   
          }          
        });

    };

    this.updateCount = function() {
        this.$el.currentNum.text(this.currentIndex + 1);
        this.$el.maxCount.text(this.data.length);
    };


    //initialize
    var hasVideo = false;
    this.data.map(function (i) {
        if (i.video != undefined && i.video !== '') {
            hasVideo = true;
        }
    });
    this.hasVideo = hasVideo;

    if (this.hasVideo) {

        lightBoxYouTubePlayers.push({
            playerID: player,
            box: this,
            initialized: false,
            callback: callback
        })

        if (loadYoutubeIframeAPI) {

            loadYoutubeIframeAPI.then(function () {

                $.each(lightBoxYouTubePlayers, function (boxIdx) {
                    var box = lightBoxYouTubePlayers[boxIdx]
                    if (!box.initialized) {
                        box.initialized = true;

                        var boxObj = box.box;

                        boxObj.bindUIEvents();
                        boxObj.YTplayer = new YT.Player(box.playerID, {
                            height: '475',
                            width: '725',
                            videoId: '',
                            events: {
                                'onReady': function (event) {
                                    // console.log(box.playerID);
                                    box.callback();
                                },
                                'onStateChange': function (event) {

                                }
                            }
                        });
                        boxObj.$el.YTiframe = $(boxObj.YTplayer.getIframe());
                    }
                })

            });

        }

    } else {
        this.bindUIEvents();
        callback();
    }
}

// New media Gallery Light box
function showLightBox($elm, e, opts) {
        var isUploadButton = e.target.classList.contains('upload-photo');

        if (!isUploadButton) {
          $('.gallery-container .card.show').removeClass('show');
          $lightbox = $elm;
          var $arrowPrev = $lightbox.find('.arrow-previous');
          var $arrowNext = $lightbox.find('.arrow-next');
          var $closeBtn = $lightbox.find('.close-lightbox');
          var lbIndexCount = $(".media-container-popup .media-container-popup-header .item-count .item-count-num");
          var media = [];
          var videos = [];
          var index = 0;

          if (opts) {
            if (opts.startIndex) {
              index = opts.startIndex;
            }
          }

          lbIndexCount.html(parseInt(index) + 1);

          $lightbox.find('.card').each(function() {
            if ($(this).find('iframe').length > 0) {
              videos.push($(this).find('iframe')[0]);
              $(this).find(".lb-iframe-wrapper").addClass("has-video");
            }
            media.push($(this));
          });

          media[index].addClass('show');
          $lightbox.addClass('show-lightbox');
          $("#body").addClass('lightbox-showing');

         

          $lightbox.on("swipeleft", function() {
            $arrowNext.click();
          });
          $lightbox.on("swiperight", function() {
            $arrowPrev.click();
          });


          $arrowNext.click(function() {
            media[index].removeClass('show');
            if (index < (media.length - 1)) {
              index++;
              lbIndexCount.html(index + 1);
              media[index].toggleClass('show');
            } else if (index == (media.length - 1)) {
              index = 0;
              lbIndexCount.html(index + 1);
              media[index].toggleClass('show');
            }
            if (videos.length > 0) {
              pauseIframes(videos);
            }
          });

          $arrowPrev.click(function() {
            media[index].removeClass('show');
            if (index > 0) {
              index--;
              lbIndexCount.html(index + 1);
              media[index].toggleClass('show');
            } else if (index == 0) {
              index = (media.length - 1);
              lbIndexCount.html(index + 1);
              media[index].toggleClass('show');
            }
            if (videos.length > 0) {
              pauseIframes(videos);
            }
          });

          $closeBtn.click(function() {
            $(document).unbind('keydown');
            $lightbox.unbind('swiperight');
            $lightbox.unbind('swipeleft');
            $arrowNext.unbind('click');
            $arrowPrev.unbind('click');
            $closeBtn.unbind('click');
            $("#body").removeClass('lightbox-showing');

            if (videos.length > 0) {
              pauseIframes(videos);
            }
          });

          $(document).keydown(function(event) {
            switch(event.which) {
              case 27:
              $closeBtn.click();
              break;

              case 37:
              $arrowPrev.click();
              break;

              case 39:
              $arrowNext.click();
              break;

              default: return; // exit this handler for other keys
            }
          });

          function configureSocialShare() {

            $('.lb-pinterest', $lightbox).each(function(idx) {

              var pinitButton = $(this);

              var url = pinitButton.attr("data-url");
              var mediaImage = pinitButton.attr("data-media");

              if (mediaImage == '') {
                mediaImage = url;
              }

              // Pinterest.
              pinitButton.attr('href', 'http://pinterest.com/pin/create/button/?url=' + encodeURIComponent(url) + '&media=' + encodeURIComponent(mediaImage) + "&description=" + encodeURIComponent(pinitButton.attr("data-desc")));

              if (($('iframe[src^="http://pinit-cdn.pinterest.com/pinit.html"]').length)) {
                $('iframe[src^="http://pinit-cdn.pinterest.com/pinit.html"]').attr('src', 'http://pinit-cdn.pinterest.com/pinit.html?url=' + encodeURIComponent(url) + '&media=' + encodeURIComponent(mediaImage) + "&description=" + encodeURIComponent(pinitButton.attr("data-desc")));
              } else {
                $.ajax({ url: 'https://assets.pinterest.com/js/pinit.js', dataType: 'script', cache: true });
              }


            });

          }

          configureSocialShare();

        }



}

function pauseIframes(videos) {
  for (var i = 0; i < videos.length; i++) {
    // console.log(videos[i]);
    videos[i].contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*');
  }
}


function closeLightBox() {
  var lightBox = $(".media-container-popup.show-lightbox");
  var imageCards = $(".media-container-popup .gallery-container .card");
  var lbHeader = $(".media-container-popup .media-container-popup-header");
  lightBox.removeClass("lb-fullscreen-img");
  lbHeader.removeClass("lb-fullscreen-img");
  imageCards.removeClass("lb-fullscreen-img");
  $('.media-container-popup.show-lightbox').toggleClass('show-lightbox');
  $("#body").removeClass('lightbox-showing');
}

$('body').on('keydown', function(e) {
  if (event.which === 27) { // Escape Key
    closeLightBox();
  }
});

function expandLightBoxImage() {
  var lightBox = $(".media-container-popup.show-lightbox");
  var imageCards = $(".media-container-popup .gallery-container .card");
  var lbHeader = $(".media-container-popup .media-container-popup-header");
  lightBox.toggleClass("lb-fullscreen-img");
  lbHeader.toggleClass("lb-fullscreen-img");
  imageCards.toggleClass("lb-fullscreen-img");
}

/* Copyright (c) 2007 Tom Deater (http://www.tomdeater.com)
* Licensed under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*/

(function ($) {
    /**
    * attaches a character counter to each textarea element in the jQuery object
    * usage: $("#myTextArea").charCounter(max, settings);
    */

    $.fn.charCounter = function (max, settings,hideTextCounter) {
        var counterDisplay = 'block';
        if(hideTextCounter){
        counterDisplay = 'none';
        }

        max = max || 100;
        settings = $.extend({
            container: "<span style='display:" + counterDisplay + "'></span>",
            classname: "charcounter",
            format: "<span class='tiny'><span class='number'>%1</span>&nbsp;left</span>",
            pulse: true,
            delay: 0
        }, settings);
        var p, timeout;

        function count(el, container) {
            el = $(el);
            var lengthWithBreaksDoubled = el.val().replace(/(\n)/gm, '\n\n').length

            if (lengthWithBreaksDoubled > max) {

                var alphaCount = el.val().replace(/(\n)/gm, '\n\n').length;
                var lfCount = (el.val().match(/\n/g) || []).length;

                //cut off as much as we can before looping to reduce length
                if (lengthWithBreaksDoubled > max + lfCount) {
                    el.val(el.val().substring(0, max + lfCount));
                }

                while (el.val().replace(/(\n)/gm, '\n\n').length > max) {
                    el.val(el.val().substring(0, el.val().length - 1));
                }

                if (settings.pulse && !p) {
                    pulse(container, true);
                };
            };
            if (settings.delay > 0) {
                if (timeout) {
                    window.clearTimeout(timeout);
                }
                //we need to add a second new line character before we count to simulate the crlf used in other places
                timeout = window.setTimeout(function () {
                    container.html(settings.format.replace(/%1/, (max - el.val().replace(/(\n)/gm, '\n\n').length)));
                }, settings.delay);
            } else {
                container.html(settings.format.replace(/%1/, (max - el.val().replace(/(\n)/gm, '\n\n').length)));
            }
        };

        function pulse(el, again) {
            if (p) {
                window.clearTimeout(p);
                p = null;
            };
            el.animate({ opacity: 0.1 }, 100, function () {
                $(this).animate({ opacity: 1.0 }, 100);
            });
            if (again) {
                p = window.setTimeout(function () { pulse(el) }, 200);
            };
        };

        return this.each(function () {
            var container = (!settings.container.match(/^<.+>$/))
				? $(settings.container)
				: $(settings.container)
					.insertAfter(this)
					.addClass(settings.classname);
            $(this)
				.bind("keydown", function () { count(this, container); })
				.bind("keypress", function () { count(this, container); })
				.bind("keyup", function () { count(this, container); })
				.bind("focus", function () { count(this, container); })
				.bind("mouseover", function () { count(this, container); })
				.bind("mouseout", function () { count(this, container); })
				.bind("paste", function () {
				    var me = this;
				    setTimeout(function () { count(me, container); }, 10);
				});
            if (this.addEventListener) {
                this.addEventListener('input', function () { count(this, container); }, false);
            };
            count(this, container);
        });
    };

})(jQuery);

/*****************************
GA Social Tracking
******************************/

function TrackBeAFan() {
    if (typeof _gaq != "undefined")
        _gaq.push(['_trackSocial', 'Saffire', 'Be a Fan']);
}

function TrackSaveToMyFavorites() {
    if (typeof _gaq != "undefined")
        _gaq.push(['_trackSocial', 'Saffire', 'Save to my Favorites']);
}

function TrackUploadPhoto() {
    if (typeof _gaq != "undefined")
        _gaq.push(['_trackSocial', 'Saffire', 'Upload Photo']);
}

function TrackForwardToFriend() {
    if (typeof _gaq != "undefined")
        _gaq.push(['_trackSocial', 'Saffire', 'Forward to Friend']);
}

function TrackFacebookReferTo() {
    if (typeof _gaq != "undefined")
        _gaq.push(['_trackSocial', 'facebook', 'Refer To']);
}

function TrackTwitterReferTo() {
    if (typeof _gaq != "undefined")
        _gaq.push(['_trackSocial', 'twitter', 'Refer To']);
}

function TrackInstagramReferTo() {
    if (typeof _gaq != "undefined")
        _gaq.push(['_trackSocial', 'instagram', 'Refer To']);
}

function TrackYoutubeReferTo() {
    if (typeof _gaq != "undefined")
        _gaq.push(['_trackSocial', 'youtube', 'Refer To']);
}

function TrackPinterestReferTo() {
    if (typeof _gaq != "undefined")
        _gaq.push(['_trackSocial', 'pinterest', 'Refer To']);
}

$(document).ready(function(){
	$('.expand').each(function(){
		$(this).addClass('hasImage');
	});
	var checkIt = $('.listing .hasImage').length;
	if(checkIt>0){
		$('.expand').css('width', '60px');
	}

	$('.nav .items .item.temporaryNudgeRight > a').each(function(){
		var pl = $(this).css('padding-left');
		var pr = $(this).css('padding-right');
		pl = parseInt(pl);
		pr = parseInt(pr);
		$(this).css({paddingLeft:pl+8+'px', paddingRight:pr-8+'px'});
	});

	var b = $('.newTixDeals .listing .row').css('background-color');
	$('.newTixDeals .listing .row, .newTixDeals .listing .row_alt').hover(function(){$(this).css('background-color', b);});
	var c = $('.newTixDeals .listing .item .question a span').css('color');
	$('.newTixDeals .listing .item .date, .newTixDeals .listing .item .time, .newTixDeals .listing .item .cost').css({color:c});
});

//fix for ie 10 image button issue
$(function () {
    // Patch fractional .x, .y form parameters for IE10.
    if (typeof (Sys) !== 'undefined' && Sys.Browser.agent === Sys.Browser.InternetExplorer) {
        Sys.WebForms.PageRequestManager.getInstance()._onFormElementActive = function Sys$WebForms$PageRequestManager$_onFormElementActive(element, offsetX, offsetY) {
            if (element.disabled) {
                return;
            }
            this._activeElement = element;
            this._postBackSettings = this._getPostBackSettings(element, element.name);
            if (element.name) {
                var tagName = element.tagName.toUpperCase();
                if (tagName === 'INPUT') {
                    var type = element.type;
                    if (type === 'submit') {
                        this._additionalInput = encodeURIComponent(element.name) + '=' + encodeURIComponent(element.value);
                    }
                    else if (type === 'image') {
                        this._additionalInput = encodeURIComponent(element.name) + '.x=' + Math.floor(offsetX) + '&' + encodeURIComponent(element.name) + '.y=' + Math.floor(offsetY);
                    }
                }
                else if ((tagName === 'BUTTON') && (element.name.length !== 0) && (element.type === 'submit')) {
                    this._additionalInput = encodeURIComponent(element.name) + '=' + encodeURIComponent(element.value);
                }
            }
        };
    }
});


/****************** centers images in their container (image grids) - use for IE8-9 only, in place of css flex **************/
function imageGridVerticalCentering(containerClass){
	$('.imageGalleryViewItem').each(function(){
		var i = $(this).has('img');
		if(i){
			var containerHeight = $('.'+containerClass).height();
			var itemHeight = $('img', this).height();
			var margin = (containerHeight-itemHeight)*0.5;
			$('img',this).css('margin-top',margin+'px');
			$(this).css('text-align','center');
		}
	});
}

/***************** insures that images wrap properly regardless of site width or descriptive text (call on window.load) **************/
function imageGridLayout(containerClass){
    $('.imageGallery').each(function(){
        var c = $('.'+containerClass).width();
        var img = parseInt($('.imageGalleryViewItem', this).css('width'));
        var mL = parseInt($('.imageGalleryViewItem', this).css('margin-left'));
        var mR = parseInt($('.imageGalleryViewItem', this).css('margin-right'));
        var pL = parseInt($('.imageGalleryViewItem', this).css('padding-left'));
        var pR = parseInt($('.imageGalleryViewItem', this).css('padding-right'));
        var tot = img+mL+mR+pR+pL;
        var n = Math.floor(c/tot);
    	var loop = n+1;

        //$(this).css({width:n*tot+'px', marginRight:'auto', marginLeft:'auto'})
        var i = 1;
        $('.imageGalleryViewItem', this).each(function(){
            if(i<loop){
                i++;
            } else {
                $(this).css('clear','left');
                i = 2;
            }
        });
    });
    $('.imageGalleryViewItem').animate({opacity:'1'},750)
}

/***********Support for indexOf for IE8 or lower***************/

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (obj, start) {
        for (var i = (start || 0), j = this.length; i < j; i++) {
            if (this[i] === obj) { return i; }
        }
        return -1;
    }
}


/********** Opens info panel in mobile view slideshow **************/
function showImageGridDescription(el){
    var checkClass = $(el).closest('.swiper-slide').hasClass('imageGridShowingDescription');

    if(!checkClass){
        $(el).closest('.swiper-slide').addClass('imageGridShowingDescription');
    } else {
        $(el).closest('.swiper-slide').removeClass('imageGridShowingDescription');
    }
}

function setResponsiveSize() {
    if (mobileSize && isResponsive) {

        var winWidth = $(window).width();

        if (winWidth <= mobileSize) {
            $('body').addClass('saffireMobileSize');
            $('body').removeClass('saffireLargeSize');
        } else {
            $('body').removeClass('saffireMobileSize');
            $('body').addClass('saffireLargeSize');
        }
    }
}

/*********************************
ASMX Service Functions
**********************************/
extend(saffire, {
    data: {
        callAPI: function(endpoint, data, success, error) {

            $.ajax({
                type: "POST",
                url: endpoint,
                cache: false,
                contentType: "application/json; charset=utf-8",
                data: data,
                dataType: "json",
                success: success,
                error: error,
                dataFilter: function (originalData) {
                    try {
                        var data = JSON.parse(originalData);
                        if (data.hasOwnProperty('d')) {
                            data = data.d;
                            return JSON.stringify(data);
                        }
                        else {
                            return originalData;
                        }

                    }
                    catch (err) {
                        return originalData;
                    }
                }
            });

        }
    }
});


extend(saffire, {
    web: {
        services: {
            general: {

                emailSignup: function (email, list, success, error, eventID, context) {

                    saffire.data.callAPI(SITEBASEURL + "services/GeneralService.asmx/EmailSignup",
                        "{'email': '" + email + "', 'list': '" + list + "', 'eventID': '" + eventID + "'}",
                        success, error);

                }

            }

            ,events: {

                saveFanPick: function(entityTypeName, entityID, success, error, context) {

                    saffire.data.callAPI(SITEBASEURL + "services/EventsService.asmx/SaveFanPick",
                        "{'entityTypeName': '" + entityTypeName + "', 'eventID': '" + entityID + "'}",
                        success, error);

                }
                , getEventFanPickCount: function(entityID, success, error, context) {

                    saffire.data.callAPI(SITEBASEURL + "services/EventsService.asmx/GetEventFanPickCount",
                        "{'eventID': '" + entityID + "'}",
                        success, error);

                }

            }

            ,businesses: {

                saveFanPick: function(entityTypeName, entityID, success, error, context) {

                    saffire.data.callAPI(SITEBASEURL + "services/BusinessesService.asmx/SaveFanPick",
                       "{'entityTypeName': '" + entityTypeName + "', 'businessID': '" + entityID + "'}",
                       success, error);

                }

                , getBusinessFanPickCount: function (entityID, success, error, context) {

                    saffire.data.callAPI(SITEBASEURL + "services/BusinessesService.asmx/GetBusinessFanPickCount",
                        "{'businessID': '" + entityID + "'}",
                        success, error);

                }

            }

            ,user: {

                isAuthenticated: function(userID, success, error) {

                    saffire.data.callAPI(SITEBASEURL + "services/UsersService.asmx/IsAuthenticated",
                       "{'uid': '" + userID + "'}",
                       success, error);

                }

                , changeLoginStatusAndGetNextStepURL: function (success, error) {

                    saffire.data.callAPI(SITEBASEURL + "services/UsersService.asmx/ChangeLoginStatusAndGetNextStepURL",
                        "",
                        success, error);

                }

            }
            
        }
    }

});

/*********************************
Document Events
**********************************/

setResponsiveSize();

$(document).ready(function () {

    var skipToContent = $('#skiptocontent');

    if (skipToContent.length > 0) {

       var isFirstTabClick = false;

       document.documentElement.addEventListener('keydown', function (event) {
           var code = event.which;
           // Show animation only upon Tab or Arrow keys press.
           if (code === 9) {

               if (!isFirstTabClick) {
                   skipToContent.show();                   
                   isFirstTabClick = true;
               }
           }
       }, false);
      
       $('#skiptocontent a').click(function () {
          var firstFocusableElem = $('main.content').find(':focusable').first();
          firstFocusableElem.focus();
       });
    }


    // Hide/show itemListing Product Details
    function showItemListingDetails(el) {
      if ( !el.hasClass('show-details') ) {
        el.addClass('show-details');
        el.find('> a').text('Hide Details');
      } else {
        el.removeClass('show-details');
        el.find('> a').text('View Details');
      }
    }
    $('.listingItem .viewDetails > a,.cartNavItem .viewDetails > a , .cart-product .viewDetails > a ').on('keypress click', function(e) {
      var el = $(this).parent();
      if (e.which === 13 || e.type === 'click') {
        showItemListingDetails(el);
      }
    });
    // -----

    // workaround for blogs (headerEmailSignupMode var is missing there)
    if (headerEmailSignupMode === undefined) {
      var headerEmailSignupMode = 1;
    }
    // -----

    if (isResponsive || headerEmailSignupMode) {

        if (headerEmailSignupMode) {
            var $emailBtn = $('.header .emailSignup .emailSubmitButton');
            if ($emailBtn.length > 0 && $emailBtn.attr("href") != undefined) {
                if (!$emailBtn.attr("href").startsWith("http")) {
                    $emailBtn.removeAttr('onclick').removeAttr('href', '');
                }
            }
        }

        $('.header .emailSignup').click(function () {
            var getWidth = $(window).width();
            if (getWidth <= mobileSize || headerEmailSignupMode) {
                window.top.OpenModal('modal', SITEBASEURL + 'modalucloader.aspx?controlpath=~/events/content/email.ascx', '600px', '275px', { 'OnClosePostBack': false, 'OnCloseTargetID': 'Reload', 'Parent': window, 'ScrollFrame': false });
            }
        });

        if (isResponsive) {

            var $searchBox = $('.header .searchBox');
            if ($searchBox.length > 0) {

                $('.header .searchBox').prepend('<div id="searchBoxClicker"></div>');
                $('#searchBoxClicker').click(function () {
                    $('.clonedSearchBox').remove();
                    var getWidth = $(window).width();
                    var isClicked = $(this).hasClass('searchBoxShowing');
                    if (getWidth <= mobileSize) {
                        $('.header').append('<div class="searchBox clonedSearchBox">' +
                            '<div class="searchBoxInput">' +
                            '<input type="text" class="textbox search inputFieldTextbox ui-autocomplete-input" placeholder="Search Website" />' +
                            '<span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span>' +
                            '</div>' +
                            '<div class="searchBoxSubmit">' +
                            '<a href="javascript:void(0)" onclick="updateClonedSubmit()" class="button inputFieldSubmit searchSubmitButton"></a>' +
                            '</div>' +
                            '<a onclick="document.querySelector(\'.clonedSearchBox\').remove()" class="mobileSearchCloseButton" href="javascript:void(0);">X</a></div>'
                        )

                        $('.clonedSearchBox #searchBoxClicker').remove();

                        $(".clonedSearchBox input").keyup(function (event) {
                            if (event.keyCode == 13) {
                                $(".clonedSearchBox a.inputFieldSubmit").click();
                            }
                        });
                    }
                });

                $('.mobile-menu-container .search-container .search-submit-btn').click(function () {
                    var curValue = $('.search-container input').val();
                    if (curValue != '') {
                        window.location = SITEBASEURL + 'search.aspx?q=' + curValue;
                    }
                });

                $('.search-container input').keyup(function (event) {
                    if (event.keyCode == 13) {
                        $(".mobile-menu-container .search-container .search-submit-btn").click();
                    }
                });


                $('.nav>div.clear:first-of-type').click(function () {
                    var checkClicked = $(this).hasClass('navTriggerClicked');
                    if (checkClicked) {
                        $(this).removeClass('navTriggerClicked');
                        $('body').removeClass('mobileNavShowing');
                        $('ul').removeClass('navMobileMenuShiftedLeft');
                        $('.navMobileMenuShiftedGoBack').css('display', 'none');
                    } else {
                        $(this).addClass('navTriggerClicked');
                        $('body').addClass('mobileNavShowing');
                    }
                });

                $('.nav .groups').before('<span class="navMobileMenuShiftedGoBack" onclick="hideMenuPanel()"></span>');

                var i = 0;
                $('li[aria-haspopup="true"]').each(function () {
                    var getDummyLinkText = $(this).children('a').text();
                    $(this).prepend('<span class="navDummyLink">' + getDummyLinkText + '</span>');
                    getDummyLinkText = getDummyLinkText.replace('>', '');
                    $('ul', this).first().prepend('<li class="item navClonedItem" id="navDummyLink' + i + '"></li>')
                    $(this).children('a').text(getDummyLinkText);
                    $(this).children('a').clone().appendTo('#navDummyLink' + i);
                    i++;
                });

                $('.nav .items .item.temporaryNudgeRight > .navDummyLink').each(function () {
                    var pl = $(this).css('padding-left');
                    var pr = $(this).css('padding-right'); // console.log(pl + ' '+ pr)
                    pl = parseInt(pl);
                    pr = parseInt(pr);
                    $(this).css({ paddingLeft: pl + 8 + 'px', paddingRight: pr - 8 + 'px' });
                });

                $('.navDummyLink').click(function () {
                    $(this).closest('li').find('ul').first().addClass('navMobileMenuShiftedLeft');
                    $('.navMobileMenuShiftedGoBack').css('display', 'block');
                });

                $('#calendarMobileToggle, #eventFilterOptions li').click(function () {
                    toggleEventPane();
                });
            }
            else {
                $('.mobile-menu-container .search-container').remove();
            }
        }
    }
});

$(window).load(function () {

    if ($('.footer').length > 0 ) {
        var windowWidth = $(window).width();
        if (windowWidth <= mobileSize && isResponsive) {
            $('.footer .footerItems1 a').addClass('button');
            $('.footer .footerSignIn a').addClass('button');
        } else {
            $('.footer .footerItems1 a').removeClass('button');
            $('.footer .footerSignIn a').removeClass('button');
        }
    }

    $('body').addClass('pageIsLoaded');

    var topScrollPos = $(window).scrollTop();

    if (topScrollPos > windowTopValue) {
        $('body').addClass('saffireWindowScrolled');
    } else {
        $('body').removeClass('saffireWindowScrolled');
    }

});

$(window).resize(function () {

    setResponsiveSize();

    if ($('.footer').length > 0) {
        var windowWidth = $(window).width();
        if (windowWidth <= mobileSize && isResponsive) {
            $('.footer .footerItems1 a').addClass('button');
            $('.footer .footerSignIn a').addClass('button');
        } else {
            $('.footer .footerItems1 a').removeClass('button');
            $('.footer .footerSignIn a').removeClass('button');
        }
    }
});

$(window).scroll(function () {

    var topScrollPos = $(window).scrollTop();
    if (windowTopValue != undefined && windowTopValue != null) {
        if (topScrollPos > windowTopValue) {
            $('body').addClass('saffireWindowScrolled');
        } else {
            $('body').removeClass('saffireWindowScrolled');
        }
    }
});

/*********************************
Mobile Nav
**********************************/

$(document).ready(function() {
  function createMobileNavMenu() {
      var navGroups = $('#mainNavigation .groups').first().clone();
      var mobileNavPanel = $('.mobile-menu-container .mobile-menu-slider');

      $('.mobile-menu-container .mobile-menu-slider .groups').remove();
      var navEl = document.createElement('nav');
      navEl.setAttribute('id', "mobile-nav");
      mobileNavPanel.append(navEl);
      navGroups.find('.navDummyLink').remove();
      navGroups.find('.navClonedItem').remove();
      navGroups.find('li[aria-haspopup="true"]').addClass('has-subitems');
      navGroups.find('li[aria-haspopup="true"]').append('<span class="next-level-btn">❯</span>');
      navGroups.find('.items').prepend('<li class="item prev-level-btn"><a href="javascript:void(0);">❮ &nbsp; Back</a></li>');
      navGroups.find('.subitems').prepend('<li class="item prev-level-btn"><a href="javascript:void(0);">❮ &nbsp; Back</a></li>');
      navGroups.addClass('m-groups');
      navGroups.find('.group').addClass('m-group');
      navGroups.find('.items').addClass('m-items');
      navGroups.find('.items > .item').addClass('m-item');
      navGroups.find('.subitems').addClass('m-subitems');
      navGroups.find('.subitems > .item').addClass('m-subitem');
      navGroups.removeClass('groups');
      navGroups.find('.group').removeClass('group');
      navGroups.find('.items').removeClass('items');
      navGroups.find('.item').removeClass('item');
      navGroups.find('.subitems').removeClass('subitems');
      navGroups.find('.temporaryNudgeRight').removeClass('temporaryNudgeRight');
      navGroups.find('a').removeAttr('id');
      navGroups.find('a').removeClass('showingNav');
      mobileNavPanel.find('nav').append(navGroups);

      // Next nav level
      $('.m-group.has-subitems .next-level-btn').click(function() {
          $(this).prev('ul').addClass('level-2-showing');
          $(this).closest('nav').addClass('show-level-2');
          var contHeight = $(this).prev('.level-2-showing').height();
          $('.mobile-menu-slider').height(contHeight + 'px');
      });
      $('.m-item.has-subitems .next-level-btn').click(function() {
          $(this).prev('ul').addClass('level-3-showing');
          $(this).closest('nav').addClass('show-level-3');
          $(this).closest('nav').removeClass('show-level-2');
          var contHeight = $(this).prev('.level-3-showing').height();
          $('.mobile-menu-slider').height(contHeight + 'px');
      });
      $('.m-subitem.has-subitems .next-level-btn').click(function() {
        $(this).prev('ul').addClass('level-4-showing');
        $(this).closest('nav').addClass('show-level-4');
        $(this).closest('nav').removeClass('show-level-3');
        var contHeight = $(this).prev('.level-4-showing').height();
        $('.mobile-menu-slider').height(contHeight + 'px');
      });

      // Previous nav level
      $('.m-group.has-subitems .prev-level-btn').click(function() {
          $(this).closest('nav').removeClass('show-level-2');
          var contHeight = $('#mobile-nav').height();
          var thisParent = $(this).parent('ul');
          setTimeout(function () {
              thisParent.removeClass('level-2-showing');
              $('.mobile-menu-slider').height(contHeight + 'px');
          }, 300);
      });
      $('.m-item.has-subitems .prev-level-btn').click(function() {
          $(this).closest('nav').removeClass('show-level-3');
          $(this).closest('nav').addClass('show-level-2');
          var contHeight = $('.m-items.level-2-showing').height();
          var thisParent = $(this).parent('ul');
          setTimeout(function () {
              thisParent.removeClass('level-3-showing');
              $('.mobile-menu-slider').height(contHeight + 'px');
          }, 300);
      });
      $('.m-subitem.has-subitems .prev-level-btn').click(function() {
        $(this).closest('nav').removeClass('show-level-4');
        $(this).closest('nav').addClass('show-level-3');
        var contHeight = $('.m-subitems.level-3-showing').height();
        var thisParent = $(this).parent('ul');
        setTimeout(function () {
            thisParent.removeClass('level-4-showing');
            $('.mobile-menu-slider').height(contHeight + 'px');
        }, 300);
    });
  }



  // Hide and show mobile-nav
  $('.mobileNavLink').click(function() {
      $('body').toggleClass('mobile-menu-open');
      updateMobileNavCart();
      createMobileNavMenu();
  });
  $('.mobile-nav-toggle').click(function() {
      $('body').toggleClass('mobile-menu-open');
      updateMobileNavCart();
      createMobileNavMenu();
  });
  $('.mobile-menu-header .close-mobile-menu').click(function() {
      $('body').toggleClass('mobile-menu-open');
      setTimeout(function () {
          $('#mobile-nav').remove();
      }, 300);
  });

  // quicklinks functionality -- hide these by default?
  var mobileNavSearchContainer = $('.mobile-menu-container .search-container');
  var mobileNavEmailContainer = $('.mobile-menu-container .email-signup-container');
  var mobileNavCartContainer = $('.mobile-menu-container .mobile-menu-cart');
  var mobileNavLoginContainer = $('.mobile-menu-container .mobile-menu-login-links');
  var mobileTicketBtn = $('.mobile-menu-container .mobile-menu-ticket-btn');

  if ( $('.header .searchBox').length > 0 ) {
    mobileNavSearchContainer.show();
  } else {
    mobileNavSearchContainer.hide();
  }

  if ( $('.header .emailSignup').length > 0 ) {
      mobileNavEmailContainer.find('a').attr('href','/email.aspx');
      mobileNavEmailContainer.show();
  } else {
      mobileNavEmailContainer.hide();
  }

  if ( $('.header .viewcart').length > 0 ) {
      mobileNavCartContainer.find('a').attr('href','/cart.aspx');
      mobileNavCartContainer.show();
  } else {
      mobileNavCartContainer.hide();
  }

  if ( ($('.loginstatus').length > 0) || ($('.login-status-link').length > 0) ) {
    var headerSignOut = $('.loginstatus a').attr('href') || $('.login-status-link').attr('href');
    var signIn = $('.mobile-menu-signInBtn');
    var signOut = $('.mobile-menu-signOutBtn');
    var myAcct = $('.mobile-menu-myAccountBtn');

    mobileNavLoginContainer.show();
    if ( $('body').hasClass('userLoggedIn') ) {
        signIn.hide();
        myAcct.attr('href', '/myaccountinfo.aspx');
        myAcct.show();
        signOut.attr('href', headerSignOut);
        signOut.show();
    } else {
        signIn.attr('href', '/login.aspx');
        signIn.show();
        myAcct.hide();
        signOut.hide();
    }
  } else {
    $('.mobile-menu-login').hide();
     mobileNavLoginContainer.hide();
  }

  if ( $('.ticket').length > 0 ) {
    mobileTicketBtn.show();
  } else {
    mobileTicketBtn.hide();
  }


});

// Update items number in mobile nav cart. - also called in viewcartnav.ascx
function updateMobileNavCart() {
  var itemsInCart = $('.cartMenuLink').data('itemcount');
  $('.mobile-menu-container .cart-counter').text(itemsInCart);
}

function valueIsNullOrUndefinedOrEmpty(value) {

    if (value == undefined || value == null || value === '') {
        return true
    }

    return false
}

// Show sign-in link in checkout if loginstatus is present in header
// Show sign-in and create account section in checkout confirmation if loginstatus is present in header
$(document).ready(function() {
  if ( ($('.loginstatus').length > 0) || ($('.login-status-link').length > 0) ) {
    if ( $('#checkout').length > 0 ) {
      var chkLoginLink = $('.checkout-header__links a').first();
      chkLoginLink.next().show();
      chkLoginLink.show();
    }
    if ( $('.checkout-confirmation__section-account').length > 0 ) {
      $('.checkout-confirmation__section-account').show();
    }
  }
});

function getUrlVars() {
    var url = window.location.href;
    var vars = {};
    var hashes = url.split("?")[1];
    var hash = hashes.split('&');

    for (var i = 0; i < hash.length; i++) {
        params = hash[i].split("=");
        vars[params[0]] = params[1];
    }
    return vars;
}

function convertDataURIToBinary (dataURI) {
    var BASE64_MARKER = ';base64,';

    var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
    var base64 = dataURI.substring(base64Index);
    var raw = window.atob(base64);
    var rawLength = raw.length;
    var array = new Uint8Array(new ArrayBuffer(rawLength));

    for (i = 0; i < rawLength; i++) {
        array[i] = raw.charCodeAt(i);
    }

    return array;
}