
var _currentMenuOver = null;
var _currentSubMenuOver = null;
var _currentMenu = null;
var _currentSubMenu = null;
var _menuItems = [];
//var _menuItemBackgrounds = [];
var _tempCnt = 0;


document.getElementsByClassName = function(class_name) {
    var docList = this.all || this.getElementsByTagName('*');
    var matchArray = new Array();

    /*Create a regular expression object for class*/
    var re = new RegExp("(?:^|\\s)"+class_name+"(?:\\s|$)");
    for (var i = 0; i < docList.length; i++) {
        if (re.test(docList[i].className) ) {
            matchArray[matchArray.length] = docList[i];
        }
    }

	return matchArray;
}//eof annonymous function


function initMenu(){
	_menuItems = [];
	var menuItems = document.getElementsByClassName("menu");
	for(var i=0;i<menuItems.length;i++){
		var item = menuItems[i];
		_menuItems.push(item);
		item.getElementsByClassName = document.getElementsByClassName;
		var subMenuItems = item.getElementsByClassName("submenu");
		for(var j=0;j<subMenuItems.length;j++){
			var subitem = subMenuItems[j];
			_menuItems.push(subitem)
		}
	}
	
	/*
	var parent = document.getElementById("NavigationContent");
	var str = "";
	var xOffset = 0;
	var yOffset = 0;
	while(parent && parent != document.body){
		str += parent.id + " => " +parent.offsetLeft + "<br>";
		xOffset += parent.offsetLeft;
		yOffset += parent.offsetTop;
		parent = parent.parentNode;
	}
	str += "x : " + xOffset + "	y : " + yOffset + "<br><br>";
	
	var arr = getElementOffset(document.getElementById("NavigationContent"));
	str += "x : " + arr[0] + "	y : " + arr[1];
	 
	var dump = document.getElementById("Dump");
	dump.innerHTML = str;
	*/
	
}

function resetMenu(){
	if(_currentMenu){
		hideSubMenu(_currentMenu);
		_currentMenu.getElementsByTagName("label")[0].style.textDecoration = "none";
	}
}
	
function onIDClick(id){
	for(var i=0;i<_menuItems.length;i++){
		var item = _menuItems[i];
		var a =  item.getElementsByTagName("a")[0];
		var itemID = a.href.substr(a.href.indexOf("#")+1);
		if(itemID == id){
			navigationClick(item.id,id,a);
			return;
		}
	}
	homeClick(null);
}

function navigationClick(elementID,id,ref){
    var element = document.getElementById(elementID);
    if( _currentSubMenu == element ) return;
	if(_currentMenu) _currentMenu.getElementsByTagName("label")[0].style.textDecoration = "none";

//    if((_currentMenu ==  element && _currentSubMenu == null) || _currentSubMenu == element ) return;
    if(element.className == "submenu"){
	    if(_currentMenu == null){
	    	_currentMenu = findMenuItemFromSubMenuItem(element);
//	    	onOverMenuItem(_currentMenu);
	    	showSubMenu(_currentMenu);
	    }
    	if(_currentSubMenu) _currentSubMenu.getElementsByTagName("label")[0].style.textDecoration = "none";
    	_currentSubMenu = element;
    }else{
	    if(_currentMenu){
	    	hideSubMenu(_currentMenu);
//	    	_currentMenu.getElementsByTagName("label")[0].style.textDecoration = "none";
	    }
	    if(_currentSubMenu) _currentSubMenu.getElementsByTagName("label")[0].style.textDecoration = "none";
	    _currentMenu = element;
	    _currentSubMenu = null;
	    if(eval(element.getAttribute("submenu"))) showSubMenu(element);
	}
	element.getElementsByTagName("label")[0].style.textDecoration = "underline";
	ref.blur();
	
	var imageURL = element.getAttribute("image");
	
	loadContent(id,imageURL);
	layoutElements();
}

function onMouseOutsideMenu(){
	if(_currentMenuOver == _currentMenu || _currentMenuOver == _currentSubMenu) return;
	if(_currentMenuOver != null) onOutMenuItem(_currentMenuOver);
	_currentMenuOver = null;	
}

