//===========================
// 建立menu
//===========================
var vert, hori; // vertical or horizontal.

/**
 * 輸出 Menu
 */
function drawMenu( vertical ){
	//removeEmptyRows();
	
	if ( vertical == true ) {
		drawVertical();
		document.write(vert);
	}
	else {
		drawHorizontal();
		document.write(hori);
	}
}

function drawVertical(){
	// vertical table
	vert  = "<table cellpadding=\"0\" cellspacing=\"0\">";
	vert += "	<tbody>";
	vert += "		<tr valigh=\"top\">";
	for (i=0; i<obj.length; i++)
	{
		var accesskey = i==9?0:i+1;
		if (obj[i].h_layer == 0 && obj[i].vertical == true ) 
		{
			var target = obj[i].target?obj[i].target:'_self';
			vert += "  <td width="+obj[i].width_size+"><a accesskey=\""+accesskey+"\" href=\""+obj[i].href+"\" target=\""+target+"\" id=\"menu_"+obj[i].name+"\" onmouseover=\"menuOver(this)\" onfocus=\"menuOver(this)\" onmouseout=\"menuOut()\" onblur=\"menuOut()\">"+obj[i].title+"</a></td>";
		}
	}
	vert += "		</tr>";
	vert += "	</tbody>";
	vert += "</table>";
//===========================
// 建立table
//===========================	
	for (i=0; i<obj.length; i++)
	{
		if ( obj[i].vertical != true ) continue;
		if ( typeof(obj[i].rows) == 'undefined') continue;
		
		if (obj[i].h_layer == 1){
		    if ( obj[i].subtable_width )
				vert += "<table style=\"background-color: white;width: "+obj[i].subtable_width+"px\" id=\"table_"+obj[i].name+"\" onmouseover=\"tableOver(this)\" onfocus=\"tableOver(this)\" onmouseout=\"tableOut()\" onblur=\"tableOut()\" class=\"m_table2\" cellspacing=\"1\" cellpadding=\"3\">";
			else
				vert += "<table id=\"table_"+obj[i].name+"\" onmouseover=\"tableOver(this)\" onfocus=\"tableOver(this)\" onmouseout=\"tableOut()\" onblur=\"tableOut()\" class=\"m_table2\" cellspacing=\"1\" cellpadding=\"3\">";
		}
		else{
			if ( obj[i].subtable_width )
			 	vert += "<table style=\"background-color: white;width: "+obj[i].subtable_width+"px\" id=\"table_"+obj[i].name+"\" onmouseover=\"tableOver(this)\" onfocus=\"tableOver(this)\" onmouseout=\"tableOut()\" onblur=\"tableOut()\" class=\"m_table\" cellspacing=\"1\" cellpadding=\"3\">";
			else
				vert += "<table id=\"table_"+obj[i].name+"\" onmouseover=\"tableOver(this)\" onfocus=\"tableOver(this)\" onmouseout=\"tableOut()\" onblur=\"tableOut()\" class=\"m_table\" cellspacing=\"1\" cellpadding=\"3\">";
		}
		if ( typeof ( obj[i].rows ) == 'undefined' ){

		}else{
			for ( var j=0; j<obj[i].rows.length; j++)
			{
				var target = obj[i].rows[j].target?obj[i].rows[j].target:'_self';
				var accesskey = i==9?0:i+1;
				
				if (obj[i].rows[j].subtable == null)
				{
					if ( obj[i].h_layer == 1)
						vert += "<tr><td onmouseover=\"rowOver(this)\" onfocus=\"rowOver(this)\" onmouseout=\"rowOut(this)\" onblur=\"rowOut(this)\"><a accesskey=\""+accesskey+"\" class=\"m_link_12\" href=\""+obj[i].rows[j].href+"\" target=\""+target+"\">"+obj[i].rows[j].text+"</a></td></tr>";
					else
						vert += "<tr><td onmouseover=\"hide2();rowOver(this)\" onfocus=\"hide2();rowOver(this)\" onmouseout=\"rowOut(this)\" onblur=\"rowOut(this)\"><a accesskey=\""+accesskey+"\" class=\"m_link_12\" href=\""+obj[i].rows[j].href+"\" target=\""+target+"\">"+obj[i].rows[j].text+"</a></td></tr>";
				}else
					vert += "<tr><td id=\"submenu_"+obj[i].rows[j].subtable+"\" onmouseover=\"submenuOver(this,"+i+","+j+")\" onfocus=\"submenuOver(this,"+i+","+j+")\"><a accesskey=\""+accesskey+"\" class=\"m_link_12\" href=\""+obj[i].rows[j].href+"\" target=\""+target+"\">"+obj[i].rows[j].text+"<span> <img border=\"0\" src=\"/imgs/arrows.gif\" alt=\" >\"></span></a></td></tr>";
			}
		}
		vert +="</table>";
	}
}

