/* ---- The object definitions ---- */
function MenuButton( buttonClass, buttonText, buttonURL ) {
	this.buttonClass = buttonClass;
	this.buttonText = buttonText;
	this.buttonURL = buttonURL;
	
	this.CreateMenuButton = MenuButtonOutput;
}



function Menu( menuID, menuClass, menuRootButtonClass, menuRootButtonName ) {
	this.menuID = menuID;
	this.menuClass = menuClass;
	this.menuRootButtonClass = menuRootButtonClass;
	this.menuRootButtonName = menuRootButtonName;
	this.menuButtonArray = new Array();
	
	this.CreateMenu = MenuOutput;
	this.CreateMenuRootButton = MenuCreateRootButton;
	this.CreateMenuRootButtonInactive = MenuCreateRootButtonInactive;
	this.Add = MenuAddButton;
}

function Menu( menuID, menuClass, menuRootButtonClass, menuRootButtonName, menuRootButtonURL ) {
	this.menuID = menuID;
	this.menuClass = menuClass;
	this.menuRootButtonClass = menuRootButtonClass;
	this.menuRootButtonName = menuRootButtonName;
	this.menuRootButtonURL = menuRootButtonURL;
	this.menuButtonArray = new Array();
	
	this.CreateMenu = MenuOutput;
	this.CreateMenuRootButton = MenuCreateRootButtonFunctionable;
	this.CreateMenuRootButtonInactive = MenuCreateRootButtonInactive;
	this.Add = MenuAddButton;
}



function MenuButtonGroup( groupName ) {
	this.groupName = groupName;
	this.groupButtonArray = new Array();
	
	this.CreateGroup = MenuButtonGroupOutput;
	this.Add = MenuButtonGroupAddButton;
}


/* ---- The methods of the above objects ---- */
function MenuButtonOutput() {
	document.write( "<div class='" + this.buttonClass + "' onMouseOver='menuButtonMouseOver(this);' onMouseOut='menuButtonMouseOut(this);' onMouseDown='menuButtonMouseDown(this, \"" + this.buttonURL + "\");' onMouseUp='menuButtonMouseUp(this);'>" + this.buttonText + "</div>" );
}

function MenuOutput() {
	document.write( "<div id='menu" + this.menuID + "' class='" + this.menuClass + "' onMouseOver='menuMouseOver(this);' onMouseOut='menuMouseOut(this);'>" );
	for( var counter = 0; counter < this.menuButtonArray.length; counter++ ) {
		this.menuButtonArray[counter].CreateMenuButton();
	}
	document.write( "</div>" );
}

function MenuAddButton( newClass, newText, newURL ) {
	this.menuButtonArray[this.menuButtonArray.length] = new MenuButton( newClass, newText, newURL );
}

function MenuCreateRootButton() {
	document.write( "<div id='" + this.menuID + "' class='" + this.menuRootButtonClass + "' onMouseOver='menuRootButtonMouseOver(this);' onMouseOut='menuRootButtonMouseOut(this);'>" + this.menuRootButtonName + " »</div>" );
}

function MenuCreateRootButtonFunctionable() {
	document.write( "<div id='" + this.menuID + "' class='" + this.menuRootButtonClass + "' onMouseOver='menuRootButtonMouseOver(this);' onMouseOut='menuRootButtonMouseOut(this);' onMouseDown='menuRootButtonMouseDown(this, \"" + this.menuRootButtonURL + "\");' onMouseUp='menuRootButtonMouseUp(this);'>" + this.menuRootButtonName + " »</div>" );
}

function MenuCreateRootButtonInactive() {
	document.write( "<div id='" + this.menuID + "' class='" + this.menuRootButtonClass + " selected'>" + this.menuRootButtonName + " »</div>" );
}

function MenuButtonGroupOutput() {
	document.write( "<div class='menuGroup'>" );
	document.write( "<div class='menuGroupTitle'>" + this.groupName + "</div>" );
	
	for( var counter = 0; counter < this.groupButtonArray.length; counter++ ) {
		this.groupButtonArray[counter].CreateMenuButton();
	}
	
	document.write( "</div>" );
}


function MenuButtonGroupAddButton( newClass, newText, newURL ) {
	this.groupButtonArray[this.groupButtonArray.length] = new MenuButton( newClass, newText, newURL );
}







/* ---- Event handlers for the above objects ---- */
function menuButtonMouseOver( buttonReference ) {
	buttonReference.className = buttonReference.className + " mouseOver";
}

function menuButtonMouseOut( buttonReference ) {
	buttonReference.className = buttonReference.className.replace( " mouseOver", "" );
}

function menuButtonMouseDown( buttonReference, url ) {
	buttonReference.className = buttonReference.className.replace( " mouseOver", "" );
	buttonReference.className = buttonReference.className + " mouseDown";
	window.location = url;
}

function menuButtonMouseUp( buttonReference ) {
	buttonReference.className = buttonReference.className.replace( " mouseDown", "" );
}

function menuRootButtonMouseOver( buttonReference ) {
	buttonReference.className = buttonReference.className + " mouseOver";
	document.getElementById("menu" + buttonReference.id).style.left = buttonReference.offsetLeft + buttonReference.offsetWidth + "px";
	document.getElementById("menu" + buttonReference.id).style.top = buttonReference.offsetTop + 70 + "px";
	document.getElementById("menu" + buttonReference.id).className = document.getElementById("menu" + buttonReference.id).className + " active";
}

function menuRootButtonMouseOut( buttonReference ) {
	buttonReference.className = buttonReference.className.replace( " mouseOver", "" );
	document.getElementById("menu" + buttonReference.id).className = document.getElementById("menu" + buttonReference.id).className.replace( " active", "" );
}

function menuRootButtonMouseDown( buttonReference, url ) {
	buttonReference.className = buttonReference.className.replace( " mouseOver", "" );
	buttonReference.className = buttonReference.className + " mouseDown";
	window.location = url;
}

function menuRootButtonMouseUp( buttonReference ) {
	buttonReference.className = buttonReference.className.replace( " mouseDown", "" );
}

function menuMouseOver( menuReference ) {
	menuReference.className = menuReference.className + " active";
	document.getElementById( menuReference.id.slice(4) ).className = document.getElementById( menuReference.id.slice(4) ).className + " mouseOver";
}

function menuMouseOut( menuReference ) {
	menuReference.className = menuReference.className.replace( " active", "" );
	document.getElementById( menuReference.id.slice(4) ).className = document.getElementById( menuReference.id.slice(4) ).className.replace( " mouseOver", "" );
}