var activatedMenuItem = false;
var highlightedMenuItem = false;
var activateFirstItem = false;
var openMenu = false;
var ajax = null;

function activateNupp(nupp){
	var sibling;
	if(nupp){
		nupp.className = 'item sel';

		sibling = nupp;
		while((sibling = sibling.previousSibling) && sibling.tagName != "DIV");
		if(sibling) sibling.className = "sep sel_top";
		
		sibling = nupp;
		while((sibling = sibling.nextSibling) && sibling.tagName != "DIV");
		if(sibling) sibling.className = "sep sel_bottom";
		
		openMenu = nupp;
	}
	
}

function deActivateNupp(){
	var sibling;
	var nupp = openMenu;
	if(nupp){
		nupp.className = 'item';

		sibling = nupp;
		while((sibling = sibling.previousSibling) && sibling.tagName != "DIV");
		if(sibling) sibling.className = "sep";
		
		sibling = nupp;
		while((sibling = sibling.nextSibling) && sibling.tagName != "DIV");
		if(sibling) sibling.className = "sep";
		
		openMenu = false;
	}
}

function otsingActivate(id,defaultOffset){
	closeAllMenus();
	
	//if(document.getElementById('sisuosa'))
	//	document.getElementById('sisuosa').className = "hidden";
	document.getElementById('treeview').className = "";
	
	if(nupp = document.getElementById('otsing_nupp_'+id))
		activateNupp(nupp);
	
	handleMenuItemSelect(id, true, defaultOffset);
}

function otsingClose(){
	activatedMenuItem = false;
	clearChildColumns(false);
	
	deActivateNupp();
	
	if(document.getElementById('treeview'))
		document.getElementById('treeview').className = "hidden";

	highlightedMenuItem = false;
}

function struktuuriOtsingActivate(rootID, openStructID, showDynamicTree){
	closeAllMenus();
	if(nupp = document.getElementById('nupp_struktuurist'))
		activateNupp(nupp);
	if(rootID){
		
		if(document.getElementById('sisuosa'))
			document.getElementById('sisuosa').className = "hidden";
		
		
		if(showDynamicTree){
			document.getElementById('structureview').className = "";
			fetchStructureMenu(rootID, openStructID);
		}else{
            if(document.getElementById('firstlevelstructure'))
			    document.getElementById('firstlevelstructure').className = "";
		}
	}
}

function kaardiOtsingActivate(){
	closeAllMenus();
	if(nupp = document.getElementById('nupp_kaardilt'))
		activateNupp(nupp);
}

function minuTallinnActivate(){
	closeAllMenus();
	if(nupp = document.getElementById('nupp_minutallinn'))
		activateNupp(nupp);
}

function kliendisuhtlusActivate(){
	closeAllMenus();
	if(nupp = document.getElementById('nupp_teenindusbyroo'))
		activateNupp(nupp);
}

function marksonaOtsingActivate(offset){
	closeAllMenus();
	if(!offset) offset = 0;
//	offset+=83;
	offset1 = offset+83;
	offset2 = offset+83;
	var agt = navigator.userAgent.toLowerCase();
	var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
	if(is_ie && (agt.indexOf("msie 6.")!=-1)){
		offset2 = offset+37;
	}
	if(document.getElementById('otsing')){
		document.getElementById('otsing').style.visibility='visible';
		document.getElementById('otsing').style.top = offset2+'px';
	}
	if(document.getElementById('otsing_IE6')){
		document.getElementById('otsing_IE6').style.visibility='visible';
		document.getElementById('otsing_IE6').style.top = offset1+'px';
	}
	document.getElementById('otsingSona').select();
}

function marksonaOtsingClose(){
	if(document.getElementById('otsing'))
		document.getElementById('otsing').style.visibility='hidden';
	if(document.getElementById('otsing_IE6'))
		document.getElementById('otsing_IE6').style.visibility='hidden';
}