function drawHorizontal(){
	// horizontal table
	hori  = "<table cellpadding=\"0\" cellspacing=\"0\">";
	hori += "	<tbody>";
	for (i=0; i<obj.length; i++)
	{
		if (obj[i].h_layer == 0 && obj[i].vertical == false) 
		{
			var target = obj[i].target?obj[i].target:'_self';
			hori += "<tr valign=\"top\">";
			hori += "	<td style=\"width: "+obj[i].width_size+"px; \"><a href=\""+obj[i].href+"\" target=\""+target+"\"><span id=\"menu_"+obj[i].name+"\" onmouseover=\"menuOver(this)\" onfocus=\"menuOver(this)\" onmouseout=\"menuOut()\" onblur=\"menuOut()\">"+obj[i].title+"</span></a></td>";
			hori += "</tr>";
		}
	}
	hori += "	</tbody>";
	hori += "</table>";
//===========================
// 建立table
//===========================	
	for (i=0; i<obj.length; i++)
	{
		if (obj[i].vertical != false ) continue;
		
		
		if (obj[i].h_layer == 1){
		    if ( obj[i].subtable_width )
				hori += "<table style=\"width: "+obj[i].subtable_width+"px\" id=\"table_"+obj[i].name+"\" onmouseover=\"tableOver(this)\" onfocus=\"tableOver(this)\" onmouseout=\"tableOut()\" onblur=\"tableOut()\" class=\"m_table2\" cellspacing=\"1\" cellpadding=\"3\">";
			else
				hori += "<table id=\"table_"+obj[i].name+"\" onmouseover=\"tableOver(this)\" onfocus=\"tableOver(this)\" onblur=\"tableOut()\" onmouseout=\"tableOut()\" class=\"m_table2\" cellspacing=\"1\" cellpadding=\"3\">";			
		}
		else{
			if ( obj[i].subtable_width )
			 	hori += "<table style=\"width: "+obj[i].subtable_width+"px\" id=\"table_"+obj[i].name+"\" onmouseover=\"tableOver(this)\" onfocus=\"tableOver(this)\" onmouseout=\"tableOut()\" onblur=\"tableOut()\" class=\"m_table\" cellspacing=\"1\" cellpadding=\"3\">";
			else
				hori += "<table id=\"table_"+obj[i].name+"\" onmouseover=\"tableOver(this)\" onfocus=\"tableOver(this)\" onmouseout=\"tableOut()\" onblur=\"tableOut()\" class=\"m_table\" cellspacing=\"1\" cellpadding=\"3\">";
		}

		for (var j=0; j<obj[i].rows.length; j++)
		{
			var target = obj[i].rows[j].target?obj[i].rows[j].target:'_self';
			if (obj[i].rows[j].subtable == null)
			{
				hori += "<tr><td onmouseover=\"rowOver(this)\" onfocus=\"rowOver(this)\" onmouseout=\"rowOut(this)\" onblur=\"rowOut(this)\"><a class=\"m_link_12\" href=\""+obj[i].rows[j].href+"\" target=\""+target+"\">"+obj[i].rows[j].text+"</a></td></tr>";
			}else
				hori += "<tr><td id=\"submenu_"+obj[i].rows[j].subtable+"\" onfocus=\"submenuOver(this,"+i+","+j+")\" onmouseover=\"submenuOver(this,"+i+","+j+")\"><a class=\"m_link_12\" href=\""+obj[i].rows[j].href+"\" target=\""+target+"\">"+obj[i].rows[j].text+"<span> <img border=\"0\" src=\"/imgs/arrows.gif\" alt=\" >\"></span></a></td></tr>";
		}
		hori +="</table>";
	}
}

//===========================
// function
//===========================
var focus_menu, focus_submenu, focus_table,focus_table2;
var timer, protrude1;

