﻿var getQueryString = function(string) {
    if (location.href.indexOf("?") === -1) return undefined;
    var queryString = location.href.substr(location.href.indexOf("?") + 1);
    var params = queryString.split("&");
    for (var i = 0; i < params.length; i++) {
        var param = params[i];
        var split = param.split("=", 2);
        var name = split[0].replace("#", "");
        var value = (split[1] ? split[1].replace("#", "") : "");
        if (name.toLowerCase() === string.toLowerCase()) {
            return value;
        }
    }
    return undefined;
};

var getAjaxQueryString = function(string) {
    if (location.href.indexOf("#") === -1) return undefined;
    var queryString = location.href.substr(location.href.indexOf("#") + 1);
    var params = queryString.split(";");
    for (var i = 0; i < params.length; i++) {
        var param = params[i];
        var split = param.split("=", 2);
        var name = split[0].replace("#", "");
        var value = (split[1] ? split[1].replace("#", "") : "");
        if (name.toLowerCase() === string.toLowerCase()) {
            return decodeURIComponent(value);
        }
    }
    return undefined;
};

var showReverbNationPopup = function() {
    var overlays = jQuery('.modal-overlay');
    if (overlays.length === 0) {
        jQuery('body').append('<div class="modal-overlay"></div>');
    }
    jQuery('.modal-overlay').show();

    var popup = jQuery('.reverbNation.popup');
    if (popup.length === 0) {
        jQuery('body').append('<div class="reverbNation start popup"><a class="close_x" href="#" onclick="onCloseXClick()"></a><div class="main section"><p class="description">The V-Album Creator is a FREE authoring tool that allows you to create your own V-Albums and preview them as-you-go on your own computer. When a V-Album is ready for the world to see, you pay a $20 publishing fee before public sale and then a small fee for each V-Album sold.</p><div class="plaque"><p>ReverbNation Artists receive</p><h2>25% OFF*</h2><p>your V-Album Publishing Fee!**</p></div><div class="couponCode"><h3>*Use Coupon Code VACRN1130</h3><p><a href="#" onclick="showEmailForm()">Click Here</a> to email this code to yourself.</p><a class="getStarted btn" href="#" onclick="closePopup();"></a></div><p class="disclaimer">**All fees and discounts are subject to be changed at anytime. Coupon expires November 30, 2011.</p></div><div class="form section"><h2>Coupon Code: VACRN1130</h2><p>Enter your email address below to send this coupon code to yourself.</p><form action="#" onsubmit="submitEmailForm(); return false;"><label>Email address:<br /><input type="text" name="email" id="input_email" value="" /><br /><p class="error"></p></label></form> <a href="#" onclick="submitEmailForm(); return false;" class="btn submit"></a><a class="cancel" onclick="onCloseXClick()" href="#">Cancel</a></div><div class="submitted section"><h2 class="emailStatus"></h2><a class="cancel" onclick="onCloseXClick()" href="#">Close Window</a></div></div>');
    }
    jQuery(".reverbNation.popup").show();
};

var submitEmailForm = function () {
    var emailAddress = jQuery("#input_email").val();
    if (emailAddress == "" || !emailAddress.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/gi)) {
        jQuery("#input_email").addClass("error");
        jQuery("p.error").html("Please submit a valid email address.");
        return;
    }
    jQuery(".reverbNation").removeClass("email");
    jQuery(".reverbNation").addClass("emailSubmitted");
    jQuery(".emailStatus").html("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Please wait...");
    jQuery.post("/API/EmailCouponCode/SendEmail", { EmailAddress: emailAddress, CouponCode: "VACRN1130" }, function () {
        jQuery(".emailStatus").html("Your Email Has Been Successfully Sent");
    });
};

var showEmailForm = function () {
    jQuery(".reverbNation").removeClass("start");
    jQuery(".reverbNation").addClass("email");
};

var onCloseXClick = function () {
    if (jQuery(".reverbNation").hasClass("email") || jQuery(".reverbNation").hasClass("emailSubmitted")) {
        jQuery(".reverbNation").removeClass("email");
        jQuery(".reverbNation").removeClass("emailSubmitted");
        jQuery(".reverbNation").addClass("start");
        return;
    }
    closePopup();
};

var closePopup = function() {
    jQuery(".popup").hide();
    jQuery(".modal-overlay").hide();
};

setTimeout(function () {
    if (getQueryString("ref") && getQueryString("ref").toLowerCase() == "reverbnation") {
        showReverbNationPopup();
    }
}, 500);





var mainTitle = '';

var productList = [];

var numPerPage = 9;
var numPerColumn = 3;
var productWidth = 300;
var productHeight = 124;

var pager = {
    curPage: 1,
    numPages: 0
};

var productIndex = [];

var indexProductList = function (products) {
    for (var i = 0; i < products.length; i++) {
        var product = products[i];
        productIndex.push({
            product: product,
            fulltext: product.AlbumName.toLowerCase() + "|" + product.ArtistName.toLowerCase()
        });
    }
};

