﻿if (!mecca)
    var mecca = {};

mecca.LowerProducts = function(options) {
    var defaults = {
        relatedData: '',
        recentsData: '',
        alsoboughtData: ''
    }

    var options = $.extend(defaults, options);
    var relatedData = options.relatedData;
    var recentsData = options.recentsData;
    var alsoboughtData = options.alsoboughtData;

    var updateList = function(text, aTag) {
        $("#spinner").animate({ opacity: 0 }, 150, function() {
            $("#spinner").remove();
            $("div.product-content ul.products").html(text).animate({ opacity: 1 }, 150);
            mecca.ShoppingCart().setupAddButtons();
        });
    }

    var setupRelated = function() {
        $("dl.product-nav dt.nav-related-products a").click(function(e) {
            $("div.product-content ul.products").before("<img src='/img/nav/ajax-loader.gif' id='spinner' style='position:absolute; z-index:9999;display:none;' />");
            $(".extra-products dl.product-nav a").removeClass("active");
            $(this).addClass("active");
            $("div.product-content ul.products li").animate({ opacity: 0 }, 150);
            setTimeout(function() { $('#spinner').css("display", "block") }, 150);
            $.ajax({
                type: "POST",
                url: "/product/productItemsAjax.aspx",
                data: relatedData,
                aTag: this,
                success: function(text) { updateList(text, this.aTag); },
                error: function() {updateList("<li><p class='noMatchingProducts'>There are no matching products to display.</p></li>");}
            });
            if (e.preventDefault) { e.preventDefault(); }
        });
    }

    var setupRecents = function() {
        $("dl.product-nav dd.nav-recently-viewed a").click(function(e) {
            $("div.product-content ul.products").before("<img src='/img/nav/ajax-loader.gif' id='spinner' style='position:absolute; z-index:9999;display:none' />");
            $(".extra-products dl.product-nav a").removeClass("active");
            $(this).addClass("active");
            $("div.product-content ul.products li").animate({ opacity: 0 }, 150);
            setTimeout(function() { $('#spinner').css("display", "block") }, 150);
            $.ajax({
                type: "POST",
                url: "/product/productItemsAjax.aspx",
                data: recentsData,
                aTag: this,
                success: function(text) { updateList(text, this.aTag); },
                error: function() {updateList("<li><p class='noMatchingProducts'>There are no matching products to display.</p></li>");}
            });
            if (e.preventDefault) { e.preventDefault(); }
        });
    }

    var setupAlsoBought = function() {
        $("dl.product-nav dd.nav-mecca-mavens-also-bought a").click(function(e) {
            $("div.product-content ul.products").before("<img src='/img/nav/ajax-loader.gif' id='spinner' style='position:absolute; z-index:9999;display:none' />");
            $(".extra-products dl.product-nav a").removeClass("active");
            $(this).addClass("active");
            $("div.product-content ul.products li").animate({ opacity: 0 }, 150);
            setTimeout(function() { $('#spinner').css("display", "block") }, 150);
            $.ajax({
                type: "POST",
                url: "/product/productItemsAjax.aspx",
                data: alsoboughtData,
                aTag: this,
                success: function(text) { updateList(text, this.aTag); },
                error: function() {updateList("<li><p class='noMatchingProducts'>There are no matching products to display.</p></li>");}
            });
            if (e.preventDefault) { e.preventDefault(); }
        });
    }


    var init = function() {
        setupRelated();
        setupRecents();
        setupAlsoBought();
        //$("dl.product-nav a").css("outline", 0);
    } ();

    return {};
}

mecca.VariantSort = function(options)
{
    var defaults = {
        productId: ''
    };
    
    var options = $.extend(defaults, options);
    var productId = options.productId;
    
    var sortList = function(sort)
    {
        $.ajax({
            type: "POST",
            url: "/product/variantListAjax.aspx",
            data: 'productId=' + productId + '&sort=' + sort,
            success: function(text) { updateVariantList(text); }
        });
    }
    
    var updateVariantList = function(text)
    {
        $('ul.variants').animate({opacity:0}, 200, function() {
            $(this).html(text).animate({opacity:1}, 200);
            mecca.ShoppingCart().setupAddButtons();
        });
        //$('dd.nav-sort-by-name a, dd.nav-sort-by-colour a').toggleClass('active');
        setupLinks();
    }
    
    var setupLinks = function()
    {
        $('dd.nav-sort-by-name a, dd.nav-sort-by-colour a').unbind('click.sort').removeAttr('href');
        $('dd.nav-sort-by-name a').not('.active')
            .bind('click.sort', function(e) {
                $('dd.nav-sort-by-name a, dd.nav-sort-by-colour a').toggleClass('active');
                sortList('name');
                if (e.preventDefault) { e.preventDefault(); }
            });
        $('dd.nav-sort-by-colour a').not('.active')
            .bind('click.sort', function(e) {
                $('dd.nav-sort-by-name a, dd.nav-sort-by-colour a').toggleClass('active');
                sortList('colour');
                if (e.preventDefault) { e.preventDefault(); }
            });
    };
    
    var init = function()
    {
        setupLinks();
    }();
    
    return {};
}

