// Javascript for the Weblinc PDP page
jQuery(document).ready(function () {
    jQuery('div.qtySelector input.qtybox2').keypress(function (evt) {
        return isNumberKey(evt);
    });
});

// Function to open and close the shopping index
function toggleShoppingIndex(target) {
    jQuery('div#' + target).toggleClass('display');
}

// Function to toggle the display class
function toggleTargetDisplayClass(target) {
    jQuery(target).toggleClass('display');
}

// Function to clear the default value in the left nav search box
function defaultSearch(target) {
    if (!searchValueChanged(target))
    {
        jQuery(target).val('');
        return false;
    }
    jQuery(target).addClass('active');
}

function searchWithin() { }

// function to determine if the user has changed the value of the text boxk
function searchValueChanged(textbox) {
    var defaultValue = 'Search';
    var defaultValue2 = 'Enter Team or Keyword';
    var defaultValue3 = 'Enter Keyword';
    var value = jQuery(textbox).val();
    if (value == defaultValue || value == defaultValue2 || value == defaultValue3 || value == '')
        return false;
    else
        return true;
}

// DOM Ready function to have nav drop down functionality and drop shadows
jQuery(document).ready(function()
{
    dropDownShadow('div.navPositionWrapper');
    jQuery("ul#headerUL li a.headerLink").bind("click", function(e)
    {
        var returnState = safariFixNavClick(this);
        return returnState;
    });
    jQuery("ul#headerUL > li").bind("mouseenter", function(e)
    {
        jQuery(this).addClass('display');
        addState(jQuery(this), 'display');
    });
    jQuery("ul#headerUL > li").bind("mouseleave", function(e)
    {
        // jQuery(this).removeClass('display');
        removeState(this);
        jQuery(this).removeClass('display');
    });
    jQuery("ul.topNavUL li").bind("mouseenter", function(e)
    {
        jQuery(this).addClass('display');
    });
    jQuery("ul.topNavUL li").bind("mouseleave", function(e)
    {
        jQuery(this).removeClass('display');
    });
});

function safariFixNavClick(element)
{
    // This function exists because for some unknown reason, and only in Safari 3.1, the jquery presence test looking for 'clickableNav'
    // always failed when being run inside the onclick lambda function. Once moved out of the lambda into it's own
    // function, it works fine. Go Figure.
    var clickTest = jQuery("div.clickableNav").hasClass("clickableNav");
    if (clickTest)
    {
        // Clickable Nav is there. Let clicks on the nav take users places.
        addState(jQuery(element).parent(), 'clicked');
        return true;
    }
    else
    {
        // Check to see if the Nav ID contains 'clickable'
        var match = /clickable/.test(jQuery(element).parent().attr('id'));
        // if not containing 'clickable', add the 'clicked' class.
        if ( !(match) )
        {
            addState(jQuery(element).parent(), 'clicked');
        }
        // return match to allow or disallow the click.
        return match;
    }
}


// Function to show drop down nav items
function addState(target, state) {
    jQuery(target).addClass(state);
    hideSelectsIE6(jQuery(target).children('div.navPositionWrapper'));
    /*
    var newTarget = jQuery(target).children('div.navPositionWrapper');
    var targetObj = Object();
    var targetOffsets = jQuery(newTarget).offset();
    targetObj.left = targetOffsets.left;
    targetObj.right = targetOffsets.left + jQuery(newTarget).outerWidth();
    targetObj.top = targetOffsets.top;
    targetObj.bottom = targetOffsets.top + jQuery(newTarget).height();
    var selectElements = jQuery('body select');
    selectElements.each(function() {
        var selectOffsets = jQuery(this).offset();
        var selectObj = Object();
        selectObj.left = selectOffsets.left;
        selectObj.right = selectOffsets.left + jQuery(this).outerWidth();
        selectObj.top = selectOffsets.top;
        selectObj.bottom = selectOffsets.top + jQuery(this).outerHeight();
        if
		(
			(
				((selectObj.left > targetObj.left) && (selectObj.left < targetObj.right)) ||
				((selectObj.right > targetObj.left) && (selectObj.right < targetObj.right))
			) && (
				((selectObj.top > targetObj.top) && (selectObj.top < targetObj.bottom)) ||
				((selectObj.bottom > targetObj.top) && (selectObj.bottom < targetObj.bottom))
			)
		) {
            // use class 'tempHide' to hide problem selects
            jQuery(this).addClass('tempHide');
        }
    });
    */
}

// Function to hide drop down nav items
function removeState(target) {
    jQuery(target).removeClass('clicked');
    showSelectsIE6();
}

// Function to create drop down shadows
function dropDownShadow(target) {
    // grab elements that need a shadow
    var targets = jQuery(target);
    targets.each(function()
    {
        var countItems = jQuery(this).find("div ul li");
        // Don't show any drop down HTML if there are not items in the drop down
        if (countItems.length > 0)
        {
            for (i = 1; i <= 12; i++)
            {
                var shadow = '<div class="navShadow navShadow' + i + '"><' + '/div>';
                jQuery(this).append(shadow);
            }
            jQuery(this).parent().addClass('display');
            var heightEl = jQuery(this).height();
            var widthEl = jQuery(this).outerWidth();
            jQuery('div.navShadow', this).height(heightEl);
            jQuery('div.navShadow', this).width(widthEl);
            jQuery(this).parent().removeClass('display');
        }
        else
        {
            var heightEl = 0;
            var widthEl = 0;
            jQuery('div.navShadow', this).height(heightEl);
            jQuery('div.navShadow', this).width(widthEl);
            jQuery(this).css("display", "none");

        }
    });
}

// Hide select elements in IE6 that would appear through a div layer
// padding in a selector for the div layer
function hideSelectsIE6(target)
{
    var newTarget = jQuery(target);
    var targetObj = Object();
    var targetOffsets = jQuery(newTarget).offset();
    targetObj.left = targetOffsets.left;
    targetObj.right = targetOffsets.left + jQuery(newTarget).outerWidth();
    targetObj.top = targetOffsets.top;
    targetObj.bottom = targetOffsets.top + jQuery(newTarget).height();
    var selectElements = jQuery('body select');
    selectElements.each(function() {
        var selectOffsets = jQuery(this).offset();
        var selectObj = Object();
        selectObj.left = selectOffsets.left;
        selectObj.right = selectOffsets.left + jQuery(this).outerWidth();
        selectObj.top = selectOffsets.top;
        selectObj.bottom = selectOffsets.top + jQuery(this).outerHeight();
        /*  If left is between targetRight and targetLeft OR right is between targetRight and targetLeft
        OR top is between targetTop and targetBottom OR bottom is between targetTop and targetBottom
        THEN hide that select
        */
        if
		(
			(
				((selectObj.left > targetObj.left) && (selectObj.left < targetObj.right)) ||
				((selectObj.right > targetObj.left) && (selectObj.right < targetObj.right))
			) && (
				((selectObj.top > targetObj.top) && (selectObj.top < targetObj.bottom)) ||
				((selectObj.bottom > targetObj.top) && (selectObj.bottom < targetObj.bottom))
			)
		) {
            // use class 'tempHide' to hide problem selects
            jQuery(this).addClass('tempHide');
        }
    });
}

// Show select elements in IE6 that would appear through a div layer
function showSelectsIE6()
{
	jQuery('.tempHide').removeClass('tempHide');
}


// redirect to a url with new parameter
function queryStringRedirect(baseurl, param, value) {
    if (value == "")
        return;
    var url = jQuery.queryString(baseurl, param + "=" + value);
    window.location = url;
}

function queryStringRedirectValue(baseurl, element) {
    if ($(element).val() == "")
        return;
    var url = jQuery.queryString(baseurl, $(element).val());
    window.location = url;
}

// Javascript object for Quicklook

var quickLookBrowse = null;
QuickLookWidget = function(name_var, handle) {
    this.init(name_var, handle);
}