function marksonaOtsingSubmit(){
	if(document.getElementById('otsingSona'))
		document.location.href = 'otsing?fraas='+document.getElementById('otsingSona').value;
}

function marksonaOtsingKeyPress(e){
	var keynum;
	var keychar;
	var numcheck;
	
	if(window.event) // IE
	{
		keynum = e.keyCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which;
	}
	if(keynum == 13)
		marksonaOtsingSubmit();
	return true;
}

function closeAllMenus(){
	deActivateNupp();
	if(document.getElementById('kuidaskasutada'))
		document.getElementById('kuidaskasutada').style.visibility='hidden';
	if(document.getElementById('sisuosa'))
		document.getElementById('sisuosa').className = "";
	document.getElementById('treeview').className = "hidden";
	if(document.getElementById('structureview'))
		document.getElementById('structureview').className = "hidden";
    if(document.getElementById('firstlevelstructure'))
	    document.getElementById('firstlevelstructure').className = "hidden";
	otsingClose();
	marksonaOtsingClose();
}

var menuTimeoutID = 0;
var lastMenuID = 0;

function handleMenuItemSelect(id, retrieveChildren, defaultOffset){
	var menuItem = document.getElementById('menuitem_'+id);
	if(!defaultOffset)
		defaultOffset = 0;
	
	highlightMenuItem(id);
	
	if(id != lastMenuID){
		if(menuTimeoutID)
			window.clearTimeout(menuTimeoutID);
		lastMenuID = id;
		menuTimeoutID = window.setTimeout(function(){onMenuItemTimer(id,retrieveChildren,defaultOffset);},500);
	}
		
}

function highlightMenuItem(id){
	var menuItem = document.getElementById('menuitem_'+id);
	var childNode = null;
	
	if(menuItem){
		for(i=0; i<menuItem.parentNode.childNodes.length; i++){
			childNode = menuItem.parentNode.childNodes[i];
			childNode.className = 'button';
		}
		menuItem.className = 'button sel';
		
		var thisColumn = getMenuColumn(id);
		if(thisColumn)
			clearChildColumns(thisColumn.id);
		
		highlightedMenuItem = id;
	}
}

function onMenuItemTimer(id, retrieveChildren, defaultOffset){
	var menuItem = document.getElementById('menuitem_'+id);
	
	lastMenuID = 0;
	menuTimeoutID = 0;
	
	highlightMenuItem(id);
	
	if(retrieveChildren && activatedMenuItem != id){
		activatedMenuItem = id;
		ajax = new getAjax();
		
		ajax.open("POST", 'StructureXMLProxy', true);
		ajax.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded');
		ajax.setRequestHeader("Content-Encoding", 'UTF-8');
		ajax.send('action=getStructureMenu&root_id=' + id);
		
		ajax.onreadystatechange = function() {
			if (activatedMenuItem && ajax.readyState == 4 && ajax.status == 200) {
				var menuItem = document.getElementById('menuitem_'+activatedMenuItem);
				var offset = defaultOffset ? (defaultOffset-42) : 0;
				
				if(menuItem){
					var sibling = menuItem;
					while(sibling = sibling.previousSibling){
						offset += sibling.offsetHeight;
					}
					if(menuItem.parentNode.className == 'holder'){
						offset += parseInt(menuItem.parentNode.style.marginTop);
						
						sibling = menuItem.parentNode;
						while(sibling = sibling.previousSibling){
							offset += sibling.offsetHeight;
						}
					}
				}
				
				activatedMenuItem = false;
				var firstItem = activateFirstItem;
				activateFirstItem = false;
				//alert(ajax.responseText);
				//alert(ajax.responseXML);
				updateMenu(ajax.responseXML,offset,firstItem);
			}
		}
	}
}

function menuMoveToFirst(){
	var column = document.getElementById('column1');
	if(column){
		var holder = column.firstChild;
		while(holder && holder.className != "holder") holder = holder.nextSibling;
		if(holder && holder.firstChild){
			var newItem = holder.firstChild;
			if(newItem && newItem.firstChild && newItem.firstChild.firstChild){
				newItem.firstChild.firstChild.onmouseover();
				return true;
			}
		}
	}
	return false;
}

