﻿function ShowPopup(popup, obj) {
    if (obj != null) {
        var offset = $j(obj).offset();
        $j(popup).css('top', (offset.top + 18));
        $j(popup).css('left', offset.left);
    }
    $j(popup).css('display', 'block');
}

function HidePopup(popup, obj) {
    $j(popup).css('display', 'none');
}

var shopData = {
    currentTemplate: 0,
    templates: [],
    sortMode: 0,
    classes: ['big_l', 'med_l', 'med_l2', 'med_l3'],
    data: [],
    newData: [],
    isLoading: false,
    isAllLoaded: false,
    getItem: function(product) {
        var result = this.templates[this.currentTemplate];
        for (var key in product) {
            var regExp = new RegExp(key, "g");
            result = result.replace(regExp, product[key]);
        }
        return result;
    },
    fillContent: function() {
        this.setShowMode();
        this.setSortMode();

        $j('#shopContainer').empty();
        $('shopContainer').className = this.classes[this.currentTemplate];
        for (var index = 0; index < this.data.length; index++) {
            $j('#shopContainer').append(this.getItem(this.data[index]));
        }
    },
    appendContent: function() {
        this.setShowMode();
        this.setSortMode();

        shopData.data = $j.merge(this.data, this.newData);
        $('shopContainer').className = this.classes[this.currentTemplate];
        for (var index = 0; index < this.newData.length; index++) {
            $j('#shopContainer').append(this.getItem(this.newData[index]));
        }
    },
    //showMode
    changeShowMode: function(me, templateIndex) {
        base.showLoader = false;
        PageMethods.SetCurrentShowMode(_subcatId, templateIndex, location.hash, function(result) { base.showLoader = true; window.location.hash = result; });
        shopData.currentTemplate = templateIndex;
        shopData.fillContent();
    },
    setShowMode: function(templateIndex) {
        if (templateIndex)
            shopData.currentTemplate = templateIndex;
        $j('#showModeContainer img.cur').removeClass("cur");
        $j('#showMode' + shopData.currentTemplate).addClass("cur");
    },
    //sortMode
    changeSortMode: function(me, sortMode) {
        if (me.className == 'curr')
            return;
        shopData.sortMode = sortMode;
        _pageNo = 0;
        PageMethods.SetCurrentSortMode(_subcatId, sortMode, location.hash, shopFilter.onReceiveResult, OnServiceError, { append: false });
    },
    setSortMode: function(sortMode) {
        if (sortMode)
            shopData.sortMode = sortMode;
        $j('#sortModeContainer a.curr').removeClass("curr");
        $j('#sortMode' + shopData.sortMode).addClass("curr");
    }
}
var shopFilter = {
    enabled: true,
    initialize: function () {
        PageMethods.GetFilterResultByHash(_subcatId, _pageNo, location.hash, this.onReceiveResult, OnServiceError, { append: true, evalScript: true });
    },
    onReceiveResult: function (result, userContext, methodName) {
        eval("var shopFilterResult = " + result);
        $j('#productCount').html(shopFilterResult.ItemCountText);
        window.location.hash = shopFilterResult.LocationHash;
        if (userContext.evalScript)
            eval(shopFilterResult.EvalScript);
        if (userContext.append) {
            shopData.newData = shopFilterResult.ShopData;
            shopData.appendContent();
        }
        else {
            shopData.data = shopFilterResult.ShopData;
            shopData.fillContent();
        }
        shopFilter.setRemainging(shopFilterResult.RowCount);
        shopData.isLoading = false;
    },
    setRemainging: function (rowCount) {
        var passed = (_pageNo + 1) * _pageSize;
        if (passed >= rowCount) {
            $j('#loadRestDiv').css('display', 'none');
            shopData.isAllLoaded = true;
        }
        else {
            $j('#loadRestDiv').css('display', 'inline');
            var remains = rowCount - passed;
            var nextX = remains > _pageSize ? _pageSize : remains;
            $j('#loadRestDiv').html('Load next ' + nextX + ' of ' + remains + ' remaining results...');
            shopData.isAllLoaded = false;
        }
    },
    filtersCount: 0,
    filters: new Array(),
    currentCategory: "",
    oldClassName: "",
    checkItem: function (me) {
        this.setCurrent(me);

        var str = "";
        var cutNum = 0;
        var filters = $j("#shopFilter").find(".cur");
        var lenght = filters.length;

        if (lenght <= 1 && this.oldClassName != "") {
            $j("#ctl00_Top1_divCros2").attr('class', this.oldClassName);
        }

        if (lenght > 1) {
            if(this.oldClassName == "")
                this.oldClassName = $j("#ctl00_Top1_divCros2").attr('class');
            $j("#ctl00_Top1_divCros2").attr('class', 'cros2 cr4');
        }

        if (lenght == 0)
            str = "<b class=\"b2\">" + this.currentCategory + " <u>(" + this.currentCategoryCount + ")</u></b>";
        else {
            var fc = (lenght + 2) > 5 ? 5 : (lenght + 2);
            str = "<b class=\"b" + fc + "\"><a href=\"javascript:shopFilter.unCheckItem(-1)\">" + this.currentCategory + "</a><b><i>&nbsp;&nbsp;/&nbsp;&nbsp;</i>";
        }

        for (var i = 0; i < filters.length; i++) {
            if (i < filters.length - 1 && i < 4)
                str += "<a href=\"javascript:shopFilter.unCheckItem('" + filters[i].id + "')\">" + filters[i].innerHTML + "</a><b><i>&nbsp;&nbsp;/&nbsp;&nbsp;</i>";
            else
                str += filters[i].innerHTML;
            if (i == 4)
                break;
        }



        $j("#filterPath").html(str);
        this.getFilteredData();
    },
    parseHash: function (q) {
        var kvp = (q.length > 1) ? q.substring(1, q.length).split(';') : new Array();

        for (var i = 0; i < kvp.length; i++) {
            kvp[i] = kvp[i].split("=");
        }
        var ret = {};
        for (var j in kvp)
            ret[kvp[j][0]] = kvp[j][1];

        return ret;
    },
    unCheckItem: function (rid) {

        var filters = $j("#shopFilter").find(".cur");

        var flagToDelete = false;
        for (var i = 0; i < filters.length; i++) {
            if (flagToDelete)
                $j(filters[i]).click();
            if (filters[i].id == rid)
                flagToDelete = true;
        }

        if (rid == -1)
            $j("#shopFilter").find(".cur").click();
    },
    setCurrent: function (me) {
        $j("a.cur", $j(me).parent()).each(function () { if (me != this) $j(this).removeClass("cur"); });
        $j(me).attr("class", $j(me).hasClass("cur") ? "" : "cur");
    },
    getFilteredData: function () {
        if (!this.enabled)
            return;

        _pageNo = 0;
        var priceIds = '';
        $j('#priceRanges [rid].cur').each(function () { priceIds += (priceIds != '' ? ',' : '') + $j(this).attr('rid'); });
        var bitIds = '';
        $j('#shopFilter [bid].cur').each(function () { bitIds += (bitIds != '' ? ',' : '') + $j(this).attr('bid'); });

        //todo: optimize, [listIds|rangeIds]=fid1:lid1,lid2;fid2:lid3,lid4
        var listIds = '';
        $j('#shopFilter [fid] [lid].cur').each(function () { listIds += (listIds != '' ? ',' : '') + $j(this).parent().attr('fid') + 'x' + $j(this).attr('lid'); });

        var rangeIds = '';
        $j('#shopFilter [fid] [rid].cur').each(function () { rangeIds += (rangeIds != '' ? ',' : '') + $j(this).parent().attr('fid') + 'x' + $j(this).attr('rid'); });

        PageMethods.GetFilterResult(_subcatId, priceIds, listIds, rangeIds, bitIds, this.onReceiveResult, OnServiceError, { append: false });
    }
}
var shop = {
    mainContent: null,
    changeContent: function(me, contentId) {
        if ($j(me).css('color').toLowerCase() == 'black')
            return;
        $j('#ctl00_Top1_contentContainer a').each(function () { $j(this).css('color', ''); });
        $j(me).css('color', 'black');
        if (contentId) {
            if (!this.mainContent)
                this.mainContent = $j('#mainShopContainer').html();
            ShopService.GetPageContent(
                contentId,
                function(result, userContext, methodName) {
                    $j('#mainShopContainer').html(result);
                },
                OnServiceError);
        }
        else {
            $j('#mainShopContainer').html(this.mainContent);
        }
    },
    showNextPart: function() {
        var dheight = $j(document).height();
        var wheight = $j(window).height();
        var scrollTop = $j(window).scrollTop();
        if (dheight - (scrollTop + wheight) < 250 && !shopData.isLoading && !shopData.isAllLoaded) {
            shopData.isLoading = true;
            _pageNo = _pageNo + 1;
            PageMethods.GetFilterResultByHash(_subcatId, _pageNo, location.hash, shopFilter.onReceiveResult, OnServiceError, { append: true });
        }
    },
    credit: {
        calcModel: 2,
        durations: [10, 20, 30],
        rates: [16.65, 17.65, 18.65],
        cPercent: 3.25,
        clPercent: 0.7,
        cMin: 20,
        clMin: 5,
        getUsdPerMonth: function(sumUsd) {
            var c = ((sumUsd * this.cPercent) / 100 < this.cMin) ? this.cMin : (sumUsd * this.cPercent) / 100;
            var cl = ((sumUsd * this.clPercent) / 100 < this.clMin) ? this.clMin : (sumUsd * this.clPercent) / 100;
            var yearRate = this.rates[this.calcModel] / 1200;
            sumUsd = sumUsd + c;
            var rate = sumUsd * yearRate / (1 - (Math.pow(1 / (1 + yearRate), this.durations[this.calcModel])));
            rate = rate + cl;
            return Math.round(rate);
        }
    }
}