var _comments={};
function commentsInit(A){Ext.apply(_comments,A,{open:{}});
tinyMCE_GZ.init({page_name:"tinymce.js",themes:"advanced",plugins:"underground",languages:"en"},function(){tinyMCE.init({strict_loading_mode:true,theme:"advanced",plugins:"underground",language:"en",browsers:"msie,gecko,safari",dialog_type:"modal",relative_urls:false,width:"100%",height:"150",body_class:"editContent",content_css:ug.staticUrl+"/styles/underground.css,"+ug.themeUrl+"/theme.css",add_unload_trigger:false,add_form_submit_trigger:false,theme_advanced_toolbar_location:"top",theme_advanced_toolbar_align:"left",theme_advanced_buttons0:"",theme_advanced_buttons1:"bold,italic,underline,strikethrough,separator,undo,redo,separator,bullist,numlist,separator,link",theme_advanced_buttons2:"",setupcontent_callback:ug.tinymceTabIndexSetter(1),init_instance_callback:function(B){ug.tinymceUriCleanupInit(B);
if(ug.getValue("addComment-subject")!=""){B.focus()
}}})
})
}function deleteComment(B,C){var A=function(){var D=function(E){if(E.childCount==0){delete _comments.open["Comment-"+E.parent]
}loadComments(E)
};
ug.rpc("CommentRpc.removeComment",{comment:C},D)
};
ug.confirm(B,{title:"Delete Comment",message:"Are you sure you want to delete this comment?",okay:{text:"Delete",handler:A},cancel:"Cancel"})
}function loadComments(I){var B=(typeof (I)=="object")?I:{id:I},A=B.id||B.parent;
var G=Ext.get("commentsDiv_Home-"+A);
if(!G){return 
}if(B.childCount==null||B.childCount>0){_comments.open["Comment-"+A]=A
}var D=function E(J){var L=Ext.getDom("commentsDiv_Home-"+A);
var K=Ext.getDom("addComment-form");
do{K=K.parentNode
}while(K&&(K!=L));
if(K){doComment()
}ug.update(L,J);
for(var N=L.firstChild;
N;
N=N.nextSibling){var M=N.id&&_comments.open[N.id];
if(M){loadComments({id:M,suppressRelayout:true,handler:B.handler})
}}if(B.handler){B.handler(A)
}};
ug.rpc("CommentRpc.loadComments",{item:A},D);
G.setStyle("display","block");
ug.scrollIntoView(G);
var H=Ext.get("commentsDiv_Show-"+A);
H.setStyle("display","none");
if(B.childCount!=null&&B.childCount>0){var F=H.child("a");
var C=B.reply?"Show Replies ({0})":"Show Comments ({0})";
F.set({title:String.format(C,B.childCount)});
F.update(String.format(C,B.childCount))
}Ext.get("commentsDiv_Close-"+A).setStyle("display",(B.childCount!=0)?"inline":"none");
if(!B.suppressRelayout){ug.relayout()
}}function hideComments(A){delete _comments.open["Comment-"+A];
Ext.get("commentsDiv_Home-"+A).setStyle("display","none");
Ext.get("commentsDiv_Show-"+A).setStyle("display","inline");
Ext.get("commentsDiv_Close-"+A).setStyle("display","none");
ug.relayout()
}var activeComment,activeMode;
function doComment(A,E){if((activeComment!=A)||(activeMode!=E)){var C=Ext.getDom("addComment-body");
var B=Ext.getDom("addComment-subject");
if(activeComment){tinyMCE.execCommand("mceRemoveControl",true,"addComment-body");
C.value="";
B.value="";
if(activeMode=="edit"){Ext.getDom("commentBody-"+activeComment).style.display="block"
}ug.showMsg("addComment:subject:validation")
}activeComment=A;
activeMode=E;
var D=Ext.getDom("addComment-form");
if(A){var F="",H=null,J;
var J;
var K=Ext.getDom("commentSubject-"+A);
var I=K&&(K.innerText||K.textContent);
if(E=="edit"){J=Ext.getDom("commentEdit-"+A);
H=I;
var L=Ext.getDom("commentBody-"+A);
F=L.innerHTML;
L.style.display="none"
}else{J=Ext.getDom("commentAnswer-"+A);
if(E=="reply"){H=String.format("Re: {0}",I)
}}J.appendChild(D);
tinyMCE.execCommand("mceAddControl",true,"addComment-body");
if(H||F){C.value=F;
B.value=H
}else{B.focus()
}ug.scrollIntoView(D)
}else{var G=Ext.getDom("commentAnswer-home");
G.appendChild(D)
}ug.relayout()
}}function submitComment(){var F=activeComment;
tinyMCE.triggerSave();
var B=Ext.getDom("addComment-body").value;
var C=Ext.getDom("addComment-subject").value;
var A=function D(G){ug.showMsg("addComment:subject:validation",G.errors&&G.errors.subject);
ug.showMsg("addcomment:body:validation",G.errors&&G.errors.body);
if(G.status!="invalid"){doComment();
loadComments(G||F)
}};
var E=(activeMode=="edit")?"CommentRpc.updateComment":"CommentRpc.createComment";
ug.rpc({rpc:E,params:{item:F,subject:C,body:B},callback:A,disable:"comment-submit,comment-cancel"})
}function showPermacomment(){if(_comments.item&&/^#Comment-\d*$/.test(window.location.hash)){var B=window.location.hash.substring(9);
var A=function(D){if(D.path){for(var E=0;
E<D.path.length;
++E){_comments.open["Comment-"+D.path[E]]=D.path[E]
}var C=function(F){if(F==D.path[D.path.length-1]){window.location.hash=window.location.hash
}};
loadComments({id:D.path[0],handler:C})
}};
ug.rpc("CommentRpc.getPath",{item:_comments.item,comment:B},A)
}}ug.onReady(showPermacomment);
var _tags={};
function tagsInit(A){Ext.apply(_tags,A)
}function showEditTagsDialog(G,F,I){var D,C;
var H=function(){var K=C.getValue();
if(K&&(K.trim().length!=0)){var J=function(L){ug.ppr({render:["tagsDiv-"+F,"tagCloud-"+_tags.site],params:{item:F}});
D.hide()
};
ug.rpc({rpc:"Tag.setTags",disable:D,params:{tags:K,item:F},callback:J})
}return false
};
var E=new Ext.form.Label({text:"Specify one or more tags separated by commas."});
C=new Ext.form.TextField({maxLength:"255",allowBlank:true,hideLabel:true,msgTarget:"side",width:260,value:(I=="")?"":(I+", ")});
var A=new Ext.form.Label({text:"Any tags that you add will be listed in the public tag cloud, even if the content itself is private."});
var B=new Ext.form.FormPanel({items:[E,C,A],bodyStyle:"padding:10px",onSubmit:function(J){J.stopEvent();
H()
}});
D=new ug.Dialog({id:"addTagsDialog-"+F,title:"Edit Tags",autoScroll:true,width:300,destroyOnHide:true,items:B,defaultButton:C,okay:{text:"Submit",handler:H},cancel:"Cancel",handler:function(){C.reset()
}});
D.show(G)
};
ug.onButton=function(B,A){return function(C){if(C==B){A()
}}
};
ug.statusCallbacks=function(A){return function(C){var B=A[C.status];
B&&B(C)
}
};
ug.acquireLock=function(D,B,A){var C={ok:A,locked:function(E){ug.confirmStealLock(D,E,A)
}};
ug.rpc("Lock.acquireLock",{item:B},ug.statusCallbacks(C))
};
ug.confirmStealLock=function(D,A,B){var C=function(){ug.rpc("Lock.stealLock",{item:A.item,lock:A.lock},B)
};
ug.confirm(null,{title:D,message:String.format("This item is currently locked for edit by {0} (edit started {1}). Please click Cancel to abandon this operation, or Break Lock to break their lock on the item.",A.lockUser,A.lockTime),defaultButton:"cancel",okay:{text:"Break Lock",handler:C},cancel:"Cancel"})
};
ug.confirmOverwrite=function(D,A,B){var C=function(){_editLock.firstSave=true;
_editLock.version=A.version;
B()
};
ug.confirm(null,{title:D,message:String.format("This item has been modified since you started editing (last edited by {0} {1}). Please click Cancel to abandon this operation, or Overwrite to overwrite these changes.",A.editUser,A.editTime),defaultButton:"cancel",okay:{text:"Overwrite",handler:C},cancel:"Cancel"})
};
var _editLock={};
function editLock_init(A){Ext.apply(_editLock,A,{firstSave:true,lastSave:false});
ug.onCancel=function(B,C){if(!_editLock.lastSave){_editLock.lastSave=true;
ug.rpc(_editLock.unlock,{item:_editLock.item,purge:(C!==false)&&_editLock.isNew},B)
}};
Ext.EventManager.on(window,"beforeunload",function(){if(!ug.dirty){ug.onCancel(Ext.emptyFn,false)
}});
touchLock()
}function editLock_fail(B){var A=function(){document.location.href=B.path
};
ug.onReady(function(){ug.alert(null,{title:"Missing Edit Lock",message:"You do not have a valid edit lock on this item. You will automatically be returned to view mode.",okay:{text:"OK",handler:A}})
})
}function touchLock(){var A={ok:function(B){_editLock.touchTimeout=setTimeout(touchLock,180000)
},locked:function(B){if(!_editLock.lastSave){_editLock.broken=true;
ug.alert(null,{title:"Edit Lock Broken",message:String.format("Your edit lock on this item has been broken by {0} (edit started {1}).",B.lockUser,B.lockTime),okay:"OK"})
}}};
_editLock.touchTimeout=null;
if(!_editLock.lastSave){ug.rpc("Lock.touchLock",{item:_editLock.item},ug.statusCallbacks(A))
}}function performFinalEdit(){_editLock.lastSave=true;
performEdit()
}function performEdit(C){for(var F=0;
F<_editLock.elements.length;
++F){var H=_editLock.elements[F];
ug.showMsg(_editLock.form+":"+H+":validity")
}var B={invalid:function(K){for(var L in K.errors){ug.showMsg(_editLock.form+":"+L+":validity",K.errors[L])
}},locked:function(K){ug.confirmStealLock(_editLock.title,K,performEdit)
},changed:function(K){ug.confirmOverwrite(_editLock.title,K,performEdit)
},ok:function(K){ug.setClean();
_editLock.isNew=false;
if(_editLock.lastSave){window.location=K.path
}else{_editLock.firstSave=false;
_editLock.version=K.version;
ug.showMsg(_editLock.statusEl,K.statusMsg);
if(_editLock.broken){_editLock.broken=false;
touchLock()
}if(C){C.call(this)
}}}};
var D=Ext.apply({first:_editLock.firstSave,last:_editLock.lastSave,version:_editLock.version},_editLock.baseData);
var I=_editLock.form;
var A=document.forms[I];
for(var F=0;
F<_editLock.elements.length;
++F){var J=_editLock.elements[F];
var E=A.elements[I+":"+J];
var G;
if(E.type=="checkbox"){G=E.checked
}else{G=E.value
}D[J]=G
}ug.rpc({rpc:_editLock.proc,params:D,callback:ug.statusCallbacks(B),disable:"button-okay,button-save,button-cancel"})
};
ug.deleteItem=function(I,F,H,C,B){var D=function(M,L){var K={ok:function(N){B(N)
},locked:function(N){ug.confirmStealLock("Delete Item",N,function(){D(null,L)
})
}};
C.purge=L;
ug.rpc({rpc:H,params:C,dialog:M&&M.findParentByType(ug.Dialog),callback:ug.statusCallbacks(K)})
};
var E=function(K){D(K,false)
};
var A=function(){ug.confirm(null,{title:"Purge Item",message:"This operation cannot be undone. Are you sure you want to purge this item?",cancel:{text:"Purge",handler:function(K){D(K,true)
},autoHide:false},okay:"Cancel"})
};
var G={text:"Delete",autoHide:false,handler:E};
var J={text:"Purge",autoHide:true,handler:A};
ug.confirm(I,{title:"Delete Item",message:F?"Click Delete to mark this item as deleted, or Purge to permanently delete it from the system.":"Click Delete to delete this item.",okay:F?[G,J]:G,cancel:"Cancel"})
};
function createNavigationTree(D){var F=Ext.extend(Ext.tree.TreeLoader,{createNode:function(H){var G={id:H.id,text:H.title,leaf:!D.enableDD&&!H.children&&!H.childCount,children:(H.childCount==0)?[]:H.children,expanded:D.enableDD||(H.children!=null),cls:"wiki-page-node"};
if(H.id==D.cf.home){G.cls+=" wiki-home"
}if(H.deleted){G.cls+=" deleted"
}if(this.hyperLink){if(H.id==D.cf.page){G.cls+=" current-page"
}else{G.href=H.url
}}return F.superclass.createNode.call(this,G)
}});
var B=new F({dataUrl:"/control/dynamic/Hierarchy.getChildren",baseParams:{context:D.cf.wiki,formCookie:ug.formCookie},hyperLink:D.hyperLink});
var A=new Ext.tree.TreePanel({renderTo:D.renderTo,baseCls:D.baseCls||"x-panel",enableDD:D.enableDD,useArrows:true,autoScroll:D.autoScroll,animate:true,containerScroll:true,height:D.height,loader:B,root:new Ext.tree.TreeNode({id:D.showRoot?"root":D.cf.wiki}),rootVisible:false});
A.root.beginUpdate();
if(D.showRoot){A.root.appendChild(new Ext.tree.TreeNode({text:"Wiki",id:D.cf.wiki,cls:"wiki-node"}))
}if(D.cf.hierarchy){for(var E=0;
E<D.cf.hierarchy.length;
++E){A.root.appendChild(B.createNode(D.cf.hierarchy[E]))
}}if(D.showHidden){var C=new Ext.tree.TreeNode({text:"Non-navigable",id:"none",cls:"wiki-hidden-node",expanded:true});
A.root.appendChild(C);
if(D.cf.nonNavigable){for(var E=0;
E<D.cf.nonNavigable.length;
++E){C.appendChild(B.createNode(D.cf.nonNavigable[E]))
}}}A.root.endUpdate();
return A
};
var _viewWiki={};
function viewWikiInit(A){Ext.apply(_viewWiki,A);
commentsInit({item:A.page});
ug.dynamicSidebar=true
}function newPage(A){if(!_viewWiki.newPageDialog){var B=function(){var C=function(E){ug.showMsg("newPage:title:validation",E.errors&&E.errors.title);
if(E.status!="invalid"){_viewWiki.newPageDialog.disable();
document.location.href=E.path+"!edit?mode=new"
}else{_viewWiki.newPageDialog.resetButtons()
}};
_viewWiki.newPageDialog.disableButtons();
var D=_viewWiki.parentTree.getSelectionModel().getSelectedNode().id;
ug.rpc("WikiRpc.newPage",{wiki:_viewWiki.wiki,title:document.forms.newPageForm.title.value,parent:(D=="none")?null:D},C)
};
ug.initForm("newPage-form",B);
_viewWiki.parentTree=createNavigationTree({renderTo:"newPage-tree",height:128,hyperLink:false,cf:_viewWiki,showRoot:true,autoScroll:true});
_viewWiki.parentTree.root.firstChild.select();
_viewWiki.newPageDialog=new ug.Dialog({id:"newPageDialog",title:"New Page",width:280,defaultButton:Ext.get("newPage-title"),contentEl:"newPage",okay:{text:"Continue",handler:B},cancel:"Cancel"})
}_viewWiki.newPageDialog.show(A)
}function editPage(A){var B=function(C){document.location.href=C.path+"!edit"
};
ug.acquireLock("Edit Page",_viewWiki.page,B)
}function deletePage(B,C){var A=function(D){document.location.href=D.path
};
ug.deleteItem(B,C,"WikiRpc.deletePage",{wiki:_viewWiki.wiki,page:_viewWiki.page},A)
}function showAllContributors(A){ug.ppr({render:"pageContributors",params:{showAllContributors:A}})
}ug.onReady(function(){if(Ext.getDom("navigation-tree")!=null){var A=createNavigationTree({renderTo:"navigation-tree",baseCls:"navigation-tree sidebar",hyperLink:true,cf:_viewWiki});
A.on("collapsenode",ug.relayout);
A.on("expandnode",ug.relayout)
}});
