﻿
    var selectedTab = null;
    var recentSelectedTabIndex = 0;
    var SelectedTabId = null;
    var currentBreedName = '';
    var currentLocation = '';
    var currentAge = 0;
    var currentGender = 0;
    var dataMap = null;
    var selectedCategoryName = '';

    function PopulateByCategory(breedName, category) {
        Populate(breedName, 0, 0, '','', category);
    }

    function Populate(breedName, age, gender, location, email,category) {
        if (!isHomePage()) {
            $('#main_content').hide();
            $('#search_content').css('float', 'none');
        }

        selectedTab = null;
        recentSelectedTabIndex = 0;

        currentBreedName = breedName;
        currentAge = age;
        currentGender = gender;
        currentLocation = location;

        HideResultArea(breedName, category);
        var result = WSProxy.SearchMatch(breedName, age, gender, location,category, resultCallback, searchMatchFailurCallback);

        if (typeof OnSearch == 'function') {
            OnSearch();
        }
    }

    
   
    function resultCallback(result) {

        if (result.QueryResult.length == 0) {

            $('#resultstatus').html("<h2 class='bold'><p>We apologize, but currently we don't have any matching product for <b><u>{0}</u></b>. Please check with us later (we update our products every day!).</p></h2>".format(currentBreedName));
            return;
        }
        $('ul#productCategories').empty();
        
        SelectedTabId = result.TabId.replace(' ', '-');
        dataMap = result.DataMap;
        var arr = $(result.QueryResult).map(function (i) { return result.QueryResult[i].rootCategory; }).get();
        var title = arr.slice(0, 4).join(", ") + ' for ' + currentBreedName;
        var kwd = arr.join(", ") + ' for ' + currentBreedName;
        document.title = title;
        $('meta[name=keywords]').attr('content', kwd);

        var firstUrl = null;

        for (var i = 0; i < result.QueryResult.length; i++) {

            var isCurrentTab = false;
            var element = result.QueryResult[i];

            // set the user selected tab before the post back
            if (SelectedTabId.replace('-', ' ').toLowerCase() == element.rootCategory.toLowerCase()) {
                recentSelectedTabIndex = i;
                selectedCategoryName = element.rootCategory;
                isCurrentTab = true;
            }

            var tabId = "tabs-" + element.rootCategory;
            tabId = tabId.replace(' ', '-');
            var url = '/{0}/products/{1}/{2}.aspx?age={3}&gender={4}&location={5}'.format(result.PetCategory, currentBreedName, element.rootCategory,currentAge, currentGender,currentLocation);
            var itemContent = '<li><a {2} href="{0}" name="{1}"</a>{1}</li>'.format(url, element.rootCategory, (isCurrentTab ? 'style="color:yellow"' : ''));

            $('ul#productCategories').append(itemContent);
            var tabheaderTemplate = '<div id="{0}"></div>';
            $('#tabs').append(tabheaderTemplate.format(tabId));
        }

        $("#tabs").tabs({ selected: recentSelectedTabIndex });
        selectedTab = $('#' + tabId);
        
        productsQueryCallback(result.CategoryProducts);
        subcategoriesQueryCallback(result.Subcategories);
    }

    function CheckAllSubCategories() {
        toggleChecked(1);
    }

    function ClearAllSubCategories() {
        toggleChecked(0);
    }

    function toggleChecked(status) {
        $("#tree input").each(function () {
            $(this).attr("checked", status);
            categoryClicked(this);
        });
    }

    function ShowResultArea() {
        $('#processRow').hide();
        $("#resultArea").show();
    }

    function HideResultArea(name,category) {

        $('#resultstatus').html('<span id="statusmessage">Loading {1} for your {0}&nbsp;<img src="/images/progress-bar.gif" border="0" /></span>'.format(name,(category != '' ? category : 'products and services')));
        $('#processRow').show();
        $("#resultArea").hide();
    }

    function searchMatchFailurCallback(error) {
        ShowResultArea();
        $('#tabs').html('We sorry, but we failed to process your query. Please try again.(ERROR:' + error.get_message() + ')');
        
        // hide filters
        $('#treesubcat').hide();
        $('#treeCheckUnCheck').hide();
        $('#tree').hide();

    }

    function showCategoryProducts(category) {
        $('#updateCategory').show();
        selectedTab = $('#' + "tabs-" + category);
        $('#' + "tabs-" + category).empty();
        category = category.replace('-', ' ');
        WSProxy.GetCategoryProducts(category, productsQueryCallback, showProductFailedCallback);
        WSProxy.GetSubCategories(category, subcategoriesQueryCallback, subcategoryQueryFailed);
    }

    function subcategoryQueryFailed(result) {

    }


    function subcategoriesQueryCallback(result) {

        $("#tree ul").empty();
        var template = '<li><div class="rowElem"><input type="checkbox" checked="checked"  value="{0}" onclick="categoryClicked(this)" id="">{1}</div></li>';
        for (var i = 0; i < result.length; i++) {
            var itemTag = template.format(result[i].categoryId, result[i].category);
            $("#tree ul").append(itemTag);
        }

        setDescription(result);
    }

    function setDescription(subcategories) {
        var template = "Buy {0} products designed especially for {1} breed. Find {0} products such as {2} just for {1} breed.";
        var arr = $(subcategories).map(function (i) { return subcategories[i].category; }).get();
        var desc = template.format(selectedCategoryName, currentBreedName, arr.join(", "));
        setPageAttribute('description', desc);
    }

    function categoryClicked(sender) {
        $('#updateCategory').show();
        WSProxy.AddRemoveCategoryToExclusionList(sender.value, sender.checked, categoryClickedresponseCallback);
    }

    function categoryClickedresponseCallback(result) {
        WSProxy.GetCategoryProducts(SelectedTabId.replace('-', ' '), dataMap, productsQueryCallback);
    }

    function categoryClickedProductsQueryCallback(result) {
        productsQueryCallback(result);
    }

    function showProductFailedCallback(error) {
        ShowResultArea();
        $('#tabs').html('We sorry, but we failed to process your query. Please try again.(ERROR:' + error.get_message() + ')');
    }


    function productsQueryCallback(result) {
        var template = '<div id="item"><a href="{1}"><img src="{0}" border="0" alt="{2},{3}"></a><p><a href="{1}">{2}</a></p><span>Price: {3}</span></div>';
        selectedTab.empty();
        for (var i = 0; i < result.length; i++) {
            var element = result[i];
            var productUrl = createVirtualUrl(element.productid, element.name, element.category.replace(' ','-'));
            var xPrice = (element.price > 0 ? '$' + element.price : "<a href={0}>Click for more</a>".format(productUrl));
            var itemDesc = template.format(element.image, productUrl, element.name, xPrice);
            selectedTab.append(itemDesc);

        }

        $('#updateCategory').hide();

        ShowResultArea();
    }

    function handleFilterChanged() {
        Populate();
    }

    function isHomePage() {
        if (window.location.pathname.toLowerCase().indexOf('home.aspx') >= 0 || window.location.pathname == "/")
            return true;
        return false;
    }

    function setPageAttribute(attName, val) {
        $('meta[name='+ attName +']').attr('content', val);
    }