function getMenuItemTop(menuItem){
	var offset = 0;
	while(menuItem.previousSibling){
		offset += menuItem.previousSibling.offsetHeight;
		menuItem = menuItem.previousSibling;
	}
	return offset;
}

function ensureMenuItemVisibility(menuItem){
	offsetTop = getMenuItemTop(menuItem);
	if(offsetTop < -(parseInt(menuItem.parentNode.style.marginTop))){	
		menuItem.parentNode.style.marginTop = (-offsetTop) + 'px';
	}else if(menuItem.parentNode.previousSibling){ 
		if(offsetTop + menuItem.offsetHeight > menuItem.parentNode.parentNode.clientHeight - parseInt(menuItem.parentNode.style.marginTop) - 36){
			menuItem.parentNode.style.marginTop = -(offsetTop + menuItem.offsetHeight - menuItem.parentNode.parentNode.clientHeight + 36) + 'px';
		}
	}
}

function menuMove(direction){
	activateFirstItem = false;
	if(highlightedMenuItem){
		var menuItem = document.getElementById('menuitem_'+highlightedMenuItem);
		if(menuItem){
			var newItem = null;
			if(direction == 1){
				newItem = menuItem.nextSibling ? menuItem.nextSibling : menuItem.parentNode.firstChild;
			}else if(direction == -1){
				newItem = menuItem.previousSibling ? menuItem.previousSibling : menuItem.parentNode.lastChild;
			}
			
			if(newItem && newItem.firstChild && newItem.firstChild.firstChild){
				ensureMenuItemVisibility(newItem);
				newItem.firstChild.firstChild.onmouseover();
				return true;
			}
		}
	}else{
		return menuMoveToFirst();
	}
	return false;
}

function menuSelectNext(){
	if(highlightedMenuItem){
		var childColumn = getChildColumn(highlightedMenuItem);
		if(childColumn){
			var holder = childColumn.firstChild;
			while(holder && holder.className != "holder") holder = holder.nextSibling;
			var newItem = null;
			if(holder) newItem = holder.firstChild;
			
			if(newItem && newItem.firstChild && newItem.firstChild.firstChild){
				newItem.firstChild.firstChild.onmouseover();
				return true;
			}else{
				activateFirstItem = true;
				return true;
			}
		}else{
			activateFirstItem = true;
			return true;
		}
	}else{
		return menuMoveToFirst();
	}
	return false;
}

function stopMenuTimer(){
	if(menuTimeoutID){
		window.clearTimeout(menuTimeoutID);
		menuTimeoutID = false;
	}
}

function menuSelectPrevious(){
	activateFirstItem = false;
	stopMenuTimer();
	
	if(highlightedMenuItem){
		var parentColumn = getParentColumn(highlightedMenuItem);
		if(parentColumn){
			var holder = parentColumn.firstChild;
			while(holder && holder.className != "holder") holder = holder.nextSibling;
			
			if(holder){
				var menuItem = holder.firstChild;
				while(menuItem && menuItem.className != "button sel") menuItem = menuItem.nextSibling;
				if(menuItem){
					var menuID = parseInt(menuItem.id.substring("menuitem_".length));
					if(menuID){
						highlightedMenuItem = menuID;
					}
				}
			}
			
			clearChildColumns(parentColumn.id);
			return true;
		}else{
			highlightedMenuItem = false;
			clearChildColumns(null);
			return true;
		}
	}
	return false;
}

function menuEnter(){
	if(highlightedMenuItem){
		var menuItem = document.getElementById('menuitem_'+highlightedMenuItem);
		if(menuItem){
			if(menuItem.firstChild && menuItem.firstChild.firstChild){
				otsingClose();
				window.location.href = menuItem.firstChild.firstChild.href;
				return true;
			}
		}
	}
	return false;
}

