/* Minification failed. Returning unminified contents.
(879,17-18): run-time warning JS1004: Expected ';': s
(880,17-18): run-time warning JS1004: Expected ';': p
 */
var siteActivity = function () {

  return {
    TrackPageView: function () {

      var timeStamp = new Date().getTime();
      var requestData = { 'RequestTimeStamp': timeStamp };

      $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: urlPrefix + "/siteactivity/trackpageview_json",
        data: JSON.stringify(requestData),
        dataType: "json",
        success: function (data) {
        },
        error: function (data) {
          console.log("Uknown error tracking pageview");
        }
      });
    }
  }
}();
;var basket = function () {

  // Private Methods
  function UpdateBasketDisplay(data) {
    $(".BasketItemCount").html(data.ProductCount);    
    $(".BasketTotalValue").html(data.CurrencySymbol + Globalize.format(data.BasketTotal, "n2"));
  };

  // Public Methods
  return {
    RefreshTotals: function () {

      $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: urlPrefix + "/basket/summary_json",
        dataType: "json",
        success: function (data) {
          UpdateBasketDisplay(data);
        },
        error: function (data) {
          console.log("Uknown error loading basket totals");
        }
        });       
      },
      DeleteItemFromBasket: function (removeProduct,event) {
        UniversalAnalytics.RemoveFromBasket(removeProduct);
        $(".DeleteItemFromBasket.pending").removeClass("pending");
        if (removeProduct.basketWrapperCounter != "0") {
            $("#DeleteForm-" + removeProduct.rowID).addClass("pending");
            $("#ConfirmToRemove_modal").modal();
            event.preventDefault();
        }
      }
  }
}();
;var currencyChange = function () {
    $(document).ready(function () {
        $("select#currency-selector").on("change", function (e) {
            const newCurrency = $(this).val()
            $.ajax({
                type: 'POST',
                url: '/order/checkout/personal/changecurrency',
                data: { newCurrencyISO: newCurrency },
                success: function (data) {
                    if (data.Success) {
                        window.location.reload();
                    }
                }
            });
        });
    });
}();;var currentdate = function () {

  // Public Methods
  return {
    Populate: function () {
      $(".CurrentYear").html(new Date().getFullYear());
    }
  }
}();
;var input = function () {

  // Private Methods
  function replaceAmph(value) {
    return value.replace(/\&/g, "and");
  }
  // Public Methods
  return {
    // Public Properties

    // Public Methods
    init: function () {
    },

    sanitise: function (value) {
      return replaceAmph(value);
    }
  }
}();
;var ajax = function () {

  // Private Methods

  // Public Methods
  return {
    // Public Properties

    showLoading: true,
    clearLoading: true,

    // Public Methods
    init: function () {

      $(document).ajaxStart(function () {
        ajax.loadingStart();
      }).ajaxStop(function () {
        ajax.loadingStop();
      });
    },

    loadingStart: function () {
      if (ajax.showLoading === true) {
        $("body").addClass("bs-loading");
      }      
    },

    loadingStop: function () {
      if (ajax.clearLoading === true) {
        $("body").removeClass("bs-loading");
      }
    }

  }
}();
;var filteredNavigation = function () {
  // Private Properties
  // --------------------------------------------
  var _storeID = 101;
  var _filtersPopulated = false;
  var _hashParamValueSeparator = "-";
  var _currencyHtml = '';
  var _typeIds = [], _categoryIds = [], _genreIds = [], _artistIds = [], _genderIds = [], _sizeIds = [];
  var _typeIdsHash = [], _categoryIdsHash = [], _genreIdsHash = [], _artistIdsHash = [], _genderIdsHash = [], _sizeIdsHash = [];
  var _startPriceRange = 0, _finishPriceRange = 400, _minPrice = '', _maxPrice = '', _pageIndex = 1, _pageCount;
  var _freeShipping = false;
  var _preservePage = false;

  // Private Methods
  // --------------------------------------------
  function updateHash() {
    var urlHash = 'types=' + _typeIds.join(_hashParamValueSeparator) + '&' + 'cats=' + _categoryIds.join(_hashParamValueSeparator) + '&' +
      'genres=' + _genreIds.join(_hashParamValueSeparator) + '&' + 'artists=' + _artistIds.join(_hashParamValueSeparator) + '&' +
      'gender=' + _genderIds.join(_hashParamValueSeparator) + '&' + 'sizes=' + _sizeIds.join(_hashParamValueSeparator) + '&' +
      'minprice=' + _minPrice + '&' + 'maxprice=' + _maxPrice + '&' + 'freeshipping=' + _freeShipping + '&' +
      'pagesize=' + _pageSize + '&' + 'pageindex=' + _pageIndex;	    
    window.location.hash = '#' + urlHash;
  }

  function extractHash() {
    var i;
    var hash = window.location.hash.slice(1);
    var params = getParamsFromURLHash(hash);

    // Types
    var typesParam = params["types"] || "";
    if (typesParam.length > 0) {
      var typeIds = getParamValues(typesParam);
      for (i = 0; i < typeIds.length; i++) {
        if (typeIds[i] != "") {
          var typeId = parseInt(typeIds[i])
          _typeIdsHash.push(typeId);
        }
      }
    }

    // Categories
    var categoriesParam = params["cats"] || "";
    if (categoriesParam.length > 0) {
      var catIds = getParamValues(categoriesParam);
      for (i = 0; i < catIds.length; i++) {
        if (catIds[i] != "") {
          var catId = parseInt(catIds[i])
          _categoryIdsHash.push(catId);
        }
      }
    }

    // Genres
    var genresParam = params["genres"] || "";
    if (genresParam.length > 0) {
      var genreIds = getParamValues(genresParam);
      for (i = 0; i < genreIds.length; i++) {
        if (genreIds[i] != "") {
          var genreId = parseInt(genreIds[i])
          _genreIdsHash.push(genreId);
        }
      }
    }

    // Artists
    var bandsParam = params["artists"] || "";
    if (bandsParam.length > 0) {
      var bandIds = getParamValues(bandsParam);
      for (i = 0; i < bandIds.length; i++) {
        if (bandIds[i] != "") {
          var bandId = parseInt(bandIds[i])
          _artistIdsHash.push(bandId);
        }
      }
    }

    // Gender
    var genderParam = params["gender"] || "";
    if (genderParam.length > 0) {
      var genderIds = getParamValues(genderParam);
      for (i = 0; i < genderIds.length; i++) {
        if (genderIds[i] != "") {
          var genderId = parseInt(genderIds[i])
          _genderIdsHash.push(genderId);
        }
      }
    }

    // Sizes
    var sizesParam = params["sizes"] || "";
    if (sizesParam.length > 0) {
      var sizesIds = getParamValues(sizesParam);
      for (i = 0; i < sizesIds.length; i++) {
        if (sizesIds[i] != "") {
          var sizeId = parseInt(sizesIds[i])
          _sizeIdsHash.push(sizeId);
        }
      }
    }

    // Page Size
    var pageSizeParam = params["pagesize"] || "";
    if (pageSizeParam.length > 0) {
      _pageSize = pageSizeParam;
      $(".page-size").val(_pageSize);
    }

    // Page Index
    var pageIndexParam = params["pageindex"] || "";
    if (pageIndexParam.length > 0) {
      _pageIndex = pageIndexParam;
    }

    // Price Range
    var minPriceParam = params["minprice"] || "";
    if (minPriceParam.length > 0) {
      _minPrice = minPriceParam;
    }
    var maxPriceParam = params["maxprice"] || "";
    if (maxPriceParam.length > 0) {
      _maxPrice = maxPriceParam;
    }

    var freeShippingParam = params["freeshipping"] || "";
    if (freeShippingParam.length > 0) {
      setFreeShipping(freeShippingParam);
    }
  }

  function addHashIds() {

    // Types
    for (var i = 0; i < _typeIdsHash.length; i++) {
      if ($.inArray(_typeIdsHash[i], _typeIds) == -1) {
        _typeIds.push(_typeIdsHash[i]);
      }
    }

    // Categories
    for (var i = 0; i < _categoryIdsHash.length; i++) {
      if ($.inArray(_categoryIdsHash[i], _categoryIds) == -1) {
        _categoryIds.push(_categoryIdsHash[i]);
      }
    }
    // Genres
    for (var i = 0; i < _genreIdsHash.length; i++) {
      if ($.inArray(_genreIdsHash[i], _genreIds) == -1) {
        _genreIds.push(_genreIdsHash[i]);
      }
    }
    // Brands
    for (var i = 0; i < _artistIdsHash.length; i++) {
      if ($.inArray(_artistIdsHash[i], _artistIds) == -1) {
        _artistIds.push(_artistIdsHash[i]);
      }
    }
    // Gender
    for (var i = 0; i < _genderIdsHash.length; i++) {
      if ($.inArray(_genderIdsHash[i], _genderIds) == -1) {
        _genderIds.push(_genderIdsHash[i]);
      }
    }
    // Sizes
    for (var i = 0; i < _sizeIdsHash.length; i++) {
      if ($.inArray(_sizeIdsHash[i], _sizeIds) == -1) {
        _sizeIds.push(_sizeIdsHash[i]);
      }
    }

    clearHashIds();
  }

  function clearHashIds() {
    // Clear Hash Arrays (the url hash will be updated on each data load)
    _typeIdsHash = [];
    _categoryIdsHash = [];
    _genreIdsHash = [];
    _artistIdsHash = [];
    _genderIdsHash = [];
    _sizeIdsHash = [];
  }

  function getParamsFromURLHash(hash) {
    var params = {}, pieces, parts, i;
    if (hash.length > 0) {
      pieces = hash.split("&");
      for (i = 0; i < pieces.length; i++) {
        parts = pieces[i].split("=");
        if (parts.length < 2) {
          parts.push("");
        }
        params[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]);
      }
    }
    return params;
  }

  function getParamValues(concat) {
    var parts = {};
    if (concat.length > 0) {
      parts = concat.split(_hashParamValueSeparator);
    }
    return parts;
  }

  function doLoad() {
    _typeIds = $(".itemTypeFilter-item input:checkbox:checked").map(function () { return parseInt($(this).attr('data-id')); }).get();
    _categoryIds = $(".categoryFilter-item input:checkbox:checked").map(function () { return parseInt($(this).attr('data-id')); }).get();
    _genreIds = $(".genreFilter-item input:checkbox:checked").map(function () { return parseInt($(this).attr('data-id')); }).get();
    _artistIds = $(".bandFilter-item input:checkbox:checked").map(function () { return parseInt($(this).attr('data-id')); }).get();
    _genderIds = $(".genderFilter-item input:checkbox:checked").map(function () { return parseInt($(this).attr('data-id')); }).get();
    _sizeIds = $(".sizeFilter-item input:checkbox:checked").map(function () { return parseInt($(this).attr('data-id')); }).get();

    _pageSize = $("#page-size-top").val();
    addHashIds();

    if (_preservePage == false) {
      _pageIndex = 1;
    }

    var dataPost = {
      store_id: _storeID, Type_Ids: _typeIds.join(","), Category_Ids: _categoryIds.join(","), Genre_Ids: _genreIds.join(","), Artist_Ids: _artistIds.join(","), Size_Ids: _sizeIds.join(","),
      Price_Min: _minPrice, Price_Max: _maxPrice, Gender_Ids: _genderIds.join(","), FreeShippingOnly: _freeShipping,
      Page_Size: _pageSize, Page_Number: _pageIndex,
      CurrentCulture: currentCulture, UseCultureUrl: useCultureUrl
    };

    //startAction();

    $.post('https://api.backstreetmerch.com/api/search/Get-Guided-Nav-Results', dataPost, function (dataResponse) {
      //finishAction("API Request");
      filteredNavigation.populateProducts(dataResponse.Guided_Nav_Products);
      filteredNavigation.popupatePaging(dataResponse.Guided_Nav_Paging);
      filteredNavigation.insertFilters(dataResponse);
    }, 'json');

    updateHash();

    var hash = window.location.hash.slice(1);
    UniversalAnalytics.SendEvent('StoreFront', 'Guided-Nav', hash);
    var pageUrl = window.location.pathname + '?' + hash;
    UniversalAnalytics.ManualSendPageView(pageUrl);
  }

  function createFilterItemHtml(prefix, item, preSelected) {
    var disabledClass = "filter-disabled";
    var disabled = "disabled";
    if (item.C > 0) {
      disabledClass = "";
      disabled = "";
    }
    var selected = "checked";
    if (preSelected == false) {
      selected = "";
    }

    var html = "<div class='" + prefix + "Filter-item " + disabledClass + "' id='" + prefix + "Filter-" + item.ID + "'>" +
                  "<label>" +
                    "<input type='checkbox' class='itemType' id='" + prefix + "-" + item.ID + "' data-id='" + item.ID + "' value='' " + disabled + " " + selected + ">" +
                    "&nbsp;<span class='" + prefix + "Name' id='" + prefix + "Name-" + item.ID + "'>" + item.N + "</span>&nbsp;<span><small>(<span class='" + prefix + "ProductCount' id='" + prefix + "ProductCount-" + item.ID + "'>" + item.C + "</span>)</small></span>" +
                  "</label>" +
                "</div>";
    return html;
  }

  function createProductHtml(prod) {
  	
  	if (window.useCultureUrl) {
  		// Prepend urlPrefix with currentCulture to prod.URL
  		prod.URL = window.urlPrefix + prod.URL;
	  }
  		
    var html = "<div class='col-md-3 col-sm-3 col-xs-6'>" +
                  "<div class='thumbnail ProductThumbnailLarge ProductThumbnailLarge--" + prod.ItemName + "'>" +
                    "<div class='ProductThumbnailSmall__ImgOverlayContainer'>" +
                      "<a href='" + prod.URL + "' title='" + prod.ItemName + "' class='ProductThumbnailLarge__ImgLink'>" +
                       "<img src='" + prod.Img_URL + "' alt='" + prod.ItemName + "' class='img-responsive ProductThumbnailLarge__Img'>" +
                      "</a>" +
                      "<div class='ImageOverlay'>" +
                      createProductImageOverlayHtml(prod) +
                      "</div>" +
                    "</div>" +
                    "<div class='caption ProductThumbnailLarge__Caption'>" +
                      "<div class='ProductThumbnailLarge__BandName Clamped Clamped-1'>" +
                        "<a class='ProductThumbnailLarge__CaptionLink JqueryClamp1' ' title='" + prod.Band_Name + "' href='" + prod.Artist_URL + "'><span>" + prod.Band_Name + "</span></a>" +
                      "</div>" +
                      "<div class='ProductThumbnailLarge__ProductName Clamped Clamped-2'>" +
                        "<a class='ProductThumbnailLarge__CaptionLink JqueryClamp2' title='" + prod.Band_Name + "' href='" + prod.URL + "'><span>" + prod.ItemName + "</span></a>" +
                      "</div>" +
                      "<div class='ProductThumbnailLarge__Price Ellipsis'>" +
                        createProductPriceHtml(prod) +
                      "</div>" +
                    "</div>" +
                  "</div>" +
                "</div>";
    return html;
  }

  function createProductImageOverlayHtml(prod) {
    var overlayHtml = "";
    
    if (prod.IsOnPreOrder === true && storeFeature.ProductSlash_PreOrder === true) {
      // IsPreOrder
      overlayHtml += "<div class='ProductThumbnailSmall__PreOrderItem ImageOverlay__Text'>" +
                      "<div class='ImageOverlay__Text--PreOrderItem' title='pre-order item'>" +
                        "Pre Order" +
                      "</div>" +
                    "</div>";
    } else if (prod.IsNew === true && storeFeature.ProductSlash_NewItem === true) {
      // IsNew
      overlayHtml += "<div class='ProductThumbnailSmall__NewItem ImageOverlay__Text'>" +
                      "<div class='ImageOverlay__Text--NewItem' title='new item'>" +
                        "New Item" +
                      "</div>" +
                    "</div>";
    } else if (prod.IsOnSale === true && storeFeature.ProductSlash_SaleItem === true) {
      // IsSale
      overlayHtml += "<div class='ProductThumbnailSmall__SaleItem ImageOverlay__Text'>" +
                      "<div class='ImageOverlay__Text--SaleItem' title='sale item'>" +
                        "Sale Item" +
                      "</div>" +
                    "</div>";
    } else if (prod.IsFreeShipping === true && storeFeature.ProductSlash_FreeShipping === true) {
      // IsFreeShipping
      overlayHtml += "<div class='ProductThumbnailSmall__FreeShipping ImageOverlay__Text'>" +
                      "<div class='ImageOverlay__Text--FreeShipping' title='free shipping item'>" +
                        "Free Shipping" +
                      "</div>" +
                    "</div>";
    }

    return overlayHtml;
  }

  function createProductPriceHtml(prod) {
    var priceHtml = "<span >" + prod.UnitPrice + "</span>";
    if (prod.IsOnSale === true) {
      priceHtml = "<span >" + prod.SalePrice + "</span> <span class='StrikeThrough'>" + prod.UnitPrice + "</span>";
    }
    return priceHtml;
  }

  function setFreeShipping(value) {
    _freeShipping = checkBool(value);
    //console.log(_freeShipping);

    $(".btn-free-shipping").removeClass("active");
    if (_freeShipping === true) {
      $("#freeShippingOn").addClass("active");
    }
    else {
      $("#freeShippingOff").addClass("active");
    }
  }

  function checkBool(value) {
    return (value && typeof value == 'string') ? (value.toLowerCase() == 'true' || value == '1') : (value == true);
  }
  
  return {
    // Public Properties
    // --------------------------------------------

    // Public Methods
    // --------------------------------------------
    init: function (storeID) {

      _storeID = storeID;

      //getCulture();
      extractHash();

      $("#clear-all").click(function (ev) {
        $(".filter-container input:checkbox:checked").attr('checked', false);
        _minPrice = '';
        _maxPrice = '';
        $(".btn-price-range").removeClass("active");

        $("#bandFilter-input").val('');
        doLoad();
        ev.preventDefault();
      });

      $(".btn-price-range").click(function (ev) {

        $(".btn-price-range").removeClass("active");

        var el = $(ev.target);
        if (_minPrice === el.data("minprice") && _maxPrice === el.data("maxprice")) {
          // deselect price range
          _minPrice = '';
          _maxPrice = '';
        }
        else {
          // select price range
          _minPrice = el.data("minprice");
          _maxPrice = el.data("maxprice");
          el.addClass("active");
        }
        el.blur();
        doLoad();
        ev.preventDefault();
      });

      $(".btn-free-shipping").click(function (ev) {
        var el = $(ev.target);
        var freeShipping = el.data("freeshipping");
        setFreeShipping(freeShipping);

        el.blur();
        doLoad();
        ev.preventDefault();
      });

      $("#page-size-top").change(function (ev) {
        $("#page-size-bottom").val($(ev.target).val());
        doLoad();
        ev.preventDefault();
      });

      $("#page-size-bottom").change(function (ev) {
        $("#page-size-top").val($(ev.target).val());
        doLoad();
        ev.preventDefault();
      });

      $(".pagination-previous").click(function (ev) {
        if (_pageIndex != 1) {
          _pageIndex--;
          _preservePage = true;
          doLoad();
        }
        ev.preventDefault();
      });

      $(".pagination-next").click(function (ev) {
        if (_pageIndex != _pageCount) {
          _pageIndex++;
          _preservePage = true;
          doLoad();
        }
        ev.preventDefault();
      });

      $(".pagination-first").click(function (ev) {
        if (_pageIndex != 1) {
          _pageIndex = 1;
          _preservePage = true;
          doLoad();
        }
        ev.preventDefault();
      });
      $(".pagination-last").click(function (ev) {
        if (_pageIndex != _pageCount) {
          _pageIndex = _pageCount;
          _preservePage = true;
          doLoad();
        }
        ev.preventDefault();
      });

      ajax.loadingStart();
      doLoad();
    },

    populateProducts: function (products) {
      var productsHtml = "";
      for (var i = 0; i < products.length; i++) {
        if (products[i].URL != null) {
          productsHtml = productsHtml + createProductHtml(products[i]);
        } else {
          //console.log(products[i]);
        }
      }
      $("#products-container").html(productsHtml);
    },

    insertFilters: function (data) {
      //console.log(data);
      var typesHtml = "", categoriesHtml = "", genresHtml = "", bandsHtml = "", gendersHtml = "", sizesHtml = "";

      // Types
      // ---------------
      //startAction();
      for (var i = 0; i < data.Guided_Nav_Types.Entries.length; i++) {
        var item = data.Guided_Nav_Types.Entries[i];
        var selected = false;
        if ($.inArray(item.ID, _typeIds) != -1) {
          selected = true;
        }
        typesHtml = typesHtml + createFilterItemHtml('itemType', item, selected);
      }
      $("#collapseItemType .filter-set-container").html(typesHtml);
      if (data.Guided_Nav_Types.Entries.length > 0) {
        $(".itemType-none").hide();
      }
      //finishAction("Entries Create & Insert");

      // Categories
      // ---------------
      //startAction();
      for (var i = 0; i < data.Guided_Nav_Categorys.Entries.length; i++) {
        var item = data.Guided_Nav_Categorys.Entries[i];
        var selected = false;
        if ($.inArray(item.ID, _categoryIds) != -1) {
          selected = true;
        }
        categoriesHtml = categoriesHtml + createFilterItemHtml('category', item, selected);
      }
      $("#collapseCategory .filter-set-container").html(categoriesHtml);
      if (data.Guided_Nav_Categorys.Entries.length > 0) {
        $(".category-none").hide();
      }
      //finishAction("Categories Create & Insert");
      
      // Genders
      // ---------------
      //startAction();
      for (var i = 0; i < data.Guided_Nav_Genders.Entries.length; i++) {
        var item = data.Guided_Nav_Genders.Entries[i];
        var selected = false;
        if ($.inArray(item.ID, _genderIds) != -1) {
          selected = true;
        }
        gendersHtml = gendersHtml + createFilterItemHtml('gender', item, selected);
      }
      $("#collapseGender .filter-set-container").html(gendersHtml);
      if (data.Guided_Nav_Genders.Entries.length > 0) {
        $(".gender-none").hide();
      }
      //finishAction("Genders Create & Insert");

      // Sizes
      // ---------------
      //startAction();
      for (var i = 0; i < data.Guided_Nav_Sizes.Entries.length; i++) {
        var item = data.Guided_Nav_Sizes.Entries[i];
        var selected = false;
        if ($.inArray(item.ID, _sizeIds) != -1) {
          selected = true;
        }
        sizesHtml = sizesHtml + createFilterItemHtml('size', item, selected);
      }
      $("#collapseSize .filter-set-container").html(sizesHtml);
      if (data.Guided_Nav_Sizes.Entries.length > 0) {
        $(".size-none").hide();
      }
      //finishAction("Sizes Create & Insert");

      // Genres
      // ---------------
      //startAction();
      for (var i = 0; i < data.Guided_Nav_Genres.Entries.length; i++) {
        var item = data.Guided_Nav_Genres.Entries[i];
        var selected = false;
        if ($.inArray(item.ID, _genreIds) != -1) {
          selected = true;
        }
        genresHtml = genresHtml + createFilterItemHtml('genre', item, selected);
      }
      $("#collapseGenre .filter-set-container").html(genresHtml);
      if (data.Guided_Nav_Genres.Entries.length > 0) {
        $(".genre-none").hide();
      }
      //finishAction("Genres Create & Insert");

      // Bands/Artists
      // ---------------
      //startAction();
      for (var i = 0; i < data.Guided_Nav_Artists.Entries.length; i++) {
        var item = data.Guided_Nav_Artists.Entries[i];
        var selected = false;
        if ($.inArray(item.ID, _artistIds) != -1) {
          selected = true;
        }
        bandsHtml = bandsHtml + createFilterItemHtml('band', item, selected);
      }
      $("#collapseBand .filter-set-container").html(bandsHtml);
      if (data.Guided_Nav_Artists.Entries.length > 0) {
        $(".band-none").hide();
      }
      //finishAction("Bands/Artists Create & Insert");

      // Price Range
      // ---------------
      _currencyHtml = data.Guided_Nav_Price_Range.Currency;
      $(".currency-symbol").html(_currencyHtml);
      _filtersPopulated = true;

      // Free Shipping
      // ---------------
      setFreeShipping(_freeShipping);

      $('#bandFilter-input').livefilter({
        selector: '#collapseBand .bandFilter-item'
      });

      $('.filter-container input:checkbox').on('click', function () {
        _preservePage = false;
        doLoad();
      });
    },

    popupatePaging: function (data) {
      _pageSize = data.Page_Size;
      _pageIndex = data.Page_Index;
      _pageCount = data.Total_Pages;
      _productCount = data.Total_Products;

      _productIndexStart = (_pageSize * _pageIndex) - _pageSize + 1;
      _productIndexFinish = _productIndexStart + _pageSize - 1;

      $(".pagination-pageindex").text(_pageIndex);
      $(".pagination-pagecount").text(_pageCount);
      $(".product-index-start").text(_productIndexStart);
      $(".product-index-finish").text(_productIndexFinish);
      $(".product-count").text(_productCount);
    }
  }
}();
;var sort = function () {

  // Private Methods

  // Public Methods
  return {
    // Public Properties

    // Public Methods
    update: function (selectElem) {
      window.location.href = window.location.pathname + "?sort=" + $(selectElem).val();
    }
  }
}();
;var navigate = function () {

  // Private Methods

  // Public Methods
  return {
    // Public Properties

    // Public Methods
    to: function (url) {
      window.location.href = url;
    }
  }
}();

