$(function () {
    // подпись у строки поиска
    $("#s").each(function () {

        var container, placeholder;

        function supportsInputPlaceholder() {
            return "placeholder" in document.createElement("input");
        }

        container = $(this).closest("form").bind("submit", function () {
            return $("#s", this).val() !== "";
        });

        placeholder = $(this).siblings("label[for=s]").text();

        if (!supportsInputPlaceholder()) {
            // simple text field
            $(this).bind("focus", function () {
                var ele = $(this), v = ele.val();
                if (v === placeholder) {
                    ele.val("");
                    container.removeClass("empty");
                }
                container.addClass("active");
            }).bind("blur", function () {
                var ele = $(this), v = ele.val();
                if (v === "" || v === placeholder) {
                    ele.val(placeholder);
                    container.addClass("empty");
                }
                container.removeClass("active");
            }).trigger("blur");
        } else {
            $(this).replaceWith('<input id="s" name="s" type="search" results="10" autosave="cmz-alliance-autosave" placeholder="' + placeholder + '" />');
        }
    });


    // добавляем растягивающийся фон у хлебных крошек
    $("#breadcrumbs").each(function () {
        var img = $(this).css("backgroundImage").replace(/url\(['"]?([^'"\\)]+)['"]?\)/, "$1");
        $(this).css("backgroundImage", "none").find("> div").append('<img src="' + img + '" alt="" class="back" />');
    });

    // добавляем автоматически увеличивающееся текстовое поле
    if ($.isFunction($.fn.autoResize)) {
        $("textarea.autoresize").autoResize();
    }

    // разворачиваем новости на главной
    $("#page div.news h2 span").bind("click", function () {
        $(this).closest("div.news").toggleClass("full");
    });

    // визуал на главной
    $("#visual").each(function () {
        var visual = $(this), rx = /visual-(\d)/, pages = [];

        visual.find("div.visual-page").each(function () {
            var page = this.className.match(rx);
            if (page && page.length === 2) {
                pages.push('<div class="' + this.className + '"><span>' + page[1] + '</span></div>');
            }

            var url = $(this).css("backgroundImage");
            url = url.replace(/url\("?([^")]+)"?\)/, "$1");
            $(this).css("backgroundImage", "none");
            $(this).prepend('<img src="' + url + '" alt="" />');
        });

        if (pages.length) {
            visual.prepend('<div id="visual-tabs">' + pages.join('') + '</div>');
        }

        $("#visual-tabs .visual-page").bind("click", function () {
            if ($(this).hasClass("visual-page-active")) {
                return;
            }

            $("#visual div.visual-page-active").removeClass("visual-page-active");
            $("#visual div." + this.className.match(rx)[0]).addClass("visual-page-active");
        });

    });


    (function () {

        function HeadItem(ele, extra) {
            this.cls = ele.attr("class");
            this.text = ele.html();
            this.extra = extra;
        }

        $.extend(HeadItem.prototype, {
            toString: function () {
                return '<span class="' + this.cls + '" data-extra="' + this.extra + '">' + this.text + '</span>';
            }
        });

        $("#page ol.tisers").each(function () {

            var list = $(this),
                head = [],
                rx = /(tiser-\d+)(\s.*)?$/;

            list.children("li").each(function () {

                var cls = this.className.match(rx), span,
                    item = $(this);

                if (cls && cls.length > 1) {
                    cls = cls[1];
                    span = $("h2 > span", this);

                    if (cls !== "tiser-1" && cls !== "tiser-2") {
                        head.push(new HeadItem(span, cls));
                        span.bind("toggleTiser", function () {
                            item.toggleClass("hidden").find("div.tiser-article").toggleClass("full");
                            list.trigger("toggleHead", [cls, !item.hasClass("hidden")]);
                        });
                        $(this).addClass("hidden");
                    } else {
                        span.bind("toggleTiser", function () {
                            item.find("div.tiser-article").toggleClass("full");
                        });
                    }
                }
            });

            if (head.length) {
                var h2 = $("<h2></h2>");

                $.each(head, function () {
                    h2.append(this.toString() + '<em class="delim">, </em>');
                });

                $('<li class="tiser-other"></li>').append(h2).appendTo(list);
            }

            list.find("li.tiser-other").bind("toggleTiser", function (e) {
                var target = $(e.target), cls;
                if (target.is("span") && target.parent().is("h2")) {
                    cls = target.data("extra");
                    list.find("li." + cls + " h2 span").trigger("toggleTiser");
                }
            });

            list.bind("click", function (e) {
                var target = $(e.target);
                if (target.is("span") && target.parent().is("h2")) {
                    target.trigger("toggleTiser");
                }
            }).bind("toggleHead", function (e, cls, state) {
                list.find('li.tiser-other span')
                        .filter('[data-extra="' + cls + '"]').toggleClass("hidden", state).end()
                        .each(function () {
                            var ele = $(this);
                            ele.next("em")[ele.hasClass("hidden") ? 'addClass' : 'removeClass']("hidden");
                        })
                        .eq(0).nextAll("em:not(.hidden):last").addClass("hidden");
            }).trigger("toggleHead", ["", false]);
        });

    }());

});