mecca.Refinement = function(options)
{
    var defaults = {
        buttonId: '',
        dropdownId: '',
        baseUrl: '',
        query: '',
        brand: ''
    }
    
    var options = $.extend(defaults, options);
    var buttonId = '#' + options.buttonId;
    var dropdownId = '#' + options.dropdownId;
    var baseUrl = options.baseUrl;
    var query = options.query;
    var brand = options.brand;
    
    var insertParam = function(orig, key, value)
    {
        key = escape(key); value = escape(value);
        key = key.toLowerCase();

        var kvp = orig.split('&');

        var i=kvp.length; var x; while(i--) 
        {
            x = kvp[i].split('=');

            if (x[0].toLowerCase()==key)
            {
                    x[1] = value;
                    kvp[i] = x.join('=');
                    break;
            }
        }

        if(i<0) {kvp[kvp.length] = [key,value].join('=');}

        //this will reload the page, it's likely better to store this until finished
        return kvp.join('&'); 
    }

    
    var refine = function(href, animate) {
    
        var paramstr = href.split('?')[1];
        if (!paramstr) paramstr ='';
        var paramBits = paramstr.split('&');
        if (!paramBits) paramBits ='';
        
        var param = query;
        for (i in paramBits)
        {
            var bits = paramBits[i].split('=')
            param = insertParam(param, bits[0], bits[1]);
        }
        param = insertParam(param, "baseUrl", baseUrl);
        //param = query + "&" + param + "&" + "baseUrl=" + baseUrl;
        //query = query + "&" + param;
        
        var hash = null;
        if (href.split('#').length == 2)
        {
            hash = href.split('#')[1];
        }
        
        $.ajax({
            type: "POST",
            url: "/product/ProductListAjax.aspx",
            data: param,
            success: function(text) { updatePage(text, animate, hash); }
        });
    };
    
    var updatePage = function(html, animate, jumpTo)
    {
        var divElem = document.createElement('div');
        divElem.innerHTML = html;
        var div = $("#returnedContent", divElem);
        if (animate)
        {
            $("#spinner").remove();
            $('ul.products').animate({opacity:0}, 200, function() {
                $(this).html(div.find('ul.products').html());
                mecca.setupProductRows(4);
                cart.setupAddButtons();
                $(this).animate({opacity:1}, 200);
                if (jumpTo)
                {
                    var offset = $('a[name=' + jumpTo + ']').offset().top;
                    $('html,body').animate({scrollTop: offset }, 1000);
                }
            });
        }
        else
        {
            $('ul.products').html(div.find('ul.products').html());
            mecca.setupProductRows(4);
            cart.setupAddButtons();
            if (jumpTo)
            {
                var offset = $('a[name=' + jumpTo + ']').offset().top;
                $('html,body').animate({scrollTop: offset }, 1000);
            }
        }
        $('ul.products + div.search-footer').replaceWith(div.find('div.search-footer'));
        $('dl.product-nav').html(div.find('dl.product-nav').html());
        $('.product-sidebar').replaceWith(div.find('.product-sidebar'));
        Cufon.refresh();
        setupEvents();
        
    }
    
    var setupEvents = function() {
        // XXX: this isn't quite right yet
        /*
        $('.product-sidebar ul li a').not('#removeBrand').click(function(e) {
            refine(this.href);
            if (e.preventDefault) { e.preventDefault(); }
        });
        */
        
        $('dl.product-nav dd a').unbind('click.refine').bind('click.refine', function(e) {
        
            $("ul.products").before("<div id='spinner' style='text-align: center; display: none;'><img src='/img/nav/ajax-loader.gif' /></div>");
            $("ul.products").animate({ opacity: 0 }, 150, function() {
                                                           $("#spinner").css('display', 'block');
                                                           $("#spinner").animate({ opacity: 1 }, 150);
                                                            });
            $(".product-nav dd a").removeClass("active");
            $(this).addClass("active");
            
            
            refine(this.href, true);
            if (e.preventDefault) { e.preventDefault(); }
        });
        
        $('div.search-footer h4 + a').unbind('click.refine').bind('click.refine', function(e) {
            $(this).text('loading products..')
            refine(this.href, false);
            if (e.preventDefault) { e.preventDefault(); }
            //kk.add hash, so it can have the history (hit Back button)
            location.hash = 'showall';
        });
        
        $('#refineByBrand').change(function(e) {
            var url = "" + window.location;
            var selectedBrand = $(dropdownId).children()[$(dropdownId).get(0).selectedIndex].value;
            if (brand != "")
            {
                url = url.split(brand).join(selectedBrand);
            }
            else
            {
                if (url.split("/search/").length > 1)
                {
                    url = url + "&brand=" + selectedBrand;
                }
                else
                {
                    url = url.split("?");
                    if (url.length > 1)
                        url = url.join(selectedBrand + "/?");
                    else
                        url = url + selectedBrand + "/";
                }
            }
            window.location = url;
            if (e.preventDefault) { e.preventDefault(); }
        });
    }
     
    
    var init = function()
    {
        //$(buttonId).remove();
        setupEvents();
        
        //KK.check if the hash is showAll.. then we need to refine the search
        if (location.hash == "#showall")
        {   
            refine('?showall=1', false);
        }
    }();
    
    return {};
}