$(document).ready(function () {
    $("#footerNav_newsletter").on("click", function (e) {
        e.preventDefault();
        Cookies.set('BSI_StoreFront_NewsletterDisplayed_v2',false);
        location.reload();
    });
});
;var newsletterSignup = function () {
  // Public Methods
  return {
  	Signup: function (e) {

    	e.preventDefault();
    	$('#Form_NewsletterSignup_Error').hide();
    	var form = $('#Form_NewsletterSignup');
    	var url = form.attr("action");
    	$.ajax({
    		url: url,
    		method: form.attr("method"),
    		data: form.serialize(),
    		success: function (response) {
    			if (response.success) {
    				// Success - so show confirmation message
    				$('#NewsletterSignup').hide();
    				$('#NewsletterSignup_Confirmation').show();
    			}
    			else if (response.error) {
    				// Server side error
    				$('#Form_NewsletterSignup_Error').show();
    			}
    			else {
    				// ModelState error
    				$('#NewsletterSignup_Container').html(response);
    			}
    		},
    		error: function () {
    			// ajax post error
    			$('#Form_NewsletterSignup_Error').show();
    		}
    	});
    }
  }
}();
;var productSizeSelector = function () {

	return {
		// Public Methods
		init: function () {

			// Product sizes selector validation
			$("#ProductSizeOptions__Form").submit(function (e) {
				// Execute this custom ProductSize button validation when using the ButtonGroup UI
				if ($('#ProductSizeOptions__ButtonGroupOption').length) {
					// Clear previous error message
					$("#ProductPage_SelectProductSize_ErrorMsg").hide();
					// Validate that ensure a product size button has been selected when adding product to cart by checking if any buttons' labels have class = "active"
					if (!$(".ProductSizeOptions__ButtonGroupOption label").hasClass('active')) {
						e.preventDefault();
						$("#ProductPage_SelectProductSize_ErrorMsg").show();
					}
				}
					// Execute this custom ProductSize button validation when using the SelectList  UI
				else if ($('.ProductSizeOptions__SelectOption').length) {
					// Clear previous error message
					$("#ProductPage_SelectProductSize_ErrorMsg").hide();
					// Validate that a product size has been selected when adding product to cart by checking if selectlist option has been selected
					if (!$('#ProductSize').val()) {
						e.preventDefault();
						$("#ProductPage_SelectProductSize_ErrorMsg").show();
					}
				}
			});

			// Add a tick mark to the selected product size button
			$("#ProductSizeOptions__ButtonGroupOption input[type=radio]").change(function () {
				// Uncheck all buttons in group
				$("#ProductSizeOptions__ButtonGroupOption label").removeClass("fa-check");
				// Check the selected button i.e. add "fa-check" to parent label of the selected input[type=radio] Button
				$(this).parent("label").addClass("fa-check");
			});
		}
	}

}();

