
// =========================================================
// telepark.wiki Professional

// This Software is copyright (c) 2007 by telepark, 
// Inh. Patrick Thomas, www.telepark.de. 
// All rights reserved. 

// You may not modify, alter, reverse engineer or emulate 
// the functionality, or create derivative works of the 
// Software in parts or it's entirety without the prior
// written consent of telepark.
// =========================================================

//tree object
var tree;
//id for new (unsaved) item
var newItemId = "-1";
// set context menu un-called
var ismenucalled = false;
// define from where the script is called
var ajaxFolder = true;
// itemId for reload
var tmpID = -1;
// selected page id
var selectedEditorPageID = '';
var tmpUSSid;
var tmpState;
var tmpAjaxflag;
//default wait refresh ms
var defaultTime=50;

var	ie=document.all ? true : false;

var rootURL=window.location.href.substr(0,window.location.href.lastIndexOf("/")+1);

window.onresize = windowResize;

// send notification email (if necessary)		// telepark.wiki pro
sendNotification();


// ==============
// INITIALIZATION
// ==============

// set width and height of div elements
function windowResize() {
	var tBanner=document.getElementById('topbanner').offsetHeight;
	document.getElementById('main').style.top=tBanner+"px";
	document.getElementById('treebox').style.top=tBanner+"px";
	var width100=document.body.clientWidth-30;
	var realTreeWidth=treeWidth;
	var realContentWidth=contentWidth;
	if (realTreeWidth.indexOf('%')!=-1) realTreeWidth=((parseInt(realTreeWidth)*width100)/100);
	realTreeWidth=parseInt(realTreeWidth);
	var maxContentWidth=width100-realTreeWidth;
	if (realContentWidth.indexOf('%')!=-1) realContentWidth=((parseInt(realContentWidth)*maxContentWidth)/100);
	realContentWidth=parseInt(realContentWidth);
	document.getElementById('content').style.width=realContentWidth+"px";
	document.getElementById('textlinks').style.width=realTreeWidth+"px";
	document.getElementById('main').style.left=realTreeWidth+10+"px";
	document.getElementById('main').style.width=realContentWidth+"px";
	document.getElementById('treebox').style.width=realTreeWidth+"px";
}

var nodrop=false;

//load tree on page
function loadTree(){
	windowResize();
	status(true);
	var pre=rootURL;
	aMenu=new dhtmlXContextMenuObject('120',0,"imgs/");
	aMenu.menu.setGfxPath("imgs/");		
	aMenu.menu.loadXML(pre + "UserFiles/Menu/context.xml?random=" + Math.random());				
    aMenu.setContextMenuHandler(onButtonClick);
	aMenu.setOnShowMenuHandler(changeMenu);
	aMenu._fixMenuPosition=function(){}

	tree = new dhtmlXTreeObject("treebox","","100%",0);
	if (ie6) {
		tree.enableFixedMode(true);
	}
	tree.setImagePath(pre + "imgs/");
	tree.setDragBehavior("complex");
	if (!nodrop) {
		tree.enableDragAndDrop(true);
		tree.enableDragAndDropScrolling(true);
		tree.setDragHandler(onBeforeDrop);
		tree.setDropHandler(onDrop);
	}
	tree.setOnDblClickHandler(onDoubleClick);
	tree.setOnClickHandler(addClick);
	tree.enableContextMenu(aMenu); //link context menu to tree
	tree.enableSmartXMLParsing(true);//false to disable
	tree.setOnLoadingEnd(startFunc); //go to after loading
	tree.setSerializationLevel(true,true);
	tree.enableTreeLines(false);
	tree.setEscapingMode("utf8");
	tree.setStdImages("leaf_closed.gif","leaf_open.gif","leaf_closed.gif");
	tree.enableMultiselection(true);
	tree.enableAutoTooltips(true);
	tree.enableMultiLineItems("100%"); 
	tree.loadXML(pre + "UserFiles/Menu/menu.xml?random=" + Math.random());
}

var treeLoaded=false;
var itemChange=new Array;
// call directly after tree is loaded
function startFunc() {
	treeLoaded=true;
	if (!savingXML) {
	notworking();
	checkLockFiles();			// telepark.wiki pro
	toggleTextLinks();
	tree.closeAllItems();
	var wikiitem = true;
	if (tmpID != -1) {
		var itemId = tmpID;
		wikiitem = false;
	} else {
		var params = new query_params(window.location.search);
		for (query in params) {
		  if (query=='telepark.wiki') {
		  	var itemId = params[query];
		  	wikiitem = false;
		  }
		}
	}
	if (wikiitem == true) {
		var itemId = "wiki";
	}
	tree.selectItem(itemId,true);
	init_onMover();
	init_Plink();
	if ((superadmin) && (langChanged=="YES")) {
		langChanged="NO";
		is_loaded(itemId);
	}
	}
}

function is_loaded(itemId) {
	if (document.getElementById('content').innerHTML=="") {
		setTimeout("is_loaded('"+itemId+"')",defaultTime);
	} else {
		setTimeout("showSettings('"+itemId+"')",defaultTime*10);
	}
}

currNodeBack="";
currNodeFont="";
var lastSelected="";

