HW = {};

HW.HeaderLoginLinks = {
	config:{
		idLogin:"jsHeaderLogin",
		classLoginPersonal:"jsHeaderLoginPersonal",
		classLoginCITICfirst:"jsHeaderLoginCITICfirst",
		classLoginCorporates:"jsHeaderLoginCorporates"
	},
	CKWB_win:null,
	// this openIBank function is carried from existing JavaScript code
	openIBank:function(url){
		var BrowserName = navigator.appName;
		var BrowserVersion = parseInt(navigator.appVersion);
		var BrowserHeight2 = screen.height-150;
		var BrowserWidth2 = screen.width-30;
		var CKWB_win = this.CKWB_win;
		if (!(BrowserName == "Microsoft Internet Explorer" && BrowserVersion == 4 && (navigator.appVersion.indexOf("MSIE 6.0") != -1 || navigator.appVersion.indexOf("MSIE 5.5") != -1 || navigator.appVersion.indexOf("MSIE 7.0") != -1 || navigator.appVersion.indexOf("MSIE 8.0") != -1 ))&& !(navigator.userAgent.indexOf("Firefox")!=-1)) {
			//url = "/Error_Popup.html";
			url="http://www.ckw-ibanking.com/Error_Popup.html";
		}			
		if(!CKWB_win || CKWB_win.closed) {
			CKWB_win = window.open(url,"CKWBPerson1","toolbar=0,width="+BrowserWidth2+",height="+BrowserHeight2+",status=1,scrollbars=1,resizable=1,menubar=0,top=0,left=0");
		}else{ CKWB_win.focus(); }
		
		this.CKWB_win = CKWB_win;
	},	
	init:function(){
		var obj = this;
		var config = obj.config;
		var login = $("#"+config.idLogin);
		// check if header login exists
		if(!login.length) return;
		// Corporate login 
		var loginCorporates = login.find("."+config.classLoginCorporates);
		if(loginCorporates.length){
			loginCorporates.click(function(e){
				e.preventDefault();
				window.open($(this).attr("href"),"Attachment","top=0,left=0,toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=no,resizable=yes,width=800,height=600",
 true);								
			});			
		}
		// Personal login
		var loginPersonal = login.find("."+config.classLoginPersonal);
		if(loginPersonal.length){
			loginPersonal.click(function(e){
				e.preventDefault();
				obj.openIBank($(this).attr("href"));				
			});
		}
		// CITICfirst login
		var loginCITICfirst = login.find("."+config.classLoginCITICfirst);
		if(loginCITICfirst.length){
			loginCITICfirst.click(function(e){
				e.preventDefault();
				obj.openIBank($(this).attr("href"));				
			});
		}		
	}	
}

HW.HeaderLogin = {
	config:{
		idLogin:"jsHeaderLogin",
		classLogin:"jsHeaderLogin",
		classButton:"jsHeaderLoginButton",
		classSelected:"jsHeaderLoginSelected"
	},
	hideMenu:function(params){
		var config = this.config;
		var login = params.login || [];
		var menu = params.menu || [];
		// no progress if login or menu does not exist
		if(!login.length || !menu.length) return;
		login.removeClass(config.classSelected);
		menu.hide();
	},
	showMenu:function(params){
		var config = this.config;
		var login = params.login || [];
		var menu = params.menu || [];
		// no progress if login or menu does not exist
		if(!login.length || !menu.length) return;		
		login.addClass(config.classSelected);									
		menu.show();						
	},
	init:function(){
		var self = this;
		var config = self.config;
		var login = $("#"+config.idLogin);
		// check if header login exists
		if(!login.length) return;
		login.addClass(config.classLogin);
		
		var button = login.find("."+config.classButton);
		var menu = login.find("ul");
		// check if the login submenu exists
		if(!menu.length || !button.length) return;
		// hide the menu initially
		menu.hide();
		button.click(function(e){
			e.preventDefault();
			// stop propagation so the body click event will not be triggered			
			e.stopPropagation();
			if(login.hasClass(config.classSelected)){
				self.hideMenu({login:login,menu:menu});
			}else{
				self.showMenu({login:login,menu:menu});
			}
		});			
		var $body = $("body");
		login.focusin(function(e){
			// close menu when the user no longer focus on the header login												 
			$body.one("click",function(e){
				self.hideMenu({login:login,menu:menu});
			});
			var closeMenu = function(e){
				e.stopPropagation();	
				var target = $(e.target).closest("#"+config.idLogin);				
				if(target.length == 0){
					killEvent();
					self.hideMenu({login:login,menu:menu});
				}				
			};
			var killEvent = function(e){
				$body.die("focusin",closeMenu);
			}
			$body.live("focusin",closeMenu);			
		});					
	}
};

