	
function Is() {
    var agent = navigator.userAgent.toLowerCase();
    this.NN  = ((agent.indexOf('mozilla')!=-1) && ((agent.indexOf('spoofer')==-1) && (agent.indexOf('compatible') == -1)));
    this.IE   = (agent.indexOf("msie") != -1);
    this.WIN = (agent.indexOf("win") != -1);
    this.IE5 = (this.IE && (agent.indexOf('5') != -1));
}

function handleResize() {
	if (is.NN) {
		return false;
	}
}


var is = new Is();

var nameArray = new Array(); 
var menuItems = new Array();
var buttons;

self.onError = null;

var menuSpeed = 10;

if (is.NN) {
	onState = "show"; 
  offState = "hide";
	window.captureEvents(Event.RESIZE);
	window.onresize = handleResize;
} 
else if (is.IE) {
	onState = "visible"; 
	offState = "hidden";
}

		
function initialize() {
		GetImageNames(document);
    buttons = new ImageArray(nameArray);
		initMenu();
		
}

function getLayerHeight(layerName) {
	if(is.NN) {
		return document.layers[layerName].clip.height;
	} else {
		return document.all[layerName].clientHeight;
	}

}


function getLayer(layerID) {
	if (is.NN) {
		return document.layers[layerID];
	} else {
		return document.all[layerID].style;
	}
}


function shiftBy(obj, deltaX, deltaY) {
  if (is.NN) {
    obj.moveBy(deltaX, deltaY);
  } else {
    obj.style.posLeft += deltaX;
    obj.style.posTop += deltaY;
  }
}


function GetImageNames(obj) {
	var ftypeExp = /\.[^\.]*$/; 
	var idExp = /_\d*$/;
	var fnameString;
	var extString;
	var srcString;
	
	for(var i = 0; i<obj.images.length; i++) {
		if (obj.images[i].name != "") {
			srcString = obj.images[i].src;
			fnameString = srcString.split(ftypeExp)[0];
			extString = srcString.match(ftypeExp);
			nameArray[obj.images[i].name] =   // put all the info in an array, including a reference
				{fname:fnameString,
				 ftype:extString,
				 objRef:obj.images[i]};
		}
	}

	if (is.NN) {
		for (var i=0; i < obj.layers.length; i++) {
			GetImageNames(obj.layers[i].document);
		}
	}
}



function ImageArray(imageNames) {
    var imgArray = new Array();

    for(var imgRef in imageNames) {
			imgArray[imgRef] = new Object();
			imgArray[imgRef].state = "norm";
      imgArray[imgRef].norm = new Image();

			imgArray[imgRef].norm.src = imageNames[imgRef].fname + imageNames[imgRef].ftype;
      imgArray[imgRef].norm_over = new Image();
			imgArray[imgRef].norm_over.src = 
	    	imageNames[imgRef].fname + "_on" + imageNames[imgRef].ftype;
    }
    return imgArray;
}


function RollOn(imageName) {
	if(buttons != null) {
    srcType = buttons[imageName].state + "_over";
    nameArray[imageName].objRef.src = buttons[imageName][srcType].src;
	}
}


function RollOff(imageName) {
	if(buttons != null) {
    srcType = buttons[imageName].state;
    nameArray[imageName].objRef.src = buttons[imageName][srcType].src;
	}
}

