//Global
var _currentSortBy 			= null;
var _currentSortDirection 	= null;
var _defaultColWidth		= 20;

// test
function getNodeValueByRef(node,ref) {
	value = '';
	if(ref.indexOf("@") != -1) {
		value = node.getAttribute(ref.substr(1));
	} else {
		value = getElementValue(node.getElementsByTagName(ref)[0]);
	}

	return value;
}

function getStartPath(startPath, xml) {
	if(isNaN(startPath)) {
		return startPath;
	} else {
		publications = getRootElement(xml,"structure").getElementsByTagName("publication");

		for(i=0;i<publications.length;i++) {
			if(publications[i].getAttribute("id") == startPath) {
				return publications[i].getAttribute("path");
				break;
			}
		}
	}
}

//TREE
function getTree() {
	progressVisible('treeProgress', true);
	var requestURI = __tdlcMenuServletURI + "?configpath=" + __tdlcConfigPath;
	ajaxRequest(requestURI, writeTree);
}

function writeTree(xml) {
	if(__tdlcMenuStartPath) __tdlcMenuStartPath = getStartPath(__tdlcMenuStartPath, xml);

	menuStructure = "[['', '', 'getFiles(null, null, null, null);', '', ''," +buildTreeStructure(xml, true)+ "],]";
	TREE_ITEMS = eval(menuStructure);
	new tree(TREE_ITEMS, TREE_TPL);
	//writeEmptyFileList();
       var currentUrl = window.location.search
        if ((currentUrl.indexOf('startpath') <= 0)) {
          getFiles(null, null, null, null);
       }
}

function buildTreeStructure(menuXML, firstrun) {

	var menuHTML	= "";

	if(firstrun != null) {
		var folders		= getChildNodes(getRootElement(menuXML,"structure"),"publication");
	} else {
		var folders		= getChildNodes(getRootElement(menuXML),"publication");
	}

	var tree = "";
	for(var i=0;i<folders.length;i++) {
		if(hasChildNodes(folders[i],"publication")) {
			var tmpFolderId =  folders[i].getAttributeNode("id").nodeValue
			tree += "['"+escape(getElementValue(folders[i].getElementsByTagName("title")[0]))+"', '#', 'getFiles(\\'"+tmpFolderId+"\\',this, _currentSortBy, _currentSortDirection);', '"+folders[i].getAttribute("path")+"', '"+folders[i].getAttribute("id")+"',";
			tree += buildTreeStructure(folders[i]);
			tree += "],";
		} else {
			tree += "['"+escape(getElementValue(folders[i].getElementsByTagName("title")[0]))+"', '#"+folders[i].getAttribute("id")+"', 'getFiles(\\'"+folders[i].getAttribute("id")+"\\',this, _currentSortBy, _currentSortDirection);', '"+folders[i].getAttribute("path")+"', '"+folders[i].getAttribute("id")+"'],";
		}
	}
	tree += "";

	progressVisible('treeProgress', false);

	return tree;
}

//FILES
var _currentStartpathID 	= null;
function getFiles(id,menuItem,sortBy,sortDirection) {
	writeEmptyFileList();

	progressVisible('fileProgress', true);

	if(menuItem) menuItem.blur();

	_currentStartpathID 	= id;
	_currentSortBy			= sortBy;
	_currentSortDirection	= sortDirection;

	var requestURI = __tdlcDataServletURI + "?configpath=" + __tdlcConfigPath + "&startpathID=" + id;
	if(sortBy){
		requestURI = requestURI + "&sortierung=" + _currentSortBy;
	}
	if(sortDirection){
		requestURI = requestURI + "&sortType=" + _currentSortDirection;
	}
	if(document.getElementById("subtreeToggle").checked) {
		requestURI = requestURI + "&listModus=subtree";
	}

	filter = "";
	if(document.getElementById("filter1").checked) {
		filter += "&filter=" + document.getElementById("filter1").value;
	}
	if(document.getElementById("filter2").checked) {
		filter += "&filter=" + document.getElementById("filter2").value;
	}
	requestURI += filter;
	ajaxRequest(requestURI, writeFileList);
}

function writeFileList(xml) {
	document.getElementById("files").innerHTML = buildFileListHTML(xml);
	moveTableHead();
	setColumnWidth();
}

function writeEmptyFileList() {
	document.getElementById("files").innerHTML = ''+buildFileListHeader(null,null)+'';
	setColumnWidth();
}

