var blankRegEx = /^[ \t\n]*$/;

var maxTabMenu = 8;

var tabReplacements = new Array();

tabReplacements[0] = new Object;
tabReplacements[0].original ="HSBCnet";
tabReplacements[0].revised = "HSBC<em>net</em>";

tabReplacements[0] = new Object;
tabReplacements[0].original ="HSBCnet Online<BR>Services";
tabReplacements[0].revised = "HSBC<em>net</em> Online<BR>Services";

var mainSections = new Array();

mainSections[0] = new Object;
mainSections[0].urlFragment = "/solutions";
mainSections[0].sectionName = "corporate";
mainSections[0].homeUrl = "/solutions";
mainSections[0].duplicateMainNav = 1;
mainSections[0].altMainNav = null;

mainSections[1] = new Object;
mainSections[1].urlFragment = "/online";
mainSections[1].sectionName = "hsbcnet";
mainSections[1].homeUrl = "/online";
mainSections[1].duplicateMainNav = 1;
mainSections[1].altMainNav = null;

var currentSection = 0;

for (var i = 1; i < mainSections.length; i++) {
	if (location.href.indexOf(mainSections[i].urlFragment) >= 0) {
		currentSection = i;
		break;
	}
}

/* Enlarge image function */
function largeImage(imageURL,width,height) {

	var windowWidth = width + 25;
	var windowHeight = height + 30;
	
	window.open(imageURL,'HSBCbigImage','dependent=yes,width=' + windowWidth + ',height=' + windowHeight + ',menubar=no,resizable=no,scrollbars=no,status=no,titlebar=yes,toolbar=no');
	
	return false;
	
}

/* Content popUp */
function contentPopUp(targetURL,targetWindow) {

	window.open(targetURL,targetWindow,'width=525,height=542,location=no,directories=no,menubar=no,toolbar=no,scrollbars=yes,status=no,resizable=no,left=0,top=0');

	return false;

}

/* Functions for clear/fill text field handling */
function fieldToggle(field) {
	if (field.value == field.title) {
		field.value = "";
	} else if (field.value == "") {
		field.value = field.title;
	}
}

function clearField(field) {
			if (field.value == field.title) {
			field.value = "";
	}
}

function fillField(field) {
		if (field.value == "") {
		field.value = field.title;
	}
}
/* End clear/fill */

/* Submit search form */
function goSearch(fieldName) {
	var field = document.getElementById(fieldName);
	clearField(field);
	if(blankRegEx.test(field.value)) {
		alert("Please type the word(s) you wish to search for");
		fillField(field); field.blur();
		return false;
	}
	return true;
}

/* logon fragment support */
// begin Login form
// This function is used in accordance with CAM2 requirements.
function checkBrowserAndSubmit(formObj){
    var UName = formObj.username.value;
    if (UName == '') return alert('Please type in your username.  Thank you.');
    if (!UName.match("^[\.@a-zA-Z0-9_-]*$")) return alert('Username must contain only alphanumerics or any characters in "-_@."');
    formObj.action="https://www.login.hsbc.com/code/public/en_US/login/cam2password.jhtml";

    if (location.hostname=="www.ap.hsbcnet.com") {
		formObj.action="https://www.login.ap.hsbc.com/code/public/en_US/login/cam2password.jhtml";
		formObj.subdomain.value="1";
		formObj.source.value="http://www.ap.hsbcnet.com/solutions/logoff.html"
	}
    if (location.hostname=="www.id.hsbcnet.com") {
		formObj.action="https://www.login.id.hsbc.com/code/public/en_US/login/cam2password.jhtml";
		formObj.subdomain.value="2";
		formObj.source.value="http://www.id.hsbcnet.com/solutions/logoff.html"
    }
    formObj.submit();
    return false;
}
// end Login form

/* Trade services logon form */
// from tradefx.html
function goOnlineFX() {
    var objWin;
    var style = 'toolbar=no,resizable=yes,scrollbars=yes,width=800,height=600';
    var form = document.forms['trade_fx'];
    var selected_site = form.fx_site.options[form.fx_site.selectedIndex].value;
    if ( selected_site != 'null' ) {
  while (selected_site.indexOf(' ') > -1)
      selected_site = selected_site.replace(/s/, '%20');
      objWin = window.open(selected_site, 'onlineFX', style);
      objWin.focus();
    } else {
  alert('Please select your preferred HSBCnet FX and MM Trading site');
    }
}
// end tradefx.html