HW.MainNavigation = {
	config:{
		idMainNav:"jsMainNav",
		idSubNav:"jsSubNav",
		classMenu:"jsMenu",
		classMenuContainer:"jsMenuContainer",
		classHighlight:"jsHighlight",
		classCurrent:"current"		
	},
	removeHighlight:function(params){
		var collection = params.collection || [];
		var config = this.config;
		collection.each(function(){
			$(this).removeClass(config.classHighlight);
		});
	},	
	init:function(){
		var self = this;
		var config = self.config;
		var mainNav = $("#"+config.idMainNav);
		var subNav = $("#"+config.idSubNav);
		// check if any of main navigation or sub navigation does not exist
		if(!mainNav.length || !subNav.length) return;
		var mainMenus = mainNav.find("."+config.classMenu);
		var subMenus = subNav.find("."+config.classMenu);
		var menuContainer = mainNav.find("."+config.classMenuContainer);
		// does not progress further if there is no sub navigation or no menu container
		if(!subMenus.length || !menuContainer.length) return;
		// check if the browser is IE7 or under
		var isTargetIE = $.browser.msie && ($.browser.version < 8.0);
		// add decor to the last sub menu
		subMenus.filter(":last").find(".content").append($('<span class="decor00"></span>'));		
		// move non-current sub menus as corresponding sub menus of the main navigation
		subMenus.each(function(){
			var subMenuItem = $(this);
			if(!subMenuItem.hasClass(config.classCurrent)){
				// find the identifier by pattern matching
				var itemIdentifier = subMenuItem.attr("className").match(/menu[1-9]/);
				// get the target container and move the subment to the target
				var target = menuContainer.filter("."+ itemIdentifier);
				var contentToAdd;
				if(target.length){				
					contentToAdd = $('<div class="subMenu">' + subMenuItem.html() + '</div>');
					if(isTargetIE){
						contentToAdd = $('<div class="subMenu"><iframe src="javascript:false;"></iframe>' + subMenuItem.html() + '</div>');
					}
					// set the width to avoid IE display inproperly					
					contentToAdd.find("ul").css({ width:subMenuItem.innerWidth() });
					if(isTargetIE){
						contentToAdd.find("iframe").css({width:subMenuItem.innerWidth()+20, height:subMenuItem.innerHeight()+24});
					}					
					target.append(contentToAdd);
					subMenuItem.remove();
				}
			}
		});		

		// setup highlight on main nav
		mainMenus.each(function(){
			var mainMenuItem = $(this);
			mainMenuItem.bind("mouseenter", function(e){
				mainMenuItem.addClass(config.classHighlight);
				if(isTargetIE){
					mainMenuItem.find("iframe").css({height:mainMenuItem.find(".subMenu").height()-18});
				}
			});
			mainMenuItem.bind("mouseleave", function(e){
				mainMenuItem.removeClass(config.classHighlight);
			});						
			mainMenuItem.bind("focusin", function(e){
				if(!mainMenuItem.hasClass(config.classHighlight)){
					self.removeHighlight({collection:mainMenus});					
					mainMenuItem.addClass(config.classHighlight);				
					if(isTargetIE){
						mainMenuItem.find("iframe").css({height:mainMenuItem.find(".subMenu").height()-18});
					}					
				}					
			});						
			mainMenuItem.bind("focusout", function(e){
				// prevent main menu receiving focusout 																						 
				e.stopPropagation();
			});
		});
		// clear highlight when the user is no longer focus on the main nav		
		mainMenus.focusout(function(e){
			self.removeHighlight({collection:mainMenus});
		});

	}
};