function init_onMover() {
	var nodes=getElementsByClass("standartTreeRow");
	for (var i=0; i<nodes.length; i++) {
		nodes[i].onmouseover=function () {
									currNodeBack=getBackgroundColor(this);
									this.style.backgroundColor=nodeMoverBack;
									currNodeFont=getColor(this);
									this.style.color=nodeMoverFont;
									if (this.childNodes[0].className=="selectedTreeRow") {
										this.childNodes[0].style.backgroundColor="navy";
										this.childNodes[0].style.color="white";
									}
							}
		nodes[i].onmouseout=function () {
								this.style.backgroundColor=currNodeBack;
								this.style.color=currNodeFont;
								if (this.childNodes[0].className=="selectedTreeRow") {
									this.childNodes[0].style.backgroundColor="navy";
									this.childNodes[0].style.color="white";
								}
							}
	}
}

function addClick(itemId) {
	if (lastSelected!="") {
		var objx=tree._globalIdStorageFind(lastSelected,0,true);
		if (objx) {
			var tmpx=objx.htmlNode.childNodes[0].childNodes[0].childNodes[3];
			tmpx.childNodes[0].style.backgroundColor=currNodeBack;
			tmpx.childNodes[0].style.color=currNodeFont;
		}
	}
	var objx=tree._globalIdStorageFind(itemId,0,true);
	if (objx) {
		var tmpx=objx.htmlNode.childNodes[0].childNodes[0].childNodes[3];
		tmpx.childNodes[0].style.backgroundColor="navy";
		tmpx.childNodes[0].style.color="white";
	}
	lastSelected=itemId;
	onSelect(itemId);
}

function init_Plink() {
	pL=document.getElementById('printPageSpan');
	if (printLink=="YES") {
		pL.style.display="inline";
	} else {
		pL.style.display="none";
	}
}

// ================
// HELPER FUNCTIONS
// ================

//addBookmark
function addBookmark() {
	var title=tree.getSelectedItemText();
	var url=rootURL+"?telepark.wiki="+tree.getSelectedItemId();
	if (window.sidebar) { 
		window.sidebar.addPersistentPanel(title, url, ""); 
	} else if( document.all ) {
		window.external.AddFavorite( url, title);
	} else if( window.opera && window.print ) {
		var a = document.createElement("A");
		a.rel = "sidebar";
		a.target = "_search";
		a.title = title;
		a.href = url;
		a.click();
 	}
}

// close message box
function closeMessageBox() {
	document.getElementById('innerMessage').innerHTML = "";
	document.getElementById('messageBox').style.display = "none";
}

// set ajax flag
function ajaxFlag(mode) {
	if (mode == 'no')
		ajaxFolder = false;
	else
		ajaxFolder = true;
}

// toggle div visibility
function toggleDivDisplay(id) {
	var div = document.getElementById(id);
	if (div) {
		// show
		if (div.style.display == 'none') {
			div.style.display = 'block';
		}
		// hide
		else {
			div.style.display = 'none';
		}
	}
}

// get child ids
function getChildIds(pageId) {
	var childItems = tree.getSubItems(pageId);
	var children = childItems.split(",");
	var idstring = "";
	for (var i=0; i<children.length; i++) {
		idstring = idstring + "," + children[i];
		if (tree.hasChildren(children[i])) {
			idstring = idstring + "," + getChildIds(children[i]);
		}
	}
	return idstring.substr(1);
}


// get query parameters
function query_params(querystring) {
  if (querystring == '') return;
  var string = decodeURI(querystring);
  string = string.slice(1);
  var pairs = string.split("&");
  for (var i=0; i < pairs.length; i++) {
    var name = pairs[i].substring(0, pairs[i].indexOf("="));
    var value = pairs[i].substring(pairs[i].indexOf("=")+1, pairs[i].length);
    this[name] = value;
  }
}

// show status of request on page
function status(fl){
	if (!persistant) {
		var d = document.getElementById("loading");
		if(fl)
			d.style.display = "block";
		else
			d.style.display = "none";
	}
}

// no function
function nofunction(req) {
	if (req.readyState == 4)	{
		if (req.status == 200)	{
			//displaySystemMessage(req);
		}
	}
	return;
}

// write change timestamp
function writeChangestamp(){
	var hp = new HTTPPost();
	if (ajaxFolder == false) var pre = "";
	else var pre = "ajax/";
	hp.postData(pre + 'writeChangestamp.php', '', proceedWriteChangestamp, true);
}

// read change timestamp
function readChangestamp(){
	var hp = new HTTPPost();
	if (ajaxFolder == false) var pre = "";
	else var pre = "ajax/";
	hp.postData(pre + 'readChangestamp.php', '', proceedReadChangestamp, true);
}

// proceed action based on timestamp
function proceedReadChangestamp(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseXML && req.responseXML.documentElement)	{
			var timestamp = getXMLData(req.responseXML.documentElement.getElementsByTagName('timestamp'));
			var err = getXMLData(req.responseXML.documentElement.getElementsByTagName('error'));
			if (err != "") logError(err);
			if (timestamp != "" && timestamp != currentTime) {
				currentTime = timestamp;
				if (!savingXML) reloadTree(tree.getSelectedItemId());
			}
		}
	}
	status();
}