/* rotating collateral */
var rotateList = new Array();

function rotateItem(items,target) {

	var rotateReq;
	selected = Math.floor(Math.random() * (items.length ));
	
	if (window.XMLHttpRequest) {
		rotateReq = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		rotateReq = new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (rotateReq != undefined) {
		rotateReq.onreadystatechange = rotateDone;
		rotateReq.open("GET", items[selected], true);
		rotateReq.send("");
	}

	function rotateDone() {
	
		if (rotateReq.readyState == 4) { // only if req is "loaded"
			if (rotateReq.status == 200) { // only if "OK"
				document.getElementById(target).outerHTML = rotateReq.responseText;
			} else {
				var defaultTarget = target + "Default";
				var foo = document.getElementById(defaultTarget);
				document.getElementById(target).outerHTML = document.getElementById(defaultTarget).innerHTML;
			}
		}
	
	}
	
	// This code only for Firefox
	if(navigator.appName == "Netscape"){
	 
	HTMLElement.prototype.__defineGetter__("outerHTML", function() {
    var span = document.createElement("span"); span.appendChild(this.cloneNode(true));
    return span.innerHTML;
	});

	HTMLElement.prototype.__defineSetter__("outerHTML", function(html) {
		var range = document.createRange();
		this.innerHTML = html;
		range.selectNodeContents(this);
		var frag = range.extractContents();
		this.parentNode.insertBefore(frag, this);
		this.parentNode.removeChild(this);
	});

}

}

var previous;
//function added for staff and public auto rotations
function rotateItemBanner(items,target) {

	var rotateReq;
	var selected
	
	selected = Math.floor(Math.random() * (items.length ));
	while (selected == previous) {
		selected = Math.floor(Math.random() * (items.length ));
	}
	previous = selected;
	
	if (window.XMLHttpRequest) {
		rotateReq = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		rotateReq = new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (rotateReq != undefined) {
		rotateReq.onreadystatechange = rotateDone;
		rotateReq.open("GET", items[selected], true);
		rotateReq.send("");
	}

	function rotateDone() {
	
		if (rotateReq.readyState == 4) { // only if req is "loaded"
			if (rotateReq.status == 200) { // only if "OK"
				document.getElementById(target).innerHTML = rotateReq.responseText;
			} else {
				var defaultTarget = target + "Default";
				var foo = document.getElementById(defaultTarget);
				document.getElementById(target).innerHTML = document.getElementById(defaultTarget).innerHTML;
			}
		}
	
	}
	
	// This code only for Firefox
	if(navigator.appName == "Netscape"){
	 
	HTMLElement.prototype.__defineGetter__("outerHTML", function() {
    var span = document.createElement("span"); span.appendChild(this.cloneNode(true));
    return span.innerHTML;
	});

	HTMLElement.prototype.__defineSetter__("outerHTML", function(html) {
		var range = document.createRange();
		this.innerHTML = html;
		range.selectNodeContents(this);
		var frag = range.extractContents();
		this.parentNode.insertBefore(frag, this);
		this.parentNode.removeChild(this);
	});

}

}

/* Load event handler function to accomodate HSBCnet in tabs */

function fixTabs() {

	if (!document.getElementById) { return; }

	if (document.getElementById("navigation")) {
		tabs = document.getElementById("navigation");
	}
	
	/*if (document.getElementById("navigation")) {
		var entries = tabs.getElementsByTagName("span");

		for (i = 0; i < entries.length; i++) {
						
			for (j = 0; j < tabReplacements.length; j++) {
				
				if (tabReplacements[j].original == entries[i].innerHTML) {
					entries[i].innerHTML = tabReplacements[j].revised;
				}
				
			}
			
		}
	}*/
	var items = tabs.getElementsByTagName("ul");
	
	var numLists = items.length;

	for (var i = 0; i < numLists; i++) {
		// Is the menu in question long?
		if (items[i].childNodes.length > maxTabMenu) {
			// If so, split it and hang a "More ..." off the end for the extra items
			var more = document.createElement("li");
//			var strong = document.createElement("strong");
//			var outerSpan = document.createElement("span");
			var a = document.createElement("a");
			a.href = "#";
//			var innerSpan = document.createElement("span");
			var linkText = document.createTextNode(nlsMoreTxt);
			
			var ul = document.createElement("ul");
			ul.className = "popUpMenu";

			while(items[i].childNodes[maxTabMenu]) {
				ul.appendChild(items[i].childNodes[maxTabMenu]);
			}
			
//			innerSpan.appendChild(linkText);
//			a.appendChild(innerSpan);
			a.appendChild(linkText);
//			outerSpan.appendChild(a);
//			outerSpan.appendChild(ul);
			more.appendChild(a);
			more.appendChild(ul);
//			strong.appendChild(outerSpan);
//			more.appendChild(strong);
			
			more.onmouseover = hoverMouseover;
			more.onmouseout = hoverMouseout;
			
			items[i].appendChild(more);
			
/*			var newHTML = "";
			for (k = 0; k < maxTabMenu; k++) {
				newHTML += items[i].childNodes[k].outerHTML;
			}
			newHTML += '<li><strong><span><a href="#"><span>' + nlsMoreTxt + '</span></a></span></strong><ul class="popUpMenu">';
			for (k = maxTabMenu; k < items[i].childNodes.length; k++) {
				newHTML += items[i].childNodes[k].outerHTML;
			}
			newHTML += '</ul></li>';
			items[i].innerHTML = newHTML;
			
			// Hover handling
			items[i].childNodes[items[i].childNodes.length].onmouseover = hoverMouseover;
			items[i].childNodes[items[i].childNodes.length].onmouseout = hoverMouseout;*/
			
		}
		items[i].style.display = "block";
		items[i].style.visibility = "visible";
	}
	
}

function fixLinks() {
//	alert("fixLinks triggered.");
	if (document.getElementById("links")) {
		var items = document.getElementById("links").getElementsByTagName("ul");
		
		for (var i = 0; i < items.length; i++) {
			if (items[i].className == "popUpMenu" || items[i].className == "popUp") {
				items[i].style.top = 0;
				var frames = items[i].parentNode.getElementsByTagName("iframe");
				for (var j = 0; j < frames.length; j++) {
					frames[j].style.top = items[i].style.top;
					frames[j].style.width = 155;
				}
			}
		}
	}

}

function externalLinks() {
	var links = document.getElementsByTagName("a");
	for (var i = 0; i < links.length; i++) {
		var href = links[i];
		if (href.href.search("http://") >= 0 || href.href.search("https://") >= 0) {
//			if (href.onclick) {
//				if (href.onclick.search("open(") >=0) {
//					return;
//				}
//			}
			if (href.target.length == 0 && href.href.search(window.location.hostname) < 0) {
//				alert(href.href);
				href.target = "_blank";
			}
		}
	}
}

function staffDisplay() {

	var elementList = new Array("div");

	for (j = 0; j < elementList.length; j++) {

		var items;
		items = document.getElementsByTagName(elementList[j]);
		
		// Set up hover simulation
		for (var i = 0; i < items.length; i++) {
			
			var staff = /\bstaff\b/;
			var funcBox = /\bfuncBox\b/;
			var promo = /\bpromo\b/;
			var bodyCopy = /\bbodyCopy\b/;
			if (items[i].className.search(staff) < 0 &&
				(items[i].className.search(funcBox) >= 0 ||
				 items[i].className.search(promo) >= 0 ||
				 items[i].className.search(bodyCopy) >= 0)) {
				var staff = document.createElement("span");
				staff.className="publicDisplay";
				staff.title = "This content may be shared externally without additional permission.";
				var h1 = items[i].getElementsByTagName("h1")[0];
				if(h1 != undefined){
					h1.insertBefore(staff,h1.childNodes[0]);
					staff.style.height = h1.offsetHeight - 3;
				}
			}
			
		}
		
	}
}

/* Site map */
function siteMapToggle(elementName) {
	var element = document.getElementById(elementName);
	var toggleElement = document.getElementById(elementName+'Toggle');
	if (element.className == "open") {
		element.className = "close";
	} else if (element.className == "close") {
		element.className = "open";
	}

	if (element.parentNode.parentNode.className == "open" ) {
		element.parentNode.parentNode.className = "close";	
	} else if (element.parentNode.parentNode.className == "close") {
		element.parentNode.parentNode.className = "open";
	}
	
	if (toggleElement.style.display != 'none') {
		toggleElement.style.display = 'none';
	}
	else {
		toggleElement.style.display = '';
	}

}


/* Grey bar handling */
function greyBar() {

	var nav = document.getElementById("navigation");
	var strap = document.getElementById("site");
	var altnav;
	var mainnav;
	
	/* Get main nav, alt nav */
	for (var i = 0; i < nav.childNodes.length; i++) {
		if (nav.childNodes[i].id == "altnav") {
			altnav = nav.childNodes[i];
		} else if (nav.childNodes[i].tagName == "UL") {
			mainnav = nav.childNodes[i];
		}
	}

	var mainnavList = mainnav.getElementsByTagName("li");
	var microsite = (mainnavList[0].className.indexOf("toolName") >= 0) ? true : false;

	/* Do we have a toolName? */
	if (!microsite) {

		strap.innerHTML += "<ul>" +
							"<li class='first'><a href='" + mainSections[currentSection].homeUrl + "'>Home</a></li>" +
							((mainSections[currentSection].duplicateMainNav > 0) ? mainnav.innerHTML : mainSections[currentSection].altMainNav) +
							altnav.innerHTML +
							"</ul>";

		nav.className = nav.className + " invisible";
		document.getElementById("head").className = "popup";
		
	} else {
		
		var peernav = altnav.getElementsByTagName("ul")[0];
		var altnodes = altnav.getElementsByTagName("li");
		var othernav = altnodes[altnodes.length - 1];

		strap.innerHTML += "<ul>" +
							"<li class='first'><a href='" + mainSections[currentSection].homeUrl + "'>Home</a></li>" +
							peernav.innerHTML +
							"<li>" + othernav.innerHTML + "</li>" + 
							"</ul>";

		altnav.className = altnav.className + " invisible";
							
	}

	// Mark the current section
	var strapList = strap.getElementsByTagName("li");
	var currentDone = false;
	var currentFound = false;
	for (var i = 0; i < strapList.length; i++) {
		if (microsite && (!currentDone) && (!currentFound) && (strapList[i].getElementsByTagName("a")[0].innerHTML == mainnavList[0].getElementsByTagName("a")[0].innerHTML)) {
			strapList[i].className = strapList[i].className + " current";
			currentDone = true;
		} 
		if (strapList[i].className.indexOf("current") >= 0) {
			strapList[i].innerHTML = "<span>" + strapList[i].innerHTML + "</span>";
			currentFound = true;
		}

	}
	
}

function greyBarFinalize() {

	var strap = document.getElementById("site");
	var strapList = strap.getElementsByTagName("li");

	strapList[strapList.length - 1].className = "last";

	if (document.getElementById("breadcrumbs").getElementsByTagName("li").length <= 1) {
		strapList[0].className = strapList[0].className + " current";
		strapList[0].innerHTML = "<span>" + strapList[0].innerHTML + "</span>";
	}

//	var strap = document.getElementById("site");
//	var strapList = strap.getElementsByTagName("ul")[0];
//	var links = document.getElementById("links");
//	var linksList = links.getElementsByTagName("ul")[0];
	
//	strapList.innerHTML = strapList.innerHTML + linksList.innerHTML;

	
	
/*	strapList.childNodes[0].className += " current";
	strapList.childNodes[0].innerHTML = "<span>" + strapList.childNodes[0].innerHTML + "</span>";
*/
//	for (var i = 0; i < strapList.childNodes.length; i++) {
}

/*setUpMenu = function() {
	if (document.getElementById("pcPage") == null) { greyBar(); }
	setUpMenuFunction();
}*/

/* Function to support auto-insterd function by hsbcusa.com libraries in SIAB Teamsite */
function leaving(targetURL,someNumber) {
	return true;
}

/* Group framework support */
function attach_giws_handlers() {
	var gif_options = document.getElementById("gif_options");
	if (gif_options != null){
		traverse_for_anchors(gif_options);
	}
}

function traverse_for_anchors(element) {
	if (element.tagName == "A") {
		element.onclick=cibm_giws_on_click;
	} else {
		var children = element.children;
		var total_children = children.length;

		for (var ptr=0; ptr < total_children; ptr++) {
			traverse_for_anchors(children[ptr]);
		}
	}
}


function cibm_giws_on_click() {
	var retValue = true;
	var anchor = event.srcElement;

	// If you find hsbcnet in the URL do not open a new window
	// You will probably have to strengthen this up a bit
	var same_window_search_phrase = "hsbcnet";

	if (anchor.href.indexOf(same_window_search_phrase) == -1) {		
		window.open(event.srcElement.href);
		retValue = false;
	}

	return retValue;
}

/* Group Directory Support */
var gd_location = "http://globaldir.systems.uk.hsbc";
var gd_dbpath = "http://group.ghq.hsbc/int/group/home.nsf";

function trim(target) {
	
	var regexFrontTrim = /^\s+/;
	var regexRearTrim = /\s+$/;
	var results = target.replace(regexFrontTrim,"");
	var results2 = results.replace(regexRearTrim,"");
	
	return results2;

}
	
function groupDirectorySearch(query) {
	
	var terms = trim(query).split(" ");

	//var url = gd_location + "/cgi-whitepages/search-entry.pl?";
	var url = gd_location + "/cgi-whitepages/oldportallaunch.pl?";
	
	
	if (terms.length >= 2) {
		//url += "operator_hsbcKnownAsLastName=starts+with&hsbcKnownAsLastName=" + trim(terms[terms.length - 1]);
		//url += "&operator_hsbcKnownAsGivenName=starts+with&hsbcKnownAsGivenName=" + trim(terms[0]);
		url += "searchstring=" + trim(terms[0]) +  "%20";
		url += trim(terms[terms.length - 1]) +  "&c=*";
	} else if (terms.length == 1) {
		//url += "operator_hsbcKnownAsLastName=starts+with&hsbcKnownAsLastName=" + trim(terms[0]);
		url += "searchstring=" + trim(terms[0]) +  "&c=*";
	}
	
	//url = gd_dbpath + "/gd_frame?Open&url=" + url

	gd_window = window.open(url,"GroupDirectory","toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes,width=800,height=600")
	gd_window.focus();
}

function groupDirectory() {
	gd_window = window.open(gd_location,"GroupDirectory","toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes,width=800,height=600");
	gd_window.focus();
}

//replaces the /content/business css that is inherited from the solutions microsite to /popup
function replaceCssPopup() {
	var x = document.getElementsByTagName('link');
	var searchText = 'content/business';
	for(var i=0; i<x.length; i++){
		var hRef = x.item(i).href;
		var newHref = hRef.replace(searchText, 'popup');
		x.item(i).href = newHref;
	}

	var objHead = document.getElementsByTagName('head');
	if (objHead[0])	{
		var objCSS = objHead[0].appendChild(document.createElement('link'));
		objCSS.href = '/solutions/control/css/popup/popup.css';
		objCSS.rel = 'stylesheet';
		objCSS.type = 'text/css';
		objCSS.media = 'all';
	}
	
	var redStrip = document.getElementById('navigation');
	var logo = document.getElementById('brand');
	redStrip.style.background = 'none';
	logo.style.marginBottom = '-30px';
}

// fix single quote in announcement archive page
function decodeHTML(text) {
	/* Based on code offered for free at http://javascript.internet.com */
	var tempContainer = document.createElement("textarea");
	tempContainer.innerHTML=text.replace(/</g,"&lt;").replace(/>/g,"&gt;");
	return tempContainer.value;
}

function fixSpecialChars() {
	/* Get the body and replace false &amp; characters and then HTML decode */
	document.getElementById("r1c1r1c2").innerHTML = decodeHTML(document.getElementById("r1c1r1c2").innerHTML.replace("&amp;","&"));
}

// Extend load-time event handling
if (typeof window.onload != "function") {
	window.onload = function() {
//		greyBarFinalize();
//		rotateOnLoad();
//		fixTabs();
		externalLinks();
		
		/* Removed and moved to hover temporarily
		staffDisplay();
		fixLinks();
		attach_giws_handlers();
		*/
	}
} else {
	var currentOnLoad = window.onload;
	window.onload = function() {
		if (currentOnLoad) {
			currentOnLoad();
		}
//		greyBarFinalize();
//		rotateOnLoad();
//		fixTabs();
		externalLinks();

		/* Removed and moved to hover temporarily
		staffDisplay();
		fixLinks();
		attach_giws_handlers();
		*/
	}
}

//		alert("Message from Arman: Core JavaScript debugging is taking place -- please ignore this alert and any that may follow. [0005]");
