(function () {
     self.bitree = {
         url : function (id) { return "/mcreports/biproject/get_data/" + id + ".htm"; },
         loading : "",
         loaded : function () {
             var tm = setTimeout(
                 function () {
                     clearTimeout(tm);
                     var bt = self.bitree,
                         cl = $("div#cubeloading"),
                         cv = $("div#cubeview");
                     cl.hide();
                     cv.show();
                 },
                 1000);
         },
         load : function (leaf) {
             var cv = $("div#cubeview"),
                 cl = $("div#cubeloading"),
                 bt = self.bitree,
                 fr = $("iframe:first", cv),
                 url = leaf.attr("url");
             if (!url) return;
             $("div#start").hide();
             $("div#firstPageBan").hide();
             cl.show();
             cv.hide();
             fr.attr("onload", bt.loaded);
             fr.attr("src", url);
             $(".bitree dl.loaded").removeClass("loaded");
             leaf.addClass("loaded");
         },
         ajax : function (id, pt) {
             var bt = self.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("minus").removeClass("plus");
             };
             pt.html(bt.loading);
             xsa.send({}, bt.url(id));
         },
         toggle : function (leaf) {
             var bt = self.bitree,
                 id = parseInt(leaf.attr("NodId")),
                 expand = leaf.hasClass("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 ? "plus" : "minus").addClass(!expand ? "plus" : "minus");
             }
         },
         go : function () {
             var me = $(this),
                 bt = self.bitree;
             bt[me.hasClass("doc") ? "load" : "toggle"](me);
             return false;
         },
         html : function (node, pt) {
             var bt = self.bitree,
                 text = ("<dl"
                         + " NodId='" + node.NodId + "'"
                         + " loaded='0'"
                         + (node.url ? (" url='" + node.url + "'") : "")
                         + " class='" + (node.isFolder ? "plus" : "doc") + "'>"
                         + "<dt>"
                         + (node.isFolder ? "<b>" : "<span>")
                         + node.title
                         + (node.isFolder ? "</b>" : "</span>")
                         + "</dt>"
                         + "<dd></dd>"
                         + "</dl>");
             var dl = $(pt.append(text).children("dl:last"));
             dl.click(bt.go);
         },
         init : function (div, id, lang) {
             var bt = self.bitree,
                 el = $("#" + div);
             el.addClass("bitree");
             bt.loading = "<p class='wait'>" + lang.loading + "</p>";
             bt.ajax(id, el);
         }
     };
})();
