/**************
 * define the public menus on the left
 **************/
var menu1_1 = new Menu ("Consulting Services", "");
var menu1_2 = new Menu ("Data & Scientific Inc.", "");

var menuItem1_11 = new MenuItem ("Network Security", "visitSafeNetStore ()");
var menuItem1_12 = new MenuItem ("Technical Consulting", "visitTechServicePage('oraEBizSuiteImpl')");

var menuItem1_21 = new MenuItem ("Contact US", "visitAboutPage('contactUS')");
var menuItem1_22 = new MenuItem ("Worldwide Operations", "visitAboutPage('worldwideOperations')");
var menuItem1_23 = new MenuItem ("Our Partners", "visitAboutPage('partners')");
var menuItem1_24 = new MenuItem ("Career Opportunities", "visitCareerPage('careers')"); // parameter is only for highlight

var tree_public = new Menu ("public", "");
addMenuitem (tree_public, menu1_1, menuItem1_11);
addMenuitem (tree_public, menu1_1, menuItem1_12);

addMenuitem (tree_public, menu1_2, menuItem1_21);
addMenuitem (tree_public, menu1_2, menuItem1_22);
addMenuitem (tree_public, menu1_2, menuItem1_23);
addMenuitem (tree_public, menu1_2, menuItem1_24);

var tree_empty = new Menu ("empty", "");

/**************
 **************
 * define the products menus on the left
 **************/
var menu2_1 = new Menu ("HR*Plus", "visitHRPage('hr_overview')");
var menu2_2 = new Menu ("Investment*Plus", "visitInvestPage ('invest_overview')");
var menu2_3 = new Menu ("WBT Engine", "visitProductPage ('WBT')");
// var menu2_4 = new Menu ("Petroleum Profit Tax Software", "visitProductPage ('petroTax')");

var menuItem2_11 = new MenuItem ("Personnel Administration", "visitHRPage ('PersonnelAdministration')");
var menuItem2_12 = new MenuItem ("Career Management", "visitHRPage ('CareerManagement')");
var menuItem2_13 = new MenuItem ("Leave", "visitHRPage ('Leave')");
var menuItem2_14 = new MenuItem ("Training", "visitHRPage ('Training')");
var menuItem2_15 = new MenuItem ("Benefits Administration", "visitHRPage ('BenefitsAdministration')");
var menuItem2_16 = new MenuItem ("Salary Management", "visitHRPage ('SalaryManagement')");
var menuItem2_17 = new MenuItem ("Payroll", "visitHRPage ('Payroll')");
var menuItem2_18 = new MenuItem ("Employee Portal", "visitHRPage ('EmployeePortal')");


var menuItem2_21 = new MenuItem ("The Leading Advantage", "visitInvestPage ('TheLeadingAdvantage')");
var menuItem2_22 = new MenuItem ("Customized Capabilities", "visitInvestPage ('Customizedcapabilities')");
var menuItem2_23 = new MenuItem ("Increased Productivity", "visitInvestPage ('IncreasedProductivity')");
var menuItem2_24 = new MenuItem ("Affordable Complimentary Interface", "visitInvestPage ('AffordableComplimentaryInterface')");
var menuItem2_25 = new MenuItem ("Technology", "visitInvestPage ('Technology')");
var menuItem2_26 = new MenuItem ("Security Features", "visitInvestPage ('SecurityFeatures')");
var menuItem2_27 = new MenuItem ("Key Benefits", "visitInvestPage ('KeyBenefits')");
var menuItem2_28 = new MenuItem ("Key Benefits for Clients", "visitInvestPage ('KeyBenefitsClients')");
var menuItem2_29 = new MenuItem ("The Capabilities", "visitInvestPage ('TheCapabilities')");

addMenuNode (menu2_1, menuItem2_11);
addMenuNode (menu2_1, menuItem2_12);
addMenuNode (menu2_1, menuItem2_13);
addMenuNode (menu2_1, menuItem2_14);
addMenuNode (menu2_1, menuItem2_15);
addMenuNode (menu2_1, menuItem2_16);
addMenuNode (menu2_1, menuItem2_17);
addMenuNode (menu2_1, menuItem2_18);