jQuery.extend(QuickLookWidget.prototype, {
    // object variables
    widget_enabled: true,
    widget_status: false,
    widget_overrride_status: false,
    widget_enabled_class: 'quicklookEnabled',
    widget_item_container_class: 'ItemContainer',
    widget_hover_image_target: 'div.ImageLink',
    widget_outside_target: 'body',
    widget_button_targetID: 'quickLookHoverButttonContainer',
    widget_button_top_offset: 90,
    widget_button_left_offset: 20,
    widget_button_mouseout_delay: 20,
    widget_button_normal_src: '//images.footballfanatics.com/partners/ff_wide/quicklook/FF_quicklook_button.gif',
    widget_button_hover_src: '//images.footballfanatics.com/partners/ff_wide/quicklook/FF_quicklook_button_hover.gif',
    widget_product_url: null,
    widget_outside_container_class: 'qlOutsideBackgroundContainer',
    widget_modal_bg_container_class: 'qlModalBackgroundContainer',
    widget_frame_width: 0,
    widget_frame_height: 0,
    widget_container_width: 532,
    widget_image_width: 250,
    widget_minibag_image_width: 180,
    widget_image_domain: '//images.footballfanatics.com',
    dataResponse: '',
    widget_item_id: '',
    widget_item_category: '',
    backgroundOpacityColor: '#000000',
    modalOpacity: .50,
    IEmodalOpacity: 0,
    widget_name: '',

    init: function(widget_name, widget_handle)
    {
        // do initialization here
        this.widget_name = widget_name;
        this.widget_handle = widget_handle;
        this.IEmodalOpacity = this.modalOpacity * 100;
        this.checkForQuickLook();
    },

    checkForQuickLook: function()
    {
        // Verify that Quicklook is enabled, that this is a page to run quicklook on, and that the required containers are in place
        // Verify QL enabled
        if (jQuery('div.' + this.widget_enabled_class).hasClass(this.widget_enabled_class) || this.widget_overrride_status)
        {
            // quickLook enabled class found
            // Verify item containers exist
            if (jQuery('div.' + this.widget_item_container_class).hasClass(this.widget_item_container_class))
            {
                // Item container does indeed exist, change widget status, if widget is enabled
                if (this.widget_enabled == true)
                {
                    // We have a live widget
                    this.widget_status = true;
                }
            }
        }
        if (this.widget_status)
        {
            // Widget enabled, start process
            this.hangImageEvents();
        }
    },

    hangImageEvents: function()
    {
        // Created the Quick Look hover button that will appear over product images
        this.widgetHoverImageHTML = '<div id="' + this.widget_button_targetID + '"><div id="quickLookHoverButtton">&nbsp;</div></div>';
        jQuery(this.widget_outside_target).append(this.widgetHoverImageHTML);
        // assign 'this' to 'self' so that we can still reference 'this' within event handling.
        var self = this;
        jQuery('div#' + this.widget_button_targetID).bind("mouseover", function(e)
        {
            jQuery('div#' + this.widget_button_targetID).css("display", "block");
            jQuery(this).addClass('hover');
        });
        jQuery('div#' + this.widget_button_targetID).bind("mouseout", function(e)
        {
            jQuery(this).removeClass('hover');
        });
        jQuery('div.' + this.widget_item_container_class).bind("mouseenter", function(e)
        {
            self.showQLButton(this);
        });
        jQuery('div.' + this.widget_item_container_class).bind("mouseleave", function(e)
        {
            self.hideQLButton(this);
        });
        jQuery('div#' + this.widget_button_targetID).bind("click", function(e)
        {
            jQuery('div#' + self.widget_button_targetID).css("display", "none");
            self.getQLInformation();
        });
    },

    showQLButton: function(target)
    {
        var measurements = jQuery(target).offset();
        var top = this.widget_button_top_offset + measurements.top;
        var left = this.widget_button_left_offset + measurements.left;
        var buttonCSS = {
            'top': top,
            'left': left,
            'display': 'block'
        }
        jQuery('div#' + this.widget_button_targetID).css(buttonCSS);
        this.widget_product_url = jQuery(target).find('div.ImageLink > a').attr('href');
        jQuery(target).addClass('hover');
    },

    hideQLButton: function(target)
    {
        var func = this.widget_handle + '.hideButton()';
        var timer = this.widget_button_mouseout_delay;
        jQuery(target).removeClass('hover');
        setTimeout(func, timer);
    },

    hideButton: function()
    {
        var buttonHover = jQuery('div#' + this.widget_button_targetID).hasClass('hover');
        var itemHover = jQuery('div.' + this.widget_item_container_class).hasClass('hover');
        if ((buttonHover == false) && (itemHover == false))
        {
            jQuery('div#' + this.widget_button_targetID).css("display", "none");
        }
    },

    getQLInformation: function()
    {
        var self = this;
        // We have to append a random number to the URL so that we're not accidentally caching the JSON AJAX call.
        var rand = Math.floor(Math.random() * 10000001);
        var testData = '/quicklook/testData.js';
        this.widget_call_url = '/productinfohandler.ashx?product=' + this.widget_product_url + '&rn=' + rand;
        if (this.widget_call_url != null)
        {
            jQuery.getJSON(this.widget_call_url,
			function(data, status)
			{
			    self.buildQLWindow(data, status);
			});
        }
        else
        {
            // alert('QL fire failed');
        }

    },

    buildQLWindow: function(data, status)
    {
        this.dataResponse = data;
        var self = this;
        if (status == "success")
        {
            // create modal background
            var widget_outside_container = '<div class="' + this.widget_outside_container_class + '"></div>';
            var bgContainer = '<div class="' + this.widget_modal_bg_container_class + '"></div>';
            var qlContainer = '<div class="qlOutsideContainer"></div>';
            // Only append the quicklook HTML structure if it doesn't already exist
            if (!(jQuery('div.' + this.widget_outside_container_class).hasClass(this.widget_outside_container_class)))
            {
                jQuery('body').append(widget_outside_container);
                jQuery('div.' + this.widget_outside_container_class).append(bgContainer);
                jQuery('div.' + this.widget_outside_container_class).append(qlContainer);
            }
            // define quicklook template
            var qlTemplate = '\
            <div class="qlBorderContainer">\
            <div class="qlInsideContainer clearfix">\
            <div class="qlHeaderContainer clearfix">\
            <div class="qlHeaderLeftContainer">Quick Look</div>\
            <div class="qlHeaderRightContainer">close</div>\
            </div>\
            <div class="qlLeftContainer">\
            <div class="qlImageContainer">\
            <img src="//images.footballfanatics.com/partners/ff_wide/quicklook/placeholder.gif" alt="quicklook image"/>\
            </div>\
            <div class="qlThumbsOutsideContainer">\
            </div>\
            </div>\
            <div class="qlRightContainer qlBuy">\
            <div class="qlRightBorderContainer">\
            <div class="qlTabContainer clearfix">\
            <div class="qlTabBuy active">Buy</div>\
            <div class="qlTabDetails inactive">Details</div>\
            </div>\
            <div class="qlBuyContainer">\
            <div class="qlTitleContainer"></div>\
            <div class="qlPriceOutsideContainer"></div>\
            <div class="qlPriceAdjustmentContainer"></div>\
            <div class="sizeHeaderContainer">Choose Size:</div>\
            <div class="sizeChoiceContainer clearfix"></div>\
            <div class="qlQtyContainer">\
            <label for="tbQuantity">Quantity:</label><input class="qlQty" type="text" id="tbQuantity" name="tbQuantity" value="1" maxlength="2" />\
            </div>\
            <div class="qlAddToCartContainer">\
            <label for="addToCart">Buy:</label><input id="addToCart" name="addToCart" type="submit" value="add to cart" class="qlAddToCart" />\
            <input type="hidden" id="sizeSelect" value="" />\
            </div>\
            <div class="qlAddWaitContainer">\
            <span>Checking..&nbsp;&nbsp;</span><img src="//images.footballfanatics.com/partners/ff_wide/quicklook/kit-ajax-loader.gif" alt="adding.." />\
            </div>\
            <div id="ql-alert-message" class="ui-widget ui-alert hidden">\
            <div class="ui-corner-all ui-state-error">\
            <p>\
            <span class="ui-icon ui-icon-alert"></span>\
            <span class="ui-alert-header"></span>\
            <span class="ui-alert-body"></span>\
            </p>\
            </div>\
            </div>\
            </div>\
            <div class="qlDetailsContainer">\
            <div class="qlTitleContainer"></div>\
            <div class="qlDescriptionContainer"></div>\
            <div class="qlBulletsContainer"></div>\
            </div>\
            </div></div></div></div>';
            // insert quicklook template - This overwrites the previous template if there was one
            jQuery('div.qlOutsideContainer').html(qlTemplate);

            // fill template with actual product data
            this.fillQLData(data);
            // hang events
            jQuery('div.' + this.widget_modal_bg_container_class).bind("click", function(e)
            {
                self.closeQL(this);
            });
            jQuery('div.qlHeaderRightContainer').bind("click", function(e)
            {
                self.closeQL(this);
            });
            jQuery('div.qlTabContainer > div').bind("click", function(e)
            {
                // Click to switch between tabs
                self.tabSwitch(this);
            });
            jQuery('div.qlAddToCartContainer > input.qlAddToCart').bind("click", function(e)
            {
                // Click to add to cart validation
                addToCartClick(function() { self.callAddToCart() }, 'ql-alert-message'); return false;
            });
            // onclick="addToCartClick(function() {__doPostBack('ctl00$ctl00$masterContent$masterContent$ctl00$btnAddToCart','')}, 'ui-alert-message');return false;" />


            // Build CSS for background container and apply it.
            this.widget_frame_width = jQuery('body').outerWidth();
            this.widget_frame_height = jQuery('body').outerHeight();
            var outside_container_css = {
                'width': this.widget_frame_width,
                'height': this.widget_frame_height + 25
            }
            var modal_bg_container_css = {
                'width': this.widget_frame_width,
                'height': this.widget_frame_height + 25,
                'background-color': this.backgroundOpacityColor,
                '-ms-filter': 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' + this.IEmodalOpacity + ')',
                'filter': 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' + this.IEmodalOpacity + ')',
                'opacity': this.modalOpacity,
                '-moz-opacity': this.modalOpacity,
                'filter': 'alpha(opacity=' + this.IEmodalOpacity + ')'
            }
            jQuery('div.' + this.widget_outside_container_class).css(outside_container_css);
            jQuery('div.' + this.widget_modal_bg_container_class).css(modal_bg_container_css);
            // show quicklook window
            jQuery('div.' + this.widget_outside_container_class).css('display', 'block');
            // CSS for the QuickLook Container itself
            // This CSS is done after showing the quicklook window so that we can measure the
            //	height of the quicklook window and vertically center it properly.
            var qlContainerHeight = jQuery('div.qlOutsideContainer').outerHeight();
            var windowHeight = jQuery(window).height();
            var scrollTop = jQuery(window).scrollTop();
            var topOffset = (((windowHeight - qlContainerHeight) / 2) + scrollTop);
            if (topOffset < 0) { topOffset = 0; }
            var horizontalOffset = ((this.widget_frame_width - this.widget_container_width) / 2);
            var ql_container_css = {
                'top': topOffset,
                'left': horizontalOffset,
                'width': this.widget_container_width + 'px'
            }
            jQuery('div.qlOutsideContainer').css(ql_container_css);
        }
    },

    fillQLData: function(data)
    {
        var self = this;
        // Product Title
        jQuery('div.qlTitleContainer').html(data.Title);
        // Price -  
        var multiplePricesHTML = '<div class="qlPricesContainer">';
        jQuery.each(data.Prices, function(i, item)
        {
            if (item.Name != 'undefined')
            {
                var priceLabel = '';
                if ( data.Prices.length > 1 )
                {
                    priceLabel = item.Name + ' ';
                }
                multiplePricesHTML = multiplePricesHTML + '<div class="' + item.Name + 'Container"><span class="priceLabel">' + priceLabel + 'Price:</span>&nbsp;<span class="price">' + item.Value + '</span></div>';
            }
        });
        multiplePricesHTML = multiplePricesHTML + '</div>';
        jQuery('div.qlPriceOutsideContainer').html(multiplePricesHTML).addClass(data.Prices[data.Prices.length - 1].Name);


        // Custom Options
        if (data.CustomOptions.length > 0)
        {
            // do something with custom options here - TODO
            var customOptionsHTML = '<div class="qlCustomOptionsContainer">';
            jQuery.each(data.CustomOptions, function(i, item)
            {
                var itemValue = '';
                if (item.Value == null)
                { itemValue = ''; }
                else
                { itemValue = item.Value; }
                customOptionsHTML = customOptionsHTML + '<div class="qlCustomOptionContainer clearfix"><div class="qlCustomOptionsLabel"><label for="customOption-' + item.ID + '">' + item.Name + ':</label></div><div class="customOptionInput"><input id="customOption-' + item.ID + '" name="customOption-' + item.ID + '" value="' + itemValue + '" maxlength="' + item.MaxLength + '" style="width:' + item.Width + 'px;" type="text" /></div></div>';
            });
            customOptionsHTML = customOptionsHTML + '</div>';
            // alert(customOptionsHTML);
            jQuery('div.qlPriceAdjustmentContainer').after(customOptionsHTML);
        }

        // Sizes and Standard Options
        var sizesHTML = '';
        jQuery.each(data.StandardOptions, function(i, item)
        {
            if (item.IsOutOfStock == true)
            {
                oosClass = ' disabled';
            }
            else
            {
                oosClass = '';
            }
            sizesHTML = sizesHTML + '<div class="sizeOption sizeOptionElement' + oosClass + '" onclick="sizeClick(this, \'' + item.ID + '\', \'' + item.ProductPriceAdjustment + '\', \'\')">' + item.Name + '</div>';
        });
        jQuery('div.sizeChoiceContainer').html(sizesHTML);

        // Hang hover events on standard options
        this.prepOptionHover();


        // Main image
        var mainImage = data.ImagePath;
        mainImage = mainImage.replace('%2f', '/');
        var imageWidth = '&w=' + this.widget_image_width;
        mainImage = mainImage.replace('&amp;w=400', imageWidth);
        jQuery('div.qlImageContainer img').attr('src', this.widget_image_domain + mainImage);

        // alt images
        if (data.AltImagePaths.length > 0)
        {
            var altImageHTML = '<div class="qlThumbsContainer">';

            jQuery.each(data.AltImagePaths, function(i, item)
            {
                altImageHTML = altImageHTML + '<img src="' + self.widget_image_domain + item + '" alt="alt thumb" />';
            });

            altImageHTML = altImageHTML + '</div><p>Mouse over images to enlarge</p>';
            jQuery('div.qlThumbsOutsideContainer').html(altImageHTML);
        }

        // hang mouseovers for alt images
        jQuery("div.qlThumbsContainer > img").bind("mouseenter", function(e)
        {
            self.altHover(jQuery(this));
        });

        // pre-load large alt images
        var targets = jQuery('div.qlThumbsContainer > img');
        var temp = '';
        targets.each(function()
        {
            var src = jQuery(this).attr("src");
            src = src.replace("http://images.footballfanatics.com", "http://images.footballfanatics.com/FFImage/thumb.aspx?i=");
            src = src.replace("_tb.jpg", "_xl.jpg");
            src = src + "&w=" + self.widget_image_width;
            temp = temp + '<div style="background-image: url(' + src + ');">&nbsp;<' + '/div>';
        });
        jQuery('div.qlThumbsContainer').append('<div id="imageRetainer" style="display: none;"></div>');
        jQuery('#imageRetainer').html(data);

        // Description
        jQuery('div.qlDescriptionContainer').html(data.LongDescription);

        // Product Bullets
        jQuery('div.qlBulletsContainer').html('<ul>' + data.Bullets + '</ul>');

        // item category
        this.widget_item_category = data.Category;
        // Item ID
        this.widget_item_id = data.ID;
    },

    callAddToCart: function()
    {
        var self = this;
        // alert('callAddToCart()');
        var ajaxCallData = this.buildAjaxData();
        // { "ProductId": "121541", "CategoryAlias": "NFL_New_England_Patriots_Jerseys", "QuantityRequested": 1, "CustomOptions": [], "SelectedOption": "8cc9a5d9-cd2d-4964-8edb-7b4aeb9a0496" }
        // { "ProductId": "a56209ef-372b-449b-8d9a-b8f730dd8edb", "CategoryAlias": "Olympics_USA_Olympics_Accessories", "QuantityRequested": 1, "CustomOptions": [], "SelectedOption": "00000000-0000-0000-0000-000000000000" }
        // ajaxCallData = '{ "ProductId": "a56209ef-372b-449b-8d9a-b8f730dd8edb", "CategoryAlias": "Olympics_USA_Olympics_Accessories", "QuantityRequested": 1, "CustomOptions": [], "SelectedOption": "00000000-0000-0000-0000-000000000000" }';
        // alert(ajaxCallData);
        var rand = Math.floor(Math.random() * 10000001);
        var urlCall = "AddToCartHandler.ashx" + "?rn=" + rand;
        // Showing waiting container
        jQuery('div.qlAddWaitContainer').css('display', 'block');
        jQuery.ajax({
            type: "POST",
            url: "AddToCartHandler.ashx",
            data: ajaxCallData,
            contentType: "application/json",
            dataType: "json",
            success: function(result)
            {
                self.addSuccess(result);
            },
            timeout: 15000,
            error: function(XMLHttpRequest, textStatus, errorThrown)
            {
                self.addFailure(textStatus, errorThrown);
            }


        });



    },

    buildAjaxData: function()
    {
        var data = '';
        var selectedOption = jQuery('#sizeSelect').val();
        var category = this.widget_item_category;
        var qty = jQuery('input#tbQuantity').val();
        var fulfillmentID = this.widget_item_id;
        if (jQuery('div.qlCustomOptionsContainer').length)
        {
            // get data for custom options
            var optionSet = jQuery('div.qlCustomOptionContainer input');
            var optionCount = optionSet.length;
            var optionString = '[';
            var optionSeperator = '';
            jQuery.each(optionSet, function(i, item)
            {
                var ID = jQuery(item).attr('ID').replace('customOption-', '');
                var value = jQuery(item).val().replace(/"/g, '\\"');
                optionString = optionString + optionSeperator + '{"ID": "' + ID + '", "Value": "' + value + '"}';
                optionSeperator = ',';
            });
            optionString = optionString + ']';
        }
        else
        {
            var optionString = '[]';
        }
        // var ajaxCallData = '{ "ProductId": "a56209ef-372b-449b-8d9a-b8f730dd8edb", "CategoryAlias": "Olympics_USA_Olympics_Accessories", "QuantityRequested": 1, "CustomOptions": [], "SelectedOption": "00000000-0000-0000-0000-000000000000" }';
        data = '{ "ProductId": "' + fulfillmentID + '", "CategoryAlias": "' + category + '", "QuantityRequested": ' + qty + ', "CustomOptions": ' + optionString + ', "SelectedOption": "' + selectedOption + '" }';
        return data;
    },

    addSuccess: function(result)
    {
        // var str = '';
        // for (var i in result)
        // str += i + "=" + result[i] + ";\n"
        // alert(str);
        // CartSubTotal = 0;
        // CartItemCount = 0;
        // Status = Success;
        // StatusMessage = null;
        // AvailableItemQuantity = 1;
        // OutOfStockMessage = null;
        var self = this;
        // Check for success or failure
        if (result.Status == 'Success')
        {
            // Create HTML for minibag
            var img = this.widget_image_domain + this.dataResponse.ImagePath;
            img = img.replace('%2f', '/');
            var imageWidth = '&w=' + this.widget_minibag_image_width;
            img = img.replace('&amp;w=400', imageWidth);
            var qty = jQuery('input#tbQuantity').val();
            var title = this.dataResponse.Title;
            var cartCount = result.CartItemCount;
            var cartTotal = result.CartSubTotal;
            var bagData = '\
            <div class="bagDataContainer">\
            <p class="qlAddedMessage">Added to your cart:</p>\
            <div class="qlBagItemContainer clearfix">\
            <div class="qlBagImageContainer">\
            <img src="" alt="cart item" />\
            </div>\
            <div class="qlBagItemDetailsContainer">\
            <div class="qlBagTitleContainer">' + title + '</div>\
            <div class="qlBagQtyContainer">\
            <p>Qty:&nbsp;' + qty + '</p>\
            </div>\
            <div class="qlBagTotalsContainer">New Cart Subtotal: ' + cartTotal + '</div>\
            </div>\
            </div>\
            <div class="qlBagProceedButtonsContainer clearfix">\
            <div class="qlBagContinueShoppingContainer">Continue Shopping</div>\
            <div class="qlBagCheckoutContainer">\
            <a href="/default.aspx?lt=checkout&ctl=CheckoutStart" title="Checkout">Checkout</a>\
            </div>\
            </div>\
            </div>';

            // Insert Minibag info
            jQuery('div.qlRightContainer').after(bagData);
            // Waiting for image to load, then change the box to show minibag.
            jQuery('div.qlBagImageContainer img').attr('src', img).load(function()
            {
                self.changeToMinibag(cartCount, cartTotal);
            });

        }
        else
        {
            jQuery('div.qlAddWaitContainer').css('display', 'none');
            var alertMessage = '';
            if (result.AvailableItemQuantity > 0)
            {
                alertMessage = 'Oops! We only have ' + result.AvailableItemQuantity + ' of this item in stock.  Click OK to continue.';
                jQuery('input#tbQuantity').val(result.AvailableItemQuantity);
            }
            else
            {
                alertMessage = 'Oops! We are currently out of stock for that item and option. Please try back later, as we constantly replenish our inventory. Click OK to continue.';
                jQuery('div.sizeChoiceContainer div.selected').addClass('disabled').removeClass('selected');
                jQuery('#sizeSelect').val('');
            }
            alert(alertMessage);
        }
    },

    changeToMinibag: function(cartCount, cartTotal)
    {
        // Hide waiting icon
        jQuery('div.qlAddWaitContainer').css('display', 'none');
        // Update header
        jQuery('span#headerCartItemCount').html(cartCount + '&nbsp;items');
        jQuery('span#headerCartTotal').html(cartTotal);
        // Remove Quicklook panes
        jQuery('div.qlLeftContainer').remove();
        jQuery('div.qlRightContainer').remove();
        // Show Minibag container
        jQuery('div.bagDataContainer').css('display', 'block');
    },

    addFailure: function(textStatus, errorThrown)
    {
        // alert('Shit fucked up');
    },

    tabSwitch: function(source)
    {
        if (jQuery(source).hasClass('active'))
        {
            // Clicked on active tab. Do nothing
        }
        else
        {
            if (jQuery(source).hasClass('qlTabBuy'))
            {
                // Clicked on the Buy Tab. Change class accordingly
                jQuery('div.qlTabBuy').removeClass('inactive').addClass('active');
                jQuery('div.qlTabDetails').removeClass('active').addClass('inactive');
                jQuery('div.qlRightContainer').removeClass('qlDetails').addClass('qlBuy');
            }
            else
            {
                if (jQuery(source).hasClass('qlTabDetails'))
                {
                    // Clicked on the Details Tab, change classes accordingly.
                    jQuery('div.qlTabDetails').removeClass('inactive').addClass('active');
                    jQuery('div.qlTabBuy').removeClass('active').addClass('inactive');
                    jQuery('div.qlRightContainer').removeClass('qlBuy').addClass('qlDetails');
                }
            }
        }
    },

    prepOptionHover: function()
    {
        // hang mouseovers
        jQuery("div.sizeChoiceContainer > div.sizeOption").bind("mouseenter", function(e)
        {
            var disabledCheck = jQuery(this).hasClass('disabled');
            if (!disabledCheck)
            {
                jQuery(this).addClass('hover');
            }
        });
        jQuery("div.sizeChoiceContainer > div.sizeOption").bind("mouseout", function(e)
        {
            jQuery(this).removeClass('hover');
        });
    },


    altHover: function(source)
    {
        var target = "div.qlImageContainer > img";
        var src = jQuery(source).attr("src");
        src = src.replace("//images.footballfanatics.com", "//images.footballfanatics.com/FFImage/thumb.aspx?i=");
        src = src.replace("http://images.footballfanatics.com", "http://images.footballfanatics.com/FFImage/thumb.aspx?i=");
        src = src.replace("_tb.jpg", "_xl.jpg");
        src = src + "&w=" + this.widget_image_width;
        jQuery(target).attr("src", src);
        jQuery(target).src = src.src;
    },

    closeQL: function(element)
    {
        // a simple function to hide Quicklook. If it's reopened, it'll be updated before it is unhidden.
        jQuery('div.' + this.widget_outside_container_class).css('display', 'none');
    }

});

