/* Client: HSBC Tradesmen Insurance
 * Author: Rew Islam
 * Contact: Stefan Dyke
 * Vendor: HeathWallace
 * Created: 19 April 2007
 */
 
/* extends a js object */
function hsbcJsExtendObject(d, s)
{
	for (p in s)
	{
		d[p] = s[p];
	}
	return d;
}

/* attaches an event to an object */
function hsbcJsAttachEvent(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;
	}
}

/* gets an element from the DOM based on it's className */
document.getElementsByClassName = function(cls,n,t)
{
	if(cls=='')
	{
		return '';
	}
	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;
};

document.getElementByClassName = function(cls)
{
	objects = document.getElementsByClassName(cls,null,null);
	if(objects.length>0)
	{
		return objects[0];
	}
	return null;
}

/* add a class to className */
function hsbcJsClassAdd(newClass,className)
{
	replaceString = new RegExp(newClass);
	className = className.replace(replaceString,className);
	className += " "+newClass;
	return className;
}

/* remove a class to className */
function hsbcJsClassRemove(newClass,className)
{
	replaceString = new RegExp(newClass);
	return className.replace(replaceString,"");
}

/**/
function hsbcCheckForClass(className,findClass)
{
	classes = className.split(' ');
	for(var i=0;i<classes.length;i++)
	{
		if(classes[i]==findClass)
		{
			return true;
		}
	}
	return false;
}

/* get next sibling */
function hsbcJsGetNextSibling(element)
{
	if(element.nextSibling==null)
	{
		return null;
	}
	switch(element.nextSibling.nodeType)
	{
		case 1:
			return element.nextSibling;
		case 3:
			return hsbcJsGetNextSibling(element.nextSibling);
	}
}

hsbcJsAttachEvent(window,'load',hsbcJsLoad);

function removeLastBg(className)
{
	var objects = document.getElementsByClassName(className,null,null);
	objects[objects.length-1].style.background='none';
}
function removeFirstBg(className)
{
	var objects = document.getElementsByClassName(className,null,null);
	if(objects.length)
	{
		objects[0].style.background='none';
		objects[0].style.marginTop = '0';
	}
}

function hideElements(className)
{
	var objects = document.getElementsByClassName(className,null,null);
	for(var i=0; i<objects.length; i++)
	{
		objects[i].style.display = "none";
	}
}

function showElements(className)
{
	var objects = document.getElementsByClassName(className,null,null);
	for(var i=0; i<objects.length; i++)
	{
		objects[i].style.display = "block";
	}	
}

function getValueFromKey(hideShowArray,key)
{
	for(var i=0; i<hideShowArray.length;i++)
	{
		if(hideShowArray[i][0]==key)
		{
			return hideShowArray[i][1];
		}
	}
}

function isValueInArray(theArray,value)
{
	for(var i=0;i<theArray.length;i++)
	{
		if(theArray[i]==value)
			return true;
	}
}

function attachTriggerTypeA(className,valuesArray,hideShowArray,defaultHideShow)
{
	var objects = document.getElementsByClassName(className,null,null);
	var objects01;
	var objects02 = document.getElementsByClassName(defaultHideShow,null,null);
	var object01;
	
	for(var i=0; i<objects.length; i++)
	{
		objects[i] = hsbcJsExtendObject(
			objects[i],
			{
				onkeyup:function()
				{
					this.runHideShow();
				},
				onchange:function()
				{
					this.runHideShow();
				},
				runHideShow:function()
				{
					//hide all our elements
					hideElements(defaultHideShow);
					for(var j=0; j<hideShowArray.length; j++)
					{
						hideElements(hideShowArray[j][1]);
					}
					//get right list of hideShows
					var hideShowClassName = getValueFromKey(hideShowArray,this.options[this.selectedIndex].value);
					if(hideShowClassName)
					{
						objects01 = document.getElementsByClassName(hideShowClassName,null,null);
					}
					else
					{
						objects01 = document.getElementsByClassName(defaultHideShow,null,null);
					}
					if(isValueInArray(valuesArray,this.options[this.selectedIndex].value))
					{
						for(var k=0;k<objects01.length;k++)
						{
							objects01[k].style.display="block";
						}
						return;
					}
				}
			}
		);
		objects[i].runHideShow();
	}
}

var firstLoad;

function showButton(checkBoxObjects,hideObject,showObject,enabledObject,disabledObject)
{
	for(var i=0;i<checkBoxObjects.length;i++)
	{
		if(checkBoxObjects[i].checked || firstLoad == 0)
		{
			/* make black */
			showObject.style.display = "";
			hideObject.style.display = "none";
			//return;
			enabledObject.style.display="none"
			disabledObject.style.display="inline"
		}
	}
	if (firstLoad > 0)
		{/* make grey */
		showObject.style.display = "none";
		hideObject.style.display = "";
		firstLoad--
		enabledObject.style.display="inline"
		disabledObject.style.display="none"
		}
}