// proceed action based on timestamp
function proceedWriteChangestamp(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseXML && req.responseXML.documentElement)	{
			var timestamp = getXMLData(req.responseXML.documentElement.getElementsByTagName('timestamp'));
			currentTime = timestamp;
			unlockXML();
			savingXML=false;
			if (nodrop) {
				nodrop=false;
				reloadTree(tree.getSelectedItemId());
			} else {
				startFunc();
			}
			setTimeout("closeAjaxLoader()",defaultTime);
		}
	}
	status();
}

function closeAjaxLoader() {
	if (treeLoaded) {
		notworking(true);
	} else {
		setTimeout("closeAjaxLoader()",defaultTime);
	}
}

// reload tree and jump to itemId
function reloadTree(itemId) {
	treeLoaded=false;
	working();
	document.getElementById('treebox').innerHTML = '';
	delete tree;
	tmpID = itemId;
	loadTree();
}

function reloadTreeToWrite(itemId) {
	document.getElementById('treebox').innerHTML = '';
	delete tree;
	tmpID = itemId;
	loadTree();
}

// display system messages
function displaySystemMessage(message) {
	if (message != '' && message != 'undefined') {
		document.getElementById('innerMessage').innerHTML = message;
		document.getElementById('messageBox').style.display = 'block';
	}
}

//get elements by class
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function getBackgroundColor(el) {
	if (el.style.backgroundColor!="") return el.style.backgroundColor;
	if (el.currentStyle) return el.currentStyle.backgroundColor;
	if (document.defaultView) return document.defaultView.getComputedStyle(el, '').getPropertyValue("background-color");
	return "";
}

function getColor(el) {
	if (el.style.color!="") return el.style.color;
	if (el.currentStyle) return el.currentStyle.color;
	if (document.defaultView) return document.defaultView.getComputedStyle(el, '').getPropertyValue("color");
	return "";
}


// ===============
// CLICK FUNCTIONS
// ===============

// on select
var pageLoaded=false;

function onSelect(itemId){
	pageLoaded=false;
	working();
	hideLoginBox();
	tmpID = itemId;
	if (!(tree.getUserData(itemId,'sa') == 1 && superadmin != true)) {		// telepark.wiki pro
		tree.openItem(itemId);
	}
	// unlock previous page when coming from editor page
	if (selectedEditorPageID != '' && itemId != selectedEditorPageID) {		// telepark.wiki pro
		unLockFile(selectedEditorPageID);
	}
	// coming from new page
	if(itemId!=newItemId){
		if(tree.getLevel(newItemId)!=0){
			if(confirm("Do you want to save changes?")){	//save changes to new item
				tree.selectItem(newItemId,false);
				// saveItem();
				document.wikiForm.submit();
				return;
			}
			tree.deleteItem(newItemId);
			status();
		}
	}else{	//set color to new item label
		tree.setItemColor(itemId,"red","pink");
	}
	getPage(itemId);
	ismenucalled = false;
}

// on double click
function onDoubleClick(itemId) {
	status(true);
	hideLoginBox();
	// superadmin items
	if (tree.getUserData(itemId,'sa') == 1) {			// telepark.wiki pro
		if (loggedIn == true && superadmin != false) {
			editPage(itemId);
		}
		else {
			status();
			return false;
		}
	}
	// other items
	else {
		if (loggedIn == true || publiclogin == true) {
			editPage(itemId);
		}
		else {
			status();
			return false;
		}
	}
}

// on context menu click
function onButtonClick(menuItemValue,itemId){
	if (itemId == "-1") itemId = tree.getSelectedItemId();

	if (ismenucalled != false) return false;

	ismenucalled = menuItemValue;
	
	// new page
	if((menuItemValue=="add") && (!loadingEditor)) {
		//addNewPeer();
		pageLoaded=false;
		addNewChild();
		addPageWait();
	}
	// edit
	else if(menuItemValue=="edit") {
		editPage(itemId);
	}
	// delete
	else if(menuItemValue=="delete" && itemId!='wiki') {
		deleteNode(itemId);
	}
	// sort
	else if(menuItemValue=="sort") {
		sortNode(itemId);
	}
	//printPage
	else if(menuItemValue=="print") {
		printPage();
	}	
	//settings
	else if(menuItemValue=="settings") {
		showSettings(itemId);
	}
	
    return false;
}


// =============
// DRAG AND DROP
// =============

// before drop
function onBeforeDrop(sourceId,targetId) {
	if (targetId==0) return false;
	if (sourceId=="wiki") return false;
	if (savingXML) return false;
	// if (tree.getLevel(targetId)>maxLevels || (loggedIn == false && publiclogin == false))  {
	if (tree.getLevel(targetId)>maxLevels || (loggedIn == false && publiclogin == false) || (tree.getUserData(targetId,'sa') == 1 && superadmin != true) || (tree.getUserData(sourceId,'sa') == 1 && superadmin != true))  {	// telepark.wiki pro
		return false;
	}
	else {
		return true;
	}
}

