
// Copyright 2001-2003 Villario, villario@yahoo.com

var table_template_front_array1 = new Array();
var table_template_front_array2 = new Array();
var table_template_end_array = new Array();
var row_template_front_array = new Array();
var parent_layer_array = new Array();
var child_layer_array = new Array();
var last_button_name = "";
var last_parent_layer = "";
var last_child_layer = "";
var last_image_name = "";
var image_pointer = "";
var TimerID = "";
var TimerIDLink = "";
var table_width = 0; // Changes the width of all menu tables. Set to widest menu.
var IsLink = "NO";
var PrevLayer = "NO";
var WaitLink = 0;
var LinkLayer = "";
var TimeLinkOut = 200;
var TimeLayerOut = 200;

if (document.images) {
    var arrow = new Image();
    var blank = new Image();
    arrow.src = "menu_script/arrow.gif";
    blank.src = "../../img/bases/spacer.gif";
}

  
function Layer(name, visibility, zindex, table_template) {
    this.name = name;
    this.width = table_width;
    this.height = 0;
    this.visibility = visibility;
    this.zindex = zindex;
    this.table_template = table_template;
    this.ar = ar;
    this.fl = fl;

    if ((is_domcom)||(is_ie4)) {  
        this.layer_content = '<div id="' + this.name + '" style="position: absolute; width: ' + this.width + '; visibility: ' + (this.visibility ? 'visible' : 'hidden') + '; z-index: ' + this.zindex + ';">';
    } else if (is_nav4) { 
        this.layer_content = '<layer name="' + this.name + '" width=' + this.width + ' visibility=' + (this.visibility ? '"show"' : '"hide"') + ' z-index=' + this.zindex + '>';
    }
	   this.layer_content += table_template_front_array1[this.table_template];
	   this.layer_content += name
	   this.layer_content += table_template_front_array2[this.table_template];
		if (this.table_template == 0) { 
			parent_layer_array[parent_layer_array.length] = this.name;
		} else {
		child_layer_array[child_layer_array.length] = this.name;
	    }
}

function ar(row_template, row_content, row_height) {
    this.height += row_height;
    this.layer_content += row_template_front_array[row_template] + row_content + row_end;
}

function fl() {  
    this.layer_content += table_template_end_array[this.table_template];
    if ((is_domcom)||(is_ie4)) {
      this.layer_content += '</div>'; 
    } else if (is_nav4) {
        this.layer_content += '</layer>';
    } document.write(this.layer_content);
    if (is_domcom)
    	getObjStyle(this.name).height = this.height;	// required for Mozilla which does not seem to be able to read a DIV's height if it has not been explicitly specified
}

function define_table(tw) {
    table_template_front_array1[0] = '<table cellspacing="0" cellpadding="0" border="0" style="border-top:1px solid #000000; border-bottom:1px solid #000000;" onmouseover="TableOver(\'';
    table_template_front_array2[0] = '\');" onmouseout="TableOut();">';
    table_template_end_array[0] = '</table>';
    row_template_front_array[0] = '<tr><td nowrap height="22">';

    table_template_front_array1[1] = '<table cellspacing="0" cellpadding="0" border="0" onmouseover="TableOver(\'';
    table_template_front_array2[1] = '\');" onmouseout="TableOut();">';
    table_template_end_array[1] = '</table>';
    row_template_front_array[1] = '<tr><td nowrap height="18">';

    row_end = '</tr>';
}

define_table(table_width);

function TableOut(){
	clearTimeout(TimerID);
	TimerID = setTimeout("ShowLayers('None')", (PrevLayer.indexOf("Sliding") == 0 ? 3 : 1) * TimeLayerOut);
}

function TableOver(ActiveLayer){
	clearTimeout(TimerID);
	if(ActiveLayer == LinkLayer){
		clearTimeout(TimerIDLink);
		WaitLink = 0;
	}
	ShowLayers(ActiveLayer);
}

function ResetWaitLink(ActiveLayer){
	WaitLink = 0;
	clearTimeout(TimerIDLink);
	ShowLayers(ActiveLayer);
}