function menuKeyDownHandler(e)
{
	var keyCode;
	
	if(window.event) // IE
		keyCode = window.event.keyCode;
	else if(e.which) // Netscape/Firefox/Opera
		keyCode = e.which;
	
	var ok = false;
	
	if(keyCode==37) ok = menuSelectPrevious();
	else if(keyCode==38) ok = menuMove(-1);
	else if(keyCode==39) ok = menuSelectNext();
	else if(keyCode==40) ok = menuMove(1);
	else if(keyCode==13) ok = menuEnter();

	if(ok){
		if (!e)	var e = window.event;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
		e.returnValue = false;
	}
	return !ok;
}

function getParentColumn(id){
	var childColumn = getMenuColumn(id);
	var targetColumn = null;
	
	if(childColumn){
		var childColumnId = childColumn.id;
		
		if(childColumnId == 'column4')
			targetColumn = document.getElementById('column3');
		else if(childColumnId == 'column3')
			targetColumn = document.getElementById('column2');
		else if(childColumnId == 'column2')
			targetColumn = document.getElementById('column1');
	}
	return targetColumn;
}

function getChildColumn(id){
	var parentColumn = getMenuColumn(id);
	var targetColumn = null;
	
	if(parentColumn){
		var parentColumnId = parentColumn.id;
		
		if(parentColumnId == 'column1')
			targetColumn = document.getElementById('column2');
		else if(parentColumnId == 'column2')
			targetColumn = document.getElementById('column3');
		else if(parentColumnId == 'column3')
			targetColumn = document.getElementById('column4');
	}else{
		targetColumn = document.getElementById('column1');
	}
	return targetColumn;
}

function getChildBgColumn(id){
	var parentColumn = getMenuColumn(id);
	var targetColumn = null;
	
	if(parentColumn){
		var parentColumnId = parentColumn.id;
		
		if(parentColumnId == 'column1')
			targetColumn = document.getElementById('column2_bg');
		else if(parentColumnId == 'column2')
			targetColumn = document.getElementById('column3_bg');
		else if(parentColumnId == 'column3_bg')
			targetColumn = document.getElementById('column4_bg');
	}else{
		targetColumn = document.getElementById('column1_bg');
	}
	return targetColumn;
}

function getMenuColumn(id){
	var menuItem = document.getElementById('menuitem_'+id);
	if(!menuItem)
		return false;
	var thisColumn = menuItem.parentNode;
	if(thisColumn.className == 'holder')
		thisColumn = thisColumn.parentNode;
	return thisColumn;
}

function clearChildColumns(columnID){
	/*var bg;
	
	activatedMenuItem = false;
	switch(columnID){
		case null:
		case false: 
			removeChildren(document.getElementById('column1'));
			document.getElementById('column1').className = "column hidden";
			if (bg = document.getElementById('column1_bg')) {
				bg.className = "hidden";
			}
		case 'column1': 
			removeChildren(document.getElementById('column2'));
			document.getElementById('column2').className = "column hidden";
			if (bg = document.getElementById('column2_bg')) {
				bg.className = "hidden";
			}
		case 'column2': 
			removeChildren(document.getElementById('column3'));
			document.getElementById('column3').className = "column hidden";
			if (bg = document.getElementById('column3_bg')) {
				bg.className = "hidden";
			}
		case 'column3': 
			removeChildren(document.getElementById('column4'));
			document.getElementById('column4').className = "column hidden";
			if (bg = document.getElementById('column4_bg')) {
				bg.className = "hidden";
			}
	}*/
}

function removeChildren(node){
	if(node){
		while (node.childNodes[0]) node.removeChild(node.childNodes[0]);
	}
}

