/* 

mjk_nerve.js
Copyright (c) 2004 Matthew Knight, Reconstrukt for nerve.com.

*/

//
// DHTML Library. Provides lightweight library for manipulating DOM objects.
d = document;
l = (d.layers)?1:0; 
op = navigator.userAgent.toLowerCase().indexOf('opera')!=-1; // Opera ?
function gE(e,f){if(l){f=(f)?f:self;V=f.document.layers;if(V[e])return V[e];for(W=0;W<V.length;)return(gE(e,V[W++]));}if(d.all)return d.all[e];return d.getElementById(e);}
function sE(e){if(l)e.visibility='show';else e.style.visibility='visible';}
function hE(e){if(l)e.visibility='hide';else e.style.visibility='hidden';}
function sZ(e,z){if(l)e.zIndex=z;else e.style.zIndex=z;}
function sX(e,x){if(l)e.left=x;else if(op)e.style.pixelLeft=x;else e.style.left=x;}
function sY(e,y){if(l)e.top=y;else if(op)e.style.pixelTop=y;else e.style.top=y;}
function wH(e,h){if(l){Y=e.document;Y.write(h);Y.close();}if(e.innerHTML)e.innerHTML=h;}
function sI(i,s){if(d.images){i.src=s;}}

// 
// Menu naming scheme. What's the prefix used when identifying menus in HTML?
mjk_MenuIDPrefix = "mjk_Menu";

//
// Menu Behaviors. Harness to the underlying script library, this
// 	changes image sources and tracks on/off states as Menu events fire
mjk_AreLoaded		= 0;
mjk_PreviousMenuID	= mjk_MenuIDPrefix + '0';
mjk_MenuImagePrefix	= 'mjk_MenuImage';
mjk_DebugHarness	= false;

function mjk_Override(id) {
	if (mjk_AreLoaded) {
		if (mjk_DebugHarness) {
			alert("Current Menu is: "+mjk_CurrentMenu.id); // like, 'mjk_Menu20'
			alert("Menu Override passed: "+id); // like, 'mjk_Menu20'
		}
		mjk_f_HideAll()
		// turn passed menu on
		var passID = id.substring(mjk_MenuIDPrefix.length, id.length);
		if (d.images) {
			var imgObj = d.images[mjk_MenuImagePrefix + passID];
			sI(imgObj, mjk_GetImageSrc(imgObj, 1));
		}
		// buffer for use later
		mjk_PreviousMenuID = id;
	}
}
function mjk_MenuOn() {
	
	if (mjk_AreLoaded) {

		if (mjk_DebugHarness) {
			alert("UponDisplay, selected Menu is = "+mjk_CurrentMenu.id);  	//mjk_Menu1
		}
		// turn curr menu on
		var currID = mjk_CurrentMenu.id.substring(mjk_MenuIDPrefix.length, mjk_CurrentMenu.id.length);
		if (d.images) {
			var imgObj = d.images[mjk_MenuImagePrefix + currID];
			sI(imgObj, mjk_GetImageSrc(imgObj, 1));
		}
		// buffer for use later
		mjk_PreviousMenuID = mjk_CurrentMenu.id;
		// hide any form elements
		var formelementSpan = gE('mjk_MenuToggle');
		if (formelementSpan) {
			hE(formelementSpan);
		}
	}
}
function mjk_MenuOff() {
	
	if (mjk_AreLoaded) {
		
		if (mjk_DebugHarness) {
			alert("UponHide, selected Menu is = "+mjk_CurrentMenu.id);  //mjk_Menu1
			alert("UponHide, Previous Menu is = "+mjk_PreviousMenuID);  //mjk_Menu1	
		}
		// turn prev menu off
		var prevID = mjk_PreviousMenuID.substring(mjk_MenuIDPrefix.length, mjk_PreviousMenuID.length);
		if (d.images) {
			var imgObj = d.images[mjk_MenuImagePrefix + prevID];
			sI(imgObj, mjk_GetImageSrc(imgObj, 0));
		}
		// show any hidden form elements
		var formelementSpan = gE('mjk_MenuToggle');
		if (formelementSpan) {			
			sE(formelementSpan);
		}
	}
}
function mjk_GetImageSrc(imgObj, toggle) {
	var src 		= imgObj.src;
	var path 		= src.substring(0, src.lastIndexOf("/"));			// find path portion of the image source
	var filename	= src.substring(src.lastIndexOf("/"), src.length);	// find filename portion of the image source
	var searchRegEx	= toggle==1 ? /_off/i : /_on/i;						// our regular expression to find the image source suffix
	var replace		= toggle==1 ? '_on' : '_off';						// our replacement depending on what source we're toggling to
	var toggledSrc	= src.replace(searchRegEx, replace);				// our finished string reflecting the toggled image source
	/*
	alert(path+"=path");
	alert(filename+"=filename");
	alert(toggledSrc);
	*/
	return toggledSrc;
}

//
// Menu Placement. Determines placement (x + y coords) for menus as events fire.
//  Usage:
//  getLeft and getTop take an anchor's NAME and ID string (names used for NS4.x)
//  so, for the y-coord of this: <A HREF="#" NAME="blah" ID="blah">my link</A>
//  do this: getTop('blah')
function getLeft(anchorstr) {
	var nLeftPos = 0;
	if (l) {
		var found=0;
		for (var i=0; i<d.anchors.length; i++) {
			if (d.anchors[i].name == anchorstr) {
				found=1;
				break;
			}
		}
		nLeftPos = ( found==0 ? 0 : d.anchors[i].x );
	} else {
		var e = gE(anchorstr);						 // get a handle on the anchor element
	    var nLeftPos = e.offsetLeft;     			 // initialize var to store calculations
	    var eParElement = e.offsetParent;	 		 // identify first offset parent element  
	    while (eParElement != null) {                // move up through element hierarchy
	        nLeftPos += eParElement.offsetLeft;      // appending left offset of each parent
	        eParElement = eParElement.offsetParent;  // until no more offset parents exist
	    }
	}
    return nLeftPos;                             	 // return the x coord
}
function getTop(anchorstr) {
	var nTopPos = 0;
	if (l) {
		var found=0;
		for (var i=0; i<d.anchors.length; i++) {
			if (d.anchors[i].name == anchorstr) {
				found=1;
				break;
			}
		}
		nTopPos = ( found==0 ? 0 : d.anchors[i].y );
	} else {
		var e = gE(anchorstr);						 // get a handle on the anchor element
	    var nTopPos = e.offsetTop;			         // initialize var to store calculations
	    var eParElement = e.offsetParent;   		 // identify first offset parent element  
	    while (eParElement != null) {                // move up through element hierarchy
	        nTopPos += eParElement.offsetTop;        // appending top offset of each parent
	        eParElement = eParElement.offsetParent;  // until no more offset parents exist
	    }
	}
    return nTopPos;                                  // return the y coord
}
