/*
//-------------------------------------------------------------------------------
// File: smenu-v2.js -
// Description: Simple Menu Constractor V2.1
//-------------------------------------------------------------------------------
// Tested with: IE 5.x 6.x, Mozilla 1.x, Netscape 4.x 6.x 7.x, Opera 7
// Created:	9.10.2002
// LastUpd:	17.04.2003
//
// Author: Panos Galanis <pg@iap.de>
//
// IAP GmbH
// Ingenieurburo fur Anwendungs-Programmierung
// Mörkenstraße 9, D-22767 Hamburg
// Web: http://www.iap.de, Mail: info@iap.de
//-------------------------------------------------------------------------------
*/


/// --------------- ///
/// Configuration   ///
/// --------------- ///


/// Common Style settings ///

	// The default classes. These classes are used if no other classes are given
	var JSM_DefaultClass="MDef";        // Default class for every object
	var JSM_HeadClass="MHead";          // Menu Bar default class
	var JSM_MenuClass="MMenu";          // Pull Down Menu (1st level) default class
	var JSM_SubMenuClass="MSub";        // Submenu (2nd level) default class
	var JSM_InactiveClass="MInactive";  // Inactive entry default class


/// Cell border/style settings ///

	// Make space between cells (set to 0 to suppress)
	var JSM_Space=0;
	// Border in Pixels (set to 0 to suppress border)
	// Space is taken from width/height
	var JSM_Border=0;
	// Border Color (has no effect if border is suppressed)
	var JSM_BorderColor="#888";
	// Padding in Pixels (space will be added to with/height)
	var JSM_Padding=3;

	// Horizontal linebars (some possibilities, examples, do not delete)
    //var linebar="<hr>";
    //var JSM_linebar="<hr style='border:0px;width:100%;height:1px;background:"+JSM_BorderColor+";'>";
	//var JSM_linebar="------------------------";
	//var JSM_linebar="<hr noshade='noshade' width='100' size='1' class='MRuler'>";
  // ke; To change color use the background attribut in the css file (for MRuler)
	var JSM_linebar="<img src='js/icons/hr.gif' class='MRuler'>";
	// NETSCAPE 4.x Have his own Ruler at Netscape 4 Section !!!!


/// Position Options ///

	// Main menu bar attributs
	var JSM_sx=100;						  // X Positioning
	var JSM_sy=60;						// Y Positioning
	var JSM_sh=14;						// Height, also default for submenues

	// HorizontalPadding (Pixels left and rigth in every header!)
	// if header menu is variable (isHeadFixed=false)
	var JSM_hPadding=3;

	// Header menu cell width could be fixed or variable
	// Header/Submenu width
	// isHeadFixed=true  : Used for main and submenu
	// isHeadFixed=false : Used only for submenu
	var JSM_isHeadFixed=true;	// false: No specified Head Width!	true: Fixed header width (sw)

	// If true (1) The script will check every Group to find
	// the bigest width. Then will set this to all members of this group.
	// Note: This will not work for menu elements with a linebar or
	//       if the menu element is a SUBMENU Header and JSM_subimg include an image!!!
	//       The resaon is that the width will not be set
	//       if is 3x bigger than JSM_sw.. (hardcoded)
	// This does _not_ affect DOM-less clients. ex. Will not work for NS4
	// Slow's a bit things down but ....
	var JSM_isAutoWidthMenu=true;

	// Static Menu element Width
	// Please set this even you have JSM_isAutoWidthMenu to true (1).
  // This is used in every case in NS 4.x
	var JSM_sw=160;


/// Submenu positon ///

	var JSM_subx=-5;					// Sub X Positioning (measured against right border of parent cell)
	var JSM_suby=3;


/// Effect options ///

	// Show as "Title" attribute (tooltip) the link (like alternative in image)
	var JSM_LinkAsTitle=true;

	// Transparent Option for IE & Mozilla
	var JSM_isOpaque=false;
	// Visibility 0-100 (%) if (isOpaque)
	var JSM_OpaqueValue=80;

	// Miliseconds for Menu Visibility to hidden if is been trigered "onmouseout"
	var JSM_ClearMenuTimer=500;
	// Miliseconds for Submenu Visibility to hidden if is been trigered "onmouseout"
	var JSM_ClearSubMenuTimer=200;