function LinkOut(ActiveLayer){
	IsLink = "NO";
	WaitLink = 1;
    	TimerIDLink = setTimeout("ResetWaitLink('" + ActiveLayer + "')", (PrevLayer.indexOf("Sliding") == 0 ? 3 : 1) * TimeLinkOut);
	TableOut();
}

function LinkOver(ActiveLayer){
	clearTimeout(TimerID);
	clearTimeout(TimerIDLink);
	WaitLink = 0;
	LinkLayer = ActiveLayer;
	IsLink = ActiveLayer;
	ShowLayers(ActiveLayer);
}

function ShowLayers(ActiveLayer){
	if (IsLink != "NO") ActiveLayer = IsLink;
	if (PrevLayer != ActiveLayer && WaitLink == 0)
	{	
		for (j=0; j<menuLayers.length;j++)
		{
			menuToReinit = "";
			fSliding = menuLayers[j].name.indexOf("Sliding") == 0;
			fSelected = isSelectedItem(menuLayers[j].name);
			if (menuLayers[j].name == ActiveLayer || (fSliding && fSelected))
			{
				if (fSliding && !fSelected)
				{
					slidingHeight = findObjH(getLayerByName(ActiveLayer));
					menuNameWithFirstIndex = ActiveLayer.substring(0, ActiveLayer.lastIndexOf('_sub_'));
					menuNumber = parseInt(ActiveLayer.substring(ActiveLayer.lastIndexOf('_sub_') + 5));
					if (slidingHeight > 0)
					{	// move all items below it down its height
						for (i=menuNumber + 1; true; i++)
						{
							if (null == getObjStyle(menuNameWithFirstIndex + "_sub_" + i + 'link'))
								break;
							else
							{
								aLinkObjStyle = getObjStyle(menuNameWithFirstIndex + "_sub_" + i + 'link');
								aLinkObjStyle.top = findPosY(getLayerByName(menuNameWithFirstIndex + "_sub_" + i + 'link')) + slidingHeight - 1 + "px";
								anObjStyle = getObjStyle(menuNameWithFirstIndex + "_sub_" + i);
								anObjStyle.top = findPosY(getLayerByName(menuNameWithFirstIndex + "_sub_" + i)) + slidingHeight - 1 + "px";
							}
						}
					}
				}
				if (is_nav4)
					document.layers[menuLayers[j].name].visibility='show';
				else if (is_ie4)
					document.all[menuLayers[j].name].style.visibility='visible';
				else if (is_domcom)
					document.getElementById(menuLayers[j].name).style.visibility='visible';
			}
			else
			{
				if (menuLayers[j].name.indexOf("Sliding") == 0 && getObjStyle(menuLayers[j].name).visibility == "visible" && !isSelectedItem(menuLayers[j].name) /* && !isSelectedItem(menuLayers[j].name + 'link') */)
					menuToReinit = menuLayers[j].name.substring(0, menuLayers[j].name.indexOf('_'));

				if (is_nav4)
					document.layers[menuLayers[j].name].visibility='hide';
				else if (is_ie4)
				{
					document.all[menuLayers[j].name].style.visibility='hidden';
				}
				else if (is_domcom)
					document.getElementById(menuLayers[j].name).style.visibility='hidden';

				if (menuToReinit.length > 0)
					initialiseLayerPositions(menuToReinit);
			}

		}
		PrevLayer = ActiveLayer;
	}
}



function refreshLevel2Menu(menuName, n)		// don't call this function for sliding menus
{
	fHide = eval('show_' + menuName + n + 'sub') == 0;

	getObjStyle(menuName + n + 'sub').visibility = fHide ? 'hidden' : 'visible';
	if (fHide)
	{
		for (i=0; true; i++)
		{
			if (null == getObjStyle(menuName + n + "sub_" + i))
				break;
			else
				getObjStyle(menuName + n + "sub_" + i).visibility = 'hidden';
		}
		PrevLayer = "NO";
	}
}

