//------------------------------------------------------------------------------
// Copyright (c) 2005-2006 Javerdel Oy. All Rights Reserved.
//------------------------------------------------------------------------------

var oDropMenus = new Array(); 

/////////////////////////////////////////////////////////////////////////////////////////
//
// Menus objekti 
//
/////////////////////////////////////////////////////////////////////////////////////////
function Menus(){
	this.addMenu = addMenu;
	this.initialize = initialize;
	
	var DobjMenus = new Array();
	function addMenu(treeName,MenuKey){
		var oMenu = new Menu(treeName,'drop',null);
		DobjMenus[DobjMenus.length] = oMenu; 
		oMenu.setCloseMenus(closeMenus);	
		oMenu.dropMenuObject.MenuKey = MenuKey;
		return oMenu;
	}
	
	
	function initialize(onSelect,VirtualDirectory){
		if (DobjMenus){
			for (var i=0;i<DobjMenus.length;i++){
				if (DobjMenus[i].length == 0){
					  DobjMenus[i].dropMenuObject.onmouseout = changeClass;
					  DobjMenus[i].dropMenuObject.onmouseover = setClass;
				}
				DobjMenus[i].dropMenuObject.Menu = DobjMenus[i].addMenu(DobjMenus[i].dropMenuObject.MenuKey,'','','',4,'normal',false);			
				DobjMenus[i].dropMenuObject.onclick = selectMenu;
				DobjMenus[i].onSelect(onSelect);
				DobjMenus[i].setVirtualDirectory(VirtualDirectory);
			}
		}
	}
	function selectMenu(){onSelect(this.Menu,null);}
	function changeClass(){this.className='MainMenusCss';}
	function setClass(){closeMenus();this.className='MainMenusMouseOverCss';}
	function closeMenus(){if (DobjMenus){for (var i=0;i<DobjMenus.length;i++)try{DobjMenus[i].closePopMenu();}catch(e){}}}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// Menu objekti 
//
/////////////////////////////////////////////////////////////////////////////////////////
function Menu(treeName,type,oToolTip){
	// Ulospain nakyva interface  
	this.type = type;
	this.keyPress = keyPress;
	this.addMenu = addMenu; 
	this.addSeparator = addSeparator;
	this.addSpace = addSpace;
	this.setValue = setValue;
	this.getMenu = getMenu;
	this.setDefaults = setDefaults; 
	this.onOpen = onOpen;
	this.onSelect = onSelect;
	this.onDblClic = onDblClic;
	this.writeWebMenu = writeWebMenu;
	this.closePopMenu = closePopMenu; 
	this.lock = lock; 
	this.unlock = unlock;
	this.setVirtualDirectory = setVirtualDirectory;
	this.setCloseMenus = setCloseMenus;
	this.length = 0; 
	this.dropMenuObject; 
	this.initDropMenu = initDropMenu;
	this.offsetWidth;
	this.parentMenu = getParentMenu;
	this.onItemsChange = onItemsChange;
	var closemenus = new Function();
	
	
	// Menun sisaiseen kayttoon tarkoitetut globaalit muuttujat 
	var oBody;
	var objMenus = new Array();
	var oMenus;
	var oMenusFrame;
	var oSelectedNode;
	var onSetDefaults = new Function();
	var onOpenMenu = new Function();
	var onSelect = new Function();
	var webMenuIsReady = false;
	var locked = false; 
	var virtualDirectory; 
	var dropMenuObject;
	var timeID;
	var baseObject = this;
	var parentMenu;
	oDropMenus[oDropMenus.length] = baseObject; 
	
	// koodi joka suoritetaan kun Menus luodaan 
	if (type == 'popup' | type == 'drop'){
		
		if (type == 'popup')
		{
			// Alustetaan poppari menut 			
			//document.body.oncontextmenu=openPopMenu;
		    if (window.addEventListener){
			    document.addEventListener('contextmenu' , openPopMenu , false);
		    }else{	
			    document.attachEvent('oncontextmenu',openPopMenu);
		    }
		}    
		if (window.addEventListener){
			document.addEventListener('click' , closePopMenu , false);
		}else{	
			document.attachEvent('onclick',closePopMenu);
		}
		
		if (type == 'popup' | type == 'drop'){
		    setCloseEvents(top.window);
		}
		oBody = top.window.document.body;
	}	
		
	function setCloseEvents(objWindow)
	{
	    try{
            if (objWindow != document){          
                if (window.addEventListener){
                    objWindow.document.addEventListener('click' , closePopMenu , false);
                }else {
                    objWindow.document.attachEvent('onclick',closePopMenu);
                    objWindow.document.attachEvent('oncontextmenu',closePopMenu);
                }
                for (var i = 0;i<objWindow.frames.length;i++){
                    setCloseEvents(objWindow.frames[i]);
                }
            }
        }catch(e){}
	    
	}

    
	
	
	/////////////////////////////////////////////////////////////////////////////////////
	//
	// functiot joita suoritetaan julkisen interfacen kautta  
	//
	/////////////////////////////////////////////////////////////////////////////////////
	function getParentMenu(){return parentMenu;} 
	function setVirtualDirectory(value){virtualDirectory = value;}
	function setDefaults(oObject){onSetDefaults = oObject;}
	function onOpen(oObject){onOpenMenu = oObject;}
	function onSelect(oObject){onSelect = oObject;}
	function lock(){locked = true;lockCursor('default');}
	function unlock(){locked = false;lockCursor('');}
	function lockCursor(value){if (oMenus){ var els = oMenus.getElementsByTagName('*'); for (var i=0;i<els.length;i++){ els[i].style.cursor = value; } } }
	function setCloseMenus(obj){closemenus = obj;}
	function disableMenu(value){this.disabled = value; this.enabled = !value; setWeMenuDisabled(this,this.disabled)};
	function initDropMenu(parentmenu,parentElement,virtualDirectory,onSelect){
			dropMenuObject = parentElement;
			if (window.addEventListener)
			{
				dropMenuObject.addEventListener('mouseover',openDropMenu,false);
				dropMenuObject.addEventListener('mouseover',menusmouseover,false);
				dropMenuObject.addEventListener('mouseout',menusmouseout,false);
			}else{
				dropMenuObject.attachEvent('onmouseover',openDropMenu);
				dropMenuObject.attachEvent('onmouseover',menusmouseover);
				dropMenuObject.attachEvent('onmouseout',menusmouseout);
			}
			this.dropMenuObject = dropMenuObject;
			this.setVirtualDirectory(virtualDirectory);
			this.onSelect(onSelect);
			parentMenu = parentmenu;
			
	}
	
	// tapahtuma sattuu kun data muuttuu listalta 
	function onItemsChange(count)
	{
	    for (var i=0;i<objMenus.length;i++)
	    {
	        if (objMenus[i].disableWhenNoItems)
	        {
	            if (count == 0)
	            {
	                if (!objMenus[i].disabled)
	                {
	                    // kaytetaan error kasittelya jos vaikka menuja ei ole olemassa viel 
	                    try
				        {
				            objMenus[i].disableWhenNoItemsValue = objMenus[i].disabled;
				            objMenus[i].disabled = true; 
				            setWeMenuDisabled(objMenus[i],objMenus[i].disabled);				
			            }
			            catch(e) {}	
	                }
	            }
			    else 
			    {
			        // kaytetaan error kasittelya jos vaikka menuja ei ole olemassa viel 
				    if (typeof (objMenus[i].disableWhenNoItemsValue) == 'boolean')
				    {
				        try
				        {
				            objMenus[i].disabled = objMenus[i].disableWhenNoItemsValue;
				            setWeMenuDisabled(objMenus[i],objMenus[i].disabled);				
			            }
			            catch (e) {}	
				    } 
	            }
			}
		}
	}
	
	
	// asettaa menulle valuen joka palautetaan eventissa 
	function setValue(oNode){
		oSelectedNode = oNode;
		if (type != 'popup'){
			for (var i=0;i<objMenus.length;i++){
				if (onSetDefaults)
				{
				    onSetDefaults(objMenus[i],oSelectedNode);
				} 
				if (onOpenMenu)
				{
				    onOpenMenu(objMenus[i],oSelectedNode);
				}
				if (objMenus[i].element){
					setWeMenuDisabled(objMenus[i],objMenus[i].disabled);				
					if (objMenus[i].show == false){
						objMenus[i].element.style.display='none';
					}else{
						objMenus[i].element.style.display='';
					}
				}
			}
		}
	}
	
	// tulostaa Web menun 
	function writeWebMenu(oBody){
		var first = false;
		
		// ei menuja poistutaan tekematta mitaan 
		if (objMenus.length == 0) return;
		
		if (!webMenuIsReady)
			// lisataan tyhja solu loppuun oletuksena 
			addSpace();
		
		
		oMenus = document.createElement('table');	
		oMenus.cellSpacing = 0; 
		oMenus.cellPadding = 0; 
		oMenus.border = 0; 
		oMenus.className = 'WebMenuContentCss';
		oMenus.style.backgroundImage = 'url(\'Images/Control_off.jpg\')';
		oMenus.style.backgroundRepeat = 'repeat-x';
		oMenus.style.textAlign = 'left';
		oMenus.style.width="100%";
		
		oBody.appendChild(oMenus);
		oMenus.onselectstart = new Function('return false;');
		
		var oRow = oMenus.insertRow(oMenus.rows.length);
		
		for(var i = 0 ;i<objMenus.length;i++){
			var oCell = oRow.insertCell(oRow.cells.length);					
			
			if (objMenus[i].key == 'space'){
				oCell.style.height = 22; 
				oCell.className = 'WebMenuContentCss'
				oCell.innerHTML = "&nbsp;&nbsp;"
				first = true;
			}else{	
				if (onSetDefaults)
				{
				    onSetDefaults(objMenus[i],oSelectedNode);
				} 
				if (onOpenMenu) 
				{
				    onOpenMenu(objMenus[i],oSelectedNode);
				}
				objMenus[i].disableMenu = disableMenu;
				
				// Asetetaan objektille arvot 
				oCell.key = objMenus[i].key;
				oCell.confirm = objMenus[i].confirm;
				objMenus[i].element = oCell;
				oCell.style.height = 22; 
				
				var oTable = document.createElement('table');	
				oCell.appendChild(oTable);
				var oTableRow = oTable.insertRow(oTable.rows.length);
				var oTableCell = oTableRow.insertCell(oTableRow.cells.length);
				
				
				if (objMenus[i].subMenus.length > 0)
				{
					objMenus[i].subMenus.initDropMenu(baseObject,oTable,virtualDirectory,onSelect);
				    if (window.attachEvent) 
				    {	
				        oTable.attachEvent('onmouseover',menusmouseover);
				        oTable.attachEvent('onmouseout',menusmouseout);
				    }
				    else 
				    {
					    oTable.addEventListener('mouseover',menusmouseover,false);
				        oTable.addEventListener('mouseout',menusmouseout,false);	
				    }
				}
					
				// luodaan image 		
				var oObject = document.createElement('img');	
				oObject.src= objMenus[i].image;
				oObject.border = 0; 
				oTableCell.appendChild(oObject);
				
				// luodaan tekstiosio 
				var oTableCell = oTableRow.insertCell(oTableRow.cells.length);	
				oTableCell.innerHTML = "<nobr Class='MenuCss' >"  + objMenus[i].label + "</nobr>";
				oTableCell.style.paddingLeft = '3px';
				
				setWeMenuDisabled(objMenus[i],objMenus[i].disabled);
				
				// ensimmaisesta poistetaan aina vasen border 
				if (first){
					first = false;
					oCell.style.borderLeftWidth = 0;
				} 
			}		
		}	
		
		// asetetaan nakyvyys
		for(var i = 0 ;i<objMenus.length;i++)
		{
		    objMenus[i].setShow(objMenus[i].show);								
		}
		var oRow = oMenus.insertRow(oMenus.rows.length);
		var oCell = oRow.insertCell(oRow.cells.length);	
		oRow.className = 'WebMenuLineCss';				
		oCell.colSpan = objMenus.length;	
	}
	
	function setWeMenuDisabled(Menu,disabled){
		if (!Menu.disabled && Menu.enabled){
			if (!Menu.ready)
			{
			    Menu.element.className = 'WebMenuMouseOutCss';
			    Menu.element.getElementsByTagName('*')[0].className = '';
			    Menu.element.getElementsByTagName('*')[1].className = '';
			    Menu.element.getElementsByTagName('*')[2].className = 'WebMenuMouseOutFontCss';
			    Menu.element.onmouseover = mouseover;
			    Menu.element.onmouseout = mouseout;
			    Menu.element.onclick = mouseclick;
			    Menu.ready = true;
			}
		}else{
			Menu.ready = false; 
			Menu.element.className = 'WebMenuDisabledCss';
			Menu.element.getElementsByTagName('*')[0].className = 'WebMenuDisabledTextCss';
			Menu.element.getElementsByTagName('*')[1].className = 'WebMenuDisabledTextCss';
			Menu.element.getElementsByTagName('*')[2].className = '';
			Menu.element.onmouseover = '';
			Menu.element.onmouseout = '';
			Menu.element.onclick = '';
		}						
	}
	
	// avaa pudotus valikon 
	function openDropMenu(){
		
		if (locked){return;} 
		if (oMenus){return;}
		if (dropMenuObject.className == 'WebMenuDisabledCss'){return;}
		if (dropMenuObject.className == 'WebMenuDisabledTextCss'){return;}
		if (dropMenuObject.className == 'PopUpMenuDisabledCss'){return;}
		
		try{oToolTip.enable(false);}catch(e){}
		
		// Haetaan paikka jossa hiiri on meua avatessa 
		var x = 0;
		var y = 0;
		
		// selvitetaaan absoluuttinen paikka jonne menu aukaistaan 
		y = getAbsoluteTop(dropMenuObject);
		x = getAbsoluteLeft(dropMenuObject);
		y += dropMenuObject.offsetHeight; 
		if (top.window.document != document){ 	
		    y = y + getAbsoluteTop(window.frameElement);
		    x = x + getAbsoluteLeft(window.frameElement);
		    y = y + getAbsoluteTop(window.parent.frameElement);
		    x = x + getAbsoluteLeft(window.parent.frameElement);
		    y = y + getAbsoluteTop(window.parent.parent.frameElement);
		    x = x + getAbsoluteLeft(window.parent.parent.frameElement);
		    y = y + getAbsoluteTop(window.parent.parent.parent.frameElement);
		    x = x + getAbsoluteLeft(window.parent.parent.parent.frameElement);
   			if(document.body.scrollTop){
                y = y - document.body.scrollTop; 
                x = x - document.body.scrollLeft; 
                y = y - window.parent.window.document.body.scrollTop; 
                x = x - window.parent.window.document.body.scrollLeft; 
                y = y - window.parent.parent.window.document.body.scrollTop; 
                x = x - window.parent.parent.window.document.body.scrollLeft; 
                y = y - window.parent.parent.parent.window.document.body.scrollTop; 
                x = x - window.parent.parent.parent.window.document.body.scrollLeft;             
   			}
		}else{
		    if(document.body.scrollTop){
		        y = y + document.body.scrollTop; 
			    x = x + document.body.scrollLeft; 
		    }
		}
		if (x < 0){x = 0}
		if (y < 0){y = 0}
		
		
		if (parentMenu && (parentMenu.type == 'popup' | parentMenu.type == 'drop')){
			// avataan poppari menu
			writePopUpMenu(null,x + (parentMenu.offsetWidth - 15),y - 10);
		}else{
		
			// avataan poppari menu
			writePopUpMenu(null,x,parseInt(y + 1));
		}
		
		
		return false;
	}
	
	// Avaa Popup Menun 
	function openPopMenu(e)
	{	
	    if (locked){return;} 
	    
	    // suljetaan mahdollinen entinen Menu 
		closePopMenu();
		
		
		try{oToolTip.enable(false);}catch(e){}
		
		// tarkistus avataanko menua vai avataanko normaali menu 
		// sallitaan tekstin kasittely 
		try
		{
		    if (document.activeElement)
		    {
		        var tagName = document.activeElement.tagName.toLowerCase();
		        if (!document.activeElement.disabled)
		        {
		            if (tagName == 'input' | tagName == 'textarea')
		            {
		                return true; 
		            }
		        } 
		    }
		}catch(e){}
		
		try
		{
		// Haetaan paikka jossa hiiri on meua avatessa 
		var x = 0;
		var y = 0;
		if (navigator.appName=='Microsoft Internet Explorer'){
			x = event.clientX + document.body.scrollLeft;
			y = event.clientY + document.body.scrollTop;
		} else {
			x = e.pageX;
			y = e.pageY;
		}
		if (top.window.document != document){ 	
		    y = y + getAbsoluteTop(window.frameElement);
		    x = x + getAbsoluteLeft(window.frameElement);
		    y = y + getAbsoluteTop(window.parent.frameElement);
		    x = x + getAbsoluteLeft(window.parent.frameElement);
		    y = y + getAbsoluteTop(window.parent.parent.frameElement);
		    x = x + getAbsoluteLeft(window.parent.parent.frameElement);
		    y = y + getAbsoluteTop(window.parent.parent.parent.frameElement);
		    x = x + getAbsoluteLeft(window.parent.parent.parent.frameElement);
	        	 
   			if(document.body.scrollTop){
                y = y - document.body.scrollTop; 
                x = x - document.body.scrollLeft; 
                y = y - window.parent.window.document.body.scrollTop; 
                x = x - window.parent.window.document.body.scrollLeft; 
                y = y - window.parent.parent.window.document.body.scrollTop; 
                x = x - window.parent.parent.window.document.body.scrollLeft; 
                y = y - window.parent.parent.parent.window.document.body.scrollTop; 
                x = x - window.parent.parent.parent.window.document.body.scrollLeft;             
   			}
		}else{
		    if(document.body.scrollTop){
		        y = y + document.body.scrollTop; 
			    x = x + document.body.scrollLeft; 
		    }
		}
		if (x < 0){x = 0}
		if (y < 0){y = 0}
		
		// avataan poppari menu
		writePopUpMenu(e,x,y);
		
		return false;
		}
		catch(r){}
		
	}
	
	function writePopUpMenu(e,x,y){	
		
		if (objMenus.length == 0){return;}
		var lastKey;
		var key; 
		var topDocument = top.window.document;
		var currX = top.document.body.offsetWidth;
		var currY = top.document.body.offsetHeight;
		var fixX = 3;
		var fixY = 3;
		
		// rakennetaan menut 		
		oMenus = topDocument.createElement('table');	
	    function release()
	    {    
            window.clearTimeout(oMenus.TimerID);
            oMenus.TimerID = null;
	    }
	    oMenus.release = release; 
		oMenus.TimerID = window.setTimeout(oMenus.release,10);
		oMenus.cellSpacing = 0; 
		oMenus.cellPadding = 0; 
		oMenus.border = 0; 
		oMenus.style.position='absolute';
		oMenus.style.top = y;
		oMenus.style.left = x; 
		oMenus.className = 'PopUpMenuContentCss';
		if (type == 'drop'){
			oMenus.onmouseout = menusmouseout;
			oMenus.onmouseover = menusmouseover;
		}
		
		oMenus.style.backgroundImage = 'url(\'' + virtualDirectory + 'jdm/webControls/Images/menu_left_spacer.gif\')';
		oMenus.style.backgroundRepeat = 'repeat-y';
		oBody.appendChild(oMenus);
		oMenus.onselectstart = new Function('return false;');
		
				
		if (!window.addEventListener){
			oMenus.style.display='none';
			try{
				oMenus.filters[0].Apply();
			}catch(e){}	
		}
		
		for(var i = 0 ;i<objMenus.length;i++){
			key = objMenus[i].key;
			var oRow;
			if (key == 'separator')
			{
			    // ei lisata kahta separatoria perakkain 
				if ('separator' != lastKey)
				{
				    oRow = oMenus.insertRow(oMenus.rows.length);
				    var oSeparatorCell = oRow.insertCell(0);
				    oSeparatorCell.colSpan = 3;
				    oSeparatorCell.style.height = "0.1px"; 
				    oSeparatorCell.className = 'PopUpMenuSeparator';
				} 
				lastKey = key;	
			}
			else
			{
			    oRow = oMenus.insertRow(oMenus.rows.length);
				if (onSetDefaults)
				{
				    onSetDefaults(objMenus[i],oSelectedNode); 
				}
				if (onOpenMenu) 
				{
				    onOpenMenu(objMenus[i],oSelectedNode);   
				}
				
				// Asetetaan objektille arvot 
				oRow.key = 	key;	
				oRow.confirm = objMenus[i].confirm;	
				oRow.style.height = 22; 
				if (!objMenus[i].disabled && objMenus[i].enabled ){
					oRow.className = 'PopUpMenuMouseOutCss';

					oRow.onmouseover = popmouseover;
					oRow.onmouseout = popmouseout;
					oRow.onclick = popmouseclick;
				}else{
					oRow.className = 'PopUpMenuDisabledCss';
				}						
				if (objMenus[i].show == false){
					oRow.style.display='none';
				} 
				else 
				{
				    lastKey = key;	
				}
				
				var oImageCell = oRow.insertCell(0);
				var oObject = topDocument.createElement('img');	
				oObject.src= objMenus[i].image;
				oObject.border = 0; 
				oObject.style.width = "16px";
				oObject.style.height = "16px";
				oImageCell.style.paddingLeft = 2;
				oImageCell.appendChild(oObject);
				oImageCell.style.width='25';
				
				var oLabelCell = oRow.insertCell(1);
				var oObject = topDocument.createElement('nobr');	
				oObject.innerHTML = objMenus[i].label.toString();
				oLabelCell.appendChild(oObject);
				oLabelCell.style.paddingLeft = '3px';
			
				var oShortKeyCell = oRow.insertCell(2);
				var oObject = topDocument.createElement('nobr');	
				oObject.innerHTML = objMenus[i].shortKey;
				oShortKeyCell.appendChild(oObject);
				oShortKeyCell.style.textAlign = 'Left';
				oShortKeyCell.style.paddingLeft = '5px';
				
				if (objMenus[i].subMenus.length > 0){
					objMenus[i].subMenus.initDropMenu(baseObject,oRow,virtualDirectory,onSelect);
				}
			}				
		}
		
		if (!window.addEventListener){
			oMenus.style.display='block';
			try{
			oMenus.filters[0].Play();
			}catch(e)
			{
			fixX = 0;
		    fixY = 0;
			}	
		}else 
		{
		    fixX = 0;
		    fixY = 0;
		}
		
		// asetetaan menun leveys muistiin 
		baseObject.offsetWidth = oMenus.offsetWidth;
		
		
		
		// siirretaan menua tarvittaessa 
		if (x + oMenus.offsetWidth > currX)
		{
		    x = (currX - oMenus.offsetWidth) ;
		    oMenus.style.left = x-fixX; 
		}
		if (y + oMenus.offsetHeight > currY)
		{
		    y = (currY - oMenus.offsetHeight) ;
		    oMenus.style.top = y-fixY; 
		}
		oMenusFrame = topDocument.createElement('iframe');
		oMenusFrame.style.position='absolute';
		oMenusFrame.frameBorder=0;
		oMenusFrame.src = virtualDirectory + 'jdm/webcontrols/dummy.htm';
		oMenusFrame.style.top = y;
		oMenusFrame.style.left = x; 
		oMenusFrame.style.width = oMenus.offsetWidth;
		oMenusFrame.style.height = oMenus.offsetHeight; 
		oBody.appendChild(oMenusFrame);
		
		// estetaan tavallinen contextmenu 
		return false;
	}
	
	// Laukaisee menun tupla klikkauksella 
	function onDblClic(dblClickKey){
		if (!locked){
			for (var i = 0;i<objMenus.length;i++){
				if (objMenus[i].key == dblClickKey){
					if (onSetDefaults)
					{
					    onSetDefaults(objMenus[i],oSelectedNode);
					}
					if (onOpenMenu)
					{
					    onOpenMenu(objMenus[i],oSelectedNode);
					} 
					if (!objMenus[i].disabled && objMenus[i].enabled ){
						selectMenu(objMenus[i].key,objMenus[i].confirm);
						break;
					}
				} 
			}
		}
	}
	
	
	// Key EventHandler of popup menu 
	function keyPress(Key,shiftMask,ctrlMask){
		var returnValue = false; 
		if (!locked){
			var strKeys = ['Shift + Enter','Enter','Del','F1','F2','F3','F4','F5','F6','F7','F8','F9','F10','F11','F12','Ctrl + n','Ctrl + x','Ctrl + c','Ctrl + v'];
			var shiftMasks = [true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false];
			var ctrlMasks = [false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true];
			var keys = [13,13,46,112,113,114,115,116,117,118,119,120,121,122,123,78,88,67,86]
			for (var m=0;m<strKeys.length;m++){ 
				if (Key == keys[m] && shiftMask == shiftMasks[m] && ctrlMask == ctrlMasks[m] ){
					for (var i = 0;i<objMenus.length;i++){
						if (objMenus[i].shortKey == strKeys[m]){
							if (onSetDefaults)
							{
							    onSetDefaults(objMenus[i],oSelectedNode);
							} 
							if (onOpenMenu) 
							{
							    onOpenMenu(objMenus[i],oSelectedNode);
							}
							if (!objMenus[i].disabled){
								selectMenu(objMenus[i].key,objMenus[i].confirm);
								returnValue = true;
								break;
							}
						} 
					}
				}
			}
		}
		return returnValue;
	}
	
	// sulkee popupmenun
	function closePopMenu(){	
	    if (!locked){
		    if (type != ''){
			    if (oMenus){
			        if (oMenus.TimerID)
			        {
			            return;
			        }
			        if (oBody){ 
				        if (!window.addEventListener){
					        try{
							    // https: aiheuttaa security ongelman 
							    if (document.location.protocol != 'https:')
							    {
					        	    if (oMenus.filters.length > 0)
					        	    {
								        oMenus.filters[0].Apply();
							            oMenus.filters[0].Play();
							        }
							    }
					        }catch(e){}
				        }
				        oBody.removeChild(oMenus);
				        if (oMenusFrame) 
				        {
				            oBody.removeChild(oMenusFrame);
				        }
			        }				
			        oMenus = null;	
			    }
		    }
		}
	}
	
	// Lisaa uuden menun			
	function addMenu( Key , Label , ShortKey, Image ,RoleLevel,workingMode,show,confirmText , disableWhenNoItems,disable){
		
		this.length ++;
		// asetetaan normaali toimintamalli 
		if (!workingMode)
			 workingMode = 'normal'
		workingMode = workingMode.toLowerCase(); 		
		if (show == false)
			show=false;
		else if (!show)
			show = true;
		else
			show = true;
		 
	    	
		
		var Menu = new MenuObject();
		Menu.key = Key;
		Menu.label = Label;
		Menu.shortKey = ShortKey;
		Menu.disabled = false;
		Menu.image = Image;
		Menu.roleLevel = RoleLevel;
		Menu.workingMode = workingMode;
		Menu.show = show;
		Menu.disableWhenNoItems = disableWhenNoItems;
		if (confirmText) if (confirmText.length > 0) Menu.confirm = confirmText;
		if (disable)
		{
		    Menu.enabled = false;
		}
		objMenus[objMenus.length]= Menu;
		return Menu; 
	}
	// Lisaa separatorin 
	function addSeparator(){
		var Menu = new MenuObject();
		Menu.key = 'separator';
		objMenus[objMenus.length]= Menu;
	}
	// Lisaa tyhjan solun web menuun 
	function addSpace(){
		var Menu = new MenuObject();
		Menu.key = 'space';
		objMenus[objMenus.length]= Menu;
		webMenuIsReady = true;
	}
	
	// Palauttaa menu objektin referenssissa 
	// jolloin saatuun objektiin paivitetyt arvot tulevat suoraan voimaan 
	function getMenu(Key){
		return objMenus[getArrayIndex(Key)];
	}
	
	
	
	/////////////////////////////////////////////////////////////////////////////////////
	//
	// Menus objektin privaatit functiot 
	//
	/////////////////////////////////////////////////////////////////////////////////////
	function getArrayIndex(Key){ for (var i=0;i<objMenus.length;i++){ if (objMenus[i].key == Key){ return i; } } }
	function popmouseover(){if (!locked){this.className = 'PopUpMenuMouseOverCss';}}
	function popmouseout(){this.className = 'PopUpMenuMouseOutCss';}
	function popmouseclick(){ if (!locked){ selectMenu(this.key,this.confirm); return false;	} } 
	function mouseover(){if (!locked){ setWebMenuClass(this,'WebMenuMouseOverCss','WebMenuMouseOverFontCss');}	}
	function mouseout(){ setWebMenuClass(this,'WebMenuMouseOutCss','WebMenuMouseOutFontCss'); }
	function setWebMenuClass(object, className , fontClassName){object.className = className; if (!object.textObject){object.textObjext = object.getElementsByTagName('*')[2];} object.textObjext.className = fontClassName;}
	function mouseclick(){if (!locked){ selectMenu(this.key,this.confirm); return false; } }
	function selectMenu(Key,confirmText){
	    if (confirmText){
	        if (confirm(confirmText)){
	            onSelect(objMenus[getArrayIndex(Key)],oSelectedNode);	
	        }    
	    }
	    else 
	    {
	        onSelect(objMenus[getArrayIndex(Key)],oSelectedNode);	
	    }
	}
	function menusmouseout(){timeID = window.setTimeout(closePopMenu,500);}
	function menusmouseover(){window.clearTimeout(timeID);}
	function closeDropMenus(){
		for ( var i=0;i<oDropMenus.length;i++){	
			oDropMenus[i].closePopMenu(); 
		}
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// Menu objekti 
//
/////////////////////////////////////////////////////////////////////////////////////////
function MenuObject(){
	this.key;
	this.label;
	this.shortKey;
	this.disabled;    // tama on tarkoitettu sisaiseen oikeuskasittelyyn 
	this.image;
	this.roleLevel;
	this.workingMode;
	this.show;
	this.confirm;
	this.element;
	this.enabled = true;    // tama taas on tarkoitettu ulkoapain ohjattavaksi
	this.subMenus = new Menu('','drop'); 
	this.setShow = setShow; 
	this.setLabel = setLabel; 
	this.onClick;
	this.disableMenu = disableMenu;
	var base = this; 
	
	
	// asettaa menun disabled tilaan 
	function disableMenu(value)
	{
	    base.enabled = !value;   
	}
	
	// asettaa menun labelin 
	function setLabel(value)
	{
	    base.label = value;
	    if (base.element)
	    {
	        base.element.getElementsByTagName('nobr')[0].innerHTML = value;
	    } 
	}
	
	// asettaa menun nakyville ja pois 
	function setShow(value)
	{
	    base.show = value;
	    if (base.element)
	    {
	        if (value)
	        {
	            base.element.style.display = '';
	        }
	        else 
	        {
	           base.element.style.display = 'none';
	        }
	    } 
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// Tooltip objekti 
//
/////////////////////////////////////////////////////////////////////////////////////////
function toolTip(mainObjectName,useIframe,windowObject,documentObject){

	this.initialize = initialize; 
	this.enable = enable; 
	this.lock = lock; 
	this.unlock = unlock;
	this.delay = 500;
	this.hideOnClick = false;
	
	
	var delay;
	var tooltipDiv;
	var fixX = 0; 
	var fixY = 0;
	var currToolObject;  
	var locked = false;  
	var toolTipFrame;
	
	tooltipDiv = top.window.document.createElement('div');
	tooltipDiv.style.display ='none';
	tooltipDiv.className='ToolTipCss'; 	
	if (window.addEventListener){ 
		window.addEventListener('load' , initToolTip , false);
		window.addEventListener('unload' , removeToolTip , false);
	}else{
		if (useIframe){
			toolTipFrame = top.window.document.createElement('iframe');
			toolTipFrame.frameBorder = 0; 
			toolTipFrame.style.position = 'absolute';
			toolTipFrame.style.width = 0;
			toolTipFrame.style.height = 0;
			toolTipFrame.src = document.location.protocol + '//' + document.location.host + '/dummy.htm';
		} 
		window.attachEvent('onload',initToolTip);
		window.attachEvent('onunload',removeToolTip);
	}
	
	function initToolTip(){
		if (toolTipFrame){ 
			top.window.document.body.appendChild(toolTipFrame);				
		}
		top.window.document.body.appendChild(tooltipDiv);				
	}
	function removeToolTip(){
	    if (toolTipFrame){ 
		    try{top.window.document.body.removeChild(toolTipFrame);}catch(e){}				
	    }
	    try{top.window.document.body.removeChild(tooltipDiv);}catch(e){}				
	}
    
//    fixX = getAbsoluteLeft(window.frameElement);
//    fixX = fixX + getAbsoluteLeft(window.parent.frameElement);
//    fixX = fixX + getAbsoluteLeft(window.parent.parent.frameElement);
//    fixX = fixX + getAbsoluteLeft(window.parent.parent.parent.frameElement);
//    fixX = fixX + getAbsoluteLeft(window.parent.parent.parent.parent.frameElement);
//    fixY = getAbsoluteTop(window.frameElement);
//    fixY = fixY + getAbsoluteTop(window.parent.frameElement);
//    fixY = fixY + getAbsoluteTop(window.parent.parent.frameElement);
//    fixY = fixY + getAbsoluteTop(window.parent.parent.parent.frameElement);
//	fixY = fixY + getAbsoluteTop(window.parent.parent.parent.parent.frameElement);
//    	
	function lock(){
		enable(false);
		locked = true; 
	}
	function unlock(){
		locked = false; 
	}
	
	function enable(value){
		if (!value){
			tooltipDiv.style.display = 'none';
			if (toolTipFrame) toolTipFrame.style.display = 'none'; 
		}
	} 
	
	function initialize(message, Element,tree){ 
		delay = this.delay;
		obj = new altObject(message);
		Element.onmousemove = obj.mousemove;
		if (tree){
			Element.onmouseover = obj.mouseover;
			Element.onmouseout = obj.mouseout;
			if (this.hideOnClick){
				if (!document.attachEvent)
					Element.addEventListener('click',obj.mouseout,false);
				else 
					Element.attachEvent('onclick',obj.mouseout);
			}
		}
		if (Element.style.cursor.length > 0  ){
			obj.x = 9;
			obj.y = 19;
		} 
		else if (tree)
		{
			obj.x = 10;
			obj.y = 23;
		}
		else 
		{
			obj.x = 3;
			obj.y = 5;
		}
		return obj;
	}

	function altObject(message){ 
		this.showTip = showTip;
		this.hideTip = hideTip;
		this.mousemove = mousemove;
		this.mouseover = mouseover;
		this.mouseout = mouseout;
		this.x; 
		this.y;
		var base = this; 
		var initialize = false;
		var enable = false;
		var timeID; 
		var currX;
		var currY;
		var divX;
		var divY;
		var showTimeID; 
	    
		function showTip(){        
			enable = true;
			timeID = window.setTimeout(WriteTip,delay);
		}
		function hideTip(){
			enable = false;
			if (toolTipFrame) toolTipFrame.style.display = 'none'; 
			tooltipDiv.style.display = 'none';
			window.clearTimeout(timeID);
			//window.clearTimeout(showTimeID);
		}
		function WriteTip(e){
			if (enable && initialize){
                fixX = getAbsoluteLeft(window.frameElement);
                fixX = fixX + getAbsoluteLeft(window.parent.frameElement);
                fixX = fixX + getAbsoluteLeft(window.parent.parent.frameElement);
                fixX = fixX + getAbsoluteLeft(window.parent.parent.parent.frameElement);
                fixX = fixX + getAbsoluteLeft(window.parent.parent.parent.parent.frameElement);
                fixY = getAbsoluteTop(window.frameElement);
                fixY = fixY + getAbsoluteTop(window.parent.frameElement);
                fixY = fixY + getAbsoluteTop(window.parent.parent.frameElement);
                fixY = fixY + getAbsoluteTop(window.parent.parent.parent.frameElement);
                fixY = fixY + getAbsoluteTop(window.parent.parent.parent.parent.frameElement);
				try{fixY = fixY - document.body.scrollTop;}catch(e){}
				// tulostetaan tooltippi
				tooltipDiv.innerHTML = message;
				tooltipDiv.style.display = '';
				currX = top.document.body.offsetWidth;
				currY = top.document.body.offsetHeight;
				divX = tooltipDiv.offsetWidth;
				divY = tooltipDiv.offsetHeight; 
				
				moveTip(getAbsoluteLeft(tooltipDiv) - base.x ,getAbsoluteTop(tooltipDiv) - base.y);
				
				
				if (toolTipFrame){
					toolTipFrame.style.display = '';
					toolTipFrame.style.width = tooltipDiv.offsetWidth - 0;
					toolTipFrame.style.height = tooltipDiv.offsetHeight -0;
				} 
				//showTimeID = window.setTimeout(hideTip,delay*5);
			}
		}
		function moveTip(x,y){
			if (enable){
				initialize = true;
				var xx = parseInt(x) + parseInt(base.x);
				var yy = parseInt(y) + parseInt(base.y);
				//if (xx + divX +5 > currX){xx = (currX - divX) -5;}
		        //if (yy + divY +5 > currY){yy = (currY - divY) -5;}
				tooltipDiv.style.left = xx;
				tooltipDiv.style.top = yy;
				if (toolTipFrame){
					toolTipFrame.style.left = xx-0;
					toolTipFrame.style.top = yy-0;
				}
			}
		}
		function mousemove(e){
			if (enable ){
				var x = 0;
				var y = 0;
				if (navigator.appName=='Microsoft Internet Explorer'){
					if (windowObject && documentObject)
					{
					    x = windowObject.event.clientX + documentObject.body.scrollLeft;
					    y = windowObject.event.clientY + documentObject.body.scrollTop;
					}
					else 
					{
					    x = event.clientX + document.body.scrollLeft;
					    y = event.clientY + document.body.scrollTop;
					}
					
				} else {
					x = e.pageX;
					y = e.pageY;
				    if (windowObject && documentObject)
				    {
				        if(documentObject.body.scrollTop) y = y - documentObject.body.scrollTop; 
				        if(documentObject.body.scrollLeft) x = x  - documentObject.body.scrollLeft; 
				    }
				    else 
				    {
				        if(document.body.scrollTop) y = y - document.body.scrollTop; 
				        if(document.body.scrollLeft) x = x  - document.body.scrollLeft; 
				    }
				    
				}				
				if (window.parent != window)
				{
				    y = y + fixY;
				    x = x + fixX;
				}
				
				if (x < 0){x = 0;}
				if (y < 0){y = 0;}
				
				moveTip(x,y);
			}
		}
		function mouseover(e){
			if (!locked){ 
				showTip();
			}
		}
		function mouseout(e){
			hideTip();
		}
	}
}

/////////////////////////////////////////////////////////////////////////////////////////
//
// Collection objekti 
//
/////////////////////////////////////////////////////////////////////////////////////////
function collection(arrayUse){	
	// private Arrays 
	var Items = new Array();		
	var Keys = new Array(); 
	 
	// public interface 
	this.length=0;
	this.add = _add;
	this.remove = _remove; 
	this.exists = _exists;  
	this.removeAll = _removeAll; 
	this.getValue = _getValue;
	this.items = _getItems; 
	this.keys = _getKeys;
	this.refresh = refresh;
	this.removeLast = _removeLast;
	var lastKey;
	var lastItem; 
	
	// private methods 	
	function _removeLast(){
		this.remove(lastKey);
		return lastKey;
	}
	
	function _getValue(key){
		return Items[Keys[key]];
	} 
	function _getKeys(){
		return Keys;
	}
	function _getItems(){
		return Items;
	}
	function _add(key,item){	 
		lastKey = key; 
		lastItem = item; 
		Keys[key] = Items.length.toString(); 
		//Items[Items.length] = item.toString(); 	// ei toimi jos item on objekti 
		Items[Items.length] = item; 	
		this.length ++;
	}
	function _remove(key){
		var index = Keys[key];
		// vyorytetaan Keys kokoelman arvo indekseja yhdella ylospain 
		// koska Items length pienenee yhdella 
		// ainoastaan niita joiden index on suurempi kuin poistettavan arvon indeksi 
		//if (arrayUse){ 
			for (var i=0;i<Keys.length;i++){
				if (Keys[i]){ 
					if (Keys[i] > index){ 
						try{Keys[i] = (Keys[i]-1).toString();}catch(e){Keys[i]=null;}
					}
				}
			}
		//}		
		Keys[key] = null;
		Items.splice(index,1);
	
		this.length --;
	}
	function _removeAll(){
		Keys = new Array(); 
		Items = new Array(); 
		this.length=0;
	}
	function _exists(key){
		if (Keys[key])
			return true; 
		else 
			return false;  
	}
	function refresh(newArray,identityField){
		Keys = new Array(); 
		for (var i = 0;i<newArray.length;i++){
			for (var ii = 0;ii<Items.length;ii++){
				if (newArray[i][identityField] == Items[ii]){
					Keys[i] = newArray[i][identityField].toString(); 
				}
			}
		}
	}
}  



/////////////////////////////////////////////////////////////////////////////////////
//
//	Globaalit functiot 
//
/////////////////////////////////////////////////////////////////////////////////////

// palauttaa absoluuttisen top location Annetulle objektille
function getAbsoluteTop(oObject) {
	
	if (!oObject)return 0; 
	var TopPosition;
	TopPosition = oObject.offsetTop;
	while(oObject.offsetParent) {	
		oParent = oObject.offsetParent
		TopPosition += oParent.offsetTop;
		oObject = oParent
	}
	return TopPosition
}
// palauttaa absoluuttisen Left location Annetulle objektille
function getAbsoluteLeft(oObject) {
	if (!oObject)return 0; 
	var LeftPosition = oObject.offsetLeft;
	while(oObject.offsetParent){		
		oParent = oObject.offsetParent;	
		LeftPosition += oParent.offsetLeft;
		oObject = oParent;
	}
	return LeftPosition;
}		


// palauttaa tyylitiedostoon maaritellyn taustavarin / bordferleveyden 
// tree object kayttaa 
function getPropertiesInCss(className,ie , type ){
	var sheets = document.styleSheets
	var returnValue = "";  
	for (var i=0;i<sheets.length;i++){
		var rules = sheets[i].rules;
		
		if (ie)
			rules = sheets[i].rules;
		else 
			rules = sheets[i].cssRules;
			
		for (var ii = 0;ii<rules.length;ii++){
			if (rules[ii].selectorText.toLowerCase() == '.' + className.toLowerCase()){
				if (type == 'color') 
					returnValue = rules[ii].style.backgroundColor;
				else if (type == 'border-width')
					 returnValue = rules[ii].style.borderWidth;				
			    else if (type == 'height')
					 returnValue = rules[ii].style.height;				
				break;
			} 
		}
		if (returnValue.length > 0 )
			break; 
	}
	return returnValue;	
}

/////////////////////////////////////////////////////////////////////////////////////
///
/// Luo dropdown menun annetulle tietojoiukolle 
///
/////////////////////////////////////////////////////////////////////////////////////
function dropMenu(args)
{
    // variables 
    var table;
    var timerID;
    var base = this; 
    
    // public fields and methods 
    this.open = open;
    this.onSelect = new Function();
    
    
    /// private functions 
    function open(x,y)
    {
        table = document.createElement("table");
        table.className = 'dropmenutable';
        table.style.position = 'absolute';
        table.style.left = x; 
        table.style.top = y;
        for (var i=0;i<args.length;i++)
        {
            var row = table.insertRow(table.rows.length);
            var cell = row.insertCell(row.cells.length);
            cell.innerHTML = args[i][0].toString();
            cell.value = args[i][1].toString();
            cell.onmouseover = menuMouseOver;
            cell.onmouseout = menuMouseOut;
            cell.onclick = menuSelect;
            cell.style.padding = 1; 
        }
        document.body.appendChild(table);
        tryHide();
    }
    
    function menuSelect()
    {
        base.onSelect(this.value);
        hide();            
    }
    function menuMouseOver()
    {
        continueShow();
        this.className = 'dropmenumouseover';
        this.style.padding = 0;
    }
    function menuMouseOut()
    {
        this.className = '';
        this.style.padding = 1;
        tryHide();
    }
    
    function tryHide()
    {
        timerID = window.setTimeout(hide,500);
    }
    function continueShow()
    {
        window.clearTimeout(timerID);
    }
    function hide()
    {
        if (table)
        {           
            document.body.removeChild(table);
            table = null;
        }   
    }
}