/// Image options ///

	// Image for submenu pointer
	var JSM_subimg="js/icons/arrow_black.gif";
	// The Width of this image (Spaceholder)
	var JSM_subimgwidth=20;
	// path to icon images
	var JSM_IconPath="js/icons";

	// allow icons on left side of menu point (e.g. check hook)
	// This will add space on the left side for the default icon
	// var icons=true;
	var JSM_UseIcons=true;
	// default icon for left side icon
	var JSM_DefaultIcon="empty.gif";


/// Netscape 4.x Specific ///

	// Simple Class
	// pls. Without background: or background-color:!!
	var JSM_SimpleClass="MSimple";
	// This is The Netscape Ruler :-)
	var JSM_NSlinebar="<hr noshade width='100%' size='1'>";

	// Normal & Hover Background Color for Menu Items
	// Used Only in Netscape 4.x
	var JSM_MenuHead_BGColor_Normal="#00015F";		// Background Color for Menu Header
	var JSM_MenuHead_BGColor_Hover="#00015F";		  // Background Color for Menu Header onMouseOver
	var JSM_Menu_BGColor_Normal="#aeb8d3";			  // Background Color for Menu
	var JSM_Menu_BGColor_Hover="#2222aa";			    // Background Color for Menu onMouseOver
	var JSM_MenuSub_BGColor_Normal="#daa6bc";		  // Background Color for Sub-Menu
	var JSM_MenuSub_BGColor_Hover="#da2976";		  // Background Color for Sub-Menu onMouseOver


/// --------------- ///
/// Main part       ///
/// --------------- ///

var JSM_sub=JSM_cat=JSM_subcat=JSM_vsID=JSM_vsSID=JSM_lastHeadID=JSM_dummy=0;
var JSM_lastCat=JSM_lastSub=null;
var JSM_idmaster=new Array();
var JSM_idsub=new Array();
var JSM_idpool=new Array();
var JSM_awidthpool=new Array();
var JSM_fapi=new Array();
var JSM_sM=new Array();
var JSM_lid=JSM_headw=JSM_NSheadw=0;
var JSM_nspadfix=(JSM_Border*2) + (JSM_Padding*2);
var JSM_xnew=JSM_sx;
var JSM_ynew=ysub=JSM_sy;

var JSM_ver=navigator.appVersion;
var JSM_dom=document.getElementById? 1:0;
var JSM_ns=(navigator.appName.indexOf("Netscape")>-1)? 1:0;
var JSM_ie=(JSM_ver.indexOf("MSIE")>-1)? 1:0;
var JSM_ie4=(document.all)? 1:0;
var JSM_ns4=(JSM_ns && !JSM_dom)? 1:0;
var JSM_ns6=(JSM_ns && JSM_dom)? 1:0;
var JSM_DCE=(document.createElement)? 1:0
var JSM_DCTN=(document.createTextNode)? 1:0
var JSM_isJunk=(!JSM_dom && !JSM_ie && !JSM_ns)? 1:0;

// IE does not recognize push ... so we must have a function for this ...
// Original at javascript.faqts.com
if (Array.prototype && !Array.prototype.push)  Array.prototype.push = IE_push;

function IE_push () {
  	for (var a = 0; a < arguments.length; a++) this[this.length] = arguments[a];
  	return this.length;
	}

