//
// (C) steve, 2003
//

nn = (document.layers?1:0);
NS4 = (document.layers?1:0);
NS6 =  ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 5))
IE4 = (document.all?1:0);
MAC45 = (navigator.appVersion.indexOf("MSIE 4.5") != -1)
ver4 = (NS4 || IE4);   
isMac = (navigator.appVersion.indexOf("Mac") != -1);

//
// Menu object
//
function Menu(name) {
	this.name = name;

	this.normalImage       = 'menuitem.gif';
	this.overImage         = 'menuitemover.gif';
	this.selectedImage     = 'menuitemselected.gif';
	this.selectedoverImage = 'menuitemselectedover.gif';
	
	this.items = new Array();
	this.names = new Array();

	this.images = MenuImages;
	this.add = MenuAdd;
	this.loaded = false;

	this.over = MenuOver;
	this.out = MenuOut;

	this.align = 'bottom';
	this.obj = this;
}

function MenuImages(normal,over,selected,selectedover) {
	this.normalImage = (normal == undefined ? null : normal);
	this.overImage = (over == undefined ? null : over); 
	this.selectedImage = (selected ? selected : null);
	this.selectedoverImage = (selectedover ? selectedover : null); 
}

// menu.add(id,title,selected,parent1,parent2,...)
function MenuAdd(id,title,selected) {
	if (!id) return;

	title = NS4 || NS6 ? escape(title) : title;
	var normalImage = (this.normalImage ? (selected && this.selectedImage ? this.selectedImage : this.normalImage ) +title+'.gif' : null);
	var overImage = (this.overImage ? (selected && this.selectedoverImage ? this.selectedoverImage : this.overImage ) +title+'.gif' : null);

	var parents = new Array();
	for (var i=3 ; i<arguments.length ; i++) {
		parents[parents.length] = arguments[i];
	}
	var newid = this.items.length;
	this.items[newid] = new MenuItem(id,normalImage,overImage,parents);
	if (this.opacity) this.items[newid].opacity = this.opacity;
	if (this.align) this.items[newid].align = this.align;
	this.names[newid] = id;
	eval('this.i'+id+' = this.items[newid]');
}

function MenuOver(id) {
	if (!this.loaded) return;
	if (!id) return;

	for (var i=0;i<this.names.length;i++) {
		if (this.names[i] == id) {
			this.items[i].over(true);
			return;
		}
	}
}

function MenuOut(id) {
	if (!this.loaded) return;
	if (!id) return;

	for (var i=0;i<this.names.length;i++) {
		if (this.names[i] == id) {
			this.items[i].out(true);
			return;
		}
	}
}


//
// Menu Item object
// Menu item remembers it's parents (if any)
//
function MenuItem(id,normal,over,parents) {
	this.id = id;

	if (normal) {
		this.normalImage = new Image();
		this.normalImage.src = normal;
	}
	if (over) {
		this.overImage = new Image();
		this.overImage.src = over;
	}
	this.parents = parents;

	this.over = MenuItemOver;
	this.out = MenuItemOut;
}


//
// Show active menu image, and submenu layers within
//

var SHOWN = new Array();

function MenuItemOver(value) {
	if (this.normalImage && document.images['menu_'+this.id])
		document.images['menu_'+this.id].src = this.overImage.src;

	for (var i=0; i<SHOWN.length; i++) {
		if (SHOWN[i] != this.parents[i]) {
			hideLayer('menuDiv_'+SHOWN[i]);
		}
	}

	for (var i=0; i<this.parents.length; i++) {
		if (SHOWN[i] != this.parents[i]) {
			var coords = getPlace('menu_'+this.parents[i]);
			var xpos = coords[0];
			var ypos = coords[1];
			if (this.align == 'right') xpos = coords[0]+coords[2];
			if (this.align == 'left') xpos = coords[0]-130;
			if (this.align == 'bottom') ypos = coords[1]+coords[3];
			setLayerPos('menuDiv_'+this.parents[i],xpos,ypos);
			if (this.opacity) setLayerAlpha('menuDiv_'+this.parents[i],this.opacity);
			showLayer('menuDiv_'+this.parents[i]);
		}
	}

	SHOWN = this.parents;
}