function attachTriggerTypeB(className, parentRemoveClass, siblingMustHaveClass, hideButtonClass, showButtonClass, continueEnabled, continueDisabled)
{
	var objects = document.getElementsByClassName(className,null,null);
	var nextSibling;
	var hideButtonObject = document.getElementByClassName(hideButtonClass);
	var showButtonObject = document.getElementByClassName(showButtonClass);
	var continueEnabledObject = document.getElementByClassName(continueEnabled);
	var continueDisabledObject = document.getElementByClassName(continueDisabled);

	firstLoad = objects.length

	for(var i=0; i<objects.length; i++)
	{
		//go up one level and set class to
		objects[i] = hsbcJsExtendObject(
			objects[i],
			{
				onclick:function()
				{
					this.runHideShow();
				},
				runHideShow:function()
				{
					if(this.checked)
					{
						this.parentNode.className = hsbcJsClassRemove(parentRemoveClass,this.parentNode.className);
						if(nextSibling = hsbcJsGetNextSibling(this.parentNode))
						{
							nextSibling.style.display = "";
						}
					}
					else
					{
						this.parentNode.className = hsbcJsClassAdd(parentRemoveClass,this.parentNode.className);
						if(nextSibling = hsbcJsGetNextSibling(this.parentNode))
						{
							if(hsbcCheckForClass(nextSibling.className,siblingMustHaveClass))
							{
								nextSibling.style.display = "none";
							}
						}
					}
					//firstLoad = objects.length
					showButton(objects,hideButtonObject,showButtonObject,continueEnabledObject,continueDisabledObject);
				}
			}
		);
		objects[i].runHideShow();
	}
}

function attachTriggerTypeC(className, hideObject,showObject, hideValue, showValue)
{
	
	var objects = document.getElementsByClassName(className,null,null);
	var hideObjects = document.getElementsByClassName(hideObject,null,null);
	var showObjects = document.getElementsByClassName(showObject,null,null);
	
	for(var i=0; i<objects.length; i++)
	{
		objects[i] = hsbcJsExtendObject(
			objects[i],
			{
				onkeyup:function()
				{
					this.runHideShow();
				},
				onclick:function()
				{
					this.runHideShow();
				},
				runHideShow:function()
				{
					if(this.checked==true)
					{
						switch(this.value)
						{
							case hideValue:
								for(var j=0;j<showObjects.length;j++)
								{
									showObjects[j].style.display="none";
								}
								for(var j=0;j<hideObjects.length;j++)
								{
									hideObjects[j].style.display="";
								}
								break;
							case showValue:
								for(var j=0;j<hideObjects.length;j++)
								{
									hideObjects[j].style.display="none";
								}
								for(var j=0;j<showObjects.length;j++)
								{
									showObjects[j].style.display="";
								}
								break;
						}
					}
				}
			}
		);
		objects[i].runHideShow();
	}
}

function attachTriggerTypeD(className,hideButtonClass,showButtonClass,continueEnabled,continueDisabled)
{
	var objects = document.getElementsByClassName(className,null,null);
	var hideButtonObject = document.getElementByClassName(hideButtonClass);
	var showButtonObject = document.getElementByClassName(showButtonClass);
	var continueEnabledObject = document.getElementByClassName(continueEnabled);
	var continueDisabledObject = document.getElementByClassName(continueDisabled);
	
	for(var i=0; i<objects.length; i++)
	{
		objects[i] = hsbcJsExtendObject(
			objects[i],
			{
				onchange:function()
				{
					this.runHideShow();
				},
				onclick:function()
				{
					if (this.tagName == "INPUT")
						{
						this.runHideShow();
						}
				},
				runHideShow:function()
				{
					changeButtons(hideButtonObject,showButtonObject,continueEnabledObject,continueDisabledObject)
				}
			}
		);
	}
}

function changeButtons(hideButtonObject,showButtonObject,continueEnabledObject,continueDisabledObject)
{
	showButtonObject.style.display = "";
	hideButtonObject.style.display = "none";
	continueEnabledObject.style.display="none"
	continueDisabledObject.style.display="inline"
}


function hsbcJsLoad()
{
	showElements('jstScriptActive');	
	hideElements('jstHide');
	hideElements('jstAlwaysHide');
 	removeFirstBg('hsbcContentStyle17');
	attachTriggerTypeA('jstTriggerTypeA01',
					   new Array('2','3','5','6','8','parent_builder','12','13','14','15','16','17','18','22','24','25','27','29','30','31','32','33','36','37','38','40','41','43','44','45','46','47','48','49','51','52','54','55','59','60','61','88','64','65','66','67','70','71','72','73','77','79','80','81','82','83','84','19','86','87'),
					   new Array(new Array('parent_builder','jstHideShow02')),
					   'jstHideShow01');
	
	attachTriggerTypeB('jstTriggerTypeB01','hsbcContentStyle17a','jstHide','jstHideShow01','jstHideShow02','jstHideShow03','jstHideShow04');
//function attachTriggerTypeB(className, parentRemoveClass, siblingMustHaveClass, hideButtonClass, showButtonClass)
	attachTriggerTypeC('jstTriggerTypeC01','','jstHideShow03','N','Y');
	attachTriggerTypeC('jstTriggerTypeC02','jstHideShow01','jstHideShow02','2','1');
	
	
	attachTriggerTypeA('jstTriggerTypeA02',
					   new Array('2','3','5','6','8','parent_builder','12','13','14','15','16','17','18','22','24','25','27','29','30','31','32','33','36','37','38','40','41','43','44','45','46','47','48','49','51','52','54','55','59','60','61','88','64','65','66','67','70','71','72','73','77','79','80','81','82','83','84','19','86','87'),
					   new Array(new Array('parent_builder','jstHideShow05')),
					   'jstHideShow04');
	
	
	attachTriggerTypeA('jstTriggerTypeA03',
					   new Array('2','3','5','6','8','parent_builder','12','13','14','15','16','17','18','22','24','25','27','29','30','31','32','33','36','37','38','40','41','43','44','45','46','47','48','49','51','52','54','55','59','60','61','88','64','65','66','67','70','71','72','73','77','79','80','81','82','83','84','19','86','87'),
					   new Array(new Array('parent_builder','jstHideShow07')),
					   'jstHideShow06');
	
	attachTriggerTypeD('jstTriggerTypeD01','jstHideShow01','jstHideShow02','jstHideShow03','jstHideShow04')
}