mecca.BrandProducts = function(options) {
    var defaults = {
        brand: ''
    }

    var options = $.extend(defaults, options);
    var brand = options.brand;

    var updateProducts = function(aTag) {
        $("dl.product-nav + ul.products").before("<img src='/img/nav/ajax-loader.gif' id='spinner' style='position:absolute; z-index:9999;display:none' />");

        $('dl.product-nav dd a').removeClass('active');
        $(aTag).addClass('active');

        $('ul.products li.product').animate({ opacity: 0 }, 150);
        $('ul.products + div.button').animate({ opacity: 0 }, 200);
        setTimeout(function() { $('#spinner').css("display", "block") }, 150);

        var view = aTag.href.split('view=')[1];
        var param = "brandId=" + brand + "&view=" + view;
        $.ajax({
            type: "POST",
            url: "/brands/brandProductsAjax.aspx",
            data: param,
            aTag: aTag,
            success: function(text) {
                var div = $(text);
                $('#spinner').animate({ opacity: 0 }, 200, function() {
                    $('#spinner').remove();
                    
                    $('ul.products').html(div.find('ul.products').html());
                    mecca.setupProductRows(3);
                    $('ul.products + div.button').html(div.find('div.button').html());
                    $('ul.products + div.button').animate({ opacity: 1 }, 200);

                    $('ul.products li.product').animate({ opacity: 1 }, 200);
                    
                    mecca.ShoppingCart().setupAddButtons();
                });
            }
        });
    }

    var init = function() {
        $('dl.product-nav dd').not('.nav-all').find('a').unbind('click.view').bind('click.view', function(e) {
            updateProducts(this);
            if (e.preventDefault) { e.preventDefault(); }
        });
    } ();

    return {};
}

//mecca.PerfectPartners = function(options)
//{
//    var defaults = {
//    };
//    var options = $.extend(defaults, options);
//    
//    
//    var init = function() {
//        $('ul.product-suggestions li.individual ul li').not('.button')
//            .css('cursor', 'pointer')
//            .unbind('click.perfectpartners')
//            .bind('click.perfectpartners', function(e) {
//                window.location = $(this).siblings('.info').find('a').attr('href');
//                if (e.preventDefault) { e.preventDefault(); }
//            });
//    }();
//}

mecca.ProductImages = function(options)
{
    var defaults = {
    };
    var options = $.extend(defaults, options);
    
    
    var init = function() {
        $('div.variation-images ul li').not('.hero')
            .css('cursor', 'pointer')
            .unbind('click.imageswap')
            .bind('click.imageswap', function(e) {
                var elem = $(this);
                if (!elem.hasClass('currentImage'))
                {
                    var hero = elem.siblings('.hero');
                    hero.find('img').animate({opacity:0}, 200, function() {
                        $(this).attr('src', elem.find('img').attr('src').replace('/variant/', '/hero/'));
                        $(this).animate({opacity:1}, 200, function() { $(this).css('filter', ''); });
                        elem.siblings().not('.hero').css({opacity: 1, filter: '', cursor: 'pointer'}).removeClass('currentImage');
                        elem.css({opacity: 0.33, cursor: 'default'}).addClass('currentImage');
                    });
                }
                if (e.preventDefault) { e.preventDefault(); }
            })
            .filter('.currentImage').css({opacity: 0.33, cursor: 'default'});
            
        $('div.variation-images ul li img').each(function() {
            img = new Image();
            img.src = $(this).attr('src').replace('/variant/', '/hero/');
        });
    }();
}

mecca.setupProductRows = function(itemsPerRow){
    var rows = $('li.product');
    var numRows = Math.ceil(rows.length / itemsPerRow);
    var numOnLastRow = rows.length % itemsPerRow == 0 ? itemsPerRow : rows.length % itemsPerRow;
    for (var i = 0; i < numRows; i++)
    {
       var x = i*itemsPerRow;
       rows.slice(x, x+itemsPerRow).equalizeCols();
    }
    rows.slice(-numOnLastRow).addClass('last-row');
}

$(document).ready(function() {
    $(".brand-promo ul li").equalizeCols();
});