//
// Show inactive menu image
//
function MenuItemOut() {
	if (this.normalImage && document.images['menu_'+this.id])
		document.images['menu_'+this.id].src = this.normalImage.src;

	for (var i=0; i<SHOWN.length; i++) {
		if (SHOWN[i] != this.parents[i]) {
			hideLayer('menuDiv_'+SHOWN[i]);
		}
	}
}





//
// Necesary Utils
//


// find Object by (n)ame in (d)ocument
function findObj(n, d) {
	var p,i,x;
	if (!d) d = document;
	if ( (p = n.indexOf("?")) > 0 && parent.frames.length) {
		d = parent.frames[n.substring(p+1)].document;
		n = n.substring(0,p);
	}
	if (! (x=d[n]) && d.all ) x=d.all[n];
	for (i=0 ; !x && i < d.forms.length ; i++) x = d.forms[i][n];
	for (i=0 ; !x && d.layers && i < d.layers.length ; i++) x = findObj(n,d.layers[i].document);
	if (!x && d.getElementById ) x = d.getElementById(n);
	return x;
}

// Find Position of Image File
function FindLeftEdge(img) {
	xPos = img.offsetLeft;
	tempEl = img.offsetParent;
	while (tempEl != null) {
		xPos += tempEl.offsetLeft;
		tempEl = tempEl.offsetParent;
	}
	return xPos;
}

// Find Position of Image File
function FindTopEdge(img) {
	yPos = img.offsetTop;
	tempEl = img.offsetParent;
	while (tempEl != null) {
		yPos += tempEl.offsetTop;
		tempEl = tempEl.offsetParent;
	}
	if (MAC45) yPos=menuOffset;
	return yPos;
}

// Find Position of Image File and size.
function getPlace (imgname) {
	holdingImage = findObj(imgname);
	if (!holdingImage) {
		alert('Undefined image: "'+ imgname +'"');
		return([0,0,0,0]);
	}
	var canvasLeft = (NS4 && !NS6) ? holdingImage.x : FindLeftEdge(holdingImage);
	var canvasTop = (NS4 && !NS6) ? holdingImage.y : FindTopEdge(holdingImage);
	var canvasWidth = holdingImage.width;
	var canvasHeight = holdingImage.height;
	return ([canvasLeft,canvasTop,canvasWidth,canvasHeight]);
}

//	Find layer object. 
function findLayer(layername) {
	if (NS4) layer = eval("document.layers."+layername);
	else if (NS6) layer = document.getElementById(layername);
	else layer = findObj(layername);
	return (layer);
}


// Hide Layer
function hideLayer(layername)  {
	layer = findLayer(layername);
	if (layer) {
		if (NS4) layer.visibility = "hide"
		else layer.style.visibility = "hidden"
	}
}

// Show Layer
function showLayer(layername)  {
	layer = findLayer(layername);
	if (layer) {
		if (NS4) layer.visibility = "show"
		else layer.style.visibility = "visible"
	}
}

//	Get position of DIV
function getLayerPos(layername) {
	layer = findLayer(layername);
	var layerX = 0;
	var layerY = 0;
	if (!layer) return([layerX,layerY]);

	if (NS4) {
        layerX = layer.left;
        layerY = layer.top;
	} else if (NS6) {
        layerX = layer.style.left;
        layerY = layer.style.top;
	} else {
        layerX = layer.style.pixelLeft;
        layerY = layer.style.pixelTop;
	}

	return([layerX,layerY]);
}

//	Set position of DIV
function setLayerPos(layername,x,y) {
	layer = findLayer(layername);
	if (!layer) return([x,y]);

	if (NS4) {
        layer.left = x;
        layer.top = y;
	} else if (NS6) {
        layer.style.left = x;
        layer.style.top = y;
	} else {
        layer.style.pixelLeft = x;
        layer.style.pixelTop = y;
	}
	return;
}

//	Set alpha of DIV
function setLayerAlpha(layername,alpha) {
	layer = findLayer(layername);
	if (!layer) return;

	if (NS4) {
	} else if (NS6) {
	} else {
        layer.style.filter = 'alpha(opacity='+alpha+')';
	}
	return;
}

