jQuery(document).ready(function(){
    init();
});

function init() {
    initCurrentOptionMenu();
    initSelectionCategory();
    initChangeCollectionCategory();
    initCollectionSearchPanel();
    initCatalogSearch();
    initCatalogList();
    initBrands();
    initSearchString();
    initDoFormWindow();
    initSellingPoints();
}

function initCurrentOptionMenu() {
    var url = ""+location;
    var uriExp = /^http:\/\/[^\/]+\/([^\?#]*).*$/gi;
    var matches = uriExp.exec(url);
    if(matches.length == 2) {
        var uri = "/" + matches[1];
        $("#site-menu li a.link").each(function(){
            var href = $(this).attr("href");
            if(uri=="/" && href=="/" || href!="/" && uri.indexOf(href) == 0) {
                $(this).parent("li").addClass("current");
            }
        });
    }
}

function initSelectionCategory() {
    var stripMenu = $("#stripMenu");
    var category = $("#catCategory");
    var currentColor = $("a[collection-category][uid="+category.val()+"]").attr("collection-category");
    function strip(color) {
        var bgPos =   color == "blue"  ? "0px -11px"
                    : color == "green" ? "0px -22px"
                    : color == "red"   ? "0px -33px"
                    : "0px 0px";
        stripMenu.css("background-position", bgPos);
    }

    $("a[select-category]").mouseover(function(){
        strip($(this).attr("select-category"));
    }).mouseout(function(){
        strip(currentColor);
    });
    strip(currentColor);
}

function initChangeCollectionCategory() {
    $("[collection-category]").click(function(){
        var link = $(this).attr("href");
        var category_uid = uid($(this));
        if(category_uid) {
            var category = $("#catCategory");
            sendRequest(category.attr("update")+category_uid, [], function(data){
                location = link;
            });
        }
    });
}

function initCollectionSearchPanel() {
    function setVisible(current, other) {
        current.addClass("current-left-option");
        other.removeClass("current-left-option");
    }
    function change(current) {
        current.css({"background-image":"url(/images/cat-arrow.png)","color":"white"});
        var isCatalog = current.attr("id") == "catalog";
        var other = $("#"+(isCatalog?"more-search":"catalog"));
        other.css({"background-image":"none","color":"#e0e0e0"});
        setVisible(current, other);
    }
    if($.cookie("search-panel") == "more-search") {
        change($("#more-search"));
    } else {
        setVisible($("#catalog"), $("#more-search"));
    }
    $("a[link-search-block]").click(function(){
        var isCatalog = $(this).attr("id") == "catalog";
        change($("#"+(isCatalog?"catalog":"more-search")));
        $.cookie("search-panel", isCatalog?"catalog":"more-search");
        var catalog = $("#full-search");
        var more = $("#full-search-2");
        if(isCatalog) {
            more.fadeOut("fast", function(){
                catalog.fadeIn("fast");
            });
        } else {
            catalog.fadeOut("fast", function(){
                more.fadeIn("fast");
            });
        }
    });
}

function initCatalogSearch() {
    initCatalogCatSearch();
    initCatalogExtSearch();
}

function initCatalogCatSearch() {
    function eventCatalogSearch(el) {
        var isOn = !enable(el);
        enable(el, isOn);
        var parent = el.parent("li");
        var level = el.attr("level");
        var subBlock = el.next("div");
        if(isOn) {
            parent.addClass("sel-"+level);
            subBlock.slideDown("fast");
        } else {
            parent.removeClass("sel-"+level);
            subBlock.slideUp("fast");
        }
        return isOn;
    }

    $(".cat-search-mak-block").each(function(){
        var support_equipment = eval("("+$(this).attr("support_equipment")+")");
        $(".cat-search-cat",$(this)).each(function(){
            var equipment = parseInt($(this).attr("equipment"));
            var i = 0;
            for(; i<support_equipment.length; i++) {
                if(equipment == support_equipment[i]) break;
            }
            if(i == support_equipment.length){
                $($(this).parents("ul")[0]).hide();
            }
        });
    });

    $(".cat-search-mak").click(function(){
        if(eventCatalogSearch($(this))) {
            var maker_uid = uid($(this).parents(".cat-search-mak-block"));
            setBrandCatalog(maker_uid);
        }
    });

    $(".cat-search-cat").click(function(){
        var sub_block = $(this).next("div");

        var subCats = 0, visibleSubCats = 0;
        $("ul[cat]", sub_block).each(function(){
            subCats ++;
            if($(this).css("display") != "none") {
                visibleSubCats ++;
            }
        });
        if(subCats != 0 && visibleSubCats == 0){
            sub_block.html("<ul></ul>");
        }

        var isOn = true;
        var equipment_id = $(this).attr("equipment");
        if(sub_block.html()!="<ul></ul>" || $(this).attr("filled") == "1") {
            isOn = eventCatalogSearch($(this));
        } else {
            downloadProducts($(this), equipment_id, false);
        }

        if(isOn) {
            var category_id = $("#catCategory").val();
            var maker_uid = uid($(this).parents(".cat-search-mak-block"));
            loadViewProductsFromCatalog(category_id, maker_uid, equipment_id, "0", "0");
        }
    });

    $(".cat-search-val").click(function(){
        if($(this).attr("filled") == "1") {
            eventCatalogSearch($(this));
        } else {
            var category_id = $("#catCategory").val();
            var maker_uid = uid($(this).parents(".cat-search-mak-block"));
            var equipment_id = $($(this).parents(".cat-search-sub")[0]).prev(".cat-search-cat").attr("equipment");
            var filter_group_id = $(this).attr("group");
            var filter_id = $(this).attr("filter");
            var this_el = $(this);
            loadProductFromCatalog($(this), category_id, maker_uid, equipment_id, filter_group_id, filter_id, function(){
                clickProductLink($("a", this_el.next("div")));
                eventCatalogSearch(this_el);
                this_el.attr("filled", "1");
            });
        }
    });

    function downloadProducts(el, equipment_id, useFilter) {
        var category_id = $("#catCategory").val();
        var maker_uid = uid(el.parents(".cat-search-mak-block"));
        var filter_group_id = useFilter ? el.attr("group") : "0";
        var filter_id = useFilter ? el.attr("filter") : "0";
        loadProductFromCatalog(el, category_id, maker_uid, equipment_id, filter_group_id, filter_id, function(){
            clickProductLink($("a", el.next("div")));
            eventCatalogSearch(el);
            el.attr("filled", "1");
        });
    }

    function clickProductLink(productLink) {
        productLink.click(function(){
            var url = $("#getProductWithListUrl").val() + $(this).attr("uid");
            sendRequest(url, [], function(data){
                $("#stripMenu").show();
                $(".product-hide").hide();
                var brands = $("#brands-div");
                brands.attr("style", brands.attr("product_style"));
                var content = $("#content-area");
                content.html(data);
                setProductType($(".res-type", content));
                setProductLinks();
                content.show();
                setCurrentMenuOption("menu-collection");
                resizeImage($(".product_img"));
                //alert(data);
            });
        });
    }
}

function loadViewProductsFromCatalog(category, maker, equipment, filter, filterValue) {
    var url = jQuery("#getViewProductsByFilterUrl").val()+"/"+category+"/"+maker+"/"+equipment+"/"+filter+"/"+filterValue;
    sendRequest(url, [], function(data){
        updateCatalogContent(data);
    });
}

function initCatalogExtSearch() {

    function downloadProducts() {
        var params = (function createParams() {
            var makers = [];
            var equipments ={};
            var params = {makers:makers,equipments:equipments};
            getEnableElements("#full-search-2").each(function(){
                var el = $(this);
                var elClass = el.attr("class");
                if(elClass == "ext-search-mak") {
                    makers[makers.length] = uid(el);
                } else if(elClass == "ext-search-cat") {
                    var equipment = el.attr("equipment");
                    var parent = el.attr("parent");
                    if(parent != "") {
                        equipments[parent] = null;
                    }
                    equipments[equipment] = {};
                } else if(elClass == "ext-search-val") {
                    var equipment = el.attr("equipment");
                    equipments[equipment][el.attr("group")] = el.attr("filter");
                }
            });
            return params;
        })();

        if(params["makers"].length == 0) {
            updateCatalogContent("");
        } else {
            var json = $.toJSON(params);
            var category_id = $("#catCategory").val();
            var url = $("#getProductsByExtFilterUrl").val() + category_id + "/" + json;
            sendRequest(url, [], function(data){
                updateCatalogContent(data);
            });
        }
    }

    function hideNotSupportedEquipment(){
        var notSupported = [];
        $("[support_equipment]").each(function(){
            var support_equipment = eval("("+$(this).attr("support_equipment")+")");
            for(var i = 0; i<support_equipment.length; i++) {
                var curEquipment = support_equipment[i];
                var j = 0;
                for(; j<notSupported.length; j++) {
                    if(notSupported[j] == curEquipment) break;
                }
                if(j == notSupported.length) {
                    notSupported[notSupported.length] = curEquipment;
                }
            }
        });
        $(".ext-search-cat").each(function(){
            var curEquipment = parseInt($(this).attr("equipment"));
            var i = 0;
            for(; i<notSupported.length; i++) {
                if(notSupported[i] == curEquipment) break;
            }
            if(i == notSupported.length) {
                $(this).parent("li").hide();
            }
        });
        $(".ext-search-cat").each(function(){
            var sub_cats = 0, visible_sub_cats = 0;
            var rootBlock = $(this).parent("li");
            var subBlock = rootBlock.children(".gray-bg");
            subBlock.find(".ext-search-cat").each(function(){
                sub_cats ++;
                if($(this).parent("li").css("display") != "none") {
                    visible_sub_cats ++;
                }
            });
            if(sub_cats != 0 && visible_sub_cats == 0) {
                subBlock.html("");
                //rootBlock.remove(subBlock);
            }
        });
    }
    hideNotSupportedEquipment();
    showActionBanner();

    $(".ext-search-mak").click(function(){
        var isOn = !enable($(this));
        enable($(this), isOn);
        $(this).children("img").attr("src", "/images/checkbox"+(isOn?"-on":"")+".png");
        downloadProducts();
    });

    function eventCategoryExtSearchEvent(el, isOn, animate) {
        enable(el, isOn);
        el.children("img").attr("src", "/images/checkbox"+(isOn?"-on":"")+".png");
        var subBlock = el.parent("li").children(".gray-bg");
        if(subBlock.html() != "") {
            if(isOn) {
                if(animate) {
                    subBlock.slideDown("fast");
                }
            } else {
                if(animate) {
                    subBlock.find(".ext-search-cat").each(function(){
                        eventCategoryExtSearchEvent($(this), false, false);
                    });
                    resetValuesExtSearch(subBlock);
                    subBlock.slideUp("fast");
                } else {
                    subBlock.hide();
                }
            }
        }
    }
    $(".ext-search-cat").click(function(){
        eventCategoryExtSearchEvent($(this), !enable($(this)), true);
        downloadProducts();
    });

    function resetValuesExtSearch(parent) {
        parent.find(".ext-search-val").each(function(){
            eventValueExtSearchEvent($(this), false, false);
        });
    }

    function eventValueExtSearchEvent(el, isOn, changeGroup) {
        if(changeGroup) {
            var group = el.attr("group");
            el.parent().parent().find(".ext-search-val").each(function(){
                $(this).children("img").attr("src", "/images/radio.png");
                enable($(this), false);
            });
        }
        el.children("img").attr("src", "/images/radio"+(isOn?"-on":"")+".png");
        enable(el, isOn);
    }

    $(".ext-search-val").click(function(){
        if(!enable($(this))) {
            eventValueExtSearchEvent($(this), true, true);
        }
        downloadProducts();
    });
}

function setCurrentMenuOption(optionId) {
    $("#site-menu li").removeClass("current");
    $("#"+optionId).addClass("current");
}

function updateProductsFields() {
    var content = $("#content-area");
    var categories = $(".choose-cat");
    $(".res-category", content).each(function(){
        $(this).text($("a[uid='"+$(this).text()+"']", categories).text());
    });
    setProductType($(".res-type", content));
    $(".res-maker", content).each(function(){
        $(this).text($(".ext-search-mak[uid='"+$(this).text()+"']").text().substring(1));
    });
    $("ul[prizes]", content).each(function(){
        var prizes = eval("("+$(this).attr("prizes")+")");
        var all_prizes = $("#prizes-block");
        for(var i=0; i<prizes.length; i++) {
            $("[uid='"+prizes[i]+"']", all_prizes).clone().appendTo($(this));
        }
    });
}

function setProductType(productTypeEl) {
    productTypeEl.each(function(){
        var type = "";
        var cat = $(".ext-search-cat[equipment='"+$(this).text()+"']");
        var parentId = cat.attr("parent");
        if(parentId != "") {
            type += $(".ext-search-cat[equipment='"+parentId+"'] .ext-cat-name").text() + " > ";
        }
        type += $(".ext-cat-name", cat).text();
        $(this).text(type);
    });
}

function clickProductLinkFromCatalog() {
    $(".product-link").click(function(){
        var url = $("#getProductUrl").val() + $(this).attr("uid");
        sendRequest(url, [], function(data){
            $(".full-item").html(data);
            setProductType($(".full-item .res-type"));
            $("#product-view-name").html($("#product-view-name-content").html());
            setProductLinks();
            resizeImage($(".product_img"));
        });
    });
}

function setProductLinks() {
    var name_block = $("#product-view-name");
    var body_block = $(".full-item");
    setProductQuestionLink(name_block, body_block);
    setProductPrintLink(name_block, body_block);
}

function setProductQuestionLink(name_block, body_block) {
    $(".question", body_block).click(function(){
        var productName = $(".prod_name", name_block).text();
        doFormWindow("«"+productName+"» - ", "["+productName+"]:\n");
    });
}

function setProductPrintLink(name_block, body_block) {
    $(".print", body_block).click(function(){
        window.getPrintProductNameBlock = function() {
            return name_block.html();
        };
        window.getPrintProductBodyBlock = function() {
            return body_block.html();
        };
        var print_window = window.open("/print/page", "Print", "width=470,height=400,menubar=no,resizable=yes,scrollbars=yes");

        //print_window.document.getElementById("name_block").innerHTML = name_block.html();
        //print_window.document.getElementById("body_block").innerHTML = body_block.html();
        //print_window.setPrintContent("12", "23");
        //window.print();

    });
}

function initCatalogList() {
    updateProductsFields();
    clickProductLinkFromCatalog();
}

function initBrands() {
    var brandsBlock = $("#brands-block");
    var brands = $("td.brand-cell", brandsBlock);
    var allBrands = 0;
    brands.each(function(){allBrands++;});
    var curIndex = 0;
    function change(direct) {
        var index = 0;
        curIndex = direct == -1 && curIndex > 0 ? curIndex-1 : direct == 1 && curIndex < allBrands-6 ? curIndex+1 : curIndex;
        brands.each(function(){
            var d = index - curIndex;
            $(this).css("display", d>=0 && d<6 ? "" : "none");
            index ++;
        });
    }
    change(0);
    brandsBlock.show();
    $(".to-left", brandsBlock).click(function(){change(-1);});
    $(".to-right", brandsBlock).click(function(){change(1);});

    function downloadProducts(maker) {
        var params = {makers:[maker],equipments:{}};
        var json = $.toJSON(params);
        var category_id = $("#catCategory").val();
        var url = $("#getProductsByExtFilterUrl").val() + category_id + "/" + json;
        sendRequest(url, [], function(data){
            updateCatalogContent(data);
            showActionBanner();
        });
    }

    $("[uid]", brandsBlock).click(function(){
        downloadProducts(uid($(this)));
    });
}

function setBrandCatalog(maker_uid) {
    $("[uid='"+maker_uid+"']", $("#brands-block")).trigger("click");
}

function initSearchString() {

    function downloadProducts(searchString) {
        var category_id = $("#catCategory").val();
        var url = $("#getProductsBySearchStringUrl").val() + category_id + "/" + searchString;
        sendRequest(url, [], function(data){
            updateCatalogContent(data);
            showActionBanner();
        });
    }

    var searchInput = $("#search_string");
    function doSearch() {
        var str = searchInput.val();
        if(str.length ==0) {
            alert("Введите поисковую фразу");
        } else {
            downloadProducts(str);
        }
    }
    
    searchInput.keyup(function(event){
        if (event.keyCode == '13') {
            event.preventDefault();
            doSearch();
       }
    });
    $(".search-button").click(doSearch);
}

function updateCatalogContent(data) {
    $("#stripMenu").show();
    $(".product-hide").hide();
    var brands = $("#brands-div");
    brands.attr("style", brands.attr("product_style"));
    var content = $("#content-area");
    content.html(data);
    setCurrentMenuOption("menu-collection");
    updateProductsFields();
    clickProductLinkFromCatalog();
    showActionBanner();
    content.show();
}

function initDoFormWindow() {
    var popup_window = $("#popup-window");
    $(".do-form").click(function(){
        popup_window.fadeIn("fast");
    });
    var popup_window_close = $("#popup-window-close");
    popup_window_close.click(function(){
        popup_window.fadeOut("fast");
        $("[uid='title'],[uid='question']", popup_window).val("");
    });
    $("#qa-form-send").click(function(){
        var params = createParamsObject();
        var error = "";
        $("input,textarea", popup_window).each(function(){
            var val = $(this).val();
            if(val == "") error += "\n" + $(this).attr("label_text");
            putParamToParamsObject(params, $(this).attr("name"), val);
        });
        if(error == "") {
            var url = $(this).attr("link");
            sendRequest(url, params, function(data){
                alert("Ваше сообщение отправлено.");
                popup_window_close.trigger("click");
            });
        } else {
            alert("Ошибка - не заполнены обязательные поля:\n" + error);
        }
    });
}

function doFormWindow(title,  question){
    var popup_window = $("#popup-window");
    $("[uid='title']", popup_window).val(title);
    $("[uid='question']", popup_window).val(question);
    $(".do-form").trigger("click");
}

function showActionBanner() {
    $(".full-item").html($("#action-banner").html());
}

function initSellingPoints() {
    $(".town-list .city").each(function(){
        var pointsBlock = $(this).next(".points");
        if(pointsBlock.html() == "") {
            $(this).parent(".city-box").hide();
        } else {
            $(this).click(function(){
                var isOn = enable($(this));
                enable($(this), !isOn);
                if(!isOn) {
                    pointsBlock.slideDown("fast");
                } else {
                    pointsBlock.slideUp("fast");
                }
            });
        }
    });

    $(".town-list .points .selected").parent(".points").each(function(){
        var city = $(this).prev(".city");
        enable(city, true);
        $("#current-city-view").text(city.text());
        $(this).show();
        $(this).parent(".city-box").addClass("selected");
    });
}

function uid(el) {
    return el.attr("uid"); 
}

function enable(el, val) {
    if(val != undefined) {
        el.attr("enable", val?"1":"0");
    }
    return el.attr("enable") == "1";
}

function getEnableElements(parent) {
    return $("[enable='1']", parent);
}

function loadProductFromCatalog(el, category, maker, equipment, filter, filterValue, successCallback) {
    var url = jQuery("#getProductsByFilterUrl").val()+"/"+category+"/"+maker+"/"+equipment+"/"+filter+"/"+filterValue;
    sendRequest(url, [], function(data){
        var products = eval(data);
        if(products[0] != 0) {
            var block = "";
            for(var i=1; i<products.length; i++) {
                //block += "<li><a href='#"+products[i][1]+"' uid='"+products[i][2]+"'>"+products[i][0]+"</a></li>";
                block += "<li class='eq'><a href='javascript:void(0)' uid='"+products[i][2]+"'>"+products[i][0]+"</a></li>";
            }
            el.next(".cat-search-sub").html("<ul>"+block+"</ul>");
        }
        successCallback();
    });
}

function resizeImage(imageEl) {
    var bigImageBlock = $("#product-image-big");
    bigImageBlock.hide();
    var offset = imageEl.offset();
    function setOffset() {
        bigImageBlock.offset({top:offset.top-5, left:offset.left-300});
    }
    setOffset();
    var bigImage = $("img", bigImageBlock);
    bigImage.attr("src", imageEl.attr("big"));
    if(!enable(bigImage)) {
        bigImage.mouseout(function(){
            bigImageBlock.fadeOut("normal");
            enable(bigImage, true);
        });
    }
    imageEl.click(function(){
        bigImageBlock.fadeIn("fast");
        setOffset();
    });
}

function createParamsObject(){return {};}
function putParamToParamsObject(paramsObject, key, value){paramsObject[key] = value;}
function sendRequest(url, paramsObject, successCallback){
    jQuery.post("/"+url, paramsObject, function(data){
        if(successCallback) {
            successCallback(data);
        }
    });
}