function initMenu() {
	var layerArray;
	var nameRef;
	var layerName;
	var parent;
	var child;
	
	if(is.NN) {
		layerArray = document.layers;
		nameRef = 'name';
	} else {
		layerArray = document.all.tags('DIV');
		nameRef = 'id';
	}
	

	for(var i = 0; i < layerArray.length; i++) {

		layerName = layerArray[i][nameRef];

		if(layerArray[layerName + "Sub"] != null) { 

			menuItems[layerName] = new Object();
			menuItems[layerName].parent = layerArray[i];
			menuItems[layerName].child = layerArray[layerName + "Sub"];
			menuItems[layerName].closed = true;

			parent = menuItems[layerName].parent;
			child = menuItems[layerName].child;
			
			if(is.NN) {
				child.pageY = parent.pageY + parent.clip.height - child.clip.height;

				menuItems[layerName].childOriginY = child.pageY;
				menuItems[layerName].parentOriginY = parent.pageY;
			
			} else {
			
				// reposition the child menus Y coord in relation to it's parent and it's own height
				child.style.posTop = parent.style.posTop + parent.clientHeight - child.clientHeight;	

				// record the origin Y coords
				menuItems[layerName].childOriginY = child.style.posTop;
				menuItems[layerName].parentOriginY = parent.style.posTop;
			}			
		}
	}
}


function getOpenMenuHeight() {
	var tableHeight = 0;
	var sectionHeight = 0;
	var menuHeight = 0;
	var greatestHeight = 0;
	
	if(is.NN) {
		layerArray = document.layers;
		nameRef = 'name';
	} else {
		layerArray = document.all.tags('DIV');
		nameRef = 'id';
	}
	for(var i = 0; i < layerArray.length; i++) {
		layerName = layerArray[i][nameRef];
		if(layerArray[layerName + "Sub"] != null) {
			if(is.NN) {
				menuHeight += layerArray[layerName].clip.height;
				
				if(layerArray[layerName + "Sub"].clip.height > greatestHeight) {
					greatestHeight = layerArray[layerName + "Sub"].clip.height;
				}
				
			} else {
				menuHeight += layerArray[layerName].clientHeight;
				
				if(layerArray[layerName + "Sub"].clientHeight > greatestHeight) {
					greatestHeight = layerArray[layerName + "Sub"].clientHeight;
				}
				
			}
		}
	}
	

	tableHeight = menuHeight + greatestHeight - 106;
	
	if(tableHeight == 0) {
		return 400;
	} else {
		return tableHeight;
	}
}


var openThisMenu = "";
var menuOpened = "";
var menuMoving = false;

function toggleMenu(menuID, movement) {
	
	if(menuID != "") {
		if(!menuMoving) {
			menuMoving = true;
			if(menuOpened == menuID) {
				openThisMenu = "";
			} else {
				openThisMenu = menuID;
			}
			
			if(menuOpened != "") {
				closeMenu(menuOpened, movement);
			} else {
				openMenu(menuID, movement);
			}
		}
	
	}

	return false;
}

function closeMenu(menuID, movement) {
	var moveMe = false;
	
	if(is.NN) {
		subY = menuItems[menuID].child.pageY;
		originY = menuItems[menuID].childOriginY;
		menuHeight = menuItems[menuID].child.clip.height;
		menuItems[menuID].child.visibility = offState;
	} else {
		subY = menuItems[menuID].child.style.posTop;
		originY = menuItems[menuID].childOriginY;
		menuHeight = menuItems[menuID].child.clientHeight;
		menuItems[menuID].child.style.visibility = offState;
	}

	
		if(movement) {
			if(subY - menuSpeed  < originY) {
				moveDist = -(subY - originY);
			} else {
				moveDist = -menuSpeed;
			}
		} else {
			moveDist = -(subY - originY);
		}
		
		shiftBy(menuItems[menuID].child, 0, moveDist);
		
		if(moveDist == -menuSpeed) {
			moveMe = true;
		}
	
	
	if(moveMe) {
		setTimeout("closeMenu('" + menuID + "', " + movement + ")", 5);
	} else {
		closeMainMenu(menuID, movement);
	}
}

