var last;
var calling = false;
var pendingCalls = new Array();
var resizeTable = false;
var mouseDown = false;
var actViewMove;
var scrollPosition = new Array();
var loading = true;
var hideCall = false;
var waitForSetWindowSize = false;

function init() {
	loading = false;
	setWindowSizes(true);
}
function chageValue() {
	var myArgs = new Array();
	var args = chageValue.arguments;
	var target = args[0];
	for(i=1; i<args.length; i++) {
		myArgs.push(args[i]);
	}
	callCMD.apply(this, myArgs);
	mouseDown = false;
}
function callCMD() {
	if(!mouseDown) {
		mouseDown = true;
		var i, arg, arg2, elm, name;
		var args = callCMD.arguments;
		args = typeof(args[0])=='object' ? args[0] : args;
		if(calling) {
			var call = new Array();
			for(i=0; i<args.length; i++) {
				call.push(args[i]);
			}
			pendingCalls.push(call);
		} else {
			if(!hideCall) {
				displayElement('waitImg', true);
			}
			hideCall = false;
			var my_args = new Array();
			calling = true;
			for(i=1; i<args.length; i++) {
				arg2 = '';
				arg=args[i];
				elm = arg!='frame' ? document.getElementById(arg) : null;
				if(elm) {
					arg2 = elm.value;
				} else if(typeof(arg) == 'string' && arg.indexOf('.')!=-1) {
					var arg3 = arg.replace('this.', 'args[0].');
					var arg4 = arg3.split('.');
					try {
						if((parseInt(arg4[0])+'')==arg4[0]) {
							arg2 = arg;
						} else {
							eval('arg3='+arg3);
							arg2 = arg3;
						}
					} catch(e) {
						arg2 = arg;
					}
				} else {
					arg2 = arg;
				}
				arg2 = escape(arg2);
				my_args.push(arg2);
			}
			var callMe = hmGui.call(args[0], my_args, hmGui_callback);
		}
	}
}
function hmGui_callback(res) {
	/*
	var objectCount = document.getElementById('objectCount');
	var execTime = document.getElementById('execTime');
	var sessonCount = document.getElementById('sessonCount');
	objectCount.innerHTML = res.objectCount+"/"+res.allObjectCount;
	execTime.innerHTML = res.execTime;
	sessonCount.innerHTML = res.sessonCount;
	*/
	//execTime.innerHTML = "";
	calling = false;
	mouseDown = false;
	if(pendingCalls.length>0) {
		var call = pendingCalls.splice(0,1);
		callCMD(call[0]);
	} else {
		displayElement('waitImg', false);
	}
	setWindowSizes();
	//alert(res.obj);
}
function syncHeader(id, cmdId) {
	var elm = document.getElementById('table_'+id).firstChild; 
	var elm2 = document.getElementById('header_'+id).firstChild; 
	if(elm && elm2 && elm.scrollLeft) {
		elm2.scrollLeft = elm.scrollLeft;
	} else {
		elm2.scrollLeft = 0;
	}
	saveTablePos(elm, id, cmdId);
	return true;
}
function resetTablePos() {
	var i, sp, elm;
	for(i=0; sp=scrollPosition[i]; i++) {
		elm = document.getElementById('table_'+sp.id).firstChild;
		elm.scrollLeft = sp.x;
		elm.scrollTop = sp.y;
		syncHeader(sp.id);
	}
}
function setTablePos(id, x, y, time) {
	var i, elm;
	var found = false;
	for(i=0; elm=scrollPosition[i]; i++) {
		if(elm.id==id) {
			if(elm.time<time) {
				elm.x = x;
				elm.y = y;
				elm.time = time;
			}
			resetTablePos();
			return true;
		}
	}
	scrollPosition.push({id: id, x: x, y: y});
	resetTablePos();
	return true;
}
function saveTablePos(obj, id, cmdId) {
	if(!loading && !waitForSetWindowSize && !calling && obj) {
		var i, elm;
		var found = false;
		for(i=0; elm=scrollPosition[i]; i++) {
			if(elm.id==id) {
				if(obj.scrollLeft!=elm.x || elm.y!=obj.scrollTop) {
					elm.x = obj.scrollLeft;
					elm.y = obj.scrollTop;
					elm.time = getMicrotime();
					if(!elm.listener) {
						watchTableSave(elm, cmdId);
						elm.listener = true;
					}
				}
				found = true;
			}
		}
		if(!found) {
			scrollPosition.push({id: id, x: obj.scrollLeft, y: obj.scrollTop, time: getMicrotime(), listener: false});
		}
	}
}
function watchTableSave(elm, cmdId) {
	setTimeout(function() {
		if(elm.time<=(getMicrotime()-100000)) {
			hideCall = true;
			callCMD(cmdId, elm.x, elm.y, getMicrotime());
			elm.listener = false;
		} else {
			watchTableSave(elm, cmdId);
		}
	}, 100);
}
function getMicrotime() {
	var d = new Date();
	return (d.getTime()*1000)+d.getMilliseconds();
}
function setWindowSizes(afterContentSet) {
	if(afterContentSet && !waitForSetWindowSize) {
		waitForSetWindowSize = true;
		var i, div, myWidth, myHeight;
		var divs2 = new Array();
		var divs = document.getElementsByTagName('div');
		for(i=0; div=divs[i]; i++) {
			if(div.id=="list" || div.id=="list2" ||  div.id=="filters") {
				div.style.display = 'none';
				divs2.push(div);
			}
		}
		for(i=0; div=divs2[i]; i++) {
			myWidth = div.parentNode.clientWidth!=0 ? div.parentNode.clientWidth : "100%";
			myHeight = div.parentNode.clientHeight!=0 ? div.parentNode.clientHeight : "100%";
			if(div.parentNode.clientHeight!=0) {
				if(parseInt(div.style.minHeight)>div.parentNode.clientHeight) {
					myHeight = div.style.minHeight;
				}
			}
			div.style.width = myWidth;
			div.style.height = myHeight;
			div.style.display = 'block';
		}
		setTimeout(function() {
			waitForSetWindowSize = false;
			resetTablePos();
		}, 1);
	}
	resetTablePos();
}
function getMousePos() {
	var mxWidth;
	var pos = window.event.offsetX;
	var td = window.event.target;
	while(td = td.previousSibling) {
		pos += td.clientWidth;
	}
	return pos;
}
function getTdWidthBefore(target) {
	var mxWidth;
	var pos = 0;
	var td = target;
	while(td = td.previousSibling) {
		pos +=  td.clientWidth;
	}
	return pos;
}
function startChangeColumnSize(elm, cmd) {
	var cellIndex, width;
	var target = elm.previousSibling;
	resizeTable = true;
	document.onmousemove = function() {
		var i, n;
		var myTarget = target;
		cellIndex = getCellIndex(target);
		width = Math.max(50, getMousePos()-getTdWidthBefore(target));
		for(i=0; n=target.parentNode.parentNode.childNodes[i]; i++) {
			n.childNodes[cellIndex].width = width+'px';
		}
		var div = getContainer(getContainer(target, 'div'), 'div');
		arangeList(div.id);
		document.focus();
	}
	document.onmouseup = function() {
		var div = getContainer(getContainer(target, 'div'), 'div');
		arangeList(div.id);
		document.onmouseup = null;
		document.onmousemove = null;
		callCMD(cmd, Math.floor(cellIndex/2), width);
		resizeTable = false;
	}
}
function getCellIndex(node) {
	if(node.parentNode.firstChild==node) {
		return 0;
	}
	return getCellIndex(node.previousSibling)+1;
}
function hm_saveGuiStatus() {
	var i, i2, elm;
	var result = new Array();
	var elms = document.getElementsByTagName('div');
	for(i=0; elm=elms[i]; i++) {
		if(elm.style.overflow == 'auto') {
			result.push({elm: elm, scrollTop: elm.scrollTop ,scrollLeft: elm.scrollLeft});
		}
	}
	top.elms = result;
}
function hm_resetGuiStatus() {
	var i, i2, elm;
	for(i=0; elm=top.elms[i]; i++) {
		elm.elm.style.height = '0';
		elm.elm.scrollTop = elm.scrollTop;
		//alert(elm.elm.scrollTop+' '+elm.scrollTop);
	}
}
function displayElement(id, value) {
	var elm = document.getElementById(id);
	if(elm) {
		elm.style.display = value ? 'block' : 'none';
	}
}
function getContainer(elm, nodeName) {
	if(elm.parentNode.nodeName.toLowerCase() == nodeName.toLowerCase()) {
		return elm.parentNode;
	} else if(elm.parentNode != document.body) {
		return getContainer(elm.parentNode, nodeName);
	}
	return false;
}
function findElementById(elm, id) {
	var i, n, tmp;
	for(i=0; n=elm.childNodes[i]; i++) {
		if(n.id == id) {
			return n;
		} else if(n.nodeType == 1) {
			tmp = findElementById(n, id);
			if(tmp) {
				return tmp;
			}
		}
	}
	return false;
}
function arangeList(id) {
	var i;
	var elm = document.getElementById(id);
	var header = findElementById(elm, 'headerTable');
	var rows = findElementById(elm, 'rowsTable');
	var tr1 = header.childNodes[1].firstChild;
	var tr2 = rows.childNodes[1].firstChild;
	for(i=0; i<tr2.childNodes.length; i++) {
		if(tr2.childNodes[i] == tr2.lastChild) {
			tr1.childNodes[i].width = tr2.childNodes[i].width = null;
		} else {
			tr1.childNodes[i].width = tr2.childNodes[i].width = tr2.childNodes[i].clientWidth;
		}
	}
}