//===========================
// 建立obj
// @params name		string 	必需是唯一的名稱於頁面
// @params title	string	顯示的內容 (可以是html code)
// @params herf		string	onMouseclick 時頁面導向的位址
// @params layer	integer	選單階層(root: 0)
// @params width	integer	控制選單寬度 (當vertical設定為水平時對畫面影響較大) for layer 0
// @params height	integer	控制選單高度 (當vertical設定為垂直時) for layer 0
// @params vertical	boolean	選單對齊配置方式 (水平: true, 垂直: false)
// @params imgHover	string	當layer0選單hover時
// @params subtable_width	integer	設定subtable 的寬度( 未輸入就會由Browser 自行決定寬度 )
// @params taget	string	設定是否新開視窗
//===========================
function addArray(name,title,href,layer,width, height, vertical, imgHover, subtable_width, target)
{
	var o = new Object();
	o.name = name;
	o.title = title;
	o.href = href;
	o.h_layer = layer;
	o.width_size = width;
	o.hright_size = height;
	o.vertical = vertical ;
	o.imgHover = imgHover;
	o.subtable_width =  subtable_width;
	o.target = target;
	obj = obj.concat(new Array(o));
}

function menuOver(menu)
{
	
	if (focus_menu != null) 
		hide();
	clearTimeout(timer);
	
	focus_menu = menu;
	focus_menu.className = "m_menuOver";
	showTable();
}

function menuOut()
{
	hiding();
}

function tableOver(table)
{
	clearTimeout(timer);
}

function tableOut()
{
	hiding();
}

function rowOver(row)
{
	row.className = "m_rowOver";
}

function rowOut(row)
{
	row.className = "";
}

function showTable()
{
	name = focus_menu.id;
	name = name.replace("menu_","");
	focus_table = $("table_"+name);
	
	if ( $o(name).imgHover && $o(name).h_layer == 0){
		// 如果有設定 img onHover 
	  	MM_swapImage(name , '', $o(name).imgHover, 1);
	}
	
	if ( typeof($o(name).rows) == 'undefined' ) return ;
	

	
	if ( $o(name).vertical == true ){ // 水平
		focus_table.style.left = cumulativeOffset($(focus_menu.id))[0] + 'px';
		focus_table.style.top = cumulativeOffset($(focus_menu.id))[1] + $(focus_menu.id).offsetHeight + 'px';
	}
	else{	// 垂直
		focus_table.style.left =  cumulativeOffset($(focus_menu.id))[0] + $(focus_menu.id).offsetWidth + 'px';
		focus_table.style.top = cumulativeOffset($(focus_menu.id))[1] + 'px';
	}
	focus_table.style.visibility = "visible";
	
	if ( $o(name).vertical == false ){
		// 當table 高度已超出畫面時，往上拉	
		if ( focus_table.offsetHeight +  parseInt(focus_table.style.top) > document.documentElement.clientHeight ){
			focus_table.style.top = document.documentElement.clientHeight - focus_table.offsetHeight + 'px';
		}	
		/*	
		if ( window.innerHeight < document.body.clientHeight ){// work on safari (Mac) 
			if ( focus_table.offsetHeight +  parseInt(focus_table.style.top) > window.innerHeight ){
				focus_table.style.top = window.innerHeight - focus_table.offsetHeight + 'px';
			}	
		}else {
			// work on IE or Mozilla or Opera
			if ( focus_table.offsetHeight +  parseInt(focus_table.style.top) > document.body.clientHeight ){
				//alert( parseInt(document.body.clientHeight) + "-" + parseInt(focus_table2.offsetHeight) );
				focus_table.style.top = parseInt(document.body.clientHeight - focus_table.offsetHeight) + 'px';
				
				// 二次調整 Mozilla 核心會因為畫面文字斷行，計算錯誤
				setTimeout(function(){
					focus_table.style.top = parseInt(document.body.clientHeight - focus_table.offsetHeight) + 'px';
				}, 1);
	
			}
		}
		*/
	}
	
		

}

function hiding()
{
	clearTimeout(timer);
	timer = setTimeout(hide,300);
}

function hide()
{
	// 當離開選單時，將所有<img 回復
  	MM_swapImgRestore();
  	
	if (focus_menu) focus_menu.className = "";
	if (focus_table) focus_table.style.visibility = "hidden";
	focus_menu = null;
	focus_table = null;
	hide2();
}

function hide2()
{
	if (focus_submenu != null)
	{
		focus_submenu.className = "";
		focus_submenu = null;
	}
	if (focus_table2 != null)
	{
		focus_table2.style.visibility = "hidden";
		focus_table2 = null;
	}
}