// Javascript to load quicklook
jQuery(document).ready(function() {
    // You must pass the name of the variable in as the second parameter to this class. (Damn SetTimout)
    quickLookBrowse = new QuickLookWidget('Quick Look Browse', 'quickLookBrowse');
});

// Size Click Javascript for PDP and Quicklook size option selectors
function sizeClick(element, optionid, priceadj, outofstockinfo, errorelement)
{
    if (!(jQuery(element).hasClass("disabled")))
    {
        jQuery('#sizeSelect').val(optionid);
        jQuery("div.sizeChoiceContainer > div.sizeOption").removeClass("selected");
        jQuery(element).addClass("selected");

        var label = jQuery("div.sizeLabelSizeChart > div.sizeLabel");
        label.addClass("highlight");

        if (priceadj != '')
        {
            label.html("Your choice: " + jQuery(element).html() + " + " + priceadj);
            jQuery("div.PriceContainer .additionalPrice").html(" + " + priceadj);
            jQuery('div.qlPriceAdjustmentContainer').html(" + " + priceadj);
        } else
        {
            label.html("Your choice: " + jQuery(element).html());
            jQuery("div.PriceContainer .additionalPrice").html("");
            jQuery("div.qlPriceAdjustmentContainer").html("");
        }

        validateCartControls(errorelement);
    } else
    {
        // Clicked on an out of stock size.
        // remove selected from all options
        jQuery("div.sizeChoiceContainer > div.sizeOption").removeClass("selected");
        // disable add to cart button
        jQuery('#addToCart').removeClass("enabled");
        jQuery('#addToCart').addClass("disabled");
        // Kill hidden input with size selection
        jQuery('#sizeSelect').val('');
        // Reset label
        var label = jQuery("div.sizeLabelSizeChart > div.sizeLabel");
        jQuery(label).html("Select Size");
        // Clear additional price
        jQuery("div.PriceContainer .additionalPrice").html("");
        // Show out of stock info if it exists.
        if (outofstockinfo != "")
            outofstockinfo = "<br /><br />" + outofstockinfo;
        showError("", "This item no longer available in " + jQuery(element).html() + "." + outofstockinfo, errorelement);
    }
}