function updateMenu(objXML, requiredOffset, firstItemSelected){
	if(objXML && objXML != null) {
		var parentKeywords = objXML.getElementsByTagName('parentStructElement');
		var keywords = objXML.getElementsByTagName('structElement');
		var parent_id = 0;
		if(parentKeywords.length){
			parent_id = parseInt(parentKeywords[0].attributes.getNamedItem('id').value);
		}
		
		if(keywords.length > 0){
			var targetColumn = getChildColumn(parent_id);
			var targetBgColumn = getChildBgColumn(parent_id);
			
			if(targetColumn){
				var menuOffset = 0;
				removeChildren(targetColumn);
				targetColumn.className = "column";
				if (targetBgColumn) {
					targetBgColumn.className = "";
				}
				var holder = document.createElement('div');
				holder.className = 'holder';
				
				var useSeparator = false;
				for(var i = 0; i<keywords.length; i++){
					/*var style = keywords[i].attributes.getNamedItem('style').value;
					if(style == 'separator'){
						useSeparator = true;
						continue;
					}*/
					var id = parseInt(keywords[i].attributes.getNamedItem('id').value);
					var hasChildren = parseInt(keywords[i].attributes.getNamedItem('hasChildren').value);
					var linkURL = keywords[i].attributes.getNamedItem('linkURL').value;
					var text = keywords[i].firstChild.data;
					var item = createMenuItem(id, text, hasChildren, useSeparator, linkURL);
					useSeparator = false;
					
					holder.appendChild(item);
				}
				
				targetColumn.style.visibility = "hidden";
				
				targetColumn.appendChild(holder);
				var menuHeight = holder.offsetHeight;
				
				if(menuHeight > targetColumn.clientHeight){
					targetColumn.insertBefore(createScrollUp(targetColumn.id),targetColumn.firstChild);
					targetColumn.insertBefore(createScrollDown(targetColumn.id),targetColumn.firstChild);
					holder.style.marginTop = '0px';
				}else{
					if(requiredOffset + menuHeight > targetColumn.clientHeight){
						if(requiredOffset + 26 - menuHeight >= 0){
							menuOffset = requiredOffset + 26 - menuHeight;
						}else{
							menuOffset = targetColumn.clientHeight - menuHeight;
						}
					}else{
						menuOffset = requiredOffset;
					}
					holder.style.marginTop = menuOffset+'px';
				}
				
				targetColumn.style.visibility = "visible";
				
				if(firstItemSelected)
					menuSelectNext();
			}
		}
	}
}

var vScroll = 0;
var vScrollHolder = false;

function scrollStart(column, dir){
	vScroll = dir;
	for(i=0; i<column.childNodes.length; i++){
		if(column.childNodes[i].className == 'holder'){
			vScrollHolder = column.childNodes[i];
			break;
		}
	}
	if(vScrollHolder)
		scroll();
}

function scrollStop(){
	vScroll = 0;
}

function scroll(){
	if(vScrollHolder){
		var vScrollDiff = 10;
		if(vScroll == 1){ // up
			if(parseInt(vScrollHolder.style.marginTop)+vScrollDiff >= 0){
				vScrollHolder.style.marginTop = '0px';
				scrollStop();
			}else{
				vScrollHolder.style.marginTop = (parseInt(vScrollHolder.style.marginTop) + vScrollDiff) + 'px';
				setTimeout("scroll()",75);
			}
		}else if(vScroll == 2){ // down
			var menuHeight = vScrollHolder.offsetHeight;
			if(parseInt(vScrollHolder.style.marginTop) - vScrollDiff <= -(menuHeight - vScrollHolder.parentNode.clientHeight + 30)){
				vScrollHolder.style.marginTop = -(menuHeight - vScrollHolder.parentNode.clientHeight + 30)+'px';
				scrollStop();
			}else{
				vScrollHolder.style.marginTop = (parseInt(vScrollHolder.style.marginTop) - vScrollDiff) + 'px';
				setTimeout("scroll()",75);				
			}
		}
	}
}