function onBeforeUpload(id) {
	var fileField = document.getElementById(id+'_file');
	if(fileField.value) {
		var my_form = document.forms["form_"+id];
		var hiddenLayer = document.getElementById('hiddenLayer');
		if(!hiddenLayer) {
			var hiddenLayer = document.createElement('div');
			hiddenLayer.id = 'hiddenLayer';
			hiddenLayer.style.position = 'absolute';
			hiddenLayer.style.top = -1000;
			hiddenLayer.style.left = -1000;
			hiddenLayer.style.width = '1px';
			hiddenLayer.style.height = '1px';
			hiddenLayer.innerHTML = ''
			document.body.appendChild(hiddenLayer);
		}
		try {
			var elm = document.getElementById('hiddenFrame_'+id);
			if(!elm) {
	   			var elm = document.createElement('div');
				var str = '<iframe id="hiddenFrame_'+id+'" frameborder="1" name="hiddenFrame_'+id+'"></iframe>';
				elm.innerHTML += str;
				hiddenLayer.appendChild(elm);
			}
			my_form.action = 'index.php';
			my_form.target = 'hiddenFrame_'+id;
		} catch (e) {
			alert(e);
		}
		return true;
	} else {
		alert('Bitte wählen Sie zunächst eine Datei aus.');
		fileField.click();
	}
	return false;
}
function getFormForInput(node) {
	if(node.parentNode.nodeName == 'FORM') {
		return node.parentNode;
	} else if(node.parentNode != document) {
		node = getFormForInput(node.parentNode);
		return node;
	}
	return false;
}
function centerContent(id) {
	var elm = document.getElementById(id);
	elm.firstChild.style.left = Math.round((document.body.clientWidth-elm.firstChild.clientWidth)/2);
	elm.firstChild.style.top = Math.round((document.body.clientHeight-elm.firstChild.clientHeight)/2);
}

//window.onresize = setWindowSizes;
document.onmouseup = function() {
	mouseDown = false;
}
document.onselectstart= function() {
	return !resizeTable;
}