function cal(m,i,l) {
	if (m[i][0]==0) {
		JSM_idmaster.push(i+l);
		JSM_cat=(i+l);
		JSM_ynew=JSM_sy;
		if (JSM_sub) {
			JSM_xnew-=JSM_headw+JSM_Space+JSM_subx;
      		JSM_sub=0;
      		if (JSM_ns6) JSM_xnew-=JSM_nspadfix;
			}
      	if (i>0) {
      		JSM_xnew+=(JSM_headw+JSM_Space);
      		if (!JSM_isHeadFixed) JSM_xnew+=JSM_hPadding;
      		if (JSM_ns6) JSM_xnew+=JSM_nspadfix;
      		}
      	}
	else if(m[i][0]==1) {
		if (JSM_sub) {
			JSM_cat=JSM_subcat;
      		JSM_xnew-=JSM_sw+JSM_Space+JSM_subx;
      		JSM_ynew=JSM_ysub+JSM_lasty+JSM_Space;
      		JSM_sub=0;
      		if (JSM_ns6) JSM_xnew-=JSM_nspadfix;
			}else{
			JSM_ynew+=m[i-1][5]+JSM_Space;
			}
		if (JSM_ns6) JSM_ynew+=JSM_nspadfix;
      	}
	else if(m[i][0]==2) {
      	if (!JSM_sub) {
	      	JSM_idsub.push(i+l-1);
      		JSM_subcat=JSM_cat;
	      	JSM_cat=(i+l);
      		JSM_xnew+=JSM_sw+JSM_Space+JSM_subx;
      		JSM_ysub=JSM_ynew;
      		JSM_sub=1;
      		JSM_lasty=m[i-1][5];
      		JSM_ynew+=JSM_suby;
      		if (JSM_ns6) JSM_ynew-=JSM_nspadfix
      		if (JSM_ns6) JSM_xnew+=JSM_nspadfix;
      		}else{
			JSM_ynew+=m[i-1][5]+JSM_Space;
      		}
		if (JSM_ns6) JSM_ynew+=JSM_nspadfix;
      	}
	if(JSM_cat != (i+l) || JSM_sub) JSM_idpool.push(JSM_cat+"_"+(i+l));
	}

function isInArray(id,a){
	for(i=0;i<a.length;i++){
		if(a[i]==id) return 1;
		}
	return 0;
	}

function vis(id,on,all){
	for(i=0;i<JSM_idpool.length;i++){
		var io=JSM_idpool[i].split("_")[0];
		var no=JSM_idpool[i].split("_")[1];
		var vis=(on)? "visible" : "hidden";
		if (io==id||all) getObj("M_"+no).style.visibility=vis;
		}
	}

function getCat(id){
	for(i=0;i<JSM_idpool.length;i++){
		var io=JSM_idpool[i].split("_")[0];
		var no=JSM_idpool[i].split("_")[1];
		if (no==id) return io;
		}
	return null;
	}

function sM_hover(obj,c,isbar,bgc) {
	clearTimeout(JSM_vsID);
	oid=obj.id.substr(2);
	if(isInArray(oid, JSM_idmaster)&&JSM_lastCat!=oid) {
		vis(0,0,1);
		vis(oid,1,0);
		JSM_lastCat=oid;
		JSM_lastSub=null;
		}
	if(isInArray(oid, JSM_idsub)) {
		clearTimeout(JSM_vsSID);
		vis((parseInt(oid)+1),1,0);
		JSM_lastSub=oid;
		}
	if(!isInArray(getCat(oid)-1,JSM_idsub)&&!isInArray(oid, JSM_idsub)&&JSM_lastSub!=null) {
		clearTimeout(JSM_vsSID);
		JSM_vsSID=setTimeout("vis(parseInt(JSM_lastSub)+1,0,0);JSM_lastSub=null;",JSM_ClearSubMenuTimer);
		}
	if (!isbar) eval("obj.className='"+c+"_hover'");
	if (JSM_ns4) obj.bgColor=bgc;
	}

function sM_hout(obj,c,isbar,bgc) {
	//oid=obj.id.substr(2);
	if(!isbar) obj.className=c;
	if (JSM_ns4) obj.bgColor=bgc;
	clearTimeout(JSM_vsID);
	JSM_vsID=setTimeout("JSM_lastCat=JSM_lastSub=null; vis(0,0,1);",JSM_ClearMenuTimer)
	}

function sM_link(url,targ){
	var key=(JSM_ie)? window.event.button :0;
	if (key==2) {return true;}
	if(!targ || targ=="_self") location.href=url;
	else if(targ=="_blank") window.open(url);
    else if(targ=="_top" || targ=="window") top.location.href=url;
    else if(top[targ]) top[targ].location.href=url;
    else if(parent[targ]) parent[targ].location.href=url;
  	else return false;
	}

