/************************* 
	Cool Bar Object
**************************/

/******************************************************************************************
Cool Bar 說明:

		Cool Bar 架構, 最外層是一個 DIV, 內含一個 TABLE, 每一個 TR, TD 放置一個選單,
	選單可以有次選單, 架構如下:	
	
	<DIV id=CoolBar>
		<TABLE>
			<TR>
	    		<TD>
	    			<DIV>
	    				主選單 1 (MainMenu)
	    			</DIV>	
	    			<DIV>
	    				次選單 1	(SubMenu)
	    				次選單 2	(SubMenu)
	    				...
	    			</DIV>
	    		</TD>
	    	</TR>	
	    	<TR>
	    		<TD>
	    			主選單 2	(MainMenu)
	    		</TD>
	    	</TR>	
		</TABL>
	</DIV>

		每一個主選單, 次選單都是由一個對應的 button 物件所產生的, 當新增一個新的 MainMenu button 物件
	時, 必須修改 cb_createMenu, 當新增一個新的 SubMenu button 物件
	時, 必須修改 cb_createSubMenu, 並且在使用到此物件的 htm 去 include button 物件的 js.
		每個 button 物件都須要有一個 method - genTags, 用來 render button 的 HTML tags.

*******************************************************************************************/

// Constructor
function CoolBar()
{
	// properties
	this.margin = "0 0 0 0";		// margin: top right bottom left
	this.menuArray = null;			// menu array passed from user
	this.mainMenu = new Array();	// main menu object array build by CoolBar obejct
	this.menuType = "EXPAND_ALL";	// type : "EXPAND_ALL"-全部展開, "EXPAND_ONE"-一次只有一個展開
		
	// methods
	this.genCoolBar = cb_genCoolBar;		// write Cool bar tags
	this.setMenu = cb_setMenu;				// set menu
	this.createMenu = cb_createMenu;		// create menu
	this.createSubMenu = cb_createSubMenu;	// create sub menu
	this.onMouseDown = cb_onMouseDown;		// display this item and close other item
	this.expandAll = cb_expandAll;			// expand all the menu item
	this.expandByPage = cb_expandByPage;	// expand the menu by page name

}


// write Cool bar tags
function cb_genCoolBar()
{
	document.write('<DIV id="CoolBar"></DIV>');
	document.onselectstart=new Function ("return false"); // disable select
}



// set menu
function cb_setMenu(menuArray)
{

	var argv = cb_setMenu.arguments;  
	var argc = cb_setMenu.arguments.length;  		
	var sPage = (argc > 1) ? argv[1] : null;
	var sExpandArray = (argc > 2) ? argv[2] : null;
	if (menuArray.length == 0 || CB_DefArray.length == 0)
		return;
		
	if (document.all.CoolBar == null) {
		print("Can not find CoolBar DIV!");		
		return;
	}

			
	try {
		this.menuArray = menuArray;
		var menuBarMargin = this.margin;
		
		if (CB_DefArray[0][1].length != 0)
			menuBarMargin = CB_DefArray[0][1];

		var s = '';

		s = s + '<tr><td width="135">';
		for (var i = 0; i < this.menuArray.length; i++) 
		{
			s = s + this.createMenu(i);
		}
		s = s + '</td></tr>';

		if (document.all.CoolBar != null)	{
			document.all.CoolBar.innerHTML = s;
		}
		
		this.menuType = CB_DefArray[0][2];	

		if (this.menuType == "EXPAND_ALL")
			this.expandAll();	
		else	//(this.menuType == "EXPAND_BY_PAGE")
			this.expandByPage(sPage, sExpandArray);	
	}
	catch(e) {
		print(e);
	}
}





function cb_createMenu(idx)
{
	var menu = this.menuArray[idx];
	var submenu = null;
	var s = "";
	
	if (typeof(menu[1]) != "string")
		submenu = menu[1];
	
	var mainMenuType = CB_DefArray[1];
	var subMenuType = CB_DefArray[2];

	switch (mainMenuType[1]) {
		case "TextRolloverBtn": 
			bSubMenu = (submenu == null ? false : true);
			text = menu[0];
			
			if (!bSubMenu)
				link = menu[1];
			else
				link = "";

			oMain = new TextRolloverBtn(text, link, mainMenuType[2], mainMenuType[3], mainMenuType[4], mainMenuType[5], mainMenuType[6], mainMenuType[7], mainMenuType[8], idx, CB_DefArray[3][1]);	
			oMain.setMargin(mainMenuType[9]);
			oMain.bSubMenu = bSubMenu;

			this.mainMenu[idx] = oMain;
			
			s = s + oMain.genTags();
						
			if (bSubMenu) {
			    s = s + '  <tr><td colspan=2><table width="136" border="0" cellspacing="0" cellpadding="0">' + '\n';
			    s = s + '      <tr><td><img src="images/layout_submenuleft_top.gif" width="136" height="6"></td></tr>' + '\n';

				s = s + '<DIV id="SubMenu" style="Display:NONE" class="">' + '\n';
				for (var i = 0; i < submenu.length; i++) {
					s = s + '  <tr><td background="images/layout_submenuleft_BG.gif" >' + '\n';
					s = s + this.createSubMenu(idx, i);
					s = s + '  </td></tr>' + '\n';
				}	
				s = s + '</DIV>' + '\n';

			    s = s + '      <tr><td><img src="images/layout_submenuleft_down.gif" width="136" height="5"></td></tr>' + '\n';
			    s = s + '  </table></td></tr>' + '\n';
			}
			break;
		default:
			break;
	}
	
	return s;
}