var productBundleSizeSelector = function () {

	return {
		// Public Methods
		init: function () {
            let sizes = "";
            let plus = "";

			// Product sizes selector validation
			$("#ProductBundleSizeOptions__Form").submit(function (e) {
                sizes = "";
                plus = "";
				// Execute this custom ProductSize button validation when using the ButtonGroup UI
                if ($('.ProductSizeOptions__ButtonGroupOption').length) {
                    $('.ProductSizeOptions__ButtonGroupOption').each(function (key, element) {
                        // Clear previous error message
                        $(element).parent("div").find("#ProductPage_SelectProductSize_ErrorMsg").hide();
                        // Validate that ensure a product size button has been selected when adding product to cart by checking if any buttons' labels have class = "active"
                        if (!$("label", element).hasClass('active')) {
                            e.preventDefault();
                            $(element).parent("div").find("#ProductPage_SelectProductSize_ErrorMsg").show();
                        } else {
                            sizes += plus + $("label.active input", element).val();
                            plus = "+";
                        }
                    })
				}
				// Execute this custom ProductSize button validation when using the SelectList  UI
                else if ($('.ProductSizeOptions__SelectOption').length) {
                    $('.ProductSizeOptions__SelectOption').each(function(key, element){
                        // Clear previous error message
                        $(element).parent("div").find("#ProductPage_SelectProductSize_ErrorMsg").hide();
                        // Validate that a product size has been selected when adding product to cart by checking if selectlist option has been selected
                        if (!$(element).val()) {
                            e.preventDefault();
                            $(element).parent("div").find("#ProductPage_SelectProductSize_ErrorMsg").show();
                        } else {
                            sizes += plus + element.value;
                            plus = "+";
                        }
                    })
                }
                // Execute this custom ProductSize button validation when using the RadioButtons
                else if ($('.ProductSizeOptions__RadioOption').length) {
                    $('.ProductSizeOptions').each(function(key, element){
                        // Clear previous error message
                        $(element).find("#ProductPage_SelectProductSize_ErrorMsg").hide();
                        // Validate that a product size has been selected when adding product to cart by checking if selectlist option has been selected
                        if (!$(element).find("input[type=radio]:checked").val()) {
                            e.preventDefault();
                            $(element).find("#ProductPage_SelectProductSize_ErrorMsg").show();
                        } else {
                            sizes += plus + $(element).find("input[type=radio]:checked").val();
                            plus = "+";
                        }
                    })
                }

                if (sizes !== "") {
                    $("#ProductSize").val(sizes);
                } else {
                    e.preventDefault();
                }
			});

			// Add a tick mark to the selected product size button
			$("#ProductSizeOptions__ButtonGroupOption input[type=radio]").change(function () {
				// Uncheck all buttons in group
				$("#ProductSizeOptions__ButtonGroupOption label").removeClass("fa-check");
				// Check the selected button i.e. add "fa-check" to parent label of the selected input[type=radio] Button
				$(this).parent("label").addClass("fa-check");
            });
		}
	}

}();