// on drop
function onDrop(sourceId, targetId,beforeId) {
	if (!savingXML) {
		nodrop=true;
		tree.enableDragAndDrop(false);
		tree.enableDragAndDropScrolling(false);
		tree.setDropHandler("void(0)");
		tree.setDragHandler("void(0)");
		savingXML=true;
		working(true);
		canWriteXML="NO";
		treeLoaded=false;
		checkWriteXML(sourceId);
		proceedOnDrop(sourceId, targetId,beforeId);
	}
}

function proceedOnDrop(sourceId, targetId,beforeId) {
	if (treeLoaded && (canWriteXML=="YES")) {
		var sourceNode=tree._globalIdStorageFind(sourceId);
		var targetNode=tree._globalIdStorageFind(targetId);
		var beforeNode=tree._globalIdStorageFind(beforeId);
		tree._moveNodeTo(sourceNode,targetNode,beforeNode);
		userDataWritten=true;
		saveXMLTree();
	} else {
		setTimeout("proceedOnDrop('"+sourceId+"', '"+targetId+"', '"+beforeId+"')",defaultTime);
	}
}


// ============
// CONTEXT MENU
// ============

// change menu
function changeMenu(itemId) {
	tree.selectItem(itemId,true);
	// if (itemId==newItemId || (loggedIn == false && publiclogin == false))	{
	if (itemId==newItemId || (loggedIn == false && publiclogin == false) || (tree.getUserData(itemId,'sa') == 1 && superadmin != true))	{		// telepark.wiki pro
		doNotShowMenu();
		return false;
	}
	//hide all subblocks
	aMenu.menu.hideButtons('sort');
	aMenu.menu.hideButtons('add');
	aMenu.menu.hideButtons('edit');
	aMenu.menu.hideButtons('delete');
	aMenu.menu.hideButtons('print');
	aMenu.menu.hideButtons('settings');

	if (itemId == 'wiki') {
		aMenu.menu.showButtons('sort');
		aMenu.menu.showButtons('add');
		aMenu.menu.showButtons('edit');
		if (superadmin) aMenu.menu.showButtons('settings');
		aMenu.menu.showButtons('print');
	}
	else if (tree.hasChildren(itemId) > 0) {
		aMenu.menu.showButtons('sort');
		if (tree.getLevel(itemId)<=maxLevels) aMenu.menu.showButtons('add');
		aMenu.menu.showButtons('edit');
		aMenu.menu.showButtons('delete');
		aMenu.menu.showButtons('print');
	}
	else {
		if (tree.getLevel(itemId)<=maxLevels) aMenu.menu.showButtons('add');
		aMenu.menu.showButtons('edit');
		aMenu.menu.showButtons('delete');
		aMenu.menu.showButtons('print');
	}
}

// prevent context menu from showing when it is not necessary (no menu associated with item)
function doNotShowMenu(){
	aMenu.menu.setOnShowHandler(function(){aMenu.menu.hideBar();aMenu.menu.setOnShowHandler(function(){})});
}


// ==============
// ADD TREE ITEMS
// ==============

// add new node next to currently selected (or the first in tree)
function addNewPeer(){
	if(tree.getLevel(newItemId)!=0){//check if unsaved item already exists
		alert("New Item (unsaved) already exists")
		return false;
	}
	var selectedId = tree.getSelectedItemId();
	if(selectedId!=""){
		tree.insertNewNext(selectedId,newItemId,newItemLabel,"","leaf_closed.gif","leaf_open.gif","leaf_closed.gif","SELECT,CALL",0)
	}else{
		tree.insertNewItem(0,newItemId,newItemLabel,"","leaf_closed.gif","leaf_open.gif","leaf_closed.gif","SELECT,CALL",0)
	}
	return;
}

// add new child node to selected item (or the first item in tree)
function addNewChild(){
	if(tree.getLevel(newItemId)!=0){//check if unsaved item already exists
		alert("New Item (unsaved) already exists")
		return false;
	}
	var selectedId = tree.getSelectedItemId();
	if(selectedId!=""){
		itemChange['selectedId']=selectedId;
	}else{
		itemChange['selectedId']=0;
	}
	itemChange['newItemId']=newItemId;
	itemChange['newItemLabel']=newItemLabel;
	itemChange['empty']="";
	itemChange['closed1']="leaf_closed.gif";
	itemChange['open']="leaf_open.gif";
	itemChange['closed2']="leaf_closed.gif";
	itemChange['options']="SELECT,CALL";
	tree.insertNewItem(itemChange['selectedId'],itemChange['newItemId'],itemChange['newItemLabel'],itemChange['empty'],itemChange['closed1'],itemChange['open'],itemChange['closed2'],itemChange['options'],0)
	return;
}


// ================
// UPDATE FUNCTIONS
// ================

// update item
function doUpdateItem(id, label){
	var f = document.forms["wikiForm"];
	f.item_id.value = id;
	tree.changeItemId(tree.getSelectedItemId(),id);
	tree.setItemText(id,label);
	tree.setItemColor(id,color1,color2);
	status();
}

// update item (tree)
function updateItem(pageID,label,name,value,recursive) {
	savingXML=true;
	working(true);
	canWriteXML="NO";
	treeLoaded=false;
	checkWriteXML(itemChange['selectedId']);
	proceedUpdate(pageID,label,name,value,recursive);
}