HW.SideNavigation = {
	config:{
		idNav:"jsSideNav",
		classNavItem:"sideNavItem",
		classNavMenu:"sideNavMenu",
		classNavMenuDecor:"sideNavMenuc",		
		classJSNavItemContainer:"jsSideNavItemContainer",				
		classJSNavItem:"jsSideNavItem",
		classJSNavItemHighlight:"jsSideNavItemHighlight"		
	},
	clearHighlight:function(params){
			var collection = params.collection || [];
			var config = this.config;
			collection.each(function(){
				$(this).removeClass(config.classJSNavItemHighlight);
			});
	},	
	init:function(){
		var self = this;
		var config = self.config;
		var sideNav = $("#"+config.idNav);
		// check if side navigation exists
		if(!sideNav.length) return;
		var navItemContainers = sideNav.find("."+config.classJSNavItemContainer);
		// no progress if no nav item containers
		if(!navItemContainers.length) return;
		navItemContainers.each(function(){
			var navItemContainer = $(this);
			var navItems = navItemContainer.find("."+config.classNavItem);			
			// no further progress if nav items did not exist
			if(!navItems.length) return;		
			navItems.each(function(){
				var navItem = $(this);			
				// turn the nav item as the corresponding JS version
				navItem.addClass(config.classJSNavItem);
				var navItemDecor = navItem.find("."+config.classNavMenuDecor);				
				navItem.hover(
					function(){
						navItem.addClass(config.classJSNavItemHighlight);
						if(navItemDecor.length){
							navItemDecor.css({height: navItem.height()-4 });
						}
					},
					function(){
						navItem.removeClass(config.classJSNavItemHighlight);										
					}
				);
				navItem.bind("focusin",function(e){
					if(!navItem.hasClass(config.classJSNavItemHighlight)){
						self.clearHighlight({collection:navItems});
						if(navItemDecor.length){
							navItemDecor.css({height: navItem.height()-4 });
						}					
						navItem.addClass(config.classJSNavItemHighlight);
					}																				
				});
			});
			// clear all highlights if the user is no longer focus on this sub item list
			navItemContainer.bind("focusout",function(e){
				self.clearHighlight({collection:navItems});
			});
		});		
	}	
};

HW.FooterLinks = {
	config:{
		idFooter:"jsFooter",
		classOverlay:"jsOverlayNormal"
	},
	init:function(){
		var config = this.config;
		var footer = $("#"+config.idFooter);
		if(!footer.length) return;
		var footerLinks = footer.find("."+config.classOverlay);
		if(!footerLinks.length) return;
		footerLinks.each(function(){
			var footerLink = $(this);
			// using HW JS overlay plugin
			footerLink.click(
				function(e){
					e.preventDefault();
					$.portal(footerLink.attr("href"));					
				}
			);
		});
	}	
}