function submenuOver(row,v_layer,v_layer2)
{
	hide2();
	focus_submenu = row;
	focus_submenu.className = "m_rowOver";
	showTable2(v_layer,v_layer2);
}

function showTable2(v_layer,v_layer2)
{
	name = focus_submenu.id;
	name = name.replace("submenu_","");
	focus_table2 = $("table_"+name);
	
	focus_table2.style.left = cumulativeOffset($(focus_submenu.id))[0] + $(focus_submenu.id).offsetWidth + 'px';
	focus_table2.style.top = cumulativeOffset($(focus_submenu.id))[1] + 'px';
	
	// Mozilla 核心需要先將畫面顯示後再計算，非Mozilla核心也可相容
	focus_table2.style.visibility = "visible";
	
	if ( focus_table2.offsetHeight +  parseInt(focus_table2.style.top) > document.documentElement.clientHeight ){
		focus_table2.style.top = document.documentElement.clientHeight - focus_table2.offsetHeight + 'px';
	}
	/*
	// 當table 高度已超出畫面時，往上拉	
	if ( window.innerHeight < document.body.clientHeight ){// work on safari (Mac) 
		if ( focus_table2.offsetHeight +  parseInt(focus_table2.style.top) > window.innerHeight ){
			focus_table2.style.top = window.innerHeight - focus_table2.offsetHeight + 'px';
		}	
	}else {
		// work on IE or Mozilla or Opera
		if ( focus_table2.offsetHeight +  parseInt(focus_table2.style.top) > document.body.clientHeight ){
			//alert( parseInt(document.body.clientHeight) + "-" + parseInt(focus_table2.offsetHeight) );
			focus_table2.style.top = parseInt(document.body.clientHeight - focus_table2.offsetHeight) + 'px';
			
			// 二次調整 Mozilla 核心會因為畫面文字斷行，計算錯誤
			setTimeout(function(){
				focus_table2.style.top = parseInt(document.body.clientHeight - focus_table2.offsetHeight) + 'px';		
			}, 1);

		}
	}
	*/
 	if ( focus_table2.offsetWidth +  parseInt(focus_table2.style.left) >  document.documentElement.clientWidth  ){
		focus_table2.style.left = cumulativeOffset($(focus_submenu.id))[0] - focus_table2.offsetWidth + 'px';
		// 二次調整 Mozilla 核心會因為畫面文字斷行，計算錯誤
		//if ( parseInt(focus_table2.style.left) + focus_table2.offsetWidth > cumulativeOffset($(focus_submenu.id))[0]  ){
		//	focus_table2.style.left = cumulativeOffset($(focus_submenu.id))[0] - focus_table2.offsetWidth + 'px';
		//}
	}
	/*
 	if ( focus_table2.offsetWidth +  parseInt(focus_table2.style.left) >  document.body.clientWidth  ){
		focus_table2.style.left = cumulativeOffset($(focus_submenu.id))[0] - focus_table2.offsetWidth + 'px';
		// 二次調整 Mozilla 核心會因為畫面文字斷行，計算錯誤
		if ( parseInt(focus_table2.style.left) + focus_table2.offsetWidth > cumulativeOffset($(focus_submenu.id))[0]  ){
			focus_table2.style.left = cumulativeOffset($(focus_submenu.id))[0] - focus_table2.offsetWidth + 'px';
		}
	}
	*/
}

function $o(s)
{
	var o;
	for (var i=0; i<obj.length; i++)
	{
		if (obj[i].name == s)
		{
			o = obj[i];
			break;
		}
	}
	return o;
}

function $(element){
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (typeof element == 'string')
    element = document.getElementById(element);
  return (element);
}

function getLeftMargin()
{
	var left = Math.round((document.body.clientWidth - 960) / 2);  
	if (left < 10) left = 10;
	return left+100;
}
/**
 * 計算元件的相對座標 (by PrototypeJS 1.5.1)
 */
function cumulativeOffset(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return [valueL, valueT];
}

function menu_keyup(event){
	//alert(event.keyCode);
}
/**===========================
 * 移除沒有rows的obj
 =========================== */
function removeEmptyRows(){
	removedCount = 0;
	tempObj = new Array();
	for (i=0; i<obj.length; i++)
	{
		if (obj[i].rows == null)
			removedCount++;
		else
		{
			obj[i].v_layer = i - removedCount;
			tempObj = tempObj.concat(new Array(obj[i]));
		}
	}
	obj = tempObj;
}