function createScrollUp(columnName){
	var scrollUp = document.createElement('a');
	scrollUp.href = '#';
	scrollUp.className = 'scrollup';
	
	scrollUp.onmouseover = function(e){
		if(e){
			if(e.target)
				scrollStart(e.target.parentNode,1);
		}else{
			if(event.srcElement)
				scrollStart(event.srcElement.parentNode,1);
		} 
	}
	scrollUp.onmouseout = function(){
		scrollStop();
	}
	
	return scrollUp;
}

function createScrollDown(columnName){
	var scrollDown = document.createElement('a');
	var scrollDownHolder = document.createElement('div');
	
	scrollDownHolder.className = 'absoluter';
	
	scrollDown.href = '#';
	scrollDown.className = 'scrolldown';
	
	scrollDown.onmouseover = function(e){
		if(e){
			if(e.target)
				scrollStart(e.target.parentNode.parentNode,2);
		}else{
			if(event.srcElement)
				scrollStart(event.srcElement.parentNode.parentNode,2);
		} 
	}
	scrollDown.onmouseout = function(){
		scrollStop();
	}
	
	scrollDownHolder.appendChild(scrollDown);
	
	return scrollDownHolder;
}

function createMenuItem(id, text, hasChildren, nextSection, linkURL){
	var menuItem = document.createElement('div');
	var menuInner = document.createElement('div');
	var menuLink = document.createElement('a');
	
	menuItem.className = 'button';
	menuItem.id = 'menuitem_'+id;
	if(hasChildren){
		menuLink.onmouseover = function(){
			handleMenuItemSelect(id, true);
		}
	}else{
		menuLink.onmouseover = function(){
			handleMenuItemSelect(id, false);
		}
	}
	
	menuInner.className = 'inner';
	if(nextSection)
		menuInner.style.borderTop = '1px solid #0F0F0F';
	
	if(linkURL.length)
		menuLink.href = linkURL;
	
	if(hasChildren){
		menuLink.className = 'multi';
	}
	menuLink.appendChild(document.createTextNode(text));
	
	menuInner.appendChild(menuLink);
	menuItem.appendChild(menuInner);
	
	return menuItem;
}
function init_bodyheader(){
	setFontSize();
	document.body.onclick=otsingClose;
	document.onkeydown = menuKeyDownHandler;
}
function getCookie(cookieName) {
	oCookie = document.cookie;
	var index = oCookie.indexOf(cookieName + "=");
	if (index == -1) return null;
	index = oCookie.indexOf("=", index) + 1;
	var endstr = oCookie.indexOf(";", index);
	if (endstr == -1) endstr = oCookie.length;
	return unescape(oCookie.substring(index, endstr));
}

function setCookie(cookieName,cookieValue) {
	var today = new Date();
	var expire = new Date();
	expire.setTime(today.getTime() + 3600000*24*1000);
	document.cookie = cookieName + "=" + escape(cookieValue) + ";expires="+expire.toGMTString();
}

// size - fondi suurus pikslites
function setFontSize(size) {
	size = parseInt(size);
	if (!size) {
		size = parseInt(getCookie("TallinnFontSize"));
		if (!size || size > 13 || size < 9) {
			size = 11; // vaikimisi 11px
		}
	}
	
	document.body.style.fontSize = size + 'px';
	setCookie("TallinnFontSize", size);
	
	var td = document.getElementById('header_right');
	var links = td.getElementsByTagName('a');
	
	var index;
	if (size < 11) {
		index = 0;
	} else if (size > 11) {
		index = 2;
	} else {
		index = 1;
	}
	
	for (var i = 0; i < links.length; i++) {
		links[i].className = (i == index ? 'active' : '');
	}
}

function puhastaOtsing(fraas, tyhi) {
	if (tyhi.value == 1) {
		fraas.value = '';
	}
}

function vahetaOtsing(str, valitud, fraas, tyhi) {
	if (valitud) {
		if (fraas.value == str && tyhi.value == 1) {
			fraas.value = '';
			tyhi.value = 0;
		}
	} else {
		if (fraas.value == '') {
			fraas.value = str;
			tyhi.value = 1;
		}
	}
	
}