addMenuNode (menu2_2, menuItem2_21);
addMenuNode (menu2_2, menuItem2_22);
addMenuNode (menu2_2, menuItem2_23);
addMenuNode (menu2_2, menuItem2_24);
addMenuNode (menu2_2, menuItem2_25);
addMenuNode (menu2_2, menuItem2_26);
addMenuNode (menu2_2, menuItem2_27);
addMenuNode (menu2_2, menuItem2_28);
addMenuNode (menu2_2, menuItem2_29);

var tree_product = new Menu ("Products", "");
addMenuNode (tree_product, menu2_1);
addMenuNode (tree_product, menu2_2);
addMenuNode (tree_product, menu2_3);
//addMenuNode (tree_product, menu2_4);



/**************
 **************
 * Services parts
 **************/
var menu1A_0 = new Menu ("Public Sector Solutions", "visitPublicSectorMainPage();");
var menu1A_1 = new Menu ("Technical Consulting", "");
var menu1A_1_1 = new Menu ("E-Business Suite Implementation", "visitTechServicePage('oraEBizSuiteImpl')");
var menuItem1A_1_1 = new MenuItem ("Expertise in Implementation", "visitTechServicePage ('expertInImpl')");
var menuItem1A_1_2 = new MenuItem ("Post Implementation Support", "visitTechServicePage ('postImplSupport')");
var menuItem1A_1_3 = new MenuItem ("Why Data & Scientific Inc.", "visitTechServicePage ('whyUS')");
var menuItem1A_1_4 = new MenuItem ("Overview of Oracle E-Business Suite", "visitTechServicePage ('overviewOraEBizSuite')");
var menuItem1A_1_5 = new MenuItem ("Benefits of Services", "visitTechServicePage ('benefitsOfPlugging')");
var menuItem1A_1_6 = new MenuItem ("Oracle Financials Package", "visitTechServicePage ('oraFinancialsPackage')");
var menuItem1A_1_7 = new MenuItem ("End User Training", "visitTechServicePage ('trainingSupport')");

// var menuItem1A_12 = new MenuItem ("Data Warehouse", "visitServicePage ('dataWarehouse')");
// var menuItem1A_13 = new MenuItem ("Oracle Applications Support", "visitServicePage ('oraAppSupport')");
// var menuItem1A_14 = new MenuItem ("Data Security Services", "visitServicePage ('databaseSecurity')");
var menuItem1A_15 = new MenuItem ("Linux Certification and Training", "visitServicePage ('Linux')");


var menu1A_2 = new Menu ("Network Security", "");

var menuItem1A_21 = new MenuItem ("Tipping Point", "visitServicePage ('tippingPoint')");
var menu1A_22 = new Menu ("Barracuda", "visitSubMainPage ('barracuda')");
var menuItem1A_22_1 = new MenuItem ("Spam & Virus Firewalls", "visitTechServicePage ('barracudaSVF')");
var menuItem1A_22_2 = new MenuItem ("Web Filtering Appliances", "visitTechServicePage ('barracudaWF')");
var menuItem1A_22_3 = new MenuItem ("IM Firewalls", "visitTechServicePage ('barracudaIMF')");
var menuItem1A_22_4 = new MenuItem ("Message Archiving Appliances", "visitTechServicePage ('barracudaMA')");
var menuItem1A_22_5 = new MenuItem ("Web Applications Firewalls", "visitTechServicePage ('barracudaWAF')");
var menuItem1A_22_6 = new MenuItem ("Backup Service", "visitTechServicePage ('barracudaBK')");
var menuItem1A_22_7 = new MenuItem ("SSL VPN", "visitBarracudaPage ('barracudaVPN')");

var menuItem1A_23 = new MenuItem ("SafeWord", "visitServicePage ('safeWord')");
// var menuItem1A_24 = new MenuItem ("eToken", "visitServicePage ('networkSecurity')");
var menuItem1A_25 = new MenuItem ("Others", "visitServicePage ('WHOISON')");

var menu1A_3 = new Menu ("Training Services", "trainingServices();");

addMenuNode (menu1A_1, menu1A_1_1);
addMenuNode (menu1A_1_1, menuItem1A_1_1);
addMenuNode (menu1A_1_1, menuItem1A_1_2);
addMenuNode (menu1A_1_1, menuItem1A_1_3);
addMenuNode (menu1A_1_1, menuItem1A_1_4);
addMenuNode (menu1A_1_1, menuItem1A_1_5);
addMenuNode (menu1A_1_1, menuItem1A_1_6);
addMenuNode (menu1A_1_1, menuItem1A_1_7);

