(function($){
    $.fn.bipanel = function(rootNodId, langCode, pageId, allProjects) {

        var me = $(this),
            lang = {},
            savedRootNodId = rootNodId;
            
        me.css("padding", "0px");
        // me.css("overflow", "hidden");

        me.load("/mcreports/bi_panel/" + langCode + "." + rootNodId + ".htm", "", function () {
        
            eval("lang=" + $(".bi-json-lang", me).html() + ";");

            rootNodId = parseInt($("div.bi-panel-cnt", me).attr("rootnodid"));
        
            // Заменяем заголовок на выбор проекта.
            if (pageId && allProjects) {                
                var k, p, prjs = [];
                for (k in allProjects) {
                    p = allProjects[k];
                    prjs.push('<option value="' + p.NodId + '"' + (p.NodId == rootNodId || p.NodId == savedRootNodId ? ' selected="selected"' : "") + ">" + p.NName + "</option>");
                }
                //var selector = "<select class='bi-project-selector' langcode='"+ langCode +"' pageid='" + pageId + "' onChange='changeProject()'>" + prjs.join(" ") + "</select>";
                //$(".bi-panel-block-header p").html(selector);
            }            
 
            // fixSize();

            // $(window).resize(fixSize);

            bitree.init(rootNodId);

            var leftPanelVisible = true,
                derCenter = $("td.bi-panel-tbl-sep", me),
                doToggleLeftPanel = function () {
                    var lc = $("div.bi-panel-tree-wrp", me),
                        cp = $("td.bi-panel-tbl-sep", me),
                        ar = $("div", cp);
                    leftPanelVisible = !leftPanelVisible;
                    lc[leftPanelVisible ? "show" : "hide"]("normal");
                    $("td.bi-panel-tree",me).width(leftPanelVisible ? lc.width() : 0);
                    ar.removeClass(leftPanelVisible ? "bi-panel-arr-right" : "bi-panel-arr-left");
                    ar.addClass(leftPanelVisible ? "bi-panel-arr-left" : "bi-panel-arr-right");
                    cp.attr("title", (leftPanelVisible ? lang.hideleftpanel : lang.showleftpanel));
                };
            derCenter.click(doToggleLeftPanel);
            derCenter.attr("title", lang.hideleftpanel);
        });

        var fixSize = function () {
                return; // do nothing.
                var container = $(".bi-panel-cnt", me);
                if (container) {
                    container.width(me.innerWidth());
                    container.height(me.innerHeight());
                }
                $(".bi-panel-tree-ph", me).height(me.innerHeight() - $(".bi-panel-tree .bi-panel-block-header", me).outerHeight(true));
                $(".bi-ddb-view iframe", me).height(me.innerHeight());
        };

        var bitree = {
            url: function (id) { return "/mcreports/biproject/get_data/" + id + ".htm"; },
            loading: "",
            loaded: function () {
                var tm = setTimeout(
                        function () {
                            clearTimeout(tm);
                            var cl = $(".bi-ddb-loading-lbl", me),
                            cv = $(".bi-ddb-view", me);
                            cl.hide();
                            cv.show();
                        },
                        1234);
            },
            load: function (leaf) {
                var cl = $(".bi-ddb-loading-lbl",me),
                    cv = $(".bi-ddb-view",me),
                    bt = bitree,
                    fr = $("iframe:first", cv),
                    url = leaf.attr("url");
                if (!url) return;
                // cl.show();
                // cv.hide();
                // fr.attr("onload", bt.loaded);
                // fr.attr("src", url);
                window.open(url, "bireport");
                $(".bitree dl.bi-loaded").removeClass("bi-loaded");
                leaf.addClass("bi-loaded");
                // Схлопываем левую панель. Раз мы смогли кликнуть, значит до этого она была рапахнута.
                // $(".bi-panel-tbl-sep").click();
            },
            ajax: function (id, pt) {
                var bt = bitree,
                    xsa = new XS2AJAX();
                    xsa.onready = function () {
                        var dl = $(pt).parent("dl");
                        if (!dl) return;
                        pt.html("");
                        pt.hide();
                        $(xsa.responseJS).each(function () { bt.html(this, pt); });
                        pt.slideDown("slow");
                        if (!parseInt(dl.attr("loaded"))) dl.attr("loaded", 1);
                        dl.addClass("bi-minus").removeClass("bi-plus");
                };
                pt.html(bt.loading);
                xsa.send({}, bt.url(id));
            },
            toggle: function (leaf) {
                var bt = bitree,
                    id = parseInt(leaf.attr("NodId")),
                    expand = leaf.hasClass("bi-plus"),
                    loaded = !!parseInt(leaf.attr("loaded")),
                    target = $("dd:first", leaf);
                if (!loaded) {
                    bt.ajax(id, target);
                } else {
                    target[expand ? "slideDown" : "slideUp"]("normal");
                    leaf.removeClass(expand ? "bi-plus" : "bi-minus").addClass(!expand ? "bi-plus" : "bi-minus");
                }
            },
            go: function () {
                var me = $(this),
                    bt = bitree;
                bt[me.hasClass("bi-doc") ? "load" : "toggle"](me);
                return false;
            },
            html: function (node, pt) {
                var bt = bitree,
                    text = ("<dl"
                        + " NodId='" + node.NodId + "'"
                        + " loaded='0'"
                        + (node.url ? (" url='" + node.url + "'") : "")
                        + " class='" + (node.isFolder ? "bi-plus" : "bi-doc") + "'>"
                        + "<dt>"
                        + (node.isFolder ? "<b>" : "<span>")
                        + node.title
                        + (node.isFolder ? "</b>" : "</span>")
                        + "</dt>"
                        + "<dd></dd>"
                        + "</dl>"),
                    dl = $(pt.append(text).children("dl:last"));
                dl.click(bt.go);
            },
            init: function (rootNodId) {
                var bt = bitree,
                    el = $(".bi-panel-tree-ph", me);
                el.addClass("bitree");
                bt.loading = '<p class="bi-panel-wait-wrp">' + lang.loading + "</p>";
                bt.ajax(rootNodId, el);
            }
        };
    };
})(jQuery);