function isSelectedItem(sLayerName)
{
	fSliding = sLayerName.indexOf("Sliding") == 0;
	if (!fSliding)
		return false;
	if (sLayerName.indexOf('link') == -1)
	{
		sLinkLayerName = sLayerName + 'link';
		fLinkLayerSelected = getLayerByName(sLinkLayerName).innerHTML.indexOf('/' + SlidingMenu_selected + '/') != -1;
	}
	else
		fLinkLayerSelected = false;

	return fLinkLayerSelected || getLayerByName(sLayerName).innerHTML.indexOf('/' + SlidingMenu_selected + '/') != -1;
}

function initialiseLayerPositions(menuName, fVertical)
{
	fSliding = menuName.indexOf("Sliding") == 0;
	nSlidingShift = 0;

	for (j=0; true; j++)
	{
		for (i=0; true; i++)
		{
			if (fSliding)
			{
				anObjStyle = getObjStyle(menuName + "_sub_" + i);
				if (null == anObjStyle)
					break;
				else
				{
					if (i > 0)
					{
						aLinkObjStyle = getObjStyle(menuName + "_sub_" + i + 'link');
						previousLinkObj = getLayerByName(menuName + "_sub_" + (i - 1) + 'link');
						aLinkObjStyle.left = findPosX(previousLinkObj) + "px";
						if (isSelectedItem(menuName + "_sub_" + (i - 1)) || isSelectedItem(menuName + "_sub_" + (i - 1) + 'link'))
							nSlidingShift = - 1 + findObjH(getLayerByName(menuName + "_sub_" + (i - 1)));
						else
							nSlidingShift = 0;

						if (isNaN(nSlidingShift))
							nSlidingShift = 0;
	
						aLinkObjStyle.top = nSlidingShift + 1 + findPosY(previousLinkObj) + findObjH(previousLinkObj) + "px";
					}
				}
				//alert(menuName + "_sub_" + i);
				if (isSelectedItem(menuName + "_sub_" + i) || isSelectedItem(menuName + "_sub_" + i + 'link'))
					getObjStyle(menuName + "_sub_" + i).visibility = 'visible';

				anObjStyle.left = -1 + findPosX(getLayerByName(menuName + "_sub_" + i + 'link')) + "px";
				anObjStyle.top = findPosY(getLayerByName(menuName + "_sub_" + i + 'link')) + findObjH(getLayerByName(menuName + "_sub_" + i + 'link')); + "px"
			}
			else
			{
				anObjStyle = getObjStyle(menuName + j + "sub_" + i);
				if (null == anObjStyle)
					break;
				else
				{	/* bloc niveau 3 */
					anObjStyle.top = -1 + findPosY(getLayerByName(menuName + j + "sub_" + i + 'link')) + "px";
					anObjStyle.left = findPosX(getLayerByName(menuName + j + "sub_" + i + 'link')) + findObjW(getLayerByName(menuName + j + "sub_" + i + 'link')) + "px";
				}
			}
		}
		if (null == getObjStyle(menuName + j + 'link'))
			break;
		else
		{
			anObjStyle = getObjStyle(menuName + j + 'sub');
			if (fVertical)
			{
				anObjStyle.top = findPosY(getLayerByName(menuName + j + 'link')) + "px";
				anObjStyle.left = findPosX(getLayerByName(menuName + j + 'link')) + findObjW(getLayerByName(menuName + j + 'link')) + "px";
			}
			else
			{
				/* bloc niveau 2 */
				anObjStyle.left = -1 + findPosX(getLayerByName(menuName + j + 'link')) + "px";
				anObjStyle.top = findPosY(getLayerByName(menuName + j + 'link')) + findObjH(getLayerByName(menuName + j + 'link')) + "px";
			}
		}
	}
}

function showMenu(menuName)
{
	fSliding = menuName.indexOf("Sliding") == 0;
	for (i=0; true; i++)
	{
		aLinkObjStyle = getObjStyle(menuName + (fSliding ? "_sub_" : "") + i + 'link');
		if (null == aLinkObjStyle)
			break;
			
		aLinkObjStyle.visibility = 'visible';
	}
}