// addMenuNode (menu1A_1, menuItem1A_12);
// addMenuNode (menu1A_1, menuItem1A_13);
// addMenuNode (menu1A_1, menuItem1A_14);
addMenuNode (menu1A_1, menuItem1A_15);

addMenuNode (menu1A_2, menuItem1A_23);
addMenuNode (menu1A_2, menu1A_22);
addMenuNode (menu1A_22, menuItem1A_22_1);
addMenuNode (menu1A_22, menuItem1A_22_2);
addMenuNode (menu1A_22, menuItem1A_22_3);
addMenuNode (menu1A_22, menuItem1A_22_4);
addMenuNode (menu1A_22, menuItem1A_22_5);
addMenuNode (menu1A_22, menuItem1A_22_7);
addMenuNode (menu1A_22, menuItem1A_22_6);
// addMenuNode (menu1A_2, menuItem1A_24);
// addMenuNode (menu1A_2, menuItem1A_25);


addMenuNode (menu1A_2, menuItem1A_21);

var tree_services = new Menu ("Services", "");
addMenuNode (tree_services, menu1A_0);
addMenuNode (tree_services, menu1A_1);
// addMenuNode (tree_services, menu1A_2);
addMenuNode (tree_services, menu1A_3);




/**************
 **************
 * ABOUT parts
 **************/
// var menuItem4_1 = new MenuItem ("Data & Scientific Inc", "visitAboutPage('aboutus')");
// var menuItem4_2 = new MenuItem ("Careers", "visitAboutPage('careers')");
var menuItem4_1 = new MenuItem ("Contact Us", "visitAboutPage('contactUS')");
var menuItem4_2 = new MenuItem ("News & Events", "visitAboutPage('events')");
var menuItem4_3 = new MenuItem ("Send a request", "visitAboutPage('requestForm')");
var menuItem4_4 = new MenuItem ("Our Partners", "visitAboutPage('partners')");
var menuItem4_5 = new MenuItem ("Worldwide Operations", "visitAboutPage('worldwideOperations')");
var menuItem4_6 = new MenuItem ("Success Stories", "visitAboutPage('successStories')");
var menuItem4_7 = new MenuItem ("Employee Login", "visitEmployeeLoginPage();");
var menuItem4_8 = new MenuItem ("Customer Login", "visitClientPortal();");

var tree_about = new Menu ("Corporate", "");
addMenuNode (tree_about, menuItem4_1);
addMenuNode (tree_about, menuItem4_2);
addMenuNode (tree_about, menuItem4_3);
addMenuNode (tree_about, menuItem4_4);
addMenuNode (tree_about, menuItem4_5);
addMenuNode (tree_about, menuItem4_6);
addMenuNode (tree_about, menuItem4_7);
addMenuNode (tree_about, menuItem4_8);




/**************
 **************
 * iStore parts
 **************/
var menu5_0 = new Menu ("Barracuda", "visitBarracudaStore();");
var menuItem5_0_1 = new MenuItem ("Spam & Virus Firewalls", "visitBarracudaPage ('barracudaSVF')");
var menuItem5_0_2 = new MenuItem ("Web Filtering Appliances", "visitBarracudaPage ('barracudaWF')");
var menuItem5_0_3 = new MenuItem ("IM Firewalls", "visitBarracudaPage ('barracudaIMF')");
var menuItem5_0_4 = new MenuItem ("Message Archiving Appliances", "visitBarracudaPage ('barracudaMA')");
var menuItem5_0_5 = new MenuItem ("Web Applications Firewalls", "visitBarracudaPage ('barracudaWAF')");
var menuItem5_0_6 = new MenuItem ("Backup Service", "visitBarracudaPage ('barracudaBK')");
var menuItem5_0_7 = new MenuItem ("SSL VPN", "visitBarracudaPage ('barracudaVPN')");
var menuItem5_0_8 = new MenuItem ("Load Balancer", "visitBarracudaPage ('barracudaLDB')");
var menuItem5_0_9 = new MenuItem ("Link Balancer", "visitBarracudaPage ('barracudaLKB')");