function proceedUpdate(pageID,label,name,value,recursive) {
	if (treeLoaded && (canWriteXML=="YES")) {
		if (tree._globalIdStorageFind(pageID,true,true,false)) {
			tree.setItemText(pageID,label);
			tree.selectItem(pageID,true);
		} else {
			tree.insertNewItem(itemChange['selectedId'],pageID,label,itemChange['empty'],itemChange['closed1'],itemChange['open'],itemChange['closed2'],itemChange['options'],0)
		}
		tree.setItemColor(pageID,color1,color2);
		userDataWritten=false;
		writeUserData(pageID,name,value,recursive);
		saveXMLTree();
	} else {
		setTimeout("proceedUpdate('"+pageID+"','"+label+"','"+name+"','"+value+"','"+recursive+"')",defaultTime);
	}
}

var userDataWritten=false;

// write user data to tree										// telepark.wiki pro
function writeUserData(pageId,name,value,recursive) {
	var ids = "";
	// set user data
	tree.setUserData(pageId,name,value);
	updateSuperadminState(pageId,value,'-1');
	// set recursive user data
	if (recursive == true && tree.hasChildren(pageId)) {
		ids = getChildIds(pageId);
		idlist = ids.split(",");
		// write user data
		for (i=0; i<idlist.length; i++) {
			tree.setUserData(idlist[i],name,value);
		}
	}
	userDataWritten=true;
}

// update superadmin state (content file)
function updateSuperadminState(id,state,ajaxflag,reverse){					// telepark.wiki pro
	tmpUSSid = id;
	tmpState = state;
	tmpAjaxflag = ajaxflag;
	var hp = new HTTPPost();
	var param = 'pageID=' + id + "&state=" + state;
	if (ajaxflag == -1) var prefix = "";
	else var prefix = "ajax/";
	if (reverse == 1) {
		if (ajaxflag != -1) var prefix = "";
		else var prefix = "ajax/";
	}
	hp.postData(prefix + "updateSuperadminState.php", param, updateSuperadminStateProceed, true);
}

function updateSuperadminStateProceed(req) {
	if (req.readyState == 4)	{
		if (req.status != 200)	{
			updateSuperadminState(tmpUSSid,tmpState,tmpAjaxflag,1);
		}
	}
	status();
}


// ============
// DELETE ITEMS
// ============

// delete item (from database)
function deleteNode(){
	status(true);
	// no deletion if item has children
	if (tree.hasChildren(tree.getSelectedItemId())) {
		alert(str_deletenotpossible);
		status();
		ismenucalled = false;
		return false;
	}
	// no deletion id item is wiki node
	if (tree.getSelectedItemId == "wiki") {
		alert(str_wikiitemdeletenotpossible);
		status();
		ismenucalled = false;
		return false;
	}
	// delete node from db
	if(tree.getSelectedItemId()!=newItemId){
		if(!confirm(str_askdeletenode)) {
			ismenucalled = false;
			status();
			return false;
		}
		var selectedId = tree.getSelectedItemId();
		deleteContentFile(selectedId);
		ismenucalled = false;
	// delete unsaved node
	}else{
		ismenucalled = false;
		deleteContentFile(newItemId);
	}
}

// delete item (content file)
function deleteContentFile(id){
	var hp = new HTTPPost();
	var pageID = 'pageID=' + id;
	if (ajaxFolder == false) var pre = "";
	else var pre = "ajax/";
	document.getElementById('content').innerHTML = '';
	hp.postData(pre + 'deletePage.php', pageID, deleteTreeItem, true);
}

// delete item (tree)
function deleteTreeItem(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseXML && req.responseXML.documentElement)	{
			var pageID = getXMLData(req.responseXML.documentElement.getElementsByTagName('pageID'));
			var err = getXMLData(req.responseXML.documentElement.getElementsByTagName('error'));
			if (err != "") logError(err);
			proceedDeleteTreeItem(pageID);
		}
	}
	status();
}

function proceedDeleteTreeItem(pageID) {
	savingXML=true;
	working(true);
	canWriteXML="NO";
	treeLoaded=false;
	var pId = tree.getParentId(pageID);	checkWriteXML(pId);
	proceedDeleteTreeItem2(pageID);
}

function proceedDeleteTreeItem2(pageID) {
	if (treeLoaded && (canWriteXML=="YES")) {
		var pId = tree.getParentId(pageID);		tree.deleteItem(pageID);		if (pId!="0") tree.selectItem(pId,true);		userDataWritten=true;
		saveXMLTree();
	} else {
		setTimeout("proceedDeleteTreeItem2('"+pageID+"')",defaultTime);
	}
}

// delete comment

function deleteComment(timeVar){
	if (confirm(str_commentDelete)) {
		var hp = new HTTPPost();
		if (ajaxFolder == false) var pre = "";
		else var pre = "ajax/";
		var post="pageID="+tree.getSelectedItemId()+"&comment="+timeVar;
		hp.postData(pre + 'deleteComment.php', post, proceedDeleteComment, true);
	}
}

// proceed action based on timestamp
function proceedDeleteComment(req) {
	if (req.readyState == 4)	{
		if (req.status == 200)	{
			eval(req.responseText);
		}
	}
}
// sort node
function sortNode(treeItemId) {
	savingXML=true;
	working(true);
	canWriteXML="NO";
	treeLoaded=false;
	checkWriteXML(treeItemId);
	proceedSortNode(treeItemId);
}