HW.RotatingBanner = {
	config:{
		valueMaxPageItem:5,
		htmlBannerControlNoPages:'<div id="controlsOnly"><div class="prev">prev</div><div class="next">next</div></div>',				
		// the order of next and prev button in reverse order for the display sake
		htmlBannerControlWithPages:'<div id="controls"><div class="next">next</div><div class="pageIndex"></div><div class="prev">prev</div></div>',		
		idBannerNoPages:"jsBannerNoPages",
		idBannerWithPages:"jsBannerWithPages",
		classCurrent:"jsCurrent",
		classSelected:"sel",
		classBanner:"jsBanner",
		classScrollItem:"scrollEl",
		classColumn:"column04"				
	},
	timer:0,
	current:0,
	totalItem:0,	
	controls:[],
	btnPages:[],
	scrollItems:[],	
	inTransition:false,
	resetDefault:function(){
		var obj = this;
		obj.timer = 0;
		obj.current = 0;
		obj.totalItem = 0;
		obj.controls = [];
		obj.btnPages = [];
		obj.scrollItems = [];
		obj.inTransition = false;
	},	
	getInformation:function(){
		return {
			config:this.config,
			current:this.current,
			totalItem:this.totalItem,
			btnPages:this.btnPages,
			scrollItems:this.scrollItems
		};
	},	
	setColumnHeight:function(){
		var obj = this;
		var columns = obj.scrollItems.find("."+obj.config.classColumn);
		if( columns.length == 0 ){ columns = obj.scrollItems;  }
		var maxHeight = 0;
		columns.each(function(index){
							  
			var columnHeight = $(this).height();
			if(columnHeight > maxHeight){
				maxHeight = columnHeight;
			}
		});
		columns.height(maxHeight);		
		return maxHeight;
	},
	move:function(direction){
		var obj = this;
		direction = (typeof direction == "undefined")? "forward" : direction;
		var withPage = (obj.btnPages.length > 0)? true : false;
		if(withPage){
			obj.btnPages.eq(obj.current).removeClass(obj.config.classSelected);			
		}		
		obj.scrollItems.eq(obj.current).fadeOut(100,function(){																																
				$(this).removeClass(obj.config.classCurrent);
		});
		if(direction == "forward"){
				obj.current = (obj.current == obj.totalItem -1)? 0 : obj.current+1;			
		}else{
				obj.current = (obj.current == 0)? obj.totalItem-1 : obj.current-1;
		}
		if(withPage){
			obj.btnPages.eq(obj.current).addClass(obj.config.classSelected);			
		}				
		obj.scrollItems.eq(obj.current).fadeIn(800,function(){
			$(this).addClass(obj.config.classCurrent);
			obj.isInTransition = false;
		});																																				
	},	
	loop:function(){
		var obj = HW.RotatingBanner.getInformation();
		var withPage = (obj.btnPages.length > 0)? true : false;
		if(withPage){
			obj.btnPages.eq(obj.current).removeClass(obj.config.classSelected);			
		}
		obj.scrollItems.eq(obj.current).fadeOut(100,function(){																																
			$(this).removeClass(obj.config.classCurrent);
		});
		obj.current = (obj.current == obj.totalItem -1)? 0 : obj.current+1;				
		if(withPage){
			obj.btnPages.eq(obj.current).addClass(obj.config.classSelected);							
		}
		obj.scrollItems.eq(obj.current).fadeIn(800,function(){
			$(this).addClass(obj.config.classCurrent);
		});		
		// update the actual current value
		HW.RotatingBanner.current = obj.current;		
	},
	init:function(){
		var obj = this;
		var config = obj.config;
		var bannerWithPages;		
		var banner = $("#"+config.idBannerWithPages);
		// check for banner type
		if(banner.length){
			bannerWithPages = true;									
		}else{
			banner = $("#"+config.idBannerNoPages);
			if(banner.length){
				bannerWithPages = false;
			}else{
				// no banner is found
				obj.resetDefault();
				return;
			}			
		}
		// update the object components
		obj.scrollItems = banner.find("."+config.classScrollItem);
		obj.totalItem = obj.scrollItems.length;		
		// no further progess if there is no scroll item
		if(!obj.totalItem) return;		
		// update the object components
		if(bannerWithPages){
			var $control = $(config.htmlBannerControlWithPages);
			var numPage = (obj.totalItem > config.valueMaxPageItem)? config.valueMaxPageItem : obj.totalItem ;
			var pageItemToAppend = '';
			for(var i=0; i < numPage; i++){
				pageItemToAppend = pageItemToAppend + '<span class="page">' + (i+1) + '</span>';
			}						
			$control.find(".pageIndex").wrapInner(pageItemToAppend);			
			obj.controls = $control;
		}else{
			obj.controls = $(config.htmlBannerControlNoPages);
		}
		obj.btnPages = obj.controls.find(".page") || [];		
		obj.curent = 0;						
		obj.isInTransition = false;		
		var btnPrevious = obj.controls.find(".prev");
		var btnNext = obj.controls.find(".next");		
		var withPage = (obj.btnPages.length>0)? true : false;		
		// find and set the max height among columns		
		banner.height(obj.setColumnHeight());
		// append the control dynamically according to the banner type
		banner.append(obj.controls);
		// handle each page button click
		if(withPage){
			obj.btnPages.each(function(index){
				$(this).click(function(e){															 
					if(obj.timer>0){
						clearTimeout(obj.timer);
					}
					if(!obj.isInTransition){
						obj.isInTransition = true;
						obj.btnPages.eq(obj.current).removeClass(obj.config.classSelected);
						obj.scrollItems.eq(obj.current).fadeOut(100,function(){																																
							$(this).removeClass(obj.config.classCurrent);
						});																					
						obj.current = index;
						obj.btnPages.eq(obj.current).addClass(obj.config.classSelected);				
						obj.scrollItems.eq(obj.current).fadeIn(800,function(){
							$(this).addClass(config.classCurrent);
							obj.isInTransition = false;
						});	
					}
				});			
			});			
		}
		// handle button next click		
		btnNext.click(function(e){
			if(obj.timer>0){										 
				clearTimeout(obj.timer);
			}													 
			if(!obj.isInTransition){
				obj.isInTransition = true;
				obj.move("forward");
			}		
		});
		// handle button previous click		
		btnPrevious.click(function(e){
			if(obj.timer>0){										 
				clearTimeout(obj.timer);
			}															 
			if(!obj.isInTransition){
				obj.isInTransition = true;
				obj.move("backward");
			}		
		});
		// add the JS class to HTML to avoid flickering in IE6
		$("html").addClass("js");
		banner.addClass(config.classBanner);		
		if(withPage){
			obj.btnPages.eq(obj.current).addClass(config.classSelected);				
		}
		// show the first scroll item initially		
		obj.scrollItems.eq(obj.current).addClass(config.classCurrent);						
		// start looping
		HW.RotatingBanner.timer = setInterval(HW.RotatingBanner.loop,10000);							
	}	
}