function validateQtyValue(errorelement)
{
    var tbQuantity = getQuantityBox();
    if (tbQuantity.val() == "" || Number(tbQuantity.val()) == NaN || Number(tbQuantity.val()) <= 0)
    {
        showError("", "You must enter a valid quantity.", errorelement);
        tbQuantity.addClass("error");
        tbQuantity.focus();
        return false;
    }
    tbQuantity.removeClass("error");
    return true;
}

function getQuantityBox()
{
    // return jQuery("#<%=tbQuantity.ClientID %>");
    return jQuery.clientID('tbQuantity'); 
}

function validateSizeSelection(errorelement)
{
    var hasOptions = false;
    var hasSelected = false;
    jQuery("div.sizeOption").each(function()
    {
        hasOptions = true;
        if (jQuery(this).hasClass("selected"))
            hasSelected = true;
    });

    if (jQuery("#sizeSelect").val())
        hasSelected = true;

    if (hasOptions && !hasSelected)
    {
        showError("", "You must select a size/option for this product.", errorelement);
        return false;
    }
    return true;
}

function validateCartControls(errorelement)
{
    var isValid = true;
    if (!validateQtyValue(errorelement))
        isValid = false;
    if (!validateSizeSelection(errorelement))
        isValid = false;

    if (!isValid)
    {
        jQuery('#addToCart').removeClass("enabled");
        jQuery('#addToCart').addClass("disabled");
        return false;
    }

    jQuery('#addToCart').removeClass("disabled");
    jQuery('#addToCart').addClass("enabled");
    hideError(errorelement);
    return true;
}