function proceedSortNode(treeItemId) {
	if (treeLoaded && (canWriteXML=="YES")) {
		tree.sortTree(treeItemId,'ASC',0);
		userDataWritten=true;
		saveXMLTree();
	} else {
		setTimeout("proceedSortNode('"+treeItemId+"')",defaultTime);
	}
}


// ==================
// FILE I/O FUNCTIONS
// ==================

function changeSelectedItemId(id) {
	tree.changeItemId(tree.getSelectedItemId(),id);
}

// save xml tree
var canWriteXML="NO";

function clearItemChange() {
	itemChange['selectedId']=0;
	itemChange['newItemId']=-1;
	itemChange['newItemLabel']="";
}

var savingXML=false;

function saveXMLTree() {
	if (userDataWritten) {
		var hp = new HTTPPost();
		var xmlTree = "string=" + encodeURIComponent(tree.serializeTree());
		if (ajaxFolder == false) var pre = "";
		else var pre = "ajax/";
		hp.postData(pre + 'writeXML.php', xmlTree, checkWriteXMLerrors, true);
		notworking();
		canWriteXML="NO";
		closeMessageBox();
		writeChangestamp();
	} else {
		setTimeout("saveXMLTree()",defaultTime);
	}
}

function checkWriteXMLerrors(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseXML && req.responseXML.documentElement)	{
			var error = getXMLData(req.responseXML.documentElement.getElementsByTagName('error'));
			if (error!="") displaySystemMessage(error,true);
		}
	}
}


//check if menu.xml is locked (if other user is writing to it)

function checkWriteXML(itemId) {
	savingXML=true;
	if (canWriteXML!="YES") {
		var hp = new HTTPPost();
		if (ajaxFolder == false) var pre = "";
		else var pre = "ajax/";
		hp.postData(rootURL + "ajax/" + 'canWriteXML.php', 'itemId='+itemId, setWriteXML, true);
	}
}

function setWriteXML(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseText)	{
			tmp=req.responseText.split("|");
			canWriteXML=tmp[0];
			if (canWriteXML=="YES") {
				lockXML();
				reloadTreeToWrite(tmp[1]);
			} else {
				displaySystemMessage(tmp[2]);
				checkWriteXML(tmp[1]);
			}
		}
	}
}
 
function lockXML() {
	var hp = new HTTPPost();
	if (ajaxFolder == false) var pre = "";
	else var pre = "ajax/";
	hp.postData(pre + 'lockXML.php', '', nofunction, true);
}

function unlockXML() {
	var hp = new HTTPPost();
	if (ajaxFolder == false) var pre = "";
	else var pre = "ajax/";
	hp.postData(pre + 'unlockXML.php', '', nofunction, true);
}

// switch page
function switchPage(pageID,mode) {
	var hp = new HTTPPost();
	var param = 'pageID=' + pageID;
	if (ajaxFolder == false) var pre = "";
	else var pre = "ajax/";
	if (mode == 'view')	hp.postData(pre + 'callPage.php',param, displayPage, true);
	else if (mode == 'form') hp.postData(pre + 'callForm.php',param, displayForm, true);
}

// load page
function getPage(pageID) {
		ismenucalled = false;
		updateSuperadminState(pageID,tree.getUserData(pageID,'sa'));	// telepark.wiki pro
		readChangestamp();
		var hp = new HTTPPost();
		var id = 'pageID=' + pageID;
		if (ajaxFolder == false) var pre = "";
		else var pre = "ajax/";
		hp.postData(pre + 'callPage.php?r=' + Math.random(), id, displayPage, true);
}

// display page
function displayPage(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseText)	{
			if (document.getElementById('content')) {
				eval(req.responseText);
				pageLoaded=true;
				notworking();
			}
		}
	}
}

// log error
function logError(err) {
	var hp = new HTTPPost();
	var err = 'error=' + err;
	hp.postData('ajax/logError.php', err, nofunction, true);
}


// ==============
// FORM FUNCTIONS
// ==============

// add page (add form)
function addPage() {
	//readChangestamp();
	var hp = new HTTPPost();
	var id = 'pageID=' + newItemId;
	hp.postData('ajax/callForm.php?r=' + Math.random(), id, displayForm, false);
}

var loadingEditor=false;

function addPageWait() {
	if (pageLoaded) {
		loadingEditor=false;
		if (ismenucalled==false) setTimeout("addPage()",defaultTime*10);
	} else {
		loadingEditor=true;
		setTimeout("addPageWait()",defaultTime);
	}
}
// edit page (edit form)
function editPage(treeItemId) {
	var hp = new HTTPPost();
	var id = 'pageID=' + treeItemId;
	hp.postData('ajax/callForm.php?r=' + Math.random(), id, displayForm, false);
}

// display form
function displayForm(req) {
	try {
		if (req.readyState == 4)	{
			if (req.status == 200 && req.responseText)	{
				eval(req.responseText);
			}
		}
	} catch(e) {
		setTimeout("displayForm2('"+req.responseText.replace(/'/g,"\\'").replace(/[\n\r]/g,"").replace(/\\n/g,"").replace(/\\"/g,'\\\\"')+"')",defaultTime);
	}
}