function sM_create(m) {
	var oldcat=null;
	var lastai=0;
	JSM_nspadfix=(JSM_Border*2) + (JSM_Padding*2);
	JSM_xnew=JSM_sx;
	JSM_ynew=JSM_ysub=JSM_sy;
	JSM_headw=(JSM_isHeadFixed)?JSM_sw:0;
	if(JSM_isJunk) return errMsg("Uncompatible Client for this Script!");
	for (var i=0;i<m.length;i++) {
		var isbar=(m[i][1]=="-----")? 1:0;
		m[i][1]=(isbar && JSM_ns4)? JSM_NSlinebar :(isbar)? JSM_linebar: m[i][1]+"&nbsp;";
		var objid="M_"+ (i+JSM_lid);
		if (!m[i][2]) m[i][2] = ""; 			//link
		if (!m[i][3]) m[i][3] = ""; 			//target
		if (!m[i][4]) { 						// Classes
			if (m[i][0]==0) m[i][4] = JSM_HeadClass;
			else if (m[i][0]==1) m[i][4] = JSM_MenuClass;
			else if (m[i][0]==2) m[i][4] = JSM_SubMenuClass;
			else m[i][4] = JSM_DefaultClass;
			}
		if (!m[i][5]) m[i][5] = JSM_sh;				//height
		if (!m[i][7]) m[i][7] = JSM_DefaultIcon;	//Menu Icon
		if (!JSM_ns6) m[i][5] += JSM_nspadfix;
		if (!isbar&& JSM_UseIcons && m[i][7]) m[i][1] = "<img src='"+JSM_IconPath+"/"+m[i][7]+"' border=0 align='left'>"+ m[i][1];
		bgchover=(!m[i][0])? JSM_MenuHead_BGColor_Hover : (m[i][0]==1)? JSM_Menu_BGColor_Hover : (m[i][0]==2)? JSM_MenuSub_BGColor_Hover : "";
		bgchout=(!m[i][0])? JSM_MenuHead_BGColor_Normal : (m[i][0]==1)? JSM_Menu_BGColor_Normal : (m[i][0]==2)? JSM_MenuSub_BGColor_Normal : "";
		if (JSM_dom && JSM_DCE && JSM_DCTN) {
			var obj=document.createElement("div");
			obj.id=objid;
			obj.style.visibility="hidden";
			obj.innerHTML=m[i][1];
			document.getElementsByTagName("BODY")[0].appendChild(obj);
			//obj.appendChild(document.createTextNode(m[i][1]));
			}else if(JSM_ns4) {
			if (!m[i][0] && !JSM_isHeadFixed){
				JSM_NSheadw=getNSDummyWidth(m[i][1],m[i][4]);
				owi=(JSM_NSheadw+JSM_hPadding)
				}else{
				owi=JSM_sw;
				}
			if (JSM_subimg && m[i+1] && m[i][0]==1 && m[i+1][0]==2){
				owi-=3;
				m[i][1]= "<img src='"+JSM_subimg+"' border='0' align='right'>"+m[i][1];
				}
			out="";
			out+="<layer name='"+objid+"' width='"+owi+"' height='"+m[i][5]+"' visibility='hide' bgcolor='"+bgchout+"' class='"+JSM_SimpleClass+"'>";
			out+="<layer top='"+JSM_Padding+"' left='"+JSM_Padding+"'>"+m[i][1]+"</layer>";
			out+="<layer width='100%' height='100%'></layer>";
			out+="</layer>";
			document.write(out+"\n");
			obj=document.layers[objid];
			obj.captureEvents( Event.MOUSEOVER | Event.MOUSEOUT | Event.CLICK | Event.MOUSEUP );
			obj.style=obj;
			}else {
			out="<div id='"+objid+"' class='"+m[i][4]+"'>"+m[i][1]+"</div>";
			document.write(out);
			obj=(JSM_ie4)? document.all[objid]: eval("document."+objid);
			}
		obj.onmouseover=new Function("sM_hover(this,'"+ m[i][4] +"',"+isbar+",'"+bgchover+"')");
		obj.onmouseout=new Function("sM_hout(this,'"+ m[i][4] +"',"+isbar+",'"+bgchout+"')");
		if (m[i][2] && m[i][4]!=JSM_InactiveClass) {
			obj.onmouseup=new Function("sM_link('"+ m[i][2] +"','"+ m[i][3] +"')");
	      	obj.style.cursor=(JSM_ie4)? "hand" : "pointer";
			} else {
			obj.style.cursor="default";
			}
		if (JSM_LinkAsTitle && m[i][2]) obj.title=m[i][2];
		obj.style.position="absolute";
		obj.style.border=JSM_Border+"px solid "+JSM_BorderColor;
		obj.style.padding=JSM_Padding+"px "+JSM_Padding+"px "+JSM_Padding+"px "+JSM_Padding+"px ";
		if (m[i][4])obj.className=m[i][4];
		cal(m,i,JSM_lid);
		awidth=(JSM_ie)? obj.clientWidth :(!JSM_ie && JSM_dom)? obj.offsetWidth: JSM_sw;
		if (!m[i][0] && !JSM_isHeadFixed){
			JSM_headw=(JSM_ns4)? JSM_NSheadw : awidth;
			}
		if (JSM_subimg && m[i+1] && m[i][0]==1 && m[i+1][0]==2){
			m[i][1]= "<img src='"+JSM_subimg+"' border='0' align='right'>"+m[i][1];
			if (JSM_dom) obj.innerHTML=m[i][1];
			awidth+=JSM_subimgwidth;
			}
		obj.style.left=(JSM_ns4)?JSM_xnew:JSM_xnew+'px';
		obj.style.top=(JSM_ns4)?JSM_ynew:JSM_ynew+'px';
		obj.style.overflow="hidden";
        if(JSM_isOpaque && JSM_ie) obj.style.filter="alpha(opacity="+JSM_OpaqueValue+")";
        if(JSM_isOpaque && JSM_ns6) obj.style.MozOpacity=JSM_OpaqueValue/100;
		obj.style.visibility=(m[i][0])?"hidden":"visible";
		obj.style.width=(!m[i][0] && !JSM_isHeadFixed)?(JSM_headw+JSM_hPadding):(JSM_isAutoWidthMenu)? awidth : JSM_sw;
		obj.style.height=m[i][5];
		obj.style.zIndex=JSM_cat;
		if (JSM_isAutoWidthMenu) aWCheck(JSM_cat, awidth);
		}
	JSM_lid+=i;
	//alert("idmaster: "+JSM_idmaster+"\nidsub: "+JSM_idsub+"\nidpool: "+JSM_idpool);
	if (JSM_dom && JSM_isAutoWidthMenu) REPositionElements();
	}