function showError(header, body, errorelement)
{
    var elementid = "#" + errorelement;
    jQuery(elementid + " .ui-alert-header").html(header);
    jQuery(elementid + " .ui-alert-body").html(body);
    jQuery(elementid).removeClass("hidden");
}

function hideError(errorelement)
{
    jQuery("#" + errorelement).addClass("hidden");
}

function addToCartClick(success, errorelement)
{
    if (!validateCartControls(errorelement))
        return false;

    if (jQuery(this).hasClass("disabled"))
        return false;
    else
        success();
}

function setupQuantityTextChanged(errorelement)
{
    getQuantityBox().blur(function()
    {
        validateCartControls(errorelement);
    });
}

function validateCustom(element, expression, name, errorelement)
{
    var e = jQuery(element);
    var msg = "";
    if (e.val() == "")
        msg = "Please enter a value for '" + name + "'.";
    
    if (msg == "" && expression != "")
    {
        var re = new RegExp(expression);
        if (!re.test(e.val()))
            msg = "Invalid value for '" + name + "'.";
    }
    if (msg == "")
    {
        e.removeClass("error");
        hideError(errorelement);
        return true;
    }

    if (jQuery("#data-additional-custom-error-msg").length > 0
        && jQuery("#data-additional-custom-error-msg").html().length > 0
        && name.toLowerCase().indexOf("name") >= 0)
    {
        msg = msg + " " + jQuery("#data-additional-custom-error-msg").html();
    }

    e.addClass("error");
    showError("", msg, errorelement);
    return false;
}

// Hover Effect for size options on PDP and Quicklook
jQuery(document).ready(function()
{
    // call function to hang mouseovers on size options
    prepOptionHover();
});

function prepOptionHover()
{
    // hang mouseovers
    jQuery("div.sizeChoiceContainer > div.sizeOption").bind("mouseenter", function(e)
    {
        var disabledCheck = jQuery(this).hasClass('disabled');
        if (!disabledCheck)
        {
            jQuery(this).addClass('hover');
        }
    });
    jQuery("div.sizeChoiceContainer > div.sizeOption").bind("mouseout", function(e)
    {
        jQuery(this).removeClass('hover');
    });
}

/* E-mail Sign Up Widget */
var esWidget = null;
var emailSignupModal = null;
EmailSignupWidget = function(name_var, handle)
{
    this.init(name_var, handle);
}