var menu5_1 = new MenuItem ("Safenet", "visitSafeNetStore('safeWord');"); // parameter is only for highlights

addMenuNode (menu5_0, menuItem5_0_1);
addMenuNode (menu5_0, menuItem5_0_2);
addMenuNode (menu5_0, menuItem5_0_3);
addMenuNode (menu5_0, menuItem5_0_4);
addMenuNode (menu5_0, menuItem5_0_5);
addMenuNode (menu5_0, menuItem5_0_6);
addMenuNode (menu5_0, menuItem5_0_7);
addMenuNode (menu5_0, menuItem5_0_8);
addMenuNode (menu5_0, menuItem5_0_9);

var tree_istore = new Menu ("Barracuda Products", "");
addMenuNode (tree_istore, menu5_0);
addMenuNode (tree_istore, menu5_1);



var currentTreeName = "";
var currentMenuitemName = "";		// not used rigth away
var currentNaviContainer = null;
var currentSidebarContainer = null;
var currentContentContainer = null;

var currentURL = "";
var currentPageName = "Data & Scientific Inc.";

/***************
 * get menu html code according to the name of tree:
 * "hr", "invest", "portal", "product", "public" (default value)
 ***************/
function getMenuCodeByTreeName (treeName, pgFileName){
	var tree = getTreeByName (treeName);
	highlightCurrentNode (tree, stripFileName (pgFileName));
	return getMenuHtmlCode (tree);
}

function stripFileName (pageFileName){
	var ret = "";
	var index = pageFileName.lastIndexOf ("/");
	if (index == -1){
		ret = pageFileName;
	}else{
		ret = pageFileName.substring (index + 1);
	}
	
	index = ret.indexOf (".html");
	if (index != -1){
		return ret.substring (0, index);
	}else {
		if (ret == "careers.php"){
			return "careers";
		}
	}

	return ret;
}

/***************
 * get menu html code under tree "tree"
 ***************/
function getMenuHtmlCode (tree){
	if (tree.subItems.length == 0){
		return "";
	}
	var inHTML = "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
	var deepLevel = 0;
	if (tree.menuName != "public"){
		inHTML += "<TR><TD class='treeTitle'>" + tree.menuName + "</TD></TR>";
	}
	inHTML += traverseTree (tree, deepLevel);
	inHTML += "</table>";
	return inHTML;
}

/**********
 * traverse the tree node recursively to get all related HTML code
 **********/
function traverseTree (node, deepLevel){
	var code = "";
	if (node != null){
		var tabs = "padding-left:" + ( (deepLevel - 1) * 15) + "px";
		var menuCssClass;
		if (node instanceof Menu){	// handle menu
			if (deepLevel != 0){			// hide the root node in the tree
				var iconMenu, linkMenu;
				if (node.toExpand){
					iconMenu = "<img align='left' src='images/minus.jpg'/>";
				}else{
					iconMenu = "<img align='left' src='images/plus.jpg'/>";
				}
				
				menuCssClass = node.highlighted ? " highlighted" : "normal";

				if (node.menuUrl == ""){
					linkMenu = node.menuName;
				}else{
					linkMenu = "<a href=\"javascript:" + node.menuUrl + "\"><div class=\"" + menuCssClass + "\">" + node.menuName + "</div></a>";
				}
				

				code += "<tr><td>";
				code += "<TABLE ><TR><TD valign='top' style=\"padding-top:8px;"+ tabs + "\">";
				code += "<a href=\"javascript:toggleCollapseState ('" + currentTreeName + "', '" + node.menuName + "');\">";
				code += iconMenu + "</a></TD><TD class=\"menuCategory\" align=\"left\" width=\"100%\">";
				code += linkMenu + "</TD></TR></TABLE>";
				code += "</td></tr>";
			}

			if (node.toExpand){
				for (var i = 0; i < node.subItems.length; i ++){
					code += traverseTree (node.subItems [i], deepLevel + 1);
				}
			}
		}else{											// handle menu item
			menuCssClass = node.highlighted ? "highlighted" : "normal";
			code += "<tr><td class=\"menuItem\" style=\""+ tabs + "\">";
			code += "<a href=\"javascript:" + node.menuitemUrl + "\"><div class=\"" + menuCssClass + "\">";
			code += node.menuitemName + "</div></a></td></tr>";
		}
	}
	return code;
}