function aWCheck(c,w) {
	aifound=-1;
	for (ai=0;ai<JSM_awidthpool.length;ai++) {
		io=JSM_awidthpool[ai].split("_")[0];
		no=JSM_awidthpool[ai].split("_")[1];
		if (io == c) aifound=ai;
		}
	if (aifound >-1) {
		io=JSM_awidthpool[aifound].split("_")[0];
		no=JSM_awidthpool[aifound].split("_")[1];
		// if ( w > JSM_sw ) w=JSM_sw;
	  	if ( no < w && w < JSM_sw * 3) JSM_awidthpool[aifound]=io+"_"+w;
	  	}else{
	  	JSM_awidthpool.push(c+"_"+w);
	  	}
	}

function REPositionElements() {
	//alert(JSM_awidthpool);
	for (ai=0;ai<JSM_awidthpool.length;ai++) {
		ac=JSM_awidthpool[ai].split("_")[0];
		aw=JSM_awidthpool[ai].split("_")[1];
		//aw=parseInt(aw) + 20;
		for (i=0;i<JSM_idpool.length;i++) {
			ic=JSM_idpool[i].split("_")[0];
			ino=JSM_idpool[i].split("_")[1];
			if (ic == ac) {
				//alert("Object: M_"+ino+" :: "+aw);
				getObj("M_"+ino).style.width=aw;
				}
			}
		}
	for (si=0;si<JSM_idsub.length;si++) {
		sii=JSM_idsub[si]+1;
		for (i=0;i<JSM_idpool.length;i++) {
			ic=JSM_idpool[i].split("_")[0];
			ino=JSM_idpool[i].split("_")[1];
			if (ic == sii) {
				hs=parseInt(getObj("M_"+JSM_idsub[si]).style.left);
				hw=parseInt(getObj("M_"+JSM_idsub[si]).style.width);
				hp=(JSM_ns6)? JSM_nspadfix : 0;
				getObj("M_"+ino).style.left=hs+hw+hp+JSM_Space+JSM_subx;
				}
			}
		}
	}