function cb_createSubMenu(idx, subIdx)
{
	var menu = this.menuArray[idx];
	var submenu = null;
	var s = "";
	
	if (typeof(menu[1]) != "string")
		submenu = menu[1];
	
	var mainMenuType = CB_DefArray[1];
	var subMenuType = CB_DefArray[2];
	var s = "";
	
	this.SubMenu = new Array();
		
	switch (subMenuType[1]) {
		case "LinkBtn" : 
			oSub = new LinkBtn(submenu[subIdx][0], submenu[subIdx][1], subIdx, idx, CB_DefArray[3][1]);
			oSub.setMargin(subMenuType[2]);
			this.mainMenu[idx].subMenu[subIdx] = oSub;
			s = s + oSub.genTags();	

		default:
			break;
	}

	return s;
}

function cb_onMouseDown(item)
{
	//  find the current active menu
	for (var i = 0; i < this.mainMenu.length; i++) {
		if (this.mainMenu[i].id == item.id)
			break;
	}

	if (this.mainMenu[i].bSubMenu) { // display sub menu and close other main menu
		if (this.menuType == "EXPAND_ALL")
			return;

		for (var i = 0; i < this.mainMenu.length; i++) {
			var id = this.mainMenu[i].id;
			var oBtn = document.all(id);
			
		    if (oBtn == null) 
				break;

			// get sub menu
			var oSubMenu = oBtn.nextSibling;
			
			if (oSubMenu != null) {
				if (id != item.id) { 
					oSubMenu.style.display="NONE";
					oBtn.display = "0";
				}
				else { 
					this.mainMenu[i].onMouseDown(item);				
				}
			}		
		}
	}	
	else 	
		this.mainMenu[i].onMouseDown(item);
	
	
}
  
function cb_expandAll()
{
	for (var i = 0; i < this.mainMenu.length; i++) {
		if (this.mainMenu[i].bSubMenu) { // expand sub menu
			var id = this.mainMenu[i].id;
			var oBtn = document.all(id);
			
		    if (oBtn == null) 
				break;

			// get sub menu
			var oSubMenu = oBtn.nextSibling;
			
			if (oSubMenu != null) {
				oSubMenu.style.display="BLOCK";
				oBtn.display = "1";
			}
		}
	}
	
}  

function cb_expandByPage(sPage, sExpandArray)
{
	var nTotalExpand = -1;
	var aExpandArray;
	var aS, aS1;
	var sData, sData1;
	if (sPage == null)
		return;

	if (sExpandArray != null)
	{
		sExpandArray = sExpandArray.toUpperCase()
		aExpandArray = sExpandArray.split('@');
		nTotalExpand = aExpandArray.length;
	}

	for (var i = 0; i < this.mainMenu.length; i++) {

		if (this.mainMenu[i].bSubMenu) { // expand sub menu
			var id = this.mainMenu[i].id;
			var oBtn = document.all(id);
			
		    if (oBtn == null) 
				break;
			// get sub menu
			var oSubMenu = oBtn.nextSibling;
			
			if (oSubMenu != null) {
				var sPage = sPage.toUpperCase();								
				for (var j =0; j < oSubMenu.childNodes.length; j++) {
					var sLink = oSubMenu.childNodes[j].link;
					sLink = sLink.toUpperCase();
					if (sLink.indexOf(sPage) >=0 ) {
						oSubMenu.style.display="BLOCK";
						oBtn.display = "1";
						break;
					}
					
					for (var k = 0; k < nTotalExpand; k++)
					{
						sData = aExpandArray[k];
						aS = sData.split('$');
						if (aS.length == 2)
						{
							sData1 = aS[0];
							aS1 = sData1.split(',');
							for( var l = 0; l < aS1.length; l++)
							{
								if( sPage.indexOf(aS1[l]) >= 0)
								{
	
									if (sLink.indexOf(aS[1]) >=0 ) {
										oSubMenu.style.display="BLOCK";
										oBtn.display = "1";
									}
									break;
								}
							}
						}
					}
						
				}
			}
		}
	}
	
}
  