var searchUrl = "";
var lastSearch = "";
var lastFilter = "";

var performSearch = function (searchString, searchFilter) {
    if (searchString === null || searchString === undefined) searchString = jQuery("#SearchInput").val();
    if (!searchFilter) searchFilter = jQuery("#SearchFilter").find(":selected").val();
    searchString = searchString;
    if (lastSearch == searchString && lastFilter == searchFilter) return;
    if (location.href.indexOf("Artist/") > -1) {
        location.href = searchUrl + "#search=" + searchString + ";filter=" + searchFilter;
        return;
    }
    if (searchString.length > 0) {
        jQuery("#ClearSearch").show();
    }
    else {
        jQuery("#ClearSearch").hide();
    }
    lastSearch = searchString;
    lastFilter = searchFilter;
    jQuery("#ProductList").html("Searching...");
    jQuery(".resultCount").hide();
    jQuery(".moreVAlbums").hide();

    jQuery.post(searchUrl, {
        SearchString: searchString,
        SearchFilter: searchFilter,
        IsListingSuspended: false,
        IsSaleSuspended: false,
        IsOnSaleDateIgnored: false
    }, function (response) {
        jQuery("h2").html(response.Title);
        renderProductList(response.ProductList);
        location.href = "#search=" + encodeURIComponent(searchString) + ";filter=" + searchFilter;
        jQuery("#SearchInput").val(searchString);
        jQuery("#SearchFilter").find(":selected").removeAttr("selected");
        jQuery("#SearchFilter").find("[value=" + searchFilter + "]").attr("selected", "selected");
    });
};

clearSearchForm = function() {
    performSearch("", "all");
};

var checkSearchQuery = function () {
    jQuery(window).hashchange(checkSearchQuery);
    var search = getAjaxQueryString("search");
    var filter = getAjaxQueryString("filter");
    if (!search) return false;
    jQuery("#SearchFilter").find("[value=all]").attr("selected", "selected");
    if (filter) {
        jQuery("#SearchFilter").find(":selected").removeAttr("selected");
        jQuery("#SearchFilter").find("[value=" + filter + "]").attr("selected", "selected");
    }
    jQuery("#SearchInput").val(search);
    performSearch(search);
    return true;
};

var renderProductList = function (products) {
    var container = jQuery("#ProductList");
    container.html("");

    for (var i = 0; i < products.length; i++) {
        var product = products[i];
        var productItem = jQuery('<a class="product" href="' + product.ProductPageUrl + '"' + (product.IsScatterTunesVAlbum ? ' target="_blank"' : '') + '><div class="container"><img src="' + product.AlbumArtUrl + '" width="100" height="100" /><div class="details"><p class="albumTitle">' + product.AlbumName + '</p><p class="albumArtist">' + product.ArtistName + '</p><p class="price">' + product.Price + '</p></div></div></a>');
        container.append(productItem);
        var x = Math.floor(i / numPerColumn) * productWidth;
        var y = (i % numPerColumn) * productHeight;
        productItem.css({ left: x, top: y });
        productItem.width(productWidth);
        productItem.height(productHeight);
    }

    pager.numPages = Math.ceil(products.length / numPerPage);

    renderPaging();
};

var renderPaging = function () {
    var paging = jQuery("#Paging");
    var curPage = pager.curPage;
    var numPages = pager.numPages;

    if (numPages <= 1) {
        paging.html("");
        paging.hide();
        return;
    }
    paging.show();

    paging.html('<a href="#" class="prev page" onclick="prevPage(); return false;"></a><div id="PageNumbers">Page: </div><a href="#" class="next page" onclick="nextPage(); return false;"></a>');

    var pageNumbers = jQuery("#PageNumbers");

    for (var i = 1; i <= numPages; i++) {
        pageNumbers.append('<a id="Page_' + i + '" href="#" class="pageNum ' + (i == curPage ? "current" : "") + '" onclick="gotoPage(' + i + '); return false;">' + i + '</a>');
    }

    gotoPage(1, true);
};

var prevPage = function()
{
    gotoPage(pager.curPage - 1);
};

var nextPage = function()
{
    gotoPage(pager.curPage + 1);
};

var gotoPage = function (pageNum, noReposition) {
    if (pageNum < 1 || pageNum > pager.numPages) return;
    var delta = pager.curPage - pageNum;
    pager.curPage = pageNum;

    jQuery(".pageNum").removeClass("current");
    jQuery("#Page_" + pageNum).addClass("current");
    
    if (!noReposition) {
        var newLeft = "+=" + (productWidth * (numPerPage / numPerColumn) * delta) + "px";
        jQuery(".product").animate({
                left: newLeft
            });
    }

    if (pageNum == 1) {
        jQuery(".prev.page").addClass("disabled");
    }
    else {
        jQuery(".prev.page").removeClass("disabled");
    }
    
    if (pageNum == pager.numPages) {
        jQuery(".next.page").addClass("disabled");
    }
    else {
        jQuery(".next.page").removeClass("disabled");
    }
}