HW.Accordian = {
	config:{
		idAccordian:"JSTaccordion"
	},
	init:function(){
		var config = this.config;
		var accordian = $("."+config.idAccordian);
		if(!accordian.length) return;
		$('div.JSTaccordion').accordion({ node:'div.JSTaccordionNode', heading:'div.JSTaccordionHeading', content:'div.JSTaccordionContent', open:'selected'/*, update:[ {selector:'a.update',text:['close','open']} ]*/ }).bind('accordion.open',function(e,node){ try{ console.log(node); }catch(error){}} );
	}	
}
HW.Tab = {
	config:{
		wrapperClass:"jsTab",
		triggerClass:"jsTabTrigger",
		targetClass:"jsTabTarget"
	},
	init:function(){
		var config = this.config;
		var wrapperDiv = $("."+config.wrapperClass);
		var targets = $("."+config.targetClass);
		var triggers = $("."+config.triggerClass);
		if(!wrapperDiv.length) return;
		var defaultIndex = 0;
		targets.each(function(index){ if (location.href.substring((location.href.lastIndexOf("#"))+1) == $(this).attr("id")){ defaultIndex = index;}  }); 
		
		targets.each(function(index){ if(index != defaultIndex) $(this).hide(); });
		triggers.eq(defaultIndex).closest("li").addClass("selected");
		
		triggers.each(function(){
								$(this).click(function(e){
													   		e.preventDefault();
															$(this).closest("li").siblings(".selected").removeClass("selected");
															targets.each( function(){	if ($(this).css("display") != "none") $(this).hide(); 		})
															$(this).closest("li").addClass("selected");
															$("#"+$(this).attr("href").substring(1)).show();
													   });
							 });
	}	
}
HW.HomeHeroArea = {
	config:{
		wrapperClass:"jsHomeHero",
		triggerClass:"jsHomeHeroTrigger",
		targetClass:"jsHomeHeroTarget",
		classTargetController:"jsTargetController",
		classTargetItemHidden:"jsTargetItemHidden"
	},
	hideAll:function(collection){		
		var config = this.config;
		collection.each(function(index){														 
			if(!$(this).hasClass(config.classTargetItemHidden)){
				$(this).addClass(config.classTargetItemHidden);
			}
		});
	},	
	init:function(){
		var myself = this;
		var config = this.config;
		var wrapperDiv = $("#"+config.wrapperClass);
		var targets = $("."+config.targetClass);
		var triggers = $("."+config.triggerClass);
		if(!wrapperDiv.length) return;
		var targetController = wrapperDiv.find("."+config.classTargetController);
		if(!targetController.length) return;		
		var maxHeight = 0;
		var maxTargetHeight = 0; 
		targets.each(function(index){
			var obj = $(this);
			var objHeight = obj.height();
			if(objHeight > maxTargetHeight ) maxTargetHeight = objHeight;
			if(index > 0) obj.addClass(config.classTargetItemHidden);
		});
		$("."+config.targetWrapper).height(maxTargetHeight);
		triggers.each(function(index){
			var obj = $(this);
			var objHeight = obj.height();
			if (objHeight > maxHeight) maxHeight = objHeight;
			obj.bind("mouseenter",function(e){
					myself.hideAll(targets);
					targets.eq(index+1).removeClass(config.classTargetItemHidden);
			});			
		});
		triggers.each(function(index){
			$(this).height(maxHeight);
		});		
		targets.find("a").bind("mouseleave",function(e){
			e.preventDefault();
			e.stopPropagation();		
		});		
		targetController.bind("mouseleave",function(e){
				myself.hideAll(targets);
				targets.eq(0).removeClass(config.classTargetItemHidden);
		});
	}	
}