function onMouseMoveMenu(xScreen,yScreen){
	var overItem = getElementAtLocation(xScreen,yScreen);	
	onMouseOutsideMenu();
	
	_tempCnt++;
	var dump = document.getElementById("Dump");
	dump.innerHTML = _tempCnt + "  ["+xScreen+","+yScreen+"] link waiting : " + overItem + (overItem != null ? (" -> " + overItem.id + " - " + overItem.style.display) : " ");
	
	if(overItem == null){
		overItem = getLinkElementAtLocation(xScreen,yScreen);
		if(overItem){
			onOverMenuItem(overItem);
			_currentMenuOver = overItem;
		}
//		dump.innerHTML = _tempCnt + " link overItem : " + overItem + (overItem != null ? (" -> " + overItem.id) : " ");
		return;	
	}
	
	if(overItem == _currentSubMenu) return;
//	if(overItem == _currentMenu || overItem == _currentSubMenu) return;
//	dump.innerHTML = _tempCnt + " link overItem : waiting -> " + overItem;
	
	if(overItem!=null){
//		dump.innerHTML = _tempCnt + " overItem : " + overItem + (overItem != null ? (" -> " + overItem.id) : " ");
		_currentMenuOver = overItem;
		onOverMenuItem(_currentMenuOver);
	}
}

function onMenuClick(xScreen,yScreen){
	var clickItem = getElementAtLocation(xScreen,yScreen);
	if(clickItem!=null){
		if(clickItem == _currentSubMenu) return;
//		if((clickItem == _currentMenu && _currentSubMenu == null )|| clickItem == _currentSubMenu) return;
		var a =  clickItem.getElementsByTagName("a")[0];
		if(document.createEvent){
			var evObj = document.createEvent('MouseEvents');
			evObj.initMouseEvent( 'click', true, true, window, 1, xScreen, yScreen, xScreen, yScreen, false, false, true, false, 0, null );			
			a.dispatchEvent(evObj);
		}else{
			var id = a.href.substr(a.href.indexOf("#")+1);
			navigationClick(clickItem.id,id,a);
		}
		
//		window.location.href = a.href;
	}else{
		var clickItem = getLinkElementAtLocation(xScreen,yScreen);
		if(clickItem!=null){
			var a =  clickItem.getElementsByTagName("a")[0];
			if(document.createEvent){
				var evObj = document.createEvent('MouseEvents');
				evObj.initMouseEvent( 'click', true, true, window, 1, xScreen, yScreen, xScreen, yScreen, false, false, true, false, 0, null );			
				a.dispatchEvent(evObj);
			}else{
				var url = a.href.substr(a.href.indexOf("#")+1);
				downloadLink(url,null);
			}
		}else{
			if(isOverHeadline(xScreen,yScreen)) homeClick(null);
		}
	}
}

function getElementOffset(element){
	var parent = element.parentNode;
	var str = "";
	var xOffset = 0;
	var yOffset = 0;
	while(parent && parent != document.body){
		str += parent.id + " => " +parent.offsetLeft + "<br>";
		xOffset += parent.offsetLeft;
		yOffset += parent.offsetTop;
		parent = parent.parentNode;
	}
	var result = [];
	result.push(xOffset);
	result.push(yOffset);
	return result;
}

function findMenuItemFromSubMenuItem(item){
	var menu = null;
	for(var i=0;i<_menuItems.length;i++){
		var element = _menuItems[i];
		if(element.className == "menu") menu = element;
		if(item == element) return menu;
	}
	return null;
}

function getElementAtLocation(xScreen,yScreen){
	var itemsContainer = document.getElementById("NavigationContent");
	var overItem = null;
	var arr = getElementOffset(itemsContainer);
	var x = xScreen-arr[0];
	var y = yScreen-arr[1];	
	if(x > 0 && x < itemsContainer.clientWidth){
		for(var i=0;i<_menuItems.length;i++){
			var item = _menuItems[i];
			if(item.style.display == "block")
			if(y > item.offsetTop && y < item.offsetTop + 18){
				if(x > item.offsetLeft && x < item.offsetLeft + 200){
					overItem = item;
				}
			}
		}
	}
	return overItem;
}