function displayForm2(res) {
	try {
		eval(res);
	} catch(e) {
		setTimeout("displayForm2('"+res.replace(/'/g,"\\'").replace(/[\n\r]/g,"").replace(/\\n/g,"").replace(/\\"/g,'\\\\"')+"')",defaultTime);
	}

}


// =========
// FCKEDITOR
// =========

// embedd FCKEditor
function embedEditor(nr) {
    if (!document.getElementById('wikiContent') && nr<5) {
    	logError("The editor couldn't be initialized (attempt " + nr + " of 5).");
    	embedEditor(parseInt(nr)+1);
    }
    if (!document.getElementById('wikiContent') && nr>=5) {
    	displaySystemMessage("The editor couldn't be initialized. Please reload the website and try again.");
    	logError("The editor couldn't be initialized after 5 attempts.");
    }
	var oFCKeditor = new FCKeditor( 'wikiContent' ) ;
    oFCKeditor.BasePath = "FCKeditor/" ;
    oFCKeditor.Width = visualEditorWidth;
    oFCKeditor.Height = visualEditorHeight;
    oFCKeditor.ReplaceTextarea() ;
}

// after FCKEditor is loaded
function FCKeditor_OnComplete( editorInstance ) {
    document.getElementById('wikiMenuLabel').select();
    status();
}

// check if changes have been made
function checkEditorChanges(originalLabel,originalCheckboxState) {
	ieCrashFix();
	unLockFile(tree.getSelectedItemId());							// telepark.wiki pro	var oEditor = FCKeditorAPI.GetInstance('wikiContent') ;
	// changes	// if (oEditor.IsDirty() || (originalLabel != document.getElementById('wikiMenuLabel').value)) {	var wF=false;
	if (document.getElementById('wikiFile')) wF=document.getElementById('wikiFile').value;
	if (oEditor.IsDirty() || (originalLabel != document.getElementById('wikiMenuLabel').value) || (document.getElementById('wikiSuperadminPage') && originalCheckboxState != document.getElementById('wikiSuperadminPage').checked) || document.getElementById('wikiComment').value || wF) {			// telepark.wiki pro
		return true;
	}
	// no changes
	else {
		getPage(tree.getSelectedItemId());
		return false;
	}
}

function ieCrashFix() {
	if (ie) {
		var oEditor = FCKeditorAPI.GetInstance('wikiContent') ;
		if (oEditor.Selection.GetSelectedElement()) {
			if (oEditor.Selection.GetType()=="Control") {
				oEditor.Selection.SelectNode(oEditor.Selection.GetSelectedElement().parentNode.parentNode);
			}
		}
	}
}

// ===============
// LOGIN FUNCTIONS
// ===============

// login box
function loginBox() {
	document.getElementById('loginBox').style.display = 'block';
	document.getElementById('loginBoxField').value = '';
	document.getElementById('loginBoxField').focus();
}

// hide login box
function hideLoginBox() {
	document.getElementById('loginBox').style.display = 'none';
	document.getElementById('loginBoxField').value = '';
}

// submit login
function submitLogin() {
	var password = document.getElementById('loginBoxField').value;
	document.getElementById('loginBox').style.display = 'none';
	document.getElementById('loginBoxField').value = '';
	if (password != '') {
		password = "pass=" + password;
		var hp = new HTTPPost();
		hp.postData('ajax/validateLogin.php', password, validateLogin, true);
	}
}

// check login
function checkLogin() {
	status();
	var hp = new HTTPPost();
	hp.postData('ajax/checkLogin.php', '', login, true);
}

// login
function login(req) {
	//alert(req.readyState);
	if (req.readyState == 4)	{
		//alert(req.status);
		if (req.status == 200 && req.responseXML && req.responseXML.documentElement)	{
			var res = getXMLData(req.responseXML.documentElement.getElementsByTagName('checklogin'));
			var lev = getXMLData(req.responseXML.documentElement.getElementsByTagName('loginlevel'));
			var login_str = getXMLData(req.responseXML.documentElement.getElementsByTagName('login_str'));
			var login_fct = getXMLData(req.responseXML.documentElement.getElementsByTagName('login_fct'));
			var err = getXMLData(req.responseXML.documentElement.getElementsByTagName('error'));
			if (err != "") logError(err);
			// wrong password
			if ((res == '') || (publiclogin)) {
				loggedIn = false;
				loginBox();
			}
			// correct password
			else {
				// user level
				if (lev == 1) {				// telepark.wiki pro
					superadmin = true;
				}
				else {
					superadmin = false;
				}
				// logged in
				loggedIn = true;
				// login link
				if (document.getElementById('loginButton')) {
					document.getElementById('loginButton').innerHTML = '<a href="#" onClick="' + login_fct + '">' + login_str + '</a>';
				}
			}
			toggleTextLinks();
		}
	}
	status();
}