jQuery.extend(EmailSignupWidget.prototype, {
    // object variables
    widget_enabled: true,
    widget_status: false,
    widget_max_league_count: 8,
    widget_modal_content_loaded: [],
    widget_content_league_ID: [],
    widget_selected_teams_ID: [],
    widget_selected_teams_Name: [],
    widget_selected_teams_ID_Name: [],
    widget_json_response: '',
    widget_clicked_tab: 0,
    widget_modal_bg_container_class: 'emailSignupModalBGContainer',
    widget_modal_outside_container_class: 'emailSignupModalOutsideContainer',
    widget_modal_outside_container_width: 760,
    widget_modal_outside_container_height: 557,
    widget_modal_outside_top: 0,
    widget_header_handle: 'emailSignupModalHeaderContainer',
    widget_header_title_handle: 'emailSignupModalHeaderText',
    widget_header_close_button: 'emailSignupHeaderCloseButton',
    widget_modal_loading_screen_class: 'emailSignupModalLoadingContainer',
    widget_modal_loading_container_width: 150,
    widget_modal_loading_container_height: 150,
    widget_modal_loading_text: "<p>Please wait<br />Loading..</p>",
    widget_modal_thankyou_screen_class: 'emailSignupModalThankYouContainer',
    widget_modal_thankyou_container_width: 500,
    widget_modal_thankyou_container_height: 200,
    widget_modal_thankyou_close_button_class: 'emailSignupModalThankYouCloseButton',
    widget_modal_thankyou_text: "<p>Thank you for signing up to receive updates on your favorite teams! Your email address, <FF:Email/>, has been successfully submitted.</p><p class='emailSignupModalThankYouCloseButton'>Please click anywhere to close this box.</p>",
    widget_modal_tab_container_class: "emailSignupModalTabContainer",
    widget_modal_tab_content_container_class: "emailSignupModalTabContentContainer",
    widget_modal_team_output_template: "<div class='emailSignupTeamOutsideContainer'><div class='emailSignupTeamContainer'><input type='checkbox' value='<FF:ID/>'><FF:Team/></div></div>",
    widget_modal_footer_container_class: "emailSignupModalFooterContainer",
    widget_modal_footer_team_list: "footerTeams",
    widget_modal_bg_event_delay: 3000,
    widget_input_text_default: 'Enter E-mail Address',
    widget_input_text_default_color: '#bbbbbb',
    widget_input_text_color: '#000000',
    widget_form_container_class: 'newEmailSignupContainer',
    widget_button_id: 'newEmailSignupSubmitButton',
    widget_email_input: 'newEmailSignupInput',
    widget_email_entered: '',
    widget_force_signup_class: 'emailSignupForceFocus',
    widget_ajax_timeout: null,
    widget_ajax_time_allowed: 20000,
    widget_name: '',
    widget_handle: '',

    // Initialize the E-mail Signup Widget
    init: function(widget_name, widget_handle)
    {
        // do initialization here
        esWidget = this;
        this.widget_name = widget_name;
        this.widget_handle = widget_handle;
        this.checkForEmailSignUpBox();
    },

    // Functions that respond to user clicks
    signupClick: function()
    {
        // Check for valid e-mail
        this.widget_email_entered = jQuery('input#' + this.widget_email_input).val();
        var emailCheck = this.isValidEmailAddress(this.widget_email_entered);
        // if valid, proceed
        if (emailCheck)
        {
            // valid e-mail, create box
            this.createModalBox();
        }
        else
        {
            // if not valid, throw alert, change focus to email input
            var msgString = "'" + this.widget_email_entered + "' is not a valid e-mail address. Please enter a valid e-mail address.";
            alert(msgString);
            jQuery('input#' + this.widget_email_input).focus();
        }
        return false;
    },

    tabClick: function(tab)
    {
        // tabClick refers to 'esWidget' instead of 'this' because of scoping on events
        // get the ID of the tab that was clicked
        var activeID = jQuery(tab).attr('id');
        var contentNumber = activeID.replace('emailSignupModalTab', '');
        esWidget.activateTab(contentNumber);
        esWidget.widget_clicked_tab = contentNumber;
        if (!(esWidget.widget_modal_content_loaded[contentNumber]))
        {
            // Content is not loaded. Get content and load it for this tab.
            // Set a timeout to check to see if our ajax call has timed out
            var delay = esWidget.widget_ajax_time_allowed;
            var func = esWidget.widget_handle + '.ajaxError()';
            esWidget.widget_ajax_timeout = setTimeout(func, delay);
            // call the AJAX JSON function
            func = esWidget.widget_handle + '.tabAjaxResponse';
            var leagueID = esWidget.widget_json_response.Leagues[contentNumber].ID;
            jQuery('div.' + esWidget.widget_modal_loading_screen_class).css('display', 'block');
            esWidget.emailSignupMultiGetTeams(leagueID, eval(func));
        }
    },

    teamClick: function(clickbox)
    {
        var parentControl = jQuery(clickbox).parent();
        if (jQuery(parentControl).hasClass('selected'))
        {
            // already selected, deselect
            jQuery(parentControl).removeClass('selected')
            jQuery(parentControl).find('input').removeAttr('checked');
        }
        else
        {
            // not selected, select
            jQuery(parentControl).addClass('selected')
            jQuery(parentControl).find('input').attr('checked', 'true');
            jQuery(parentControl).find('input').attr('checked', 'checked');
        }
        var inputVal = jQuery(parentControl).find('input').val();
        esWidget.widget_selected_teams_ID_Name = esWidget.addRemoveCollection(inputVal, esWidget.widget_selected_teams_ID_Name);
    },

    finishClick: function()
    {
        // At least one team must be selected
        if (this.widget_selected_teams_ID.length > 0)
        {
            // Set timeout count
            var delay = this.widget_ajax_time_allowed;
            var func = this.widget_handle + '.ajaxError()';
            this.widget_ajax_timeout = setTimeout(func, delay);
            // Build call to submit teams and e-mail
            funcSuccess = this.widget_handle + '.submitSuccess';
            funcFailure = this.widget_handle + '.submitFailure';
            this.showLoadingScreen(); this.emailSignupMultiSubmit(this.widget_email_entered, this.serializeTeamsJson(this.widget_selected_teams_ID), eval(funcSuccess), eval(funcFailure));
        }
        else
        {
            alert('You must select at least 1 team to submit your e-mail address.');
        }
    },

    closeSignupBox: function()
    {
        // Reset box by setting display none on outside containers
        jQuery('div.' + this.widget_modal_bg_container_class).css('display', 'none');
        jQuery('div.' + this.widget_modal_outside_container_class).css('display', 'none');
        jQuery('div.' + this.widget_modal_thankyou_screen_class).css('display', 'none');
        this.hideLoadingScreen();
        // kill the click anywhere to close event
        jQuery('div.' + this.widget_modal_outside_container_class).unbind();
    },

    inputFocus: function(textInput)
    {
        // Remove the default value on the input box and change the text color to black
        var val = jQuery(textInput).val();
        if (val == this.widget_input_text_default)
        {
            jQuery('input#' + this.widget_email_input).css('color', this.widget_input_text_color);
            jQuery('input#' + this.widget_email_input).val('');
        }
    },

    // Functions to build HTML templates
    createModalBox: function()
    {
        // create partially opaque background
        if (!(jQuery('div.' + this.widget_modal_bg_container_class).hasClass(this.widget_modal_bg_container_class))) { jQuery('body').append('<div class="' + this.widget_modal_bg_container_class + '"></div>'); }
        var modal_bg_container_css = {
            'width': jQuery('body').outerWidth(),
            'height': jQuery('body').outerHeight() + 25,
            'display': 'block'
        }
        jQuery('div.' + this.widget_modal_bg_container_class).css(modal_bg_container_css);
        // create container for modal content
        if (!(jQuery('div.' + this.widget_modal_outside_container_class).hasClass(this.widget_modal_outside_container_class))) { jQuery('body').append('<div class="' + this.widget_modal_outside_container_class + '"></div>'); }
        this.widget_modal_outside_top = (((jQuery(window).height() - this.widget_modal_outside_container_height) / 2) + jQuery(window).scrollTop());
        if (this.widget_modal_outside_top < 0) { this.widget_modal_outside_top = 0; }
        var modal_outside_left = (jQuery(window).width() - this.widget_modal_outside_container_width) / 2;
        if (modal_outside_left < 0) { modal_outside_left = 0; }
        var modal_outside_container_css = {
            'width': this.widget_modal_outside_container_width + 'px',
            'height': this.widget_modal_outside_container_height + 'px',
            'top': this.widget_modal_outside_top + 'px',
            'left': modal_outside_left + 'px',
            'display': 'block'
        }
        jQuery('div.' + this.widget_modal_outside_container_class).css(modal_outside_container_css);
        if (!(jQuery('div.' + this.widget_header_handle).hasClass(this.widget_header_handle)))
        {
            var modalHeader = "<div class='" + this.widget_header_handle + "'><div class='emailSignupModalHeaderPaddingContainer clearfix'><div class='emailSignupModalHeaderContainerLeft'><span id='" + this.widget_header_title_handle + "'></span></div><div id='" + this.widget_header_close_button + "' class='emailSignupModalHeaderContainerRight'>close</div></div></div>";
            jQuery('div.' + this.widget_modal_outside_container_class).append(modalHeader);
        }
        // set timeout to hang event to close modal window
        // We delay hanging this event so that double clickers don't accidentally close the window
        var delay = this.widget_modal_bg_event_delay;
        var func = this.widget_handle + '.hangBackgroundCloseEvent()';
        setTimeout(func, delay);
        // Build and display loading screen
        this.buildLoadingScreen();
        this.showLoadingScreen();
        // get league information
        this.callLeagueTeams();
    },

    singleTeamBox: function()
    {
        // Update the header to show the appropriate message
        jQuery('span#' + this.widget_header_title_handle).html('E-mail Updates');
        // Show the header
        jQuery('div.' + this.widget_header_handle).addClass('display');
        // Set an ajax timeout
        var delay = this.widget_ajax_time_allowed;
        var func = this.widget_handle + '.ajaxError()';
        this.widget_ajax_timeout = setTimeout(func, delay);
        // Build call to submit e-mail and team
        var serializedTeam = '["' + this.widget_json_response.Teams[0].ID + '"]';
        var successFunc = this.widget_handle + '.submitSuccess';
        var failureFunc = this.widget_handle + '.submitFailure';
        this.emailSignupMultiSubmit(this.widget_email_entered, serializedTeam, eval(successFunc), eval(failureFunc));
    },

    buildMultipleTeamBox: function()
    {
        this.hideLoadingScreen();
        // update the header
        jQuery('span#' + this.widget_header_title_handle).html('Choose Your Favorite Teams');
        jQuery('div.' + this.widget_header_handle).addClass('display');
        // If the tab container doesn't exist, build it
        if (!(jQuery('div.' + this.widget_modal_tab_container_class).hasClass(this.widget_modal_tab_container_class)))
        {
            var multi_content = "<div class='" + this.widget_modal_tab_container_class + " clearfix'></div><div class='" + this.widget_modal_tab_content_container_class + "'></div><div class='" + this.widget_modal_footer_container_class + " clearfix'></div>";
            jQuery('div.' + this.widget_modal_outside_container_class).append(multi_content);
            var tab_template = "<div class='emailSignupModalTab' id='<FF:ID/>'><div class='emailSignupTabLeft'><div class='emailSignupTabRight'><div class='emailSignupTabText'><FF:TabText/></div></div></div></div>";
            var tab_area_template = "<div class='emailSignupModalTabContentArea clearfix' id='<FF:ID/>'></div>";
            var tab_output = '';
            var tab_area_output = '';
            var tab_ID = '';
            var tab_area_ID = '';
            var x = 1;
            jQuery.each(this.widget_json_response.Leagues, function(i, item)
            {
                if (x <= esWidget.widget_max_league_count)
                {
                    tab_ID = 'emailSignupModalTab' + i;
                    tab_area_ID = 'emailSignupModalTabArea' + i;
                    tab_output = tab_template.replace('<FF:TabText/>', item.Name);
                    tab_output = tab_output.replace('<FF:ID/>', tab_ID);
                    tab_area_output = tab_area_template.replace('<FF:ID/>', tab_area_ID);
                    jQuery('div.' + esWidget.widget_modal_tab_container_class).append(tab_output);
                    jQuery('div.' + esWidget.widget_modal_tab_content_container_class).append(tab_area_output);
                    // Mark all content areas as not loaded
                    esWidget.widget_modal_content_loaded[i] = false;
                }
                x++;
            });
            // Build out the footer
            var footer_template = "<div class='footerLeftContainer'><div class='footerTeamContainer'><span class='highlight'>Your Teams: &nbsp;</span><span id='" + this.widget_modal_footer_team_list + "'></span></div></div><div class='footerRightContainer'><div id='footerFinishSubmit'></div></div>";
            jQuery('div.' + this.widget_modal_footer_container_class).append(footer_template);
            // Hang click events on tabs and button
            jQuery('div.emailSignupModalTab').bind("click", function(e)
            {
                esWidget.tabClick(this);
            });
            jQuery('div#footerFinishSubmit').bind("click", function(e)
            {
                esWidget.finishClick(this);
            });
        }
        var teams = this.widget_json_response.Teams;
        this.loadContentArea(this.widget_clicked_tab, teams);
        this.activateTab(this.widget_clicked_tab);
    },

    buildLoadingScreen: function()
    {
        if (!(jQuery('div.' + this.widget_modal_loading_screen_class).hasClass(this.widget_modal_loading_screen_class)))
        {
            jQuery('div.' + this.widget_modal_outside_container_class).append('<div class="' + this.widget_modal_loading_screen_class + '"></div>');
            jQuery('div.' + this.widget_modal_loading_screen_class).append(this.widget_modal_loading_text);
        }
        var modal_loading_top = (0 + ((this.widget_modal_outside_container_height - this.widget_modal_loading_container_height) / 2));
        if (modal_loading_top < 0) { modal_loading_top = 0; }
        var modal_loading_left = (this.widget_modal_outside_container_width - this.widget_modal_loading_container_width) / 2;
        if (modal_loading_left < 0) { modal_loading_left = 0; }
        var modal_loading_container_css = {
            'width': this.widget_modal_loading_container_width + 'px',
            'height': this.widget_modal_loading_container_height + 'px',
            'top': modal_loading_top + 'px',
            'left': modal_loading_left + 'px',
            'display': 'none'
        }
        jQuery('div.' + this.widget_modal_loading_screen_class).css(modal_loading_container_css);
    },

    showThankYouScreen: function()
    {
        this.widget_modal_thankyou_text = this.widget_modal_thankyou_text.replace('<FF:Email/>', this.widget_email_entered);
        jQuery('div.' + this.widget_modal_tab_container_class + ',div.' + this.widget_modal_tab_content_container_class + ',div.' + this.widget_modal_footer_container_class).remove();
        jQuery('span#' + this.widget_header_title_handle).html('E-mail Updates');
        if (!(jQuery('div.' + this.widget_modal_thankyou_screen_class).hasClass(this.widget_modal_thankyou_screen_class)))
        {
            jQuery('div.' + this.widget_modal_outside_container_class).append('<div class="' + this.widget_modal_thankyou_screen_class + '"></div>');
            jQuery('div.' + this.widget_modal_thankyou_screen_class).append(this.widget_modal_thankyou_text);
        }
        jQuery('div.' + this.widget_modal_outside_container_class).bind("click", function(e)
        {
            esWidget.closeSignupBox();
        });
        var modal_thankyou_top = ((this.widget_modal_outside_container_height - this.widget_modal_thankyou_container_height) / 2);
        if (modal_thankyou_top < 0) { modal_loading_top = 0; }
        var modal_thankyou_left = (this.widget_modal_outside_container_width - this.widget_modal_thankyou_container_width) / 2;
        if (modal_thankyou_left < 0) { modal_loading_left = 0; }
        var modal_thankyou_container_css = {
            'width': this.widget_modal_thankyou_container_width + 'px',
            'height': this.widget_modal_thankyou_container_height + 'px',
            'top': modal_thankyou_top + 'px',
            'left': modal_thankyou_left + 'px',
            'display': 'block'
        }
        jQuery('div.' + this.widget_modal_thankyou_screen_class).css(modal_thankyou_container_css);
    },

    // AJAX Functions for E-mail Signup
    emailSignupMultiGetTeams: function(leagueid, callback)
    {
        var rand = esWidget.getRandom();
        jQuery.getJSON("/Services/EmailSignup.ashx",
        { a: "teams",
            l: leagueid,
            cb: rand
        },
        callback);
    },

    emailSignupMultiSubmit: function(email, teams, success, failure)
    {
        jQuery.post("/Services/EmailSignup.ashx",
        { a: "signup",
            e: email,
            t: teams
        },
        function(json)
        {
            if (json.length == 0)
            {
                failure();
            }
            else if (json.Result == false)
            {
                failure();
            }
            else
            {
                success();
            }
        },
        "json");
    },

    // AJAX Response Functions
    ajaxError: function()
    {
        // Callback function for cases where the AJAX call times out
        var timeOutMessage = "We're sorry, but there was an error submitting your e-mail address. Please try again later.";
        alert(timeOutMessage);
        this.closeSignupBox();
    },

    ajaxResponse: function(json)
    {
        esWidget.widget_json_response = json;
        // Kill the ajax timeout count
        clearTimeout(esWidget.widget_ajax_timeout);
        // Give the close button a close event
        jQuery('div#' + esWidget.widget_header_close_button).bind("click", function(e)
        {
            esWidget.closeSignupBox();
        });
        // if only one league and team, then do single team modal
        if ((esWidget.widget_json_response.Leagues.length == 1) && (esWidget.widget_json_response.Teams.length == 1))
        {
            // Single team
            esWidget.singleTeamBox();
        }
        else
        {
            // multiple teams
            esWidget.buildMultipleTeamBox();
        }
    },

    submitSuccess: function()
    {
        clearTimeout(esWidget.widget_ajax_timeout);
        esWidget.hideLoadingScreen();
        esWidget.showThankYouScreen();
    },

    submitFailure: function()
    {
        clearTimeout(esWidget.widget_ajax_timeout);
        esWidget.ajaxError();
    },

    tabAjaxResponse: function(json)
    {
        clearTimeout(esWidget.widget_ajax_timeout);
        esWidget.loadContentArea(esWidget.widget_clicked_tab, json.Teams);
    },

    // Utility functions for E-mail Signup
    checkForEmailSignUpBox: function()
    {
        // If the box is found, put the event binding on the submit button and input button
        if (jQuery('div.' + this.widget_form_container_class).hasClass(this.widget_form_container_class))
        {
            jQuery("input#" + this.widget_button_id).bind("click", function(e)
            {
                e.preventDefault();
                return esWidget.signupClick();
            });
            jQuery('input#' + this.widget_email_input).val(this.widget_input_text_default);
            jQuery('input#' + this.widget_email_input).css('color', this.widget_input_text_default_color);
            jQuery("input#" + this.widget_email_input).bind("focus", function(e)
            {
                return esWidget.inputFocus(this);
            });
            // Make sure that if the user hits enter, it runs our e-mail signup, and not submit the search box
            jQuery("input#" + this.widget_email_input).keydown(function(event)
            {
                if ((event.keyCode == '13') || (event.keyCode == '27'))
                {
                    event.preventDefault();
                    esWidget.signupClick();
                }
            });

            // Check for header link that will scrol the user to the bottom and focus the signup field
            jQuery('a.' + this.widget_force_signup_class).click(function()
            {
                esWidget.forceSignupFocus();
                return false;
            });
        }
    },

    forceSignupFocus: function()
    {
        var targetOffset = jQuery('input#' + this.widget_email_input).offset().top;
        jQuery('html,body').animate({ scrollTop: targetOffset }, 1000);
        jQuery('input#' + this.widget_email_input).focus();
        jQuery('input#' + this.widget_email_input).css('backgroundColor', '#ffffd5');
    },

    callLeagueTeams: function()
    {

        // Set a timeout to check to see if our ajax call has timed out
        var delay = this.widget_ajax_time_allowed;
        var func = this.widget_handle + '.ajaxError()';
        this.widget_ajax_timeout = setTimeout(func, delay);
        // call the AJAX JSON function
        func = this.widget_handle + '.ajaxResponse';
        this.emailSignupMultiGetTeams('', eval(func));
    },

    addRemoveCollection: function(item, collection)
    {
        // adds if not found, removes if found
        var isInArray = jQuery.inArray(item, collection);
        if (isInArray >= 0)
        {
            // in collection, remove it
            collection.splice(isInArray, 1);
        }
        else
        {
            // not in collection, add it
            collection.push(item);
        }
        // Update our team collections
        var namesCollection = new Array();
        var idCollection = new Array();
        jQuery.each(collection, function(i, item)
        {
            pieces = item.split("||");
            idCollection.push(pieces[0]);
            namesCollection.push(pieces[1]);
        });
        this.widget_selected_teams_Name = namesCollection;
        this.widget_selected_teams_ID = idCollection;
        jQuery('span#' + this.widget_modal_footer_team_list).text(namesCollection.join(', '));
        return collection;
    },

    loadContentArea: function(targetNumber, teams)
    {
        if (!(this.widget_modal_content_loaded[targetNumber]))
        {
            this.hideLoadingScreen();
            var team_output = '';
            var inputVal = '';
            // It is quicker in run time to append the whole lot of teams to the page instead of appending one team at a time
            // To do this, we create everything that needs to be appended in a single variable, then append it
            jQuery.each(teams, function(i, item)
            {
                inputVal = item.ID + '||' + item.Name;
                team_output = team_output + esWidget.widget_modal_team_output_template.replace(/<FF:Team\/>/g, item.Name).replace(/<FF:ID\/>/g, inputVal);
            });
            jQuery('div#emailSignupModalTabArea' + targetNumber).append(team_output);
            this.widget_modal_content_loaded[targetNumber] = true;
            jQuery('div#emailSignupModalTabArea' + targetNumber + ' div.emailSignupTeamContainer').bind("click", function(e)
            {
                esWidget.teamClick(this);
            });
        }
    },

    activateTab: function(tabNumber)
    {
        jQuery('div.emailSignupModalTab,div.emailSignupModalTabContentArea').removeClass('active');
        jQuery('div.emailSignupModalTab:eq(' + tabNumber + '),div.emailSignupModalTabContentArea:eq(' + tabNumber + ')').addClass('active');
    },

    serializeTeamsJson: function(teams)
    {
        return '["' + teams.join('","') + '"]';
    },

    isValidEmailAddress: function(emailAddress)
    {
        var pattern = new RegExp(/([\w\'-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,10})/);
        return pattern.test(emailAddress);
    },

    hangBackgroundCloseEvent: function()
    {
        jQuery('div.' + this.widget_modal_bg_container_class).bind("click", function(e)
        {
            esWidget.closeSignupBox();
        });
    },

    showLoadingScreen: function()
    {
        jQuery('div.' + this.widget_modal_loading_screen_class).css('display', 'block');
    },

    hideLoadingScreen: function()
    {
        jQuery('div.' + this.widget_modal_loading_screen_class).css('display', 'none');
    },

    getRandom: function()
    {
        var randomnumber = Math.floor(Math.random() * 1000001)
        return randomnumber;
    }

});

// Javascript to load the e-mail signup widget
jQuery(document).ready(function()
{
    // You must pass the name of the variable in as the second parameter to this class. (Damn SetTimout)
    emailSignupModal = new EmailSignupWidget('Email Signup Modal', 'emailSignupModal');
});
// Javascript for Baynote
function baynoteReady()
{
    // Determine whether we are on the PDP or the Cart page
    var pdpCheck = jQuery('div#pdpBaynoteControlContainer').length;
    var mode = '';
    var threshold = 0;
    if (pdpCheck == 0)
    {
        // not on the PDP
        mode = 'cart';
    }
    else
    {
        mode = 'pdp';
    }

    // count baynote products
    var productSet = jQuery('div#' + mode + 'BaynoteTargetContainer div.ItemContainer');
    var baynoteProductCount = productSet.length;
    // If we have no baynote products, show 'May We Suggest'
    if (baynoteProductCount == 0)
    {
        jQuery('div#pdpBaynoteControlContainer').removeClass('baynotePDPEnabled');
        jQuery('div#cartRecommendationsControlContainer').removeClass('baynoteCartEnabled');
    }
    else
    {
        // grab threshold count
        // determine if we're on pdp or cart
        if ( mode == 'cart')
        {
            // not on the PDP
            var thresholdClass = jQuery('div#cartRecommendationsControlContainer').attr('class');
            threshold = thresholdClass.replace('baynoteCartEnabled baynoteThresholdCount', '') * 1;
        }
        else
        {
            // on the PDP
            var thresholdClass = jQuery('div#pdpBaynoteControlContainer').attr('class');
            threshold = thresholdClass.replace('baynotePDPEnabled baynoteThresholdCount', '') * 1;
        }
        // verify view count
        var hideCount = false;
        var viewCounts = jQuery('div.CountDisplay span.viewCount');
        jQuery.each(viewCounts, function(i, item)
        {
            var count = jQuery(item).html();
            if (count < threshold)
            {
                hideCount = true;
            }
        });
        if (hideCount)
        {
            jQuery('div#pdpBaynoteItemsContainer div.CountDisplay').css('display', 'none');
        }
        // add class of 'last' to last item
        var items = jQuery('div#' + mode + 'BaynoteTargetContainer div.ItemContainer');
        var itemCount = items.length - 1;
        jQuery.each(items, function(i, item)
        {
            if (i == itemCount)
            {
                jQuery(item).addClass('last');
            }
        });
        
    }
}
function mwsReady()
{
    // add class of 'last' to last item
    var items = jQuery('div#mwsPdpContainer div.ItemContainer');
    var itemCount = items.length - 1;
    // alert(itemCount);
    jQuery.each(items, function(i, item)
    {
        if (i == itemCount)
        {
            jQuery(item).addClass('last');
        }
    });
}
jQuery(document).ready(function()
{
    // check may we suggest
    mwsReady();
});
// Baynote timeout length in seconds
var baynoteTimeoutLength = 1.5;
var baynotePDPItemCount;
var baynoteTimeoutCutoff = false;
jQuery(window).load(function()
{
    // check may we suggest
    // mwsReady();
    var timeout = baynoteTimeoutLength * 1000;
    var baynoteTimeout = setTimeout('baynoteTimeoutCheck()', timeout);
});
function baynoteTimeoutCheck()
{
    var pdpCheck = jQuery('div#pdpBaynoteControlContainer').length;
    var mode = '';
    if (pdpCheck == 0)
    {
        // not on the PDP
        mode = 'cart';
    }
    else
    {
        mode = 'pdp';
    }
    // Check if Baynote is turned on
    var baynotePDPOn = jQuery('div#pdpBaynoteControlContainer').hasClass('baynotePDPEnabled');
    var baynoteCartOn = jQuery('div#cartRecommendationsControlContainer').hasClass('baynoteCartEnabled');
    // check PDP
    var baynotePDPItemCount = jQuery('div#pdpBaynoteTargetContainer div.ItemContainer');
    if ( baynotePDPItemCount.length == 0 )
    {
        jQuery('div#pdpBaynoteControlContainer').removeClass('baynotePDPEnabled');
        baynoteTimeoutCutoff = true;
    }
    // check for May We Suggest products
    var mwsItems = jQuery('div#mwsPdpContainer div.ItemContainer');
    if ((mwsItems.length == 0) && ((baynotePDPItemCount.length == 0) || (baynotePDPOn == false)))
    {
        // if we have no baynote products, and no may we suggest products, we have to hide the whole thing.
        jQuery('div#pdpBaynoteControlContainer').css('display', 'none');
    }
    // check cart
    var baynoteCartItemCount = jQuery('div#cartBaynoteTargetContainer div.ItemContainer');
    if (baynoteCartItemCount.length == 0)
    {
        jQuery('div#cartBaynoteControlContainer').removeClass('baynoteCartEnabled');
        baynoteTimeoutCutoff = true;
    }
}

// Javascript for Search indicator
function displaySearchIndicator()
{
	var searchInputVal = jQuery('div.headerSearchTextContainer input.searchText').val();
	var searchIndicatorHTML = '<div class="searchIndicatorContainer"><div class="searchIndicator">Searching for ' + "'" + searchInputVal + "'" + '...  <div class="searchIndicatorImage">&nbsp;</div></div></div>';
	if ( searchInputVal.length > 2 )
	{
		jQuery('div#headerFrameSearchContainer div').css('display', 'none');
		jQuery('div#headerFrameSearchContainer').append(searchIndicatorHTML);
		return true;
	}
	else
	{
		return false;
	}
}

function displayLeftNavSearchIndicator()
{
	var searchInputVal = jQuery('div#SidebarOutsideContainer div.search input.searchTextInput').val();
	var searchIndicatorHTML = '<div class="searchIndicatorContainer"><div class="searchIndicator">Searching for ' + "'" + searchInputVal + "'" + '...  <div class="searchIndicatorImage">&nbsp;</div></div></div>';
	if ( searchInputVal.length > 2 )
	{
		jQuery('div#SidebarOutsideContainer div.search div.searchTop, div#SidebarOutsideContainer div.search div.searchBottom').css('display', 'none');
		jQuery('div#SidebarOutsideContainer div.search div.searchTop').after(searchIndicatorHTML);
		return true;
	}
	else
	{
		return false;
	}
}


jQuery(document).ready(function ()
{
	// Search related dom ready stuff
	var displayCheck = jQuery('div#headerFrameSearchRowTwo').css('display');
	if ( displayCheck == 'none' )
	{
		var radioButtons = jQuery('div#headerFrameSearchRowTwo span.searchRadioButton input').removeAttr("checked");
		var radioTarget;
		jQuery.each(radioButtons, function(i, item)
		{
			radioTarget = item;
		});
		jQuery(radioTarget).attr('checked', 'checked');
	}
	var preloadIndicator = new Image();
	preloadIndicator.src = "//images.footballfanatics.com/partners/ff_wide/misc/search-loader.gif";
	jQuery('div.headerSearchSubmitContainer input.searchSubmit').click(function () {
		return displaySearchIndicator();
		// displaySearchIndicator();
	});
	jQuery('div#SidebarOutsideContainer div.search input.searchButtonInput').click(function (e) {
		// e.preventDefault();
		return displayLeftNavSearchIndicator();
		// displaySearchIndicator();
	});
});

// JS for overriding the home link
function readHomeLinkOverrideCookie()
{
	var cookieURL = jQuery.cookie('homeOverrideCookie');
	if ( cookieURL == null )
	{
		// alert(cookieURL);
		// no cookie value, do nothing
	}
	else
	{
		jQuery('a#headerHomeLink').attr('href', cookieURL);
		jQuery('a#coHeaderLogoLink').attr('href', cookieURL);
		jQuery('a.homePageLink').attr('href', cookieURL);
	}
}

jQuery(document).ready(function ()
{
	readHomeLinkOverrideCookie();
});

function setHomeLinkOverrideCookie(url)
{
	var cookieTimout = 60;
	if (typeof url === "undefined")
	{
		// no url passed, use location
		url = document.location.href;
		// alert(url);
	}
	jQuery.cookie('homeOverrideCookie', url, { expires: 7, path: '/' });
}
// setHomeLinkOverrideCookie();