function buildFileListHeader(sortBy,sortDirection) {
	fileListHeader = '\n<div id="tabhead">\n';

		for(var i=0;i<__tdlcDataAttributes.length;i++) {
			thisSortBy = null;
			if(!__tdlcDataAttributes[i].__tdlcValue) {
				if(__tdlcDataAttributes[i].__tdlcLink) {
					thisSortBy = __tdlcDataAttributes[i].__tdlcLink.__tdlcTitle;
				}
			} else {
				thisSortBy = __tdlcDataAttributes[i].__tdlcValue;
			}

			classSelector='class="';

			isSortcol 		= (thisSortBy == sortBy) ? true : false;
			if(isSortcol) {
				classSelector += ' bold';
			}

			isFirstCol 		= (i==0) ? classSelector+=' first' : '';
			sortDirection	= sortDirection ? sortDirection : 'inactive';

			if(thisSortBy == sortBy) {
				sortDirNew = (sortDirection == 'dec') ? 'asc' : 'dec';
			} else {
				sortDirNew = 'dec';
			}

			sortImage		= isSortcol ? 'dl_arrow_sort_'+sortDirection+'.gif' : 'dl_arrow_sort_inactive.gif';
			sortAction		= " onclick=\"getFiles('"+_currentStartpathID+"', null, '"+thisSortBy+"', '"+sortDirNew+"');\"";

			classSelector +='"';

			if(classSelector=='class=""') {
				classSelector='';
			}
			fileListHeader += '<div'+sortAction+' '+classSelector+' id="th'+i+'">'+__tdlcDataAttributes[i].__tdlcHeader+'<img src="/xpool/images/global/'+sortImage+'" alt="" width="7" height="4" align="texttop" /></div>\n';
		}

	fileListHeader += '\n</div>\n';

	return fileListHeader;
}

function buildFileListHTML(filesXML) {

	var filesHTML	= "";
	var files		= getChildNodes(getRootElement(filesXML));


	filesHTML = 	''+buildFileListHeader(_currentSortBy,_currentSortDirection)+'';
	filesHTML += 	'<table id="filetable">';
	for(var i=0;i<files.length;i++) {
		filesHTML += 	'\n<tr class="data">';

		for(var j=0;j<__tdlcDataAttributes.length;j++) {
			isFirstCol = (j==0) ? ' class="first"' : '';
			colWidth = _defaultColWidth;
			if(__tdlcDataAttributes[j].__tdlcWidth != null) {
				colWidth = __tdlcDataAttributes[j].__tdlcWidth;
			}
			filesHTML += '<td'+isFirstCol+' width="'+colWidth+'">';
			if(__tdlcDataAttributes[j].__tdlcLink) {
				linkUrl 	= getNodeValueByRef(files[i],__tdlcDataAttributes[j].__tdlcLink.__tdlcUrl);
				linkTitle 	= getNodeValueByRef(files[i],__tdlcDataAttributes[j].__tdlcLink.__tdlcTitle);

				filesHTML += '<a href="'+linkUrl+'" target="_blank">'+linkTitle+'</a>';
			} else {
				filesHTML += getNodeValueByRef(files[i],__tdlcDataAttributes[j].__tdlcValue);
			}

			filesHTML += '</td>\n';
		}

		filesHTML += 	'</tr>';
	}
	filesHTML += 	'</table>';

	progressVisible('fileProgress', false);

	return filesHTML;
}

function setColumnWidth() {
	var debug=navigator.appName+' \n';
	var filetableElem = null;

	try {
		filetableElem =document.getElementById('filetable');
	} catch (e) {
		;
	}

	if (filetableElem!=null) {

		for(i=0;i<__tdlcDataAttributes.length;i++) {

			var elem = null;
			var headelem = document.getElementById('th'+i);

			try {
				elem = document.getElementById('filetable').getElementsByTagName('tr')[0].getElementsByTagName('td')[i];
				fileTableWidth = document.getElementById('filetable').offsetWidth;

				document.getElementById('tabhead').style.width = fileTableWidth + "px";

				if (elem!=null) {
					width = elem.offsetWidth;
					debug += width+':';
					setWidth(headelem,width);
				} else {
					break;
				}
			} catch (e) {
				if(!elem || elem==null) {
					setWidth(headelem,__tdlcDataAttributes[i].__tdlcWidth);
				}
			}
		}
	}
}

function setWidth(element,value) {
	if(element!=null && value>=0) {
	/*Gecko addiert Rahmenbreite und Abst������������������nde dazu*/
		if(navigator.appName.indexOf("Netscape") != -1) {
			element.style.width=(value-8)+'px';
		} else if (navigator.appName.indexOf("Microsoft") != -1){
			element.style.width=(value-7)+'px';
		} else {
			element.style.width=value+'px';
		}
	}
}


function moveTableHead() {

	var tabheadElem = document.getElementById('tabhead');
	var filesElem = document.getElementById('files');

	pos = filesElem.scrollTop
	tabheadElem.style.top = pos+"px";

	setTimeout('moveTableHead()',300);

}


function toKB(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? ',' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + '.' + '$2');
	}
	return x1 + x2;
}

function progressVisible(idStr, visible) {
	if(visible) {
		setVisible(idStr, true);
	} else {
		setVisible(idStr, false);
	}
}


function setVisible(idStr, visible) {
	if(visible) {
		document.getElementById(idStr).style.display = 'block';
	} else {
		document.getElementById(idStr).style.display = 'none';
	}
}

function showError(message) {
	output ='<h2>Fehler...</h2>\n';
	output +='<p class="message">';
	output +=message;
	output +='</p>\n';
	output +='<p><a href="#" onclick="setVisible(\'tdlcError\',false); return false;" class="close">OK</a></p>';
	document.getElementById('tdlcError').innerHTML = output;
	setVisible('tdlcError', true);
}