var wrapperProductSizeSelector = function () {

    return {
        // Public Methods
        init: function () {

            // Product sizes selector validation
            $("#WrapperProductSizeOptions__Form").submit(function (event) {
                // Execute this custom ProductSize button validation when using the ButtonGroup UI
                var productItems = $(this).find(".WrapperProductItem");

                productItems.each(function (i, product) {
                    if ( $(product).find('.ProductSizeOptions__ButtonGroupOption').length) {
                        // Clear previous error message
                        $(product).find(".ProductPage_SelectProductSize_ErrorMsg").hide();
                        // Validate that ensure a product size button has been selected when adding product to cart by checking if any buttons' labels have class = "active"
                        if (!$(product).find(".ProductSizeOptions__ButtonGroupOption label").hasClass('active')) {
                            event.preventDefault();
                            $(product).find(".ProductPage_SelectProductSize_ErrorMsg").show();
                        }
                    }
                    // Execute this custom ProductSize button validation when using the SelectList  UI
                    else if ($(product).find('.ProductSizeOptions .ProductSizeOptions__SelectOption').length) {
                        // Clear previous error message
                        $(product).find(".ProductSizeOptions .ProductPage_SelectProductSize_ErrorMsg").hide();
                        // Validate that a product size has been selected when adding product to cart by checking if selectlist option has been selected
                        if (!$(product).find('.ProductSizeOptions .ProductSizeOptions__SelectOption').val()) {
                            event.preventDefault();
                            $(product).find(".ProductSizeOptions .ProductPage_SelectProductSize_ErrorMsg").show();
                        }
                    }
                });
                
            });

            // Add a tick mark to the selected product size button
            $("#ProductSizeOptions__ButtonGroupOption input[type=radio]").change(function (e) {
                // Uncheck all buttons in group
                $("#ProductSizeOptions__ButtonGroupOption label").removeClass("fa-check");
                // Check the selected button i.e. add "fa-check" to parent label of the selected input[type=radio] Button
                $(this).parent("label").addClass("fa-check");
            });
        }
    }

}();;UniversalAnalytics = function () {

  // Private Properties
  // --------------------------------------------------
  var _active = false;

  // parameters
  var _basket = null;
  var _currency = null;
  var _paymentType = null;

  // Callback Methods
  var _onBasketLoadedMethod = null;
  var _callbackMethod = null;
  
  // Private Methods
  // --------------------------------------------------

  function LoadBasketData() {
    //console.log("LoadBasketData");

    if (_basket === null || _currency === null) {
      // Ajax call, load basket data
      $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: urlPrefix + "/basket/loadbasket_json",
        dataType: "json",
        success: function (data) {
          _currency = data.currency;
          _basket = data.products
          UniversalAnalytics.OnBasketDataLoaded();
        },
        error: function (data) {
          //console.log("error: loadbasketdata");
        }
      });
    }
    else {
      // Basket details already loaded
      UniversalAnalytics.OnBasketDataLoaded();
    }
  }
 
  // Public Methods
  // --------------------------------------------------
  return {

    Init: function(active) {
      _active = active;
      if (_active == true) {
        (function (i, s, o, g, r, a, m) {
          i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
            (i[r].q = i[r].q || []).push(arguments)
          }, i[r].l = 1 * new Date(); a = s.createElement(o),
          m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
        })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');        

        // TEST MODE: ALLOWS LOCALHOST
        //ga('create', 'UA-3559861-2', 'none');
        // LIVE
        ga('create', 'UA-3559861-2', 'auto');
        ga('require', 'ec');
      }
    },

    Active: function() {
      return _active;
    },

    OnBasketDataLoaded: function () {
      //console.log("OnBasketDataLoaded");      
      if (_onBasketLoadedMethod != null) {
        _onBasketLoadedMethod();
        _onBasketLoadedMethod = null;
      }
    },

    DoCallback: function () {
      //console.log("DoCallback");
      if (_callbackMethod != null) {
        _callbackMethod();
        _callbackMethod = null;
      }
    },

    SendEvent: function(category, action, label) {

      //console.log("SendEvent: " + category + ", " + action + ", " + label);

      if (_active == true) {
        if (_callbackMethod === null) {
          ga('send', 'event', category, action, label);
        }
        else {
          ga('send', 'event', category, action, label, {
            'hitCallback': function () {
              //console.log("hitCallback");
              UniversalAnalytics.DoCallback();
            }
          });
          UniversalAnalytics.DoCallback();
        }
      }
    },

    AddProductView: function (product) {
      if (_active == true) {
        ga('set', '&cu', product.currency);
        ga('ec:addProduct', {                   // Provide product details in an productFieldObject.
          'id': product.productId,              // Product ID (string).
          'name': product.productName,          // Product name (string).
          'category': product.categoryName,     // Product category (string).
          'brand': product.brand,               // Product brand (string).
          'price': product.price,               // Product price (currency).    
        });
        ga('ec:setAction', 'detail');           // Detail action.
        UniversalAnalytics.SendEvent('StoreFront', 'Action', 'View Product');
      }      
    },

    AddToBasket: function (product) {
      if (_active == true) {
        ga('set', '&cu', product.currency);
        ga('ec:addProduct', {
          'id': product.productId,
          'name': product.productName,
          'category': product.categoryName,
          'brand': product.brand,
          'variant': product.size,
          'price': product.price,
          'quantity': 1
        });
        ga('ec:setAction', 'add');
        UniversalAnalytics.SendEvent('StoreFront', 'Action', 'Add to basket');
      }
    },

    RemoveFromBasket: function (removeProduct) {
      if (_active == true) {
        ga('set', '&cu', removeProduct.currency);
        ga('ec:addProduct', {
          'id': removeProduct.productId,
          'name': removeProduct.productName,
          'category': removeProduct.categoryName,
          'brand': removeProduct.brand,
          'variant': removeProduct.size,
          'price': removeProduct.price,
          'quantity': 1
        });
        ga('ec:setAction', 'remove');
        UniversalAnalytics.SendEvent('StoreFront', 'Action', 'Remove from basket');
      }
    },
    
    Checkout_ViewBasket: function (callbackMethod) {
      //console.log("Checkout_ViewBasket");
      active = true;
      if (_active == true) {
        _callbackMethod = callbackMethod;
        _onBasketLoadedMethod = UniversalAnalytics.DoCheckout_ViewBasket;
        LoadBasketData();
      }
    },

    DoCheckout_ViewBasket: function () {
      //console.log("DoCheckout_ViewBasket");
      if (_active == true) {
        ga('set', '&cu', _currency);
        for (var i = 0; i < _basket.length; i++) {
          var basketProduct = _basket[i];
          // Set basket content products
          ga('ec:addProduct', {
            'id': basketProduct.ProductID,
            'name': basketProduct.ItemName,
            'category': basketProduct.CategoryName,
            'brand': basketProduct.ArtistName,
            'variant': basketProduct.ProductSize,
            'price': basketProduct.UnitPrice,
            'quantity': basketProduct.Quantity,
            'coupon': basketProduct.VoucherCode
          });
        }
        ga('ec:setAction', 'checkout', { 'step': 1 });
        UniversalAnalytics.SendEvent('StoreFront', 'Action', 'View Basket');
      }
    },

    Checkout_EnterPayment: function (callbackMethod) {
      //console.log("Checkout_EnterPayment");
      if (_active == true) {
        _paymentType = null;
        _callbackMethod = callbackMethod;
        _onBasketLoadedMethod = UniversalAnalytics.DoCheckout_EnterPayment;
        LoadBasketData();
      }
    },

    DoCheckout_EnterPayment: function () {
      //console.log("DoCheckout_EnterPayment");
      if (_active == true) {
        ga('set', '&cu', _currency);
        for (var i = 0; i < _basket.length; i++) {
          var basketProduct = _basket[i];
          // Set basket content products
          ga('ec:addProduct', {
            'id': basketProduct.ProductID,
            'name': basketProduct.ItemName,
            'category': basketProduct.CategoryName,
            'brand': basketProduct.ArtistName,
            'variant': basketProduct.ProductSize,
            'price': basketProduct.UnitPrice,
            'quantity': basketProduct.Quantity
          });
        }
        ga('ec:setAction', 'checkout', { 'step': 2 });
        UniversalAnalytics.SendEvent('StoreFront', 'Action', 'Enter Payment Details');
      }
    },

    Checkout_Payment: function (callbackMethod, paymentType) {
      //console.log("Checkout_Payment");
      if (_active == true) {
        _paymentType = paymentType;
        _callbackMethod = callbackMethod;
        _onBasketLoadedMethod = UniversalAnalytics.DoCheckout_Payment;
        LoadBasketData();
      }
    },
    
    DoCheckout_Payment: function () {
      if (_active == true) {
        //console.log();
        ga('set', '&cu', _currency);
        for (var i = 0; i < _basket.length; i++) {
          var basketProduct = _basket[i];
          // Set basket content products
          ga('ec:addProduct', {
            'id': basketProduct.ProductID,
            'name': basketProduct.ItemName,
            'category': basketProduct.CategoryName,
            'brand': basketProduct.ArtistName,
            'variant': basketProduct.ProductSize,
            'price': basketProduct.UnitPrice,
            'quantity': basketProduct.Quantity
          });
        }
        ga('ec:setAction', 'checkout', { 'step': 3, 'option': _paymentType });
        var paymentLabel = 'Begin Payment: ' + _paymentType;        
        UniversalAnalytics.SendEvent('StoreFront', 'Action', paymentLabel);
      }
    },

    Checkout_3DAuth: function (callbackMethod) {
      //console.log("Checkout_3DAuth");
      if (_active == true) {
        _callbackMethod = callbackMethod;
        _onBasketLoadedMethod = UniversalAnalytics.DoCheckout_3DAuth;
        LoadBasketData();
      }
    },

    DoCheckout_3DAuth: function () {
      if (_active == true) {
        ga('set', '&cu', _currency);
        for (var i = 0; i < _basket.length; i++) {
          var basketProduct = _basket[i];
          // Set basket content products
          ga('ec:addProduct', {
            'id': basketProduct.ProductID,
            'name': basketProduct.ItemName,
            'category': basketProduct.CategoryName,
            'brand': basketProduct.ArtistName,
            'variant': basketProduct.ProductSize,
            'price': basketProduct.UnitPrice,
            'quantity': basketProduct.Quantity
          });
        }
        ga('ec:setAction', 'checkout', { 'step': 4 });
        UniversalAnalytics.SendEvent('StoreFront', 'Action', 'Begin 3D Auth');
      }
    },

    OrderComplete: function(order, orderProducts) {
      if (_active == true) {
        ga('set', '&cu', order.currency);
        for (var i = 0; i < orderProducts.length; i++) {
          var orderProduct = orderProducts[i];
          // Set basket content products
          ga('ec:addProduct', {
            'id': orderProduct.productId,
            'name': orderProduct.productName,
            'category': orderProduct.categoryName,
            'brand': orderProduct.brand,
            'variant': orderProduct.variant,
            'price': orderProduct.price,
            'quantity': orderProduct.quantity
          });
        }
        // Transaction level information is provided via an actionFieldObject.
        ga('ec:setAction', 'purchase', {
          'id': order.orderId,
          'affiliation': order.storeAffiliateId,
          'revenue': order.revenue,
          'tax': order.tax,
          'shipping': order.shipping,
          'coupon': order.coupon
        });

        UniversalAnalytics.SendEvent('StoreFront', 'Action', 'Order Complete');
      }
    },

    ManualSendPageView: function (pageUrl) {
      // This method can be called any time
      if (_active == true) {
        ga('send', 'pageview', { 'page': pageUrl });
      }
    },

    SendPageView: function () {
      // This method must be called last on the page.
      if (_active == true) {
        ga('send', 'pageview');
      }
    }
  }
}();
;