// return tree reference by looking up treeName
function getTreeByName (treeName){
	var tr;
	if (treeName == "invest"){
		tr = tree_invest;
	}else if (treeName == "hr"){
		tr = tree_hr;
	}else if (treeName == "portal"){
		tr = tree_portal;
	}else if (treeName == "product"){
		tr = tree_product;
	}else if (treeName == "service"){
		tr = tree_services;
	}else if (treeName == "about"){
		tr = tree_about;
	}else if (treeName == "public"){
		tr = tree_empty;// tree_public;
	}else if (treeName == "istore"){
		tr = tree_istore;
	}else {
		tr = tree_empty;
	}
	currentTreeName = treeName;
	return tr;
}

// locate the current menu by the pgFileName (page file name)
function highlightCurrentNode (node, pgFileName){
	if (node != null){
		if (node instanceof Menu){	// handle menu
			if (node.menuUrl.indexOf (pgFileName) != -1){
				node.highlighted = true;
				return true;
			}
				
			for (var i = 0; i < node.subItems.length; i ++){
				if (highlightCurrentNode (node.subItems [i], pgFileName)){
					return true;
				}
			}
		}else{											// handle menu item
			if (node.menuitemUrl.indexOf (pgFileName) != -1){
				node.highlighted = true;
				return true;
			}else{
				if (pgFileName == "requestForm.php" && node.menuitemName == "Send a request"){
					node.highlighted = true;
					return true;
				} 
			}
		}
	}
	return false;
}

// expand menu "menuName" under the tree "treeName" all the others keep being collapsed
function expandMenu(treeName, menuName) {
	var tree = getTreeByName (treeName);
	tree.expandMenuByName (menuName);
	return getMenuHtmlCode (tree);
}

// collapse menu "menuName" under the tree "treeName" all the others keep as before
function collapseMenu(treeName, menuName) {
	var tree = getTreeByName (treeName);
	tree.collapseMenuByName (menuName);
	return getMenuHtmlCode (tree);
}

// toggle the state of being expanded or not
function toggleCollapseState (treeName, menuName){
	// find the tree
	var tree = getTreeByName (treeName);
	traverseTreeToggleState (tree, menuName);
	validateNavigation (tree);
}

// traverse the tree and toggle the state of being expanded or not
function traverseTreeToggleState (tree, menuName){
	if (tree != null){
		if (tree instanceof Menu){	// handle menu
			if (tree.menuName == menuName){
				tree.toExpand = ! tree.toExpand;
				return true;
			}else{
				var found = false;
				for (var i = 0; ! found && i < tree.subItems.length; i ++){
					found = traverseTreeToggleState (tree.subItems[i], menuName);
				}
				return found;
			}
		}
	}
	return false;
}


// validate the appearance in the navigation
function validateNavigation (tree){
	if (currentNaviContainer != null){
		currentNaviContainer.innerHTML = getMenuHtmlCode (tree);
	}
}

// add menu item with name and url ("itemName", "itemURL") under "menu" in the "tree"
function addMenuitem (tree, menu, itemName, itemURL){
	var mi = new MenuItem(itemName, itemURL);
	addMenuitem (tree, menu, mi);
}

// add menu item ("mi") under "menu" in the "tree"
function addMenuitem (tree, menu, mi){
	if (menu.menuName == ""){
			addMenuNode (tree, mi);
	}else{
		if (! findMenu (tree, menu)){
			addMenuNode (tree, menu );
		}
		addMenuNode (menu, mi);
	}
}

// add node at the end of menu
function addMenuNode (m, n){
	m.subItems.push (n);
}

// find if menu is under tree
function findMenu (tree, menu){
	for (var i = 0; i < tree.subItems.length; i ++){
		if (tree.subItems [i].menuName == menu.menuName){
			return true;
		}
	}
	return false;
}

// toggle if the box ("id") is visible
function toggleVisibleBox(id) {
	if (document.getElementById(id).style.display == 'none') {
		document.getElementById(id).style.display = '';
	} else {
		document.getElementById(id).style.display = 'none';
	}
}

// information about system
function sysinfo(v) {
	popupFull(v);
}