HW.ContactUsForm = {
	config:{
		idContactUsForm:"jsContactUsForm"
	},
	init:function(){
		var config = this.config;
		var form = $("#"+config.idContactUsForm);
		var title = $("input[name='title']");
		var firstName = $('#firstname');
		var lastName = $('#lastname');
		var daytimephone = $('#daytimephone');
		var email = $('#email');
		var fax = $('#fax');
		var message = $('#message');
		if(!form.length) return;
		
		form.submit( function(e){
							  		e.preventDefault();
									var pass = false;
									if ( (firstName.val() == "") && (lastName.val() == "") ) {
										var offset = firstName.offset();
										$("body").append($('#errorName').css({display: 'block', position: 'absolute', left: offset.left+85+'px',  top: offset.top-24+'px' }));
										var hideError = function(){
												if ( (firstName.val() != "") || (lastName.val() != "") ) {
													$('#errorName').css({display: 'none'});
												}
											}
										firstName.keyup( hideError );
										lastName.keyup ( hideError );
										
									}else 
										pass = true;
									if ( (daytimephone.val() == "") && (fax.val() == "") && (email.val() == "") ) {
										var offset = daytimephone.offset();
										$("body").append($('#errorContactInfo').css({display: 'block', position: 'absolute', left: offset.left+85+'px',  top: offset.top-24+'px' }));
										var hideError = function(){
												if ( (daytimephone.val() != "") || (fax.val() != "") || (email.val() != "") ) {
													$('#errorContactInfo').css({display: 'none'});
												}
											}
										daytimephone.keyup( hideError );
										fax.keyup ( hideError );
										email.keyup ( hideError );
									}else 
										pass = true;
									if ( (message.val() == "") ) {
										var offset = message.offset();
										$("body").append($('#errorMessage').css({display: 'block', position: 'absolute', left: offset.left+85+'px',  top: offset.top-24+'px' }));
										var hideError = function(){
												if (message.val() != "") {
													$('#errorMessage').css({display: 'none'});
												}
											}
										message.keyup( hideError );
									}else 
										pass = true;
									
									if (pass){
										this.submit();
									}
								});
		
		
	}	
}

HW.OverlayGallery = {
	config:{
		htmlOverlayGalleryControl:'<div class="cs300c"><a href="#" id="jsOverlayGalleryPrevious">&laquo;</a><a href="#" id="jsOverlayGalleryNext">&raquo;</a></div>',
		htmlOverlayGalleryTracker:'<div id="jsOverlayGalleryTracker"></div>',
		idOverlayGallery:"jsOverlayGallery",
		idOverlayGalleryTracker:"jsOverlayGalleryTracker",
		idOverlayGalleryPrevious:"jsOverlayGalleryPrevious",
		idOverlayGalleryNext:"jsOverlayGalleryNext",		
		classOverlayGallery:"jsOverlayGallery",
		classOverlayGalleryItemContainer:"jsOverlayGalleryItemContainer",		
		classOverlayGalleryItem:"jsOverlayGalleryItem",
		classOverlayGalleryItemCurrent:"jsOverlayGalleryItemCurrent"
	},
	init:function(){
		var obj = this;
		var config = obj.config;
		var gallery = $("#"+config.idOverlayGallery);
		if(!gallery.length) return;

		var items = gallery.find("."+config.classOverlayGalleryItem);
		var numItem = items.length;
		if(!numItem) return;

		gallery.addClass(config.classOverlayGallery);
		gallery.data("current",0);
		items.eq(0).addClass(config.classOverlayGalleryItemCurrent);
		
		gallery.append(config.htmlOverlayGalleryControl);						
		if(!(gallery.find("#"+config.idOverlayGalleryTracker).length)){
			gallery.find("."+config.classOverlayGalleryItemContainer).before(config.htmlOverlayGalleryTracker);
		}
		
		var previous = gallery.find("#"+config.idOverlayGalleryPrevious); 
		var next = gallery.find("#"+config.idOverlayGalleryNext); 
		var tracker = gallery.find("#"+config.idOverlayGalleryTracker);		
		tracker.html((gallery.data("current")+1)+"/"+numItem);
		
		previous.click(function(e){
			e.preventDefault();
			var current = gallery.data("current");
			if(current==0){
				items.eq(0).removeClass(config.classOverlayGalleryItemCurrent);
				items.eq(numItem-1).addClass(config.classOverlayGalleryItemCurrent);
				gallery.data("current",numItem-1);
			}else{
				items.eq(current).removeClass(config.classOverlayGalleryItemCurrent);
				items.eq(current-1).addClass(config.classOverlayGalleryItemCurrent);
				gallery.data("current",current-1);				
			}	
			tracker.html((gallery.data("current")+1)+"/"+numItem);		
		});

		next.click(function(e){
			e.preventDefault();
			var current = gallery.data("current");
			if(current==numItem-1){
				items.eq(numItem-1).removeClass(config.classOverlayGalleryItemCurrent);
				items.eq(0).addClass(config.classOverlayGalleryItemCurrent);
				gallery.data("current",0);
			}else{
				items.eq(current).removeClass(config.classOverlayGalleryItemCurrent);
				items.eq(current+1).addClass(config.classOverlayGalleryItemCurrent);
				gallery.data("current",current+1);				
			}		
			tracker.html((gallery.data("current")+1)+"/"+numItem);
		});
		
	}
}