function getLinkElementAtLocation(xScreen,yScreen){
	var itemsContainer = document.getElementById("Links");
	var overLink = null;
	var arr = getElementOffset(itemsContainer);
//	var x = xScreen-arr[0];
//	var y = yScreen-arr[1];	
	var x = xScreen;
	var y = yScreen;	
	
	var arrElements = getLinkItems(document.getElementById("Links"));
	
	if(arrElements != null){
		for(var i=0;i<arrElements.length;i++){
			var item = arrElements[i];
			var offset = getElementOffset(item);
			if(y > offset[1] && y < offset[1] + 18){
				if(x > offset[0] && x < offset[0] + 200){
					overLink = item;
				}
			}
		}
	}
	return overLink;
}

function isOverHeadline(xScreen,yScreen){
	var item = document.getElementById("Headline");
	var arr = getElementOffset(item);
	var x = xScreen-arr[0];
	var y = yScreen-arr[1];
//	alert("headline : " + x + " - " + y + "					item.clientWidth : " + item.clientWidth + "			item.clientHeight : " + item.clientHeight);	
	if(item){
		if(y > 0 && y < item.clientHeight){
			if(x > 0 && x < item.clientWidth){
				return true;
			}
		}
	}
	return false;
}

function loadContent(id,backgroundImage){
	hideContent();
	var url = "content.php?pageID="+id+"&callback="+this;
    if ( window.frames["ContentIFrame"] ) {
        window.frames["ContentIFrame"].location = url;
    }else{
    	var content = document.getElementById( "ContentIFrame" );
    	if (content && content.src){
    		content.src = url;
    	}
    }
    showNextBackground(backgroundImage);
}

function showContent(){
	var loading = document.getElementById( "loadingtext" );
	loading.style.display = "none";
	var content = document.getElementById( "ContentIFrame" );
	content.style.display = "block";
	window.frames["ContentIFrame"].setBackground();	
//	alert("content : " + content.init);
}
function hideContent(){
	var loading = document.getElementById( "loadingtext" );
	loading.style.display = "block";
	var content = document.getElementById( "ContentIFrame" );
	content.style.display = "none";
}

function showSubMenu(element){
	var subMenuItems = getSubMenuItems(element);
	for(var i=0;i<subMenuItems.length;i++){
		subMenuItems[i].style.display = "block";
		subMenuItems[i].style.textDecoration = "none";
	}
}

function hideSubMenu(element){
	var subMenuItems = getSubMenuItems(element);
	for(var i=0;i<subMenuItems.length;i++){
		subMenuItems[i].style.display = "none";
		subMenuItems[i].style.textDecoration = "none";
	}
}

function onOverMenuItem(element){
	element.getElementsByTagName("a")[0].firstChild.style.textDecoration = "underline";
}

function onOutMenuItem(element){
	element.getElementsByTagName("a")[0].firstChild.style.textDecoration = "none";
}

function getLinkItems(element){
	var subElements = new Array();
    try{
	    var elements = element.childNodes;
	    for(var j = 0; j < elements.length; j++){
	    	var e = elements[j];
	    	if(e.id && e.id.toLowerCase().indexOf("link") > -1){
		    	subElements.push(e);
	    	}
    	}
    	return subElements;
	}catch(error){
		alert("ERROR : " + error);
	}
}

function getSubMenuItems(element){
	var subElements = new Array();
    try{
	    var elements = element.childNodes;
	    for(var j = 0; j < elements.length; j++){
	    	var e = elements[j];
	    	if(e.id && e.id.toLowerCase().indexOf("submenu") > -1){
		    	var childNodes = e.childNodes;
		    	for(var k=0;k<e.childNodes.length;k++){
		    		var child = e.childNodes[k];
			    	if(child.id  && child.id.toLowerCase().indexOf("menuitem") > -1 ){
			    		subElements.push(child);
				    }
		    	}
	    	}
    	}
    	return subElements;
	}catch(error){
		alert("ERROR : " + error);
	}
}