function getNSDummyWidth(txt,cla){
	document.write("<layer name='DummyNS_"+JSM_dummy+"' class='"+cla+"' visibility='hide'>"+txt+"&nbsp;</layer>\n");
	dum=document.layers['DummyNS_'+JSM_dummy];
	JSM_dummy++;
	return dum.clip.width;
	}

function getObj(id){
	if (JSM_dom) return document.getElementById(id);
	if (JSM_ie4) return document.all[id];
	if (JSM_ns4) return document.layers[id];
	return null;
	}

function errMsg(txt) {
	var info="Document Object Model: ("+JSM_dom
	+")\nCreate Element: ("+ JSM_DCE
	+")\nCreate Text Node: ("+ JSM_DCTN
	+")"
	+"\n\nClient: "+navigator.appName+"/"+JSM_ver;
	alert("Error: "+txt+"\n\n");
	return false;
	}


//
// Psevdo-API  functions
// -------------------------------------------

function getMenuID(name){
	for(i=0;i<JSM_fapi.length;i++){
		if(JSM_fapi[i][6]==name) return i;
		}
	return -1;
	}

function addMenuHead(name, txt, lin, tar, cla, hei, ico) {
	JSM_lastHeadID=0;
	return JSM_fapi.push([0, txt, lin, tar, cla, hei, name, ico]);
	}
function addMenu(name, txt, lin, tar, cla, hei, ico) {
	JSM_lastHeadID=1;
	return JSM_fapi.push([1, txt, lin, tar, cla, hei, name, ico]);
	}
function addSubMenu(name, txt, lin, tar, cla, hei, ico) {
	JSM_lastHeadID=2;
	return JSM_fapi.push([2, txt, lin, tar, cla, hei, name, ico]);
	}

function addMenuBar(cla){
	if (!cla) cla=JSM_DefaultClass;
	if (JSM_lastHeadID) {
		if (JSM_lastHeadID==1) cla=JSM_MenuClass;
		if (JSM_lastHeadID==2) cla=JSM_SubMenuClass;
		JSM_fapi.push([JSM_lastHeadID, "-----","","",cla]);
		}
	}

function setMenuText(name,value){
	id=getMenuID(name);
	if (id > -1) {
		JSM_fapi[id][1]=value;
		}else{
		alert("ID: "+name+" not found!\nText not set.");
		}
	}
function setMenuLink(name,value){
	id=getMenuID(name);
	if (id > -1) {
		JSM_fapi[id][2]=value;
		}else{
		alert("ID: "+name+" not found!\nLink not set.");
		}
	}
function setMenuTarget(name,value){
	id=getMenuID(name);
	if (id > -1) {
		JSM_fapi[id][3]=value;
		}else{
		alert("ID: "+name+" not found!\nLink Target not set.");
		}
	}
function setMenuClass(name,value){
	id=getMenuID(name);
	if (id > -1) {
		JSM_fapi[id][4]=value;
		}else{
		alert("ID: "+name+" not found!\nClass not set.");
		}
	}
function setMenuInactive(name){
	id=getMenuID(name);
	if (!JSM_InactiveClass) alert("Variable: [JSM_InactiveClass] not set!\nTake a look in configuration section.");
	if (id > -1) {
		JSM_fapi[id][4]=JSM_InactiveClass;
		}else{
		alert("ID: "+name+" not found!\nInactive Class not set.");
		}
	}
function setMenuHeight(name,value){
	id=getMenuID(name);
	if (id > -1) {
		JSM_fapi[id][5]=value;
		}else{
		alert("ID: "+name+" not found!\nHeight not set.");
		}
	}


function setMenuIcon(name,value){
	id=getMenuID(name);
	if (id > -1) {
		JSM_fapi[id][7]=value;
		}else{
		alert("ID: "+name+" not found!\nIcon not set.");
		}
	}


function createMenu(){
	return sM_create(JSM_fapi);
	}