HW.OverlayGalleryTrigger = {
	config:{
		idTrigger:"jsOverlayGalleryTrigger",
		pathImage:""
	},
	init:function(){
		var config = this.config;
		var trigger = $("#"+config.idTrigger);
		if(!trigger.length) return;
		// get the relative path for the images of overlay gallery
		var imageHref = trigger.attr("href");		
		HW.OverlayGalleryTrigger.pathImage = imageHref.substring(0,imageHref.lastIndexOf("/")+1);
		trigger.click(function(e){
			e.preventDefault();
			$.ajaxportal(trigger.attr("href"),
				function(){ 
					HW.OverlayGallery.init();  
					var items = $("."+HW.OverlayGallery.config.classOverlayGalleryItem);
					items.each(function(){
						var img = $(this).find("img");
						var src = img.attr("src");
						// build the image path according to which page the overlay gallery is called
						var target_src = HW.OverlayGalleryTrigger.pathImage + src.substring(src.indexOf("_images/"));
						img.attr("src",target_src).bind("load",function(){
							var img_height = $(this).height();
							var img_width = $(this).width();
							// update the maximum height of the container as the image is loaded
							var img_gallery = $(this).parents("#jsOverlayGallery");
							if(img_height > img_gallery.height()){
								img_gallery.height(img_height);
							}
							if(img_width > img_gallery.width()){
								img_gallery.width(img_width);
							}														
						});
						// update the overlay wrapper
						var overlayWrapper = $(".overlayWrapper");
						var overlayGallery = $("#jsOverlayGallery");
						var target_width = overlayGallery.outerWidth() + 64;
						overlayWrapper.width(target_width);										
						
						// center the overlay wrapper
						var winw = $(window).width();
						var w = overlayWrapper.width();
						overlayWrapper.css({left:Math.max((winw-w)/2,0) + 'px'});
					});
				},
				{ contentSelector:'#jsOverlayGallery', cache:true });					
		});
	}	
}
HW.AlignMoreInfo = {
	init:function(){
		$("div.row:not(:has(div.row)):has(div.ts01)").each( function(){ 
				var maxOffsetTop = 0;
				$(this).find("div.ts01").each( function(){ if ($(this).position().top > maxOffsetTop) maxOffsetTop = $(this).position().top;});
				$(this).find("div.ts01").each( function(){ 
					if ($(this).position().top < maxOffsetTop){
						$(this).css("padding-top", parseInt($(this).css("padding-top").replace("px", "")) + maxOffsetTop - $(this).position().top);
					}
				});
		  });
	}
}

$(document).ready(function(){
	// scripts for all pages
	HW.AlignMoreInfo.init();
	HW.HeaderLogin.init();	
	HW.HeaderLoginLinks.init();
	HW.MainNavigation.init();
	HW.SideNavigation.init();
	HW.FooterLinks.init();	
	HW.RotatingBanner.init();	
	HW.Accordian.init();
	HW.Tab.init();
	HW.HomeHeroArea.init();
	HW.ContactUsForm.init();
	// scripts for specific pages
	HW.OverlayGallery.init();
	HW.OverlayGalleryTrigger.init();
});