// validate login data
function validateLogin(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseXML && req.responseXML.documentElement)	{
			var res = getXMLData(req.responseXML.documentElement.getElementsByTagName('validatelogin'));
			var lev = getXMLData(req.responseXML.documentElement.getElementsByTagName('loginlevel'));
			var login_str = getXMLData(req.responseXML.documentElement.getElementsByTagName('login_str'));
			var login_fct = getXMLData(req.responseXML.documentElement.getElementsByTagName('login_fct'));
			var err = getXMLData(req.responseXML.documentElement.getElementsByTagName('error'));
			if (err != "") logError(err);
			// correct password
			if (res != "") {
				// login message
				displaySystemMessage(str_loggedin);
				// user level
				if (lev == 1) {			// telepark.wiki pro
					superadmin = true;
				}
				else {
					superadmin = false;
				}
				// logged in
				loggedIn = true;
				// login link
				if (document.getElementById('loginButton')) {
					document.getElementById('loginButton').innerHTML = '<a href="#" onClick="' + login_fct + '">' + login_str + '</a>';
				}
				reloadTree('wiki');
			}
			// wrong password
			else {
				loggedIn = false;
				superadmin = false;		// telepark.wiki pro
				checkLogin();
			}
			toggleTextLinks();
		}
	}
	status();
}

// display or hide text links
function toggleTextLinks() {
	if (textLinks == true && document.getElementById('textlinks')) {
		if (loggedIn == true || publiclogin == true) {
			if (superadmin) {
				document.getElementById('settingsLink').style.display="inline";
			} else {
				document.getElementById('settingsLink').style.display="none";			
			}
			document.getElementById('textlinks').style.display = 'block';
		} else {
			document.getElementById('textlinks').style.display = 'none';
		}
	}
}

// logout
function logout() {
	status();
	var c = confirm(str_asklogout);
	if (c == true) {
		var hp = new HTTPPost();
		hp.postData('ajax/logout.php', '', setLogout, true);
	}
	ismenucalled = false;
}

// set logout
function setLogout(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseXML && req.responseXML.documentElement)	{
			var login_str = getXMLData(req.responseXML.documentElement.getElementsByTagName('login_str'));
			var login_fct = getXMLData(req.responseXML.documentElement.getElementsByTagName('login_fct'));
			var err = getXMLData(req.responseXML.documentElement.getElementsByTagName('error'));
			if (err != "") logError(err);
			if (err == "") {
				loggedIn = false;
				superadmin = false;		// telepark.wiki pro
				if (document.getElementById('loginButton')) {
					document.getElementById('loginButton').innerHTML = '<a href="#" onClick="' + login_fct + '">' + login_str + '</a>';
				}
				displaySystemMessage(str_loggedout);
				reloadTree('wiki');
			}
		}
	}
	status();
}


// ==================
// NOTIFICATION EMAIL
// ==================

// submit sign email				// telepark.wiki pro
function submitSignEmail() {
	if (document.getElementById('signEmail') && document.getElementById('signEmail').value!="") {
		var email = "email=" + document.getElementById('signEmail').value;
		var hp = new HTTPPost();
		hp.postData('ajax/signEmail.php', email, signEmailResult, true);
	}
}
	
// display sign email result		// telepark.wiki pro
function signEmailResult(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseXML && req.responseXML.documentElement)	{
			var res = getXMLData(req.responseXML.documentElement.getElementsByTagName('success'));
			var err = getXMLData(req.responseXML.documentElement.getElementsByTagName('error'));
			if (err != "") logError(err);
			if (res != "") {
				displaySystemMessage(res);
			}
			else {
				displaySystemMessage(err);
			}
		}
	}
	document.getElementById('signEmail').value = "";
	status();
}

// send notification email			// telepark.wiki pro
function sendNotification() {
	var hp = new HTTPPost();
	hp.postData('ajax/sendEmail.php', '', sendEmailResult, true);
}

// display send email result		// telepark.wiki pro
function sendEmailResult(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseXML && req.responseXML.documentElement)	{
			var err = getXMLData(req.responseXML.documentElement.getElementsByTagName('error'));
			if (err != "") logError(err);
		}
	}
}


// ======
// SEARCH
// ======

// check search field before submit			// telepark.wiki pro
function checkSearchField() {
	if (document.getElementById('search') && document.getElementById('search').value != '') {
		return true;
	}
	else {
		return false;
	}
}

// ============
// UNLOCK PAGES
// ============

// unlock page file					// telepark.wiki pro
function unLockFile(pageID) {
	if (pageID==-1) return;
	var hp = new HTTPPost();
	param = "pageID=" + pageID;
	hp.postData('ajax/unLockFile.php', param, unLockFileResult, true);
}

// check lock files					// telepark.wiki pro
function checkLockFiles() {
	var hp = new HTTPPost();
	hp.postData('ajax/checkLockFiles.php', '', nofunction, false);
}


// unlock file result				// telepark.wiki pro
function unLockFileResult(req) {
	if (req.readyState == 4)	{
		if (req.status == 200 && req.responseXML && req.responseXML.documentElement)	{
			var err = getXMLData(req.responseXML.documentElement.getElementsByTagName('error'));
			if (err != "") logError(err);
		}
	}
}

// ============
// PRINT PAGE
// ============
function printPage() {
	treeItemId=tree.getSelectedItemId();
	window.open("printPage.php?pageID="+treeItemId,"PrintPage");
	ismenucalled = false;
}
