//redirect Mac IE user to a message page
if (navigator.appName.toLowerCase().indexOf("internet explorer") > -1 && navigator.platform.toLowerCase().indexOf("mac") > -1)
{
	location.href = "http://www2.hsbc.ca/unsupported_browser/index.html";
}

//extend object
function jsfExtendObject(d, s)
{
	for (p in s)
	{
		d[p] = s[p];
	}
	return d;
}
// hide on load
function jsfOnLoadHideElements(jh)
{
	var jhs = document.getElementsByClassName(jh,null,null);
	for(var i=0; i<jhs.length; i++)
	{
		jhs[i].style.display="none";
	}
}
// show on load
function jsfOnLoadShowElements(js)
{
	var jhs = document.getElementsByClassName(js,null,null);
	for(var i=0; i<jhs.length; i++)
	{
		jhs[i].style.display="";
	}
}
//get elements by class name
document.getElementsByClassName = function(cls,n,t)
{
	var rtn = [];
	n=n===null?document:n;
	t=t===null?'*':t;
	var els = n.getElementsByTagName ? n.getElementsByTagName(t) : document.all;
	els = (!els||!els.length ) &&document.all ? document.all : els;	
	if(cls===null){return els;}
	for (var i=0,j=0; i < els.length; i++)
	{
		if(els[i].className.match("(^|\\s)"+cls+"(\\s|$)"))
		{
			rtn[j++] = els[i];
		}
	}
	return rtn;
};
//attach event
function jsfAttachEvent(obj,evt,fnc)
{
	if(window.addEventListener)
	{
		obj.addEventListener(evt, fnc, false);
	}
	else if(window.attachEvent)
	{
		obj.attachEvent('on'+evt, fnc);
	}
	else if (obj.getElementById &&evt=='load')
	{
		obj.onload = fnc;
	}
}
//attach close window event
function jsfAttachCloseWindow(classname)
{
	closewindowObjects = document.getElementsByClassName(classname,null,"A");
	for(var i=0;i<closewindowObjects.length;i++)
	{
		closewindowObjects[i].onclick = function(){window.close();};
	}
}
//attach hide/show functionality
function jsfOnLoadAttachHideShow(trg,hsi,hse,caf,imp,imm)
{
	//get all raw triggers
	var tgs = document.getElementsByClassName(trg,null,"a");
	
	//get all raw elements
	var elm = document.getElementsByClassName(hse,null,null);

	//for all the raw triggers with/without numbers
	var reg = new RegExp("(^|\\w*)"+hsi+"(\\d*|([\\w* ]))");
	
	//for loop varible
	var i = 0;
	
	//set up hide/show element attributes and methods
	for(i=0; i<elm.length; i++)
	{
		//if i have an associated image, let me control it's hide/show
		//get all images associated with me
		elm[i] = jsfExtendObject(elm[i],
			{
				hide:function()
				{
					this.style.display = "none";
					this.hidden = true;
					for(var j=0;j<this.images.length;j++)
					{
						if(this.images[j].className.match(imp))
						{
							this.images[j].style.display="";
						}
						if(this.images[j].className.match(imm))
						{
							this.images[j].style.display="none";
						}
					}
				},
				show:function()
				{
					this.style.display = "";
					this.hidden = false;
					for(var j=0;j<this.images.length;j++)
					{
						if(this.images[j].className.match(imp))
						{
							this.images[j].style.display="none";
						}
						if(this.images[j].className.match(imm))
						{
							this.images[j].style.display="";
						}
					}
				},
				toggle:function()
				{
					if(this.hidden)
					{
						this.show();
					}
					else
					{
						this.hide();
					}
				},
				init:function()
				{
					this.hidden = this.style.display===""?false:true;
					this.images = document.getElementsByClassName(reg.exec(this.className)[0],null,"img");
					for(var j=0;j<this.images.length;j++)
					{
						if(this.images[j].className.match(imp))
						{
							this.images[j].style.display="";
						}
						if(this.images[j].className.match(imm))
						{
							this.images[j].style.display="none";
						}
					}
				},
				hidden:false,
				hsElement:true,
				images:[]
			}
		);
		elm[i].init();
	}
	//set up all the triggers with the elements
	for(i=0; i<tgs.length; i++)
	{
		tgs[i] = jsfExtendObject(tgs[i],
			{
				onclick:function()
				{
					//get all elements that match the item class
					var els = document.getElementsByClassName(reg.exec(this.className)[0],null,null);
					
					//loop var
					var j=0;
					//only close elements not controlled by me
					if(this.className.match(caf) &&caf.length>0)
					{
						ael = document.getElementsByClassName(hse,null,null);
						for(j=0;j<ael.length;j++)
						{
							if(ael[j].className.match(caf) &&reg.exec(this.className)[0]!=reg.exec(ael[j].className)[0])
							{
								ael[j].hide();
							}
						}
					}

					for(j=0; j<els.length; j++)
					{
						//hide/show anything that isn't the trigger
						if(els[j].hsElement)
						{
							els[j].toggle();
						}
					}
					return false;
				}
			}
		);
	}
}
//assign class based on condition
function jsfAttachConditionalClass(originClass,originTag,attachClass,targetTag,targetClass,firstItem,condition)
{
	var htmlObjects;
	var targetObjects;
	var arrayIndex;
	if(htmlObjects = document.getElementsByClassName(originClass,null,originTag))
	{
		for(var i=0;i<htmlObjects.length;i++)
		{
			try
			{
				if(eval("htmlObjects[i]"+condition))
				{
					if(targetClass!=null)
					{
						targetObjects = document.getElementsByClassName(targetClass,htmlObjects[i],targetTag);
					}
					else
					{
						targetObjects = htmlObjects[i].getElementsByTagName(targetTag);
					}
					if(targetObjects!=null&&targetObjects.length>0)
					{
						arrayIndex = firstItem ? 0 : targetObjects.length-1;
						targetObjects[arrayIndex].className+=" "+attachClass;
					}
				}
			}
			catch(err){}
		}
	}
}
//assign alternate table row classes
function jsfAlternateTableRows(outerClass,row01Class,row02Class)
{
	var divObjects;
	var alternator = false;
	if(divObjects = document.getElementsByClassName(outerClass,null,"DIV"))
	{
		for(var i=0;i<divObjects.length;i++)
		{
			if(tables = divObjects[i].getElementsByTagName("TABLE"))
			{	
				for(var j=0;j<tables.length;j++)
				{
					alternator = false;
					if(tableRows = tables[j].getElementsByTagName("TR"))
					{
						for(var k=0;k<tableRows.length;k++)
						{
							tableRows[k].className = alternator==true ? row01Class : row02Class;
							alternator = alternator==true ? false : true;
						}
					}
				}
			}
		}
	}
}
//assign alternative column classes
function jsfAlternateTableColumns(outerClass,columne01Class,columne02Class)
{
	var divObjects;
	var alternator = false;
	if(divObjects = document.getElementsByClassName(outerClass,null,"DIV"))
	{
		for(var i=0;i<divObjects.length;i++)
		{
			if(tables = divObjects[i].getElementsByTagName("TABLE"))
			{	
				for(var j=0;j<tables.length;j++)
				{
					if(tableRows = tables[j].getElementsByTagName("TR"))
					{
						for(var k=0;k<tableRows.length;k++)
						{
							alternator = false;
							if(tableCells = tableRows[k].getElementsByTagName("TD"))
							{
								for(var l=0;l<tableCells.length;l++)
								{
									if(tableCells[l].className.length==0)
									{
										tableCells[l].className = alternator==true ? columne01Class : columne02Class;
									}
									alternator = alternator==true ? false : true;
								}
							}
						}
					}
					alternator = true;
					if(tableHeads = tables[j].getElementsByTagName("THEAD"))
					{
						for(var k=0;k<tableHeads.length;k++)
						{
							if(tableHeaders = tableHeads[k].getElementsByTagName("TH"))
							{
								for(var l=0;l<tableHeaders.length;l++)
								{
									if(tableHeaders[l].className.length==0)
									{
										tableHeaders[l].className = alternator==true ? columne01Class : columne02Class;
									}
									alternator = alternator==true ? false : true;
								}
							}
						}
					}
				}
			}
		}
	}
}
//remove background for last element in given lists
function jsfRemoveLastBg(listBgArray)
{
	var footerDivObject;
	
	for(classname in listBgArray)
	{
		if(htmlObjects = document.getElementsByClassName(listBgArray[classname],null,"DIV"))
		{
			for(htmlObject in htmlObjects)
			{
				var listItems = htmlObjects[htmlObject].getElementsByTagName("LI");
				if(listItems.length>0 &&listItems[listItems.length-1].className=="")
				{
					listItems[listItems.length-1].style.background = "none";
					listItems[listItems.length-1].style.paddingRight = "0px";
				}
			}
		}
	}

}
//attach pageBgxx to div within the theme after detecting it in the content
function jsfSetPageBgClass(destinationClass,originClass,serachClass)
{
	if(originDivObject = document.getElementsByClassName(originClass,null,"DIV")[0])
	{
		var reg = new RegExp("(^|\\w*)"+serachClass+"(\\d*|([\\w* ]))");

		if(attachClassName = reg.exec(originDivObject.className)[0])
		{
			if(destinationDivObject = document.getElementsByClassName(destinationClass,null,"DIV")[0])
			{
				destinationDivObject.className+=" "+attachClassName;
			}
		}
	}
}
//autoclear code
function jsfAutoClearEvents(autoClearClass)
{
	if(autoClearObjects = document.getElementsByClassName(autoClearClass,null,"INPUT"))
	{
		for(var i=0;i<autoClearObjects.length;i++)
		{
			autoClearObjects[i] = jsfExtendObject(autoClearObjects[i],
				{
					onfocus:function()
					{
						this.value = this.value==this.defaultValue ? "" : this.value;
					},
					onblur:function()
					{
						this.value = this.value=="" ? this.defaultValue : this.value;
					}
				}
			);
		}
	}
}
//run on load
function jsfOnLoad()
{
	var condition = ".style.backgroundImage.length>0";
	jsfOnLoadShowElements("jstShow");
	jsfOnLoadHideElements("jstHide");
	jsfOnLoadAttachHideShow("jstHideShowTrigger","jstHideShowItem","jstHideShowElement","jstCloseAllFirst","jstHsPlus","jstHsMinus");

	jsfRemoveLastBg(new Array("hsbcContentStyle26d"));

	jsfAttachConditionalClass("hsbcContentStyle13","DIV","jsCss01","H2",null,true,condition);
	jsfAttachConditionalClass("hsbcContentStyle14c","DIV","jsCss02","DIV","hsbcContentStyle14d",true,condition);	
	condition = ".getElementsByTagName('LI')[objects[i].getElementsByTagName('LI').length-1].className=='hsbcEntityTabSelected'";
	jsfAttachConditionalClass("hsbcEntityTextArea02","DIV","jsCss03","LI",null,false,condition);
	jsfAlternateTableRows("hsbcContentStyle23","hsbcContentStyle23a","hsbcContentStyle23b");
	jsfAlternateTableColumns("hsbcContentStyle24","hsbcContentStyle24a","hsbcContentStyle24b");

	jsfAttachCloseWindow("jstCloseWindow");
	
	jsfSetPageBgClass("pageBody","jstPageBg","pageBg");
	jsfAutoClearEvents("jstAutoClear");
}
//attach on load event to jsfOnLoad
jsfAttachEvent(window,'load',jsfOnLoad);


/* P2G HBCA added - move from P2G consolidated.js */
function killSession(url)
{
    if (window.event)
    {
        if ((window.event.clientX < -5000 && window.event.clientY < -5000) || 
            (window.event.clientX > 5000 && window.event.clientY > 5000))
        {
            window.open(url, "KillSession", "width=1,height=1,top=30000,left=30000,resizable=no,menubar=no,toolbar=no,directories=no,location=no,scrollbars=no,status=no, fullscreen=no, titlebar=no, alwaysRaised=no, hotkeys=no");
        }
    }
}

function closeAll()
{
  // do nothing - to prevent duplicated variable declaration
}
/* P2G HBCA end - move from P2G consolidated.js */