Zapatec.Tree=function(el,_2){
if(typeof _2=="undefined"){
_2={};
}
function param_default(_3,_4){
if(typeof _2[_3]=="undefined"){
_2[_3]=_4;
}
}
param_default("d_profile",false);
param_default("hiliteSelectedNode",true);
param_default("compact",false);
param_default("dynamic",false);
param_default("initLevel",false);
param_default("expandOnLabel",true);
param_default("saveState",false);
if(_2.dynamic){
_2.initLevel=0;
}
if(_2.dynamic||_2.saveState&&(typeof (_2.saveId)!="string"||(typeof (_2.saveId)=="string"&&_2.saveId.length==0))){
_2.saveState=false;
}
this.config=_2;
if(this.config.d_profile){
var T1=new Date().getTime();
profile={items:0,trees:0,icons:0};
}
if(typeof el=="string"){
el=document.getElementById(el);
}
this.list=el;
this.items={};
this.trees={};
this.selectedItem=null;
if(el){
this.id=el.id||Zapatec.Utils.generateID("tree");
}else{
this.id=Zapatec.Utils.generateID("tree");
}
var _6=this.top_parent=Zapatec.Utils.createElement("div");
_6.className="tree tree-top";
if(el){
this.createTree(el,_6,0);
el.parentNode.insertBefore(_6,el);
el.parentNode.removeChild(el);
}
Zapatec.Tree.all[this.id]=this;
if(this.selectedItem){
this.sync(this.selectedItem.__msh_item);
}
if(this.config.saveState){
var _7=Zapatec.Utils.getCookie("Zapatec.Tree-"+_2.saveId);
if(_7){
this.sync(_7);
}
}
if(this.config.d_profile){
alert("Generated in "+(new Date().getTime()-T1)+" milliseconds\n"+profile.items+" total tree items\n"+profile.trees+" total (sub)trees\n"+profile.icons+" total icons");
}
};
Zapatec.Tree.all={};
Zapatec.Tree.prototype.createTree=function(_8,_9,_a){
if(this.config.d_profile){
++profile.trees;
}
var id=0;
if(_8){
id=_8.id||Zapatec.Utils.generateID("tree.sub");
}else{
id=Zapatec.Utils.generateID("tree.sub");
}
var _c=this;
function _makeIt(){
_c.creating_now=true;
var _d=null;
var _e=null;
if(_8){
var i=_8.firstChild;
var _10=_9.__msh_items=[];
_c.trees[id]=_9;
_9.__msh_level=_a;
_9.__msh_treeid=id;
while(i){
if(_d){
_d.className+=" tree-lines-c";
}
if(i.nodeType!=1){
i=i.nextSibling;
}else{
_e=Zapatec.Utils.getNextSibling(i,"li");
if(i.tagName.toLowerCase()=="li"){
_d=_c.createItem(i,_9,_e,_a);
if(_d){
_10[_10.length]=_d.__msh_item;
}
}
i=_e;
}
}
}
i=_9.firstChild;
if(i&&!_a){
i.className=i.className.replace(/ tree-lines-./g,"");
i.className+=(i===_d)?" tree-lines-s":" tree-lines-t";
}
if(_d&&(_a||_d!==i)){
_d.className=_d.className.replace(/ tree-lines-./g,"");
_d.className+=" tree-lines-b";
}
_c.creating_now=false;
}
if(this.config.dynamic&&_a>0){
(this.trees[id]=_makeIt);
}else{
_makeIt();
}
return id;
};
Zapatec.Tree.prototype.createItem=function(li,_12,_13,_14,_15){
if(this.config.d_profile){
++profile.items;
}
if(!li.firstChild){
return;
}
var _16=null;
if(_15){
_16=_15;
}
var id=li.id||Zapatec.Utils.generateID("tree.item"),_18=this.items[id]=((_16==null)?Zapatec.Utils.createElement("div",_12):Zapatec.Utils.createElement("div")),t=Zapatec.Utils.createElement("table",_18),tb=Zapatec.Utils.createElement("tbody",t),tr=Zapatec.Utils.createElement("tr",tb),td=Zapatec.Utils.createElement("td",tr),_1d,tmp,i=li.firstChild,_20=false;
t.className="tree-table";
t.cellSpacing=0;
t.cellPadding=0;
td.className="label";
_18.className=li.className+" tree-item";
_18.__msh_item=id;
_18.__msh_tree=this.id;
_18.__msh_parent=_12.__msh_treeid;
if(_16){
_12.insertBefore(_18,_16);
}
while(i){
_1d=i.nodeType==1&&/^[ou]l$/i.test(i.tagName);
if(i.nodeType!=1||!_1d){
if(i.nodeType==3){
tmp=i.data.replace(/^\s+/,"");
tmp=tmp.replace(/\s+$/,"");
li.removeChild(i);
if(tmp){
i=Zapatec.Utils.createElement("span");
i.className="label";
i.innerHTML=tmp;
i.onclick=Zapatec.Tree.onItemToggle;
td.appendChild(i);
}
}else{
if(i.tagName.toLowerCase()=="img"){
this.item_addIcon(_18,i);
_20=true;
}else{
i.onclick=Zapatec.Tree.onItemToggle;
td.appendChild(i);
}
}
i=li.firstChild;
continue;
}
if(_1d){
this.item_addIcon(_18,null);
var np;
if(_16!=null){
np=Zapatec.Utils.createElement("div");
_12.insertBefore(np,_16);
}else{
np=Zapatec.Utils.createElement("div",_18.parentNode);
}
np.__msh_item=id;
np.className="tree";
if(_13){
np.className+=" tree-lined";
}
_18.__msh_subtree=this.createTree(i,np,_14+1);
if((this.config.initLevel!==false&&this.config.initLevel<=_14)||(this.config.compact&&!/(^|\s)expanded(\s|$)/i.test(li.className))||/(^|\s)collapsed(\s|$)/i.test(li.className)){
_18.className+=" tree-item-collapsed";
this.toggleItem(id,false);
}else{
_18.className+=" tree-item-expanded";
}
if(/(^|\s)selected(\s|$)/i.test(li.className)){
this.selectedItem=_18;
}
break;
}
}
if(!_20){
this.item_addDefaultIcon(_18,this.config.defaultIcons);
}
return _18;
};
Zapatec.Tree.prototype.makeNode=function(_22,_23){
if(!_23){
_23="li";
}
var _24=Zapatec.Utils.createElement(_23);
if(_22){
_24.innerHTML=_22;
}
return _24;
};
Zapatec.Tree.prototype.getParent=function(id,_26){
var _27=null;
for(var i in this.trees){
if((this.trees[i].__msh_treeid==id)||(this.trees[i].__msh_item==id)){
_27=this.trees[i];
break;
}
}
if((_26!=null)&&((_26.toUpperCase()=="I")||(_26.toUpperCase()=="R"))){
if(_27!=null){
if(_27.className!=this.top_parent.className){
_27=_27.previousSibling;
}
}else{
_27=this.items[id.toLowerCase()];
}
}
if(!_27){
_27=this.items[id.toLowerCase()];
}
return _27;
};
Zapatec.Tree.prototype.appendChild=function(_29,_2a,_2b){
_2b=(_2b==true);
if(_29==null||_2a==null||typeof (_29)=="undefined"||typeof (_2a)=="undefined"||this.items[_2a.id]){
return;
}
var _2c=null;
if(_29.firstChild==null){
_2b=false;
}
if(_2b){
_2c=this.createItem(_2a,_29,_29.firstChild.nextSibling,_29.__msh_level,_29.firstChild);
}else{
_2c=this.createItem(_2a,_29,null,_29.__msh_level);
}
if(_2c){
var _2d=null;
var _2e=null;
var _2f=null;
var _30=false;
if(_2b){
_2d=_29.childNodes[0];
if(_2c.__msh_subtree==null){
_2e=_29.childNodes[1];
}else{
_2e=_29.childNodes[2];
}
}else{
if(!_2c.__msh_subtree){
_2d=_29.childNodes[_29.childNodes.length-1];
if(_29.childNodes.length>1){
_2f=_29.childNodes[_29.childNodes.length-2];
_30=(_2f.className!=null&&_2f.className=="tree");
if(_30){
_2f.className+=" tree-lined";
_2f=_29.childNodes[_29.childNodes.length-3];
}
}
}else{
_2d=_29.childNodes[_29.childNodes.length-2];
_2f=_29.childNodes[_29.childNodes.length-3];
_30=(_2f.className!=null&&_2f.className=="tree");
if(_30){
_2f.className+=" tree-lined";
_2f=_29.childNodes[_29.childNodes.length-4];
}
}
}
if(_2d){
_2d.className=_2d.className.replace(/ tree-lines-./g,"");
if(_2b){
_2d.className+=" tree-lines-t";
if(_2e){
_2e.className=_2e.className.replace(/ tree-lines-./g,"");
_2e.className+=" tree-lines-c";
}
}else{
_2d.className+=" tree-lines-b";
if(_2f){
_2f.className=_2f.className.replace(/ tree-lines-./g,"");
_2f.className+=" tree-lines-c";
if(_30){
_2f.className+=" tree-lines-c";
}
}
}
}
return _2c;
}
};
Zapatec.Tree.prototype.insertBefore=function(_31,_32){
if(_31==null||_32==null||typeof (_31)=="undefined"||typeof (_32)=="undefined"||this.items[_31.id]){
return;
}
var _33=_32.parentNode;
var _34=this.createItem(_31,_33,_33.firstChild.nextSibling,_33.__msh_level,_32);
var _35=false,_36=false;
var _37=null;
if(_34.previousSibling){
_35=true;
}
if(_34.nextSibling){
_36=true;
}
_34.className=_34.className.replace(/ tree-lines-./g,"");
if(_35&&_36){
_34.className+=" tree-lines-c";
}else{
if(_35){
_34.className+=" tree-lines-b";
}else{
if(_36){
_34.className+=" tree-lines-t";
if(_34.className.indexOf("tree-item-more tree-item")>-1){
_37=_34.nextSibling.nextSibling;
}else{
_37=_34.nextSibling;
}
_37.className=_37.className.replace(/ tree-lines-./g,"");
if(_37.className.indexOf("tree-item-more tree-item")>-1){
if(_37.nextSibling.nextSibling!=null){
_37.className+=" tree-lines-c";
}else{
_37.className+=" tree-lines-b";
}
}else{
if(_37.nextSibling!=null){
_37.className+=" tree-lines-c";
}else{
_37.className+=" tree-lines-b";
}
}
}
}
}
};
Zapatec.Tree.prototype.removeChild=function(_38){
if(_38==null||typeof (_38)=="undefined"){
return;
}else{
if(_38.className==this.top_parent.className){
alert("Removing root node not allowed.");
return;
}
}
var p=_38.parentNode;
if(_38.__msh_item&&_38.__msh_tree&&_38.__msh_parent){
var _3a=_38.previousSibling;
var _3b=_38.nextSibling;
var _3c=false;
var _3d=false;
if(_3a){
if(_3a.__msh_treeid){
_3a=_3a.previousSibling;
}
_3c=true;
}else{
if(_38.parentNode&&_38.parentNode.className!=this.top_parent.className){
_3c=true;
}
}
if(_3b){
if(_38.__msh_subtree){
_3b=_3b.nextSibling;
if(_3b){
_3d=true;
}
}else{
_3d=true;
}
}
if(_38.__msh_subtree){
var _3e=_38.nextSibling;
if(_3e&&_38.__msh_subtree==_3e.__msh_treeid){
for(var i=0;i<_3e.childNodes.length;i++){
if(_3e.childNodes[i]){
delete this.items[_3e.childNodes[i].__msh_item];
}
}
delete this.items[_3e.__msh_item];
p.removeChild(_3e);
}
delete (this.trees[_38.__msh_subtree]);
p.removeChild(_38);
}else{
delete this.items[_38.__msh_item];
p.removeChild(_38);
}
if(!_3c&&_3d){
if(_3b){
_3b.className=_3b.className.replace(/ tree-lines-./g,"");
_3b.className+=" tree-lines-t";
}
}else{
if(_3c&&!_3d){
if(_3a){
if(_3a.__msh_subtree){
_3a.nextSibling.className=_3a.nextSibling.className.replace(/ tree-lined/g,"");
}
_3a.className=_3a.className.replace(/ tree-lines-./g,"");
_3a.className+=" tree-lines-b";
}
}
}
}
};
Zapatec.Tree.prototype.item_addDefaultIcon=function(_40,_41){
if(!_41){
return;
}
var _42=_40.firstChild.firstChild.firstChild.lastChild,td;
var td=Zapatec.Utils.createElement("td");
td.className="tgb icon "+_41;
td.onclick=Zapatec.Tree.onItemToggle;
_42.parentNode.insertBefore(td,_42);
};
Zapatec.Tree.prototype.item_addIcon=function(_44,img){
if(this.config.d_profile){
++profile.icons;
}
var _46=_44.firstChild.firstChild.firstChild,td;
_46=img?_46.lastChild:_46.firstChild;
if(!img||!_44.__msh_icon){
td=Zapatec.Utils.createElement("td");
td.className="tgb "+(img?"icon":"minus");
_46.parentNode.insertBefore(td,_46);
td.onclick=Zapatec.Tree.onItemToggle;
}else{
td=_44.__msh_icon;
img.style.display="none";
}
if(!img){
td.innerHTML="&nbsp;";
_44.className+=" tree-item-more";
_44.__msh_state=false;
_44.__msh_expand=td;
}else{
td.appendChild(img);
_44.__msh_icon=td;
}
};
Zapatec.Tree.prototype.itemClicked=function(_48,_49){
this.selectedItem=this.toggleItem(_48,null,_49);
Zapatec.Utils.writeCookie("Zapatec.Tree-"+this.config.saveId,this.selectedItem.__msh_item,null,"/",7);
if(this.config.hiliteSelectedNode&&this.selectedItem){
Zapatec.Utils.addClass(this.selectedItem,"tree-item-selected");
}
this.onItemSelect(_48);
};
Zapatec.Tree.prototype.toggleItem=function(_4a,_4b,_4c){
if(_4a){
var _4d=false;
if(this.config.saveState){
_4d=true;
}
if(this.config.hiliteSelectedNode&&this.selectedItem){
Zapatec.Utils.removeClass(this.selectedItem,"tree-item-selected");
}
var _4e=this.items[_4a];
if(typeof (_4b)=="undefined"||_4b==null){
_4b=!_4e.__msh_state;
_4d=false;
}
if((_4c||this.config.expandOnLabel||_4d)){
var _4f=this._getTree(_4e.__msh_subtree,this.creating_now);
if(_4f){
_4f.style.display=_4b?"block":"none";
Zapatec.Utils.removeClass(_4e,"tree-item-expanded");
Zapatec.Utils.removeClass(_4e,"tree-item-collapsed");
Zapatec.Utils.addClass(_4e,_4b?"tree-item-expanded":"tree-item-collapsed");
}
var img=_4e.__msh_expand;
if(img){
img.className="tgb "+(_4b?"minus":"plus");
}
_4e.__msh_state=_4b;
img=_4e.__msh_icon;
if(img){
img.firstChild.style.display="none";
img.appendChild(img.firstChild);
img.firstChild.style.display="block";
}
if(this.config.compact&&_4b){
var a=this._getTree(_4e.__msh_parent).__msh_items;
for(var i=a.length;--i>=0;){
if(a[i]!=_4a){
this.toggleItem(a[i],false);
}
}
}
if(/zpLoad(JSON|HTML)=([^ $]*)/.test(_4e.className)&&_4b){
var _53=RegExp.$1;
var url=RegExp.$2;
_4e.className=_4e.className.replace(/zpLoad(JSON|HTML)=([^ $]*)/g,"");
var _55=this.appendChild(this.getParent(_4e.__msh_item),this.makeNode("...loading..."),true);
var _56=function(_57){
alert(_57.errorDescription);
_4e.className+="zpLoad"+_53+"="+url;
_58.removeChild(_58.getParent(_55.__msh_item,"R"));
};
var _58=this;
if(_53=="JSON"){
Zapatec.Transport.fetchJsonObj({url:url,method:"GET",onLoad:function(_59){
function json2html(_5a){
if(_5a==null||_5a.length==0){
return "";
}
var res="<ul>";
for(var ii=0;ii<_5a.length;ii++){
var _5d=_5a[ii];
if(typeof (_5d)=="string"){
_5d=[_5d];
}
res+="<li>"+_5d[0]+json2html(_5d[1])+"</li>";
}
res+="</ul>";
return res;
}
var arr=_59;
for(var ii=0;ii<arr.length;ii++){
var _60=arr[ii];
if(typeof (_60)=="object"&&_60.length==1){
_60=_60[0];
}else{
if(typeof (_60)=="object"&&_60.length==2){
_60=_60[0]+json2html(_60[1]);
}
}
_58.appendChild(_58.getParent(_4e.__msh_item),_58.makeNode(_60));
}
_58.removeChild(_58.getParent(_55.__msh_item,"R"));
},onError:_56});
}else{
if(_53=="HTML"){
Zapatec.Transport.fetchXmlDoc({url:url,method:"GET",onLoad:function(_61){
var _62=_61.documentElement.childNodes;
for(var jj=0;jj<_62.length;jj++){
var _64=_62[jj];
if(_64.nodeType!=1){
continue;
}
var li=_58.makeNode(Zapatec.Tree.serializeNode(_64,true));
for(var ii=0;ii<_64.attributes.length;ii++){
var _67=_64.attributes[ii];
if(_67.name=="class"){
li.className=_64.getAttribute(_67.name);
}else{
li.setAttribute(_67.name,_64.getAttribute(_67.name));
}
}
_58.appendChild(_58.getParent(_4e.__msh_item),li);
}
_58.removeChild(_58.getParent(_55.__msh_item,"R"));
},onError:_56});
}
}
}
}
return _4e;
}
return null;
};
Zapatec.Tree.prototype.collapseAll=function(){
for(var i in this.trees){
this.toggleItem(this._getTree(i).__msh_item,false,true);
}
};
Zapatec.Tree.prototype.expandAll=function(){
for(var i in this.trees){
this.toggleItem(this._getTree(i).__msh_item,true,true);
}
};
Zapatec.Tree.prototype.toggleAll=function(){
for(var i in this.trees){
this.toggleItem(this._getTree(i).__msh_item);
}
};
Zapatec.Tree.prototype.sync=function(_6b){
var _6c=this.items[_6b];
if(_6c){
this.collapseAll();
this.selectedItem=_6c;
var a=[];
while(_6c.__msh_parent){
a[a.length]=_6c;
var pt=this._getTree(_6c.__msh_parent);
if(pt.__msh_item){
_6c=this.items[pt.__msh_item];
}else{
break;
}
}
for(var i=a.length;--i>=0;){
this.toggleItem(a[i].__msh_item,true);
}
Zapatec.Utils.addClass(this.selectedItem,"tree-item-selected");
}
};
Zapatec.Tree.prototype.destroy=function(){
var p=this.top_parent;
p.parentNode.removeChild(p);
};
Zapatec.Tree.prototype._getTree=function(_71,_72){
var _73=this.trees[_71];
if(typeof (_73)=="function"){
if(_72){
_73=null;
}else{
_73();
_73=this.trees[_71];
_73.__msh_state=false;
}
}
return _73;
};
Zapatec.Tree.prototype.onItemSelect=function(){
};
Zapatec.Tree.onItemToggle=function(){
var _74=this;
var _75=document.body;
var _76=false;
if(/tgb (minus|plus)/.test(this.className)){
_76=true;
}
while(_74&&_74!==_75&&!/tree-item/.test(_74.className)){
_74=_74.parentNode;
}
Zapatec.Tree.all[_74.__msh_tree].itemClicked(_74.__msh_item,_76);
};
Zapatec.Tree.serializeNode=function(_77,_78){
if(_77==null){
return;
}
if(_77.nodeType==3){
return _77.nodeValue;
}
if(_78){
var res="";
if(_77.hasChildNodes()){
for(var ii=0;ii<_77.childNodes.length;ii++){
res+=Zapatec.Tree.serializeNode(_77.childNodes[ii]);
}
}
}else{
var res="<"+_77.tagName;
for(var ii=0;ii<_77.attributes.length;ii++){
var _7b=_77.attributes[ii];
res+=" "+_7b.name+"=\""+_77.getAttribute(_7b.name).replace(/"/g,"\\\"")+"\"";
}
if(_77.hasChildNodes()){
res+=">";
for(var ii=0;ii<_77.childNodes.length;ii++){
res+=Zapatec.Tree.serializeNode(_77.childNodes[ii]);
}
res+="</"+_77.tagName+">";
}else{
res+="/>";
}
}
return res;
};