function closeMainMenu(menuID, movement) {
	var currentY;
	var menuHeight;
	var parentY;
	var moveDist;
	var moveMe = false;
	
	if(is.NN) {
		parentY = menuItems[menuID].parent.pageY;
		childY = menuItems[menuID].child.pageY;	
		menuHeight = menuItems[menuID].child.clip.height;
	} else {
		parentY = menuItems[menuID].parent.style.posTop;
		childY = menuItems[menuID].child.style.posTop;
		menuHeight = menuItems[menuID].child.clientHeight;
	}

	for(layerName in menuItems) {
		if(is.NN) {
			itemY = menuItems[layerName].parent.pageY;
		} else {
			itemY = menuItems[layerName].parent.style.posTop;
		}
	
		if(itemY > parentY) {
			
			if(movement) {
				if(itemY - menuSpeed < menuItems[layerName].parentOriginY) {
					moveDist = -(itemY - menuItems[layerName].parentOriginY);
				} else {
					moveDist = -menuSpeed;
				}
			} else {
				moveDist = -(itemY - menuItems[layerName].parentOriginY);
			}
			
			shiftBy(menuItems[layerName].parent, 0, moveDist);
			
			if(moveDist == -menuSpeed) {
				moveMe = true;
			} 
		} 
	}
	
	if(moveMe) {
		setTimeout("closeMainMenu('" + menuID + "', " + movement + ")", 5);
	} else {
		if(openThisMenu != "") {
			openMenu(openThisMenu, movement);
		} else {
			menuOpened = "";
			menuMoving = false;
		}
	}

}



function openMenu(menuID, movement) {
	var currentY;
	var menuHeight;
	var parentY;
	var moveDist;
	var moveMe = false;
	
	if(is.NN) {
		parentY = menuItems[menuID].parent.pageY;
		childY = menuItems[menuID].child.pageY;	
		menuHeight = menuItems[menuID].child.clip.height;
	} else {
		parentY = menuItems[menuID].parent.style.posTop;
		childY = menuItems[menuID].child.style.posTop;
		menuHeight = menuItems[menuID].child.clientHeight;
	}

	for(layerName in menuItems) {
		if(is.NN) {
			itemY = menuItems[layerName].parent.pageY;
		} else {
			itemY = menuItems[layerName].parent.style.posTop;
		}
	
		if(itemY > parentY) {
			
			if(movement) {
				if(itemY + menuSpeed - menuItems[layerName].parentOriginY > menuHeight) {
					moveDist = menuItems[layerName].parentOriginY + menuHeight - itemY;
				} else {
					moveDist = menuSpeed;
				}
			} else {
				moveDist = menuHeight;
			}
			
			shiftBy(menuItems[layerName].parent, 0, moveDist);
			
			if(moveDist == menuSpeed) {
				moveMe = true;
			} 
		} 
	}
	
	if(moveMe) {
		setTimeout("openMenu('" + menuID + "', " + movement + ")", 5);
	} else {
		openSubMenu(menuID, movement);
	}
}


function openSubMenu(menuID, movement) {
	var moveMe = false;
	
	if(is.NN) {
		subY = menuItems[menuID].child.pageY;
		originY = menuItems[menuID].childOriginY;
		menuHeight = menuItems[menuID].child.clip.height;
		menuItems[menuID].child.visibility = onState;
	} else {
		subY = menuItems[menuID].child.style.posTop;
		originY = menuItems[menuID].childOriginY;
		menuHeight = menuItems[menuID].child.clientHeight;
		menuItems[menuID].child.style.visibility = onState;
	}
	
	/*
	if(!confirm(menuItems[menuID].child.clip.height)){
		return 0;
	}
	*/

	if(subY <= originY + menuHeight) {
		if(movement) {
			if(subY + menuSpeed - originY > menuHeight) {
				moveDist = originY + menuHeight - subY;
			} else {
				moveDist = menuSpeed;
			}
		} else {
			moveDist = menuHeight;
		}
		
		shiftBy(menuItems[menuID].child, 0, moveDist);
		
		
		if(moveDist == menuSpeed) {
			moveMe = true;
		}
	}
	
	if(moveMe) {
		setTimeout("openSubMenu('" + menuID + "', " + movement + ")", 5);
	} else {
		menuOpened = menuID;
		menuMoving = false;
	}
	
}

