// MooTools plugins for ICON


/****************************************************
* Global Vars										*
*													*
*****************************************************/

var browser, directory, domIsReady, fixTimer, sifrReplaced = 0;
var cLightGreen = '#2e9894', cDarkGreen = '#006d63', cGrey = '#626469';
var fnQue = [];
var sIFR = false;
var selectClick = false;

var root = '/icon-files/cms-templates/';

var pImages = ['images/generic/arrow2.gif', 'images/generic/arrowdown2.gif', 'images/generic/btn_search2.gif', 'images/generic/circle2.gif', 'images/generic/nav_arrow1a.gif', 'images/generic/nav_arrow2.gif', 'images/investors/arrow2.gif', 'images/news-events/arrow_left2.gif', 'images/news-events/arrow_right2.gif', 'images/generic/selects/arrow1.gif', 'images/generic/selects/arrow2.gif', 'images/generic/selects/arrow_grey.gif', 'images/contact/back2.gif', 'images/generic/checkboxes/off_dark.gif', 'images/generic/checkboxes/off_light.gif', 'images/generic/checkboxes/on_dark.gif', 'images/generic/checkboxes/on_light.gif', 'images/generic/submit2.gif'];





/****************************************************
* IE DOMReady										*
* Copyright: Arnout Kazemier ( blog.3rd-Eden.com )	*
* Version: 1.0.0.0									*
* License: GPL/CC									*
*													*
*****************************************************/

function domReady(fn){
    if(domIsReady){ return fn(); }
	if(!fnQue.length){
        function ready(){
            if(domIsReady){ return; }
            domIsReady = true;
			var i = fnQue.length;
			while(i--){ fnQue[i](); }
			fnQue = null;
        };
        (function(){
            if(document.body && document.body.lastChild){
                ready();
            } else { 
                return setTimeout(arguments.callee,0);
            }
        })();
        window.onload = ready;
    };
    fnQue.unshift(fn);
};






/****************************************************
* Browser Detection									*
*													*
*****************************************************/

function Detect() {
	
	agent 	= navigator.userAgent.toLowerCase();
						
	// detect OS
	this.isMac		= (agent.indexOf('mac') != -1);
	this.isWin		= (agent.indexOf('win') != -1);
	this.isWin2k	= (this.isWin && (agent.indexOf('nt 5') != -1));
	this.isWinSP2	= (this.isWin && (agent.indexOf('xp') != -1 || agent.indexOf('sv1') != -1));
	this.isOther	= (agent.indexOf('unix') != -1 || agent.indexOf('sunos') != -1 || agent.indexOf('bsd') != -1 || agent.indexOf('x11') != -1 || agent.indexOf('linux') != -1);
	
	// detect browser
	this.isSafari	= (agent.indexOf('safari') != -1);
	this.isSafari2 = (this.isSafari && (parseFloat(agent.substring(agent.indexOf("applewebkit/")+"applewebkit/".length,agent.length).substring(0,agent.substring(agent.indexOf("applewebkit/")+"applewebkit/".length,agent.length).indexOf(' '))) >=  300));
	this.isOpera	= (agent.indexOf('opera') != -1);
	this.isNN		= (agent.indexOf('netscape') != -1);
	this.isFF		= (agent.indexOf('firefox') != -1);	
	this.isFF2		= (agent.indexOf('firefox/2') != -1);
	this.isFF3		= (agent.indexOf('firefox/3') != -1);	
	this.isIE		= (agent.indexOf('msie') != -1);
	this.isIE8		= (agent.indexOf('msie 8.') != -1);
	this.isIE6		= (agent.indexOf('msie 6.') != -1);
	this.isIE5		= (agent.indexOf('msie 5.') != -1);
	this.isIphone	= (agent.indexOf('iphone') != -1);
}

browser = new Detect();




/****************************************************
* Return Objects By ClassName						*
*													*
*****************************************************/

function getElementsByClassName(strClassName, obj) {
    var ar = arguments[2] || [];
    var re = new RegExp("\\b" + strClassName + "\\b", "g");

    if (re.test(obj.className)) {
        ar.push(obj);
    }
    for (var i=0; i<obj.childNodes.length; i++){
        getElementsByClassName(strClassName, obj.childNodes[i], ar);
	}
    
    return ar;
}





/****************************************************
* Write Out JS Browser Stylesheet					*
*													*
*****************************************************/

function writeJsStyles(w){
	var sSheets = document.getElementsByTagName("link");
	var dir = "";

	if(sSheets[0]){
		if(sSheets[0].href.indexOf("css") != -1){
			dir = sSheets[0].href.substring(0,sSheets[0].href.indexOf("css"));
			if(dir == ''){ dir = './'; }
			directory = dir;
		}
	}
	
	if(w==1){ document.write('<link href="' + dir + 'css/js-dependant.css" rel="stylesheet" type="text/css" media="screen" />'); }
	if(browser.isIE){
		document.write('<link href="' + dir + 'css/old-ie.css" rel="stylesheet" type="text/css" media="screen" />');
		document.write('<script src="' + dir + 'js/iepngfix_tilebg.js" type="text/javascript"></script>');
	}
		
	if(browser.isSafari){
		document.write('<link href="' + dir + 'css/safari.css" rel="stylesheet" type="text/css" media="screen" />');
	}
	
	if(browser.isIphone){
		document.write('<link href="' + dir + 'css/iphone.css" rel="stylesheet" type="text/css" media="screen" />');
	}
	
	if(browser.isOpera){
		document.write('<link href="' + dir + 'css/opera.css" rel="stylesheet" type="text/css" media="screen" />');
	}
	
	if(browser.isFF && !browser.isFF3){
		document.write('<link href="' + dir + 'css/old-ff.css" rel="stylesheet" type="text/css" media="screen" />');
	}
}




/****************************************************
* As sIFRs cover links in IE create					*
* new absolutely positioned link over sIFR			*
*													*
*****************************************************/

function initSifrNavFix(){
	var as, as2, new_a, tabs, new_tab, cursor = 'auto', target='_top';;
	if($('primary-nav')){ as = $('primary-nav').getElements('a'); }
	if($(document.body)){
		if(as.length > 0){
			as = as.concat($(document.body).getElements('.title a'));
		} else {
			as = $(document.body).getElements('.title a');
		}
		
		tabs = $(document.body).getElements('.tabs-nav li');
		if(tabs.length > 1){ cursor = 'pointer'; }
	}
	
	if(document.URL.indexOf('/href-browser/') >= 0){
		target = '_self';
	}
	
	$each(as, function(a, index){
		new_a = new Element('a', {
			'href': a.href,
			'class': 'sifrLink',
			'target': target,
			'html': '&nbsp;',
			'styles': { 'height':a.getParent().getSize().y },
			'events': {
				'mouseenter': function(e){ a.addClass('hover'); redrawTabSifr(a,e); },
				'mouseleave': function(e){ a.removeClass('hover'); redrawTabSifr(a,e); },
				'focus': function(e){ a.addClass('hover'); redrawTabSifr(a,e); },
				'blur': function(e){ a.removeClass('hover'); redrawTabSifr(a,e); }
			}
		}).inject(a.getParent());
	});
	
	$each(tabs, function(tab, index){	
		if(tabs.length > 1 && tab.getElements('div').length > 0){
			new_tab = new Element('div', {
				'class': 'sifrTab',
				'html': '&nbsp;',
				'styles': { 'cursor':cursor, 'height':'auto !important', 'height':tab.getSize().y, 'min-height':tab.getSize().y },
				'events': {
					'mouseenter': function(e){ tab.addClass('hover'); redrawTabSifr(tab,e,true); },
					'mouseleave': function(e){ tab.removeClass('hover'); redrawTabSifr(tab,e); },
					'click': function(e){ 
						as2 = tab.getElements('a');
						if(as2.length > 0){
							if(window.top){ window.top.location.href = as2[0].href; }
							else { window.location.href = as2[0].href; }
						} else { changeTabs(e,tab,index); }
					}
				}
			}).inject(tab);
		}
	});
	
	if($(document.body)){
		as = $(document.body).getElements('a');
		$each(as, function(a, index){
			a.hideFocus = true;
		});
	}
}



function redrawTabSifr(el,evt,pointer){
	var color, objs = el.getElements('object');
        var cursor = 'auto';

        if(pointer){ cursor = 'pointer'; }
	
	if(!el.getParent().getParent()){ return; }	
	if(!el.getParent().hasClass('title') && !el.getParent().getParent().hasClass('tabs-nav')){ return; }
	
	if(evt.type.toLowerCase().indexOf('over') >= 0 || evt.type.toLowerCase().indexOf('focus') >= 0){
		color = cDarkGreen;
	} else {
		if(el.nodeName.toLowerCase() == 'a'){ color = cLightGreen; }
		else { 
			if(el.hasClass('nav-on')){ color = cDarkGreen; }
			else { color = cGrey; }
		}
	}
	
	if(sIFR){
		if(objs.length > 0 && sIFR.replacements){		
			for(var k=0, l=sIFR.replacements.length; k<l; k++){
				if(sIFR.replacements[k].id == objs[0].id){
					sIFR.replacements[k].changeCSS({
						'.sIFR-root': {'color':color, 'cursor': cursor}
					});
				}
			}
		}
	}
}




/****************************************************
* Change Tabs										*
*													*
*****************************************************/

function changeTabs(e,el,ind){
	var tabs, tabLayers;
	
	if(el.hasClass('nav-on')){ return; }
	
	tabs = el.getParent().getElements('li');
	
	if(el.getParent().getParent().getParent()){
		if(el.getParent().getParent().getParent().hasClass('tabs')){
			tabLayers = getElementsByClassName('tab-', el.getParent().getParent().getParent());
			if(tabs.length != tabLayers.length){ return; }
			else {
				if(tabs[ind]){
					for(var i=0; i<tabs.length; i++){
						tabs[i].removeClass('nav-on');
						tabLayers[i].className = tabLayers[i].className.replace(/tab-shown/,'tab-hidden');
						redrawTabSifr(tabs[i],e);
					}
					
					tabs[ind].addClass('nav-on');
					tabLayers[ind].className = tabLayers[ind].className.replace(/tab-hidden/,'tab-shown');
					redrawTabSifr(tabs[ind],e);
				}
			}
		}
	}
}





/****************************************************
* Fix Height of Headings Replaced by sIFR			*
*													*
*****************************************************/

function fixSifrHeadings(){
	var headings;
	if($(document.body) && !browser.isIE6 && !browser.isIE5){
		headings = $(document.body).getElements('h1, h2, h3, #billboard-text .inner div, .related .title');		
		$each(headings, function(heading, index){
			heading.setStyles({'height': 'auto !important', 'height': heading.getSize().y - parseInt(heading.getStyle('padding-top'),10) - parseInt(heading.getStyle('padding-bottom'),10), 'min-height': heading.getSize().y - parseInt(heading.getStyle('padding-top'),10) - parseInt(heading.getStyle('padding-bottom'),10)});
		});
	}
}



/****************************************************
* Fix Position of Footer in IE6 after sIFR			*
* replacements										*
*													*
*****************************************************/

function getSizeY(){
	var h = 0;
	if(!window.innerWidth){
		if(!(document.documentElement.clientWidth === 0)){
			h = document.documentElement.clientHeight;
		} else {
			h = document.body.clientHeight;
		}
	} else {
		h = window.innerHeight;
	}
	
	return h;
}


function fixIE6Footer(){
	if(browser.isIE6 || browser.isIE5 || browser.isOpera){		
		if(!sIFR){
			if(sIFR.replacements){
				if(sifrReplaced == sIFR.replacements.length && sIFR.replacements.length > 0){
					if($('footer-inner')){
						$('footer-inner').setStyle('bottom', 0);
					}
				} else {
					fixTimer = fixIE6Footer.delay(100);
				}
			}
		} else {
			if($('wrapper') && $('footer-inner') && $('torso-content')){
				if($('wrapper').getScrollSize().y > getSizeY()){
					$('torso-content').setStyle('padding-bottom', '40px');
					$('footer-inner').setStyle('position', 'relative');
				}
			}
			if($('footer-inner')){
				$('footer-inner').setStyle('bottom', 0);
			}						
		}				
	}
}




/****************************************************
* Initialise Inputs - default values				*
*													*
*****************************************************/

function initInputs(){
	var inputs;
	if($(document.body)){
		inputs = $(document.body).getElements('input');
		$each(inputs, function(input, index){
			switch(input.id){
				case 'site-query':
					input.addEvents({
						'focus': function(e){
							if(input.value == 'Search for'){ input.value = ''; }
						},
						'blur': function(e){
							if(input.value == ''){ input.value = 'Search for'; }
						}
					});					
					break;
				
				case 'site-search-go':
					input.addEvents({
						'mouseenter': function(e){ input.src = input.src.replace(/1.gif/,'2.gif'); },
						'mouseleave': function(e){ input.src = input.src.replace(/2.gif/,'1.gif'); }
					});
					break;
					
				case 'go-button':
					input.addEvents({
						'mouseenter': function(e){ input.src = input.src.replace(/1.gif/,'2.gif'); },
						'mouseleave': function(e){ input.src = input.src.replace(/2.gif/,'1.gif'); }
					});
					break;
			}
		});

	}
}




/****************************************************
* Initialise Features Slider - content over image	*
*													*
*****************************************************/

var FeaturesSlider = {
	create: function (content,dir) {
		if(dir == 'vertical'){
			var content = content;
			var parent = content.getParent();
			var image = parent.getElements('.feature-img');
			var new_top = 0;
			
			if(image.length > 0){}
			else { return; }
			
			var elements = [image[0], content];
			var imageSize =  image[0].getSize().y;
			
			var fx = new Fx.Elements(elements, {duration:600, wait:false, transition:'cubic:out', onComplete:function(){ } });		
			var ob = {};
			var cHeight = content.getScrollSize().y, oHeight = content.getSize().y - 16;
			var dif = cHeight - oHeight;
			
			if(browser.isIE5 || browser.isIE6){
				dif = dif - 8;
			}
			
			parent.setStyles({
				'height': parent.getSize().y,
				'max-height': parent.getSize().y,
				'overflow': 'hidden'
			});
				
			parent.addEvent('mouseenter', function(){
				ob[0] = {'height': imageSize - dif };
				ob[1] = {'height': cHeight };
				if(dif > 20){ fx.start(ob); }
			});
			
			parent.addEvent('mouseleave', function(){
				ob[0] = {'height': imageSize };
				ob[1] = {'height': 26 };
				if(dif > 20){ fx.start(ob); }
			});
		
		} else {
			var ports = content.getElements('li');			
			var mBut, entry, children, parent, ul;
			var offsetH = 31;
			
			if(browser.isIE5 || browser.isIE6){
				offsetH = 50;
			}
			
			if(ports.length > 1){
				ul = ports[0].getParent();
				$each(ports, function(port, index){
					ul.setAttribute('busy',0);
					mBut = new Element('div', {
						'class': 'more-but',
						'events': {
							'click': function(){
								if(ul.getAttribute('busy') == 0){
									ul.setAttribute('busy',1);
									FeaturesSlider.slideHorz(ul, ports, index);
								}
							},
							'mouseenter': function(){ this.className = 'more-but-over'; },
							'mouseleave': function(){ this.className = 'more-but'; }
						}
					}).inject(port);
					
					children = port.getChildren();
					entry = new Element('div', { 'class': 'entry' }).inject(port);
					$each(children, function(child, cIndex){
						entry.adopt(child);
					});					
				});
				
				if(content.getParent().getParent()){
					parent = content.getParent().getParent();
					if(parent.hasClass('ticker')){
						parent.setStyles({
							'height': parent.getSize().y - offsetH,
							'min-height': parent.getSize().y - offsetH,
							'overflow': 'hidden'
						});
					}
					
					if(ul){
						ul.setStyles({
							'height': ul.getSize().y,
							'min-height': ul.getSize().y
						});
					}
				}
				
				$each(ports, function(port, index){
					port.setStyles({
						'width': 250,
						'height': port.getSize().y,
						'position': 'absolute',
						'left': index * 250,
						'top': 0
					});
				});
			}
		}
	},
	
	slideHorz: function(ul, ports, ind){
		var elements;
		if(ind == ports.length - 1){
			elements = [ports[ind], ports[0]];
		} else {
			elements = [ports[ind], ports[ind+1]];
		}
			
		var fx = new Fx.Elements(elements, {duration:600, wait:false, transition:'cubic:out', onComplete:function(){ ul.setAttribute('busy',0); } });
		var ob = {};
		
		ob[0] = {'left': [0,-250] };
		ob[1] = {'left': [250,0] };

		fx.start(ob);
	}
};


function initFeaturesSlider(){
	var vSlides, tickers;
	if($(document.body)){
		vSlides = $(document.body).getElements('.feature .vSlide');
		$each(vSlides, function(vSlide, index){
			FeaturesSlider.create(vSlide,'vertical');
		});
		
		tickers = $(document.body).getElements('.ticker .inner');
		$each(tickers, function(ticker, index){
			FeaturesSlider.create(ticker,'horizontal');
		});
	}
}




/****************************************************
* Initialise ImageBank								*
*													*
*****************************************************/

var ImageBank = {
	category: 0, left: 0, speed: 300, onWidth: 0, step: 10,
	categories: [], navEls: [], entries: [], catUls: [],
	fx: null, timer: null, direction: null, leftBut: null, rightBut:null,
	ob: {},	
	
	create: function(bank){
		var leftButs = bank.getElements('.move-left');
		var rightButs = bank.getElements('.move-right');		
		ImageBank.navEls = bank.getElements('.image-bank-nav li');
		ImageBank.categories = bank.getElements('.category');				
		
		if(leftButs.length > 0 && rightButs.length > 0){
			ImageBank.leftBut = leftButs[0];
			ImageBank.rightBut = rightButs[0];
		}
		
		if(ImageBank.navEls.length != ImageBank.categories.length){ return; }
		else {
			$each(ImageBank.navEls, function(li, index){
				li.addEvents({
					'mouseenter': function(){ li.addClass('over'); },
					'mouseleave': function(){ li.removeClass('over'); },
					'click': function(){ ImageBank.changeCategory(index); }
				});
			});
		}
		
		if(ImageBank.categories.length > 0){
			$each(ImageBank.categories, function(category, index){
				ImageBank.entries.push(category.getElements('li'));
				ImageBank.catUls.push(category.getElements('ul'));
			});
			
			ImageBank.fx = new Fx.Elements(ImageBank.catUls, {duration:ImageBank.speed, wait:false });
			
			if(ImageBank.entries[0].length > 4){
				if(ImageBank.leftBut && ImageBank.rightBut){
					ImageBank.leftBut.setStyle('visibility','visible');
					ImageBank.leftBut.addEvents({
						'mouseenter': function(){ ImageBank.leftBut.className = 'move-left-over'; },
						'mouseleave': function(){ ImageBank.leftBut.className = 'move-left'; },
						'mousedown': function(){
							return;
							$each(ImageBank.entries, function(entry, index){
								$each(entry, function(ent, ind){
									ImageBank.onWidth += ent.offsetWidth;
								});
							});
							
							ImageBank.slideCategory('left');
							ImageBank.timer = ImageBank.slideCategory.periodical(ImageBank.speed);
						},
						'mouseup': function(){ return; ImageBank.stopSlide(); ImageBank.onWidth = 0; },
						'click': function(){
							ImageBank.onWidth = 0;
							$each(ImageBank.entries, function(entry, index){
								$each(entry, function(ent, ind){
									ImageBank.onWidth += ent.offsetWidth;
								});
							});
							
							ImageBank.slideCategory('left', true);
						}
					});
					
					ImageBank.rightBut.setStyle('visibility','visible');
					ImageBank.rightBut.addEvents({
						'mouseenter': function(){ ImageBank.rightBut.className = 'move-right-over'; },
						'mouseleave': function(){ ImageBank.rightBut.className = 'move-right'; },
						'mousedown': function(){
							return;
							$each(ImageBank.entries, function(entry, index){
								$each(entry, function(ent, ind){
									ImageBank.onWidth += ent.offsetWidth;
								});
							});
							
							ImageBank.slideCategory('right');
							ImageBank.timer = ImageBank.slideCategory.periodical(ImageBank.speed);
						},
						'mouseup': function(){ return; ImageBank.stopSlide(); ImageBank.onWidth = 0; },
						'click': function(){
							ImageBank.onWidth = 0;
							$each(ImageBank.entries, function(entry, index){
								$each(entry, function(ent, ind){
									ImageBank.onWidth += ent.offsetWidth;
								});
							});
							
							ImageBank.slideCategory('right', true);
						}
					});
				}
			}
		}
	},
	
	changeCategory: function(ind){
		$each(ImageBank.categories, function(category, index){
			category.setStyle('display','none');
		});
		
		$each(ImageBank.navEls, function(li, index){
			li.removeClass('over');
			li.removeClass('nav-on');
		});
		
		ImageBank.category = ind;
		ImageBank.categories[ind].setStyle('display','block');
		ImageBank.navEls[ind].addClass('nav-on');
		
		if(ImageBank.leftBut && ImageBank.rightBut){
			if(ImageBank.entries[ind].length > 4){			
				ImageBank.leftBut.setStyle('visibility','visible');					
				ImageBank.rightBut.setStyle('visibility','visible');
			} else {
				ImageBank.leftBut.setStyle('visibility','hidden');					
				ImageBank.rightBut.setStyle('visibility','hidden');
			}
		}
	},
	
	slideCategory: function(dir,clicked){
		if(dir){
			ImageBank.direction = dir;
			if(isNaN(parseInt(ImageBank.catUls[ImageBank.category].getStyle('left'),10))){
				ImageBank.left = 0;
			} else {
				ImageBank.left = parseInt(ImageBank.catUls[ImageBank.category].getStyle('left'),10);
			}
		}
		
		if(clicked){ ImageBank.speed = 300; ImageBank.step = 159; }
		else { ImageBank.speed = 30;  ImageBank.step = 10; }
		
		if(ImageBank.fx){
			if(ImageBank.direction == 'right'){
				if(ImageBank.left == 636 - ImageBank.onWidth){
					$clear(ImageBank.timer);
					return;
				} else if(ImageBank.left < 636 - ImageBank.onWidth){
					ImageBank.left = 636 - ImageBank.onWidth;
					ImageBank.ob[ImageBank.category] = {'left': [ImageBank.left,ImageBank.left] };
					$clear(ImageBank.timer);
				} else {
					ImageBank.ob[ImageBank.category] = {'left': [ImageBank.left,ImageBank.left-ImageBank.step] };
					ImageBank.left = ImageBank.left - ImageBank.step;
				}
			} else {
				if(ImageBank.left === 0){
					$clear(ImageBank.timer);
					return;
				} else if(ImageBank.left > 0){
					ImageBank.left = 0;
					ImageBank.ob[ImageBank.category] = {'left': [ImageBank.left,ImageBank.left] };
					$clear(ImageBank.timer);
				} else {
					ImageBank.ob[ImageBank.category] = {'left': [ImageBank.left,ImageBank.left+ImageBank.step] };
					ImageBank.left = ImageBank.left + ImageBank.step;
				}
			}
			
			ImageBank.fx.start(ImageBank.ob);			
		}
	},
	
	stopSlide: function(){
		$clear(ImageBank.timer);
	}
};


function initImageBank(){
	var banks;
	if($(document.body)){
		banks = $(document.body).getElements('.image-bank');
		$each(banks, function(bank, index){
			ImageBank.create(bank);
		});
	}
}





/****************************************************
* If more than nine features arrange in columns of	*
* three												*
*													*
*****************************************************/

function inspectFeatures(){
	if($('torso-content')){
		var features = $('torso-content').getElements('.feature-small');
		if(features.length > 9){
			var parent = features[0].getParent();
			var col01 = Math.ceil(features.length / 3);
			var element = [];
			
			for(var i=0; i<3; i++){
				element[i] = new Element('div', {'class': 'col'}).inject(parent);
			}
			
			parent.setStyles({
				'height': 'auto !important',
				'height': parent.getSize().y - 20,
				'min-height': parent.getSize().y - 20
			});
			
			for(i=0; i<col01; i++){
				element[0].adopt(features[i]);
			}
			for(i=col01; i<2*col01; i++){
				element[1].adopt(features[i]);
			}
			for(i=2*col01; i<features.length; i++){
				element[2].adopt(features[i]);
			}
			
			$each(features, function(feature, index){
				feature.setStyle('visibility','visible');
			});			
		}
	}
}





/****************************************************
* Accordion items									*
*													*
*****************************************************/

function initAccordion() {
	if($('accordion')){
		var myAccordion = new Accordion($('accordion'), 'div.toggler', 'div.element', {
			opacity: false,
			display: -1,
			alwaysHide: true,
			
			onActive: function(toggler, element){
				toggler.addClass('togOn');
				toggler.removeClass('togOff');
				toggler.removeClass('togOnOver');
				toggler.removeClass('togOffOver');

			},
			onBackground: function(toggler, element){
				toggler.addClass('togOff');
				toggler.removeClass('togOn');
				toggler.removeClass('togOnOver');
				toggler.removeClass('togOffOver');

			},
			onComplete: function(){
			}
		});

		var togglers = $('accordion').getElements('div.toggler');
		if(togglers.length > 0){
			$each(togglers, function(togg, index){
				togg.addEvents({
					'mouseenter': function(){
						if(togg.hasClass('togOn')){ togg.addClass('togOnOver'); }
						else { togg.addClass('togOffOver'); }
					},
					'mouseleave': function(){
						if(togg.hasClass('togOn')){ togg.removeClass('togOnOver'); }
						else { togg.removeClass('togOffOver'); }
					}
				});
			});
		}
	}
}







/****************************************************
* Lab Certs Component								*
*													*
*****************************************************/

function initLabCerts(){
	if($('torso-content')){
		var wrapper = $('torso-content').getElements('.lab-certs-wrapper');
		var list = $('torso-content').getElements('.lab-certs-list li');
		var contents = $('torso-content').getElements('.lab-certs-content');
		
		if(wrapper.length > 0){
			if(list.length = contents.length){
				$each(list, function(li, index){
					li.addEvents({
						'mouseenter': function(){ li.addClass('over'); },
						'mouseleave': function(){ li.removeClass('over'); },
						'click': function(){
							$each(list, function(li2, ind){
								li2.removeClass('over');
								li2.removeClass('nav-on');
								contents[ind].removeClass('display');
							});
							
							li.addClass('nav-on');
							contents[index].addClass('display');
						}
					});
				});
			}
		}
	}
}




/****************************************************
* Initialise Laboratories Popup Menu on Homepage	*
*													*
*****************************************************/

function initHPLabMenu(){
	if($('hp-labs-menu') && $('hp-labs-link')){
		var effect = new Fx.Morph($('hp-labs-menu'), {duration:500});
		var as, lis = $('hp-labs-link').getParent().getElements('li');
		$('hp-labs-menu').setStyles({'opacity':0, 'display':'inline', 'top': -32});
		
		$each(lis, function(li, index){
			as = li.getElements('a');
			$each(as, function(a, ind){
				if(a.getParent() != $('hp-labs-link') && a.getParent().nodeName.toLowerCase() == 'li'){
					a.addEvent('mouseleave', function(){
						effect.cancel();					
						effect.start({
							'top': -32,
							'opacity': 0
						});
					});
				}
			});
		});

		$('hp-labs-link').addEvents({
			'mouseenter': function(){ 	
				effect.cancel();
				effect.start({
					'top': -49,
					'opacity': 1
				});				
				$('hp-labs-link').addClass('nav-over');
			},
			
			'mouseleave': function(){
				effect.cancel();					
				effect.start({
					'top': -32,
					'opacity': 0
				});
				$('hp-labs-link').removeClass('nav-over');
			}
		});
		
		$('hp-labs-menu').addEvent('mouseleave', function(){
			if($('hp-labs-menu').getStyle('opacity') === 0){
				effect.cancel();					
				effect.start({
					'top': -32,
					'opacity': 0
				});
			}
		});
	}
}




/****************************************************
* If there is an image in the primary link in		*
* related info there will be no link - this fixes	*
*													*
*****************************************************/

function fixRelInfoMainLink(){
	if($('torso-content')){
		var img_divs = $('torso-content').getElements('.rel-info-main div.image');
		if(img_divs.length > 0){
			var as = img_divs[0].getParent().getElements('a');
			var imgs = img_divs[0].getElements('img');
			
			if(as.length > 0 && imgs.length > 0){
				var new_a = new Element('a', {
					'href': as[0].href,
					'events': {
						'mouseenter': function(){ as[0].addClass('over'); },
						'mouseleave': function(){ as[0].removeClass('over'); }
					}
				}).inject(img_divs[0]);
				
				new_a.adopt(imgs[0]);
			}
		}
	}
}





/****************************************************
* Initialise Lightbox Elements						*
*													*
*****************************************************/

function initLightBoxElements(){
	var initMultiBox = new multiBox({
		mbClass: '.mb',
		container: $(document.body),
		useOverlay: true,
		maxSize: {w:1024, h:768},
		addDownload: false,
		pathToDownloadScript: '/',
		addRollover: true,
		addOverlayIcon: false,
		addChain: false,
		recalcTop: false,
		addTips: false
	});
}



/****************************************************
* Split URL in various parts						*
*													*
*****************************************************/

function splitURL(url){
    var elements = ["source","protocol","authority","domain","port","path","directoryPath","fileName","query","anchor"];
    var parts = new RegExp("^(?:([^:/?#.]+):)?(?://)?(([^:/?#]*)(?::(\\d*))?)?((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[\\?#]|$)))*/?)?([^?#/]*))?(?:\\?([^#]*))?(?:#(.*))?").exec(url);
    var sURL = {};
    
    for(var i = 0; i < 10; i++){
        sURL[elements[i]] = (parts[i] ? parts[i] : "");
    }
	
    if(sURL.directoryPath.length > 0){
        sURL.directoryPath = sURL.directoryPath.replace(/\/?$/, "/");
    }
    
    return sURL;
}






/****************************************************
* Init Contact Map Events							*
*													*
*****************************************************/

function initContactMap(){
	if($('contact-imaps') && $('contact-map-img') && $('contact-map-form') && $('contact-regions-select')){
		var areas = $('contact-imaps').getElements('area');
		var loader = new Asset.images(['/icon-files/cms-templates/images/contact/contact_map_americas.gif', '/icon-files/cms-templates/images/contact/contact_map_asia.gif', '/icon-files/cms-templates/images/contact/contact_map_ema.gif'], {
			onProgress: function(counter, index){
			},
			onComplete: function(){
			}
		});				
		
		$each(areas, function(area, index){
			area.addEvents({
				'mouseenter': function(){
					switch(area.id){
						case 'americas-contact-imap':
							$('contact-map-img').src = '/icon-files/cms-templates/images/contact/contact_map_americas.gif';
							break;
							
						case 'asia-contact-imap':
							$('contact-map-img').src = '/icon-files/cms-templates/images/contact/contact_map_asia.gif';
							break;
							
						case 'ema-contact-imap':
							$('contact-map-img').src = '/icon-files/cms-templates/images/contact/contact_map_ema.gif';
							break;
					}
				},
				'mouseleave': function(){ $('contact-map-img').src = '/icon-files/cms-templates/images/contact/contact_map.gif'; },
				'click': function(event){
					event.stop();
					switch(area.id){
						case 'americas-contact-imap':
							$('contact-regions-select').options[1].selected = 'selected';
							$('contact-regions-select').selectedIndex = 1;
							break;
							
						case 'asia-contact-imap':
							$('contact-regions-select').options[2].selected = 'selected';
							$('contact-regions-select').selectedIndex = 2;
							break;
							
						case 'ema-contact-imap':
							$('contact-regions-select').options[3].selected = 'selected';
							$('contact-regions-select').selectedIndex = 3;
							break;
					}
					
					$('contact-map-form').submit();
				}
			});
		});
	}
}




/****************************************************
* Style Select Form Fields							*
*													*
*****************************************************/

var SelectBox = new Class({

	Implements: [Events, Options],

	options: {		
		maxHeight: 160,
		zIndex: 0
	},

	initialize: function(select, options){
		this.setOptions(options);
		this.select = select;
		this.parent = this.select.getParent();
		this.optionsList = this.select.getElements('option');
		if(this.optionsList.length <= 0 || isNaN(this.optionsList.length)){ return; }
		var float, css, tAlign;
		selectClick = true;
		
		if(browser.isIE){ this.selectWidth = 2; }
		else { this.selectWidth = 3; }
		
		if(this.select.style['float'] && this.parent.style['text-align']){
			float = this.select.style['float'];
			tAlign = this.parent.style['text-align'];
		} else if(this.select.currentStyle){
			float = this.select.currentStyle['styleFloat'];
			tAlign =  this.parent.currentStyle['textAlign'];
		} else if(document.defaultView && document.defaultView.getComputedStyle){
			css = getComputedStyle(this.select,'');
			float = css.getPropertyValue('float');
			tAlign = css.getPropertyValue('text-align');
		} else {
			float = 'left';
			tAlign = 'left';
		}
		
		if(!float || float == 'none'){
			if(tAlign == 'right'){ float = 'right'; }
			else { float = 'left'; }
		}
		
		if(!this.select.getAttribute('orig-position')){
			this.select.setAttribute('orig-position', this.select.getStyle('position'));
			this.select.setAttribute('orig-top', this.select.getStyle('top'));
		}
		
		this.holder = new Element('div', {
			'class': 'styled-select',
			'styles': {
				'width': this.select.getSize().x - this.selectWidth,
				'height': this.select.getSize().y - this.selectWidth,
				'top': this.select.getAttribute('orig-top'),
				'left': this.select.getStyle('left'),
				'right': this.select.getStyle('right'),
				'bottom': this.select.getStyle('bottom'),
				'float': float,
				'position': this.select.getAttribute('orig-position'),
				'margin': this.select.getStyle('margin'),
				'padding': '0',
				'display': this.select.getStyle('display')
			}
		}).inject(this.select, 'before');
		
		this.select.setStyles({'position':'absolute', 'top':-1000000});
		
		this.container = new Element('div', {
			'class': 'container',
			'styles': {
				'z-index': this.options.zIndex
			}
		}).inject(this.holder);
		
		this.selected = new Element('div', {'class': 'selected' }).inject(this.container);
		this.selected.setStyles({'height': this.holder.getSize().y - 2, 'line-height': this.holder.getSize().y - 2});
		
		this.arrow = new Element('div', {'class': 'arrow' }).inject(this.container);
		this.arrow.setStyles({'height': this.holder.getSize().y - 3});
		
		this.optionsHolder = new Element('div', {
			'class': 'options',
			'styles': {
				'width': this.holder.getSize().x - 2,
				'top': this.holder.getSize().y - 2,
				'opacity': 0
			}
		}).inject(this.container);
		this.optionsContent = new Element('div', {'class': 'content'}).inject(this.optionsHolder);
		
		this.ul = new Element('ul', {'styles': {'margin': '0'}}).inject(this.optionsContent);
		var li;
		
		this.selected.addEvents({
			'click': function(){ this.closeAll(); this.optionsHolder.setStyle('opacity',1); selectClick=true; }.bind(this),
			'mouseenter': function(){ this.arrow.setStyle('background-image', this.arrow.getStyle('background-image').replace(/1.gif/, '2.gif')); }.bind(this),
			'mouseleave': function(){ this.arrow.setStyle('background-image', this.arrow.getStyle('background-image').replace(/2.gif/, '1.gif')); }.bind(this)
		});
		
		this.arrow.addEvents({
			'click': function(){ this.closeAll(); this.optionsHolder.setStyle('opacity',1); selectClick=true; }.bind(this),
			'mouseenter': function(){ this.arrow.setStyle('background-image', this.arrow.getStyle('background-image').replace(/1.gif/, '2.gif')); }.bind(this),
			'mouseleave': function(){ this.arrow.setStyle('background-image', this.arrow.getStyle('background-image').replace(/2.gif/, '1.gif')); }.bind(this)
		});
		
		$each(this.optionsList, function(option, index){
			if(option.text){
				if(index === 0){ this.selected.innerHTML = option.text; }
				if(option.selected){ this.selected.innerHTML = option.text; }
				
				li = new Element('li', {
					'html': option.text,
					'styles': {
						'background': 'none',
						'padding': '1px 3px'
					},
					'events': {
						'click': function(){ this.choose(index, option.text); selectClick=true; }.bind(this)
					}
				}).inject(this.ul);
			}
		}.bind(this));
		
		this.lis = this.ul.getElements('li');
		$each(this.lis, function(li, index){
			li.addEvent('mouseenter', function(){ this.highlight(li); }.bind(this));
		}.bind(this));
		
		if(this.optionsHolder.getSize().y > this.options.maxHeight){
			this.optionsHolder.setStyle('height', this.options.maxHeight);
			this.optionsContent.setStyle('height', this.options.maxHeight);
			this.scrollBar = new ScrollBar(this.optionsHolder, this.optionsContent, {isDD:true});
		}
		
		if(this.select.disabled){
			this.disabledLayer = new Element('div', {
				'class': 'disabled-layer',
				'styles': {
					'width': this.holder.getSize().x,
					'height': this.holder.getSize().y
				}
			}).inject(this.container);
			this.holder.addClass('disabled-select');
		}		
		
		this.clear = new Element('div', {
			'styles': {
				'clear':'both',
				'width': '100%',
				'height': '0',
				'line-height': '0',
				'font-size': '0px'
			}
		}).inject(this.parent);
	},
	
	choose: function(index,text){
		if(text){ this.selected.innerHTML = text; }
		this.select.options[index].selected = 'selected';
		this.select.selectedIndex = index;
		this.optionsHolder.setStyle('opacity',0);
		if(this.select.getAttribute('onchange')){
			if(this.select.fireEvent){
				this.select.fireEvent('onchange');
			}
			
			if(document.createEvent){
				var evt = document.createEvent('HTMLEvents');
				if(evt.initEvent){ evt.initEvent('change', true, true); }
				if(this.select.dispatchEvent){ this.select.dispatchEvent(evt); }
			}
		}
	},
	
	highlight: function(li){
		$each(this.lis, function(li, index){
			li.setStyles({'background':'none', 'color':'#626469'});
		}.bind(this));
		
		li.setStyles({'background':'#8DC3C0', 'color':'#FFF'});
	},
	
	closeAll: function(){
		if(document.body){
			this.dds = document.body.getElements('.styled-select .options');
			this.dds.each(function(dd, index){
				dd.setStyle('opacity',0);
			});
		}
	}
});



function initSelects(ref){
	var selects, sel, dds;
	if(document.body){
		selects = document.body.getElements('select');
		if(selects.length > 0){
			dds = document.body.getElements('.styled-select');
			for(var i=dds.length-1; i >= 0; i--){
				dds[i].dispose();
			}
			
			selects.each(function(select, index){
				sel = new SelectBox(select, {zIndex: selects.length-index});
			});
			
			if(!ref){
				$(document.body).addEvent('click', function(){
					if(selectClick){ selectClick = false; }
					else {
						dds = document.body.getElements('.styled-select .options');
						dds.each(function(dd, index){
							dd.setStyle('opacity',0);
						});
					}
				});
			}
		}
	}
}






/****************************************************
* Style Checkboxes in Forms							*
*													*
*****************************************************/

var CheckBox = new Class({

	Implements: [Events, Options],

	options: {	
		label: null
	},

	initialize: function(cBox, options){
		this.setOptions(options);
		this.cBox = cBox;
		this.src = '/icon-files/cms-templates/images/generic/checkboxes/off_light.gif';
		this.parent = this.cBox.getParent();	
		this.margin = '2px 7px 5px 0';
		
		if(browser.isIE){ this.margin = '1px 7px 6px 0'; }
		
		if(this.parent.hasClass('main-section')){
			this.src = '/icon-files/cms-templates/images/generic/checkboxes/off_dark.gif';
		}
		
		this.img = new Element('img', {							   
			'src': this.src,
			'styles': {
				'margin': this.margin,
				'width': 13,
				'height': 13
			},
			'events': {
				'click': function(){ this.choose(true); }.bind(this),
				'mouseenter': function(){ this.hover(true); }.bind(this),
				'mouseleave': function(){ this.hover(false); }.bind(this)
			}
		}).inject(this.cBox, 'after');
		
		this.cBox.setStyle('display','none');
		
		if(this.options.label){
			this.label = this.options.label;
			this.label.addEvents({
				'click': function(){ this.choose(); }.bind(this),
				'mouseenter': function(){ this.hover(true); }.bind(this),
				'mouseleave': function(){ this.hover(false); }.bind(this)
			});
		}
	},
	
	choose: function(isImg){
		if(this.img.src.indexOf('checkboxes/off') >= 0){
			this.img.src = this.img.src.replace(/checkboxes\/off/, 'checkboxes/on');
			if(this.options.label){ this.label.addClass('nav-on'); }
			if(isImg){ this.cBox.checked = 'checked'; }
		} else {
			this.img.src = this.img.src.replace(/checkboxes\/on/, 'checkboxes/off');
			if(this.options.label){ this.label.removeClass('nav-on'); }
			if(isImg){ this.cBox.checked = false; }
		}
	},
	
	hover: function(over){
		if(this.options.label){
			if(over){ this.label.setStyle('color','#2e9894'); }
			else { 
				if(!this.label.hasClass('nav-on')){ this.label.setStyle('color','#626469'); }
			}
		}
	}
});



function initCheckBoxes(){
	var box, cBoxes, labels;
	if(document.body){		
		cBoxes = $(document.body).getElements('.form-selects input[type=checkbox]');
		cBoxes.each(function(cBox, index){
			cBox.id = 'styled-cbox-' + index;
			if(cBox.getParent().hasClass('form-checkbox')){
				labels = cBox.getParent().getElements('label');
				if(labels.length == 1){
					labels[0].setAttribute('for',cBox.getAttribute('id'));
					box = new CheckBox(cBox, {label: labels[0]});					
					
				} else { box = new CheckBox(cBox, {}); }
			} else {
				box = new CheckBox(cBox, {});
			}
		});		
	}
}






/****************************************************
* Setup Vertical Scrollables						*
*													*
*****************************************************/

var ScrollBar = new Class({

	Implements: [Events, Options],

	options: {
		maxThumbSize: 11,
		wheel: 8,
		arrows: true,
		init: true,
		speed: 800,
		isDD: false
	},

	initialize: function(main, content, options){
		this.setOptions(options);
		
		this.main = main;
		this.content = content;
		
		if (this.options.arrows === true){
			if (this.options.isDD === true){
				this.arrowOffset = 42;
			} else {
				this.arrowOffset = 32;
			}
				
		} else {
			this.arrowOffset = 0;
		}			

		this.vScrollbar = new Element('div', { 'class': 'vScrollbar' }).injectAfter(this.content);
		
		if (this.options.arrows === true){			
			this.arrowUp = new Element('div', { 'class': 'arrowUp' }).injectInside(this.vScrollbar);
		}

		this.vTrack = new Element('div', { 'class': 'vTrack' }).injectInside(this.vScrollbar);
		this.vThumb = new Element('div', { 'class': 'vThumb' }).injectInside(this.vTrack);
		this.vThumb_t = new Element('div', { 'class': 'vThumb-top' }).injectInside(this.vTrack);
		this.vThumb_b = new Element('div', { 'class': 'vThumb-base' }).injectInside(this.vTrack);
		this.fxOn = false;

		if (this.options.arrows === true){				
			this.arrowDown = new Element('div', { 'class': 'arrowDown' }).injectInside(this.vScrollbar);
		}					
		
		this.bound = {
			'vStart': this.vStart.bind(this),			
			'end': this.end.bind(this),
			'vDrag': this.vDrag.bind(this),			
			'wheel': this.wheel.bind(this),
			'vPage': this.vPage.bind(this),
			'vThumbOver': this.vThumbOver.bind(this),
			'vThumbOut': this.vThumbOut.bind(this)
		};

		this.vPosition = {};			
		this.vMouse = {};	
		this.update();
		this.attach();
	},

	update: function(){		
		if(!isNaN(this.content.offsetHeight - this.arrowOffset) && (this.content.offsetHeight - this.arrowOffset) >= 0){
			this.vTrack.setStyle('height', this.content.offsetHeight - this.arrowOffset);	
		}
		
		// Remove and replace vertical scrollbar			
		if (this.content.scrollHeight <= this.main.offsetHeight) {
			this.vScrollbar.setStyle('display', 'none');	
			this.content.setStyle('width', this.main.offsetWidth);	
		} else {			
			this.vScrollbar.setStyle('display', 'block');
			if (this.options.isDD === true){
				this.content.setStyle('width', Math.max(this.main.offsetWidth - 16,0));				
			} else {
				this.content.setStyle('width', Math.max(this.main.offsetWidth - 30,0));
			}
		}

		if(!isNaN(this.vTrack.offsetHeight - 10) && (this.vTrack.offsetHeight - 10) >= 0){
			if (this.options.isDD === true){
				this.vTrack.setStyles({'height': this.vTrack.offsetHeight});
			} else {
				this.vTrack.setStyles({'height': this.vTrack.offsetHeight - 10});
			}
		}

		if(!isNaN(this.content.offsetHeight) && (this.content.offsetHeight) >= 0){
			this.content.setStyle('height', this.content.offsetHeight);
		}
		
		this.vContentSize = this.content.offsetHeight;
		this.vContentScrollSize = this.content.scrollHeight;
		
		this.vTrackSize = this.vTrack.offsetHeight;
		this.vContentRatio = this.vContentSize / this.vContentScrollSize;
		this.vThumbSize = (this.vTrackSize * this.vContentRatio).limit(this.options.maxThumbSize, this.vTrackSize);
		if(this.vTrackSize * this.vContentRatio < 11){			
			this.vScrollRatio = this.vContentScrollSize / (this.vTrackSize - 11 + Math.floor(this.vTrackSize * this.vContentRatio));
		} else {
			this.vScrollRatio = this.vContentScrollSize / this.vTrackSize;
		}
		if(!isNaN(this.vThumbSize) && (this.vThumbSize) >= 0){
			this.vThumb.setStyle('height', this.vThumbSize);
		}
		this.vThumb_b.setStyle('top', this.vThumbSize - 1);		
		this.vUpdateThumbFromContentScroll();
		this.vUpdateContentFromThumbPosition();
	},
	
	updateAfterScroll: function(){
		this.limYCoord = -1 * this.limYCoord;
		this.content.scrollTop = this.limYCoord;	
		this.contentClone.destroy();
		this.vUpdateThumbFromContentScroll();
		this.vUpdateContentFromThumbPosition();
	},

	vUpdateContentFromThumbPosition: function(){
		this.content.scrollTop = this.vPosition.now * this.vScrollRatio;
	},

	vUpdateThumbFromContentScroll: function(){
		this.vPosition.now = (this.content.scrollTop / this.vScrollRatio).limit(0, (this.vTrackSize - this.vThumbSize));
		this.vThumb.setStyle('top', this.vPosition.now);
		this.vThumb_t.setStyle('top', this.vPosition.now - 6);
		this.vThumb_b.setStyle('top', this.vPosition.now + this.vThumbSize - 1);
	},		

	attach: function(){
		this.vThumb.addEvent('mousedown', this.bound.vStart);		
		this.vThumb_t.addEvent('mousedown', this.bound.vStart);		
		this.vThumb_b.addEvent('mousedown', this.bound.vStart);

		
		if (this.options.wheel){ this.content.addEvent('mousewheel', this.bound.wheel); }
		this.vTrack.addEvent('mouseup', this.bound.vPage);
		
		if (this.options.arrows === true){
			this.arrowUp.addEvent('mousedown', function(event){
				if(!this.fxOn){
					this.interval = (function(event){
						this.content.scrollTop -= this.options.wheel;
						this.vUpdateThumbFromContentScroll();
					}.bind(this).periodical(40));
				}
			}.bind(this));
		
			this.arrowUp.addEvent('mouseup', function(event){
				$clear(this.interval);
				selectClick = true;
			}.bind(this));						
					
			this.arrowDown.addEvent('mousedown', function(event){
				if(!this.fxOn){
					this.interval = (function(event){
						this.content.scrollTop += this.options.wheel;
						this.vUpdateThumbFromContentScroll();
					}.bind(this).periodical(40));
				}
			}.bind(this));

		
			this.arrowDown.addEvent('mouseup', function(event){
				$clear(this.interval);
				selectClick = true;
			}.bind(this));

		}			
					
	},
	
	wheel: function(event){
		if(!this.fxOn){
			this.content.scrollTop -= event.wheel * this.options.wheel;
			this.vUpdateThumbFromContentScroll();
		}
		
		event.stop();
	},

	vPage: function(event){
		if(!this.fxOn){
			if (event.page.y > this.vThumb.getPosition().y){ this.content.scrollTop += this.content.offsetHeight; }
			else { this.content.scrollTop -= this.content.offsetHeight; }
			this.vUpdateThumbFromContentScroll();
		}
		
		event.stop();
	},	

	vStart: function(event){
		this.vMouse.start = event.page.y;
		this.vPosition.start = this.vThumb.getStyle('top').toInt();
		document.addEvent('mousemove', this.bound.vDrag);
		document.addEvent('mouseup', this.bound.end);
		this.vThumb.addEvent('mouseup', this.bound.end);
		this.vThumb_t.addEvent('mouseup', this.bound.end);
		this.vThumb_b.addEvent('mouseup', this.bound.end);
		this.vThumbOver();
		selectClick = true;
		event.stop();
	},

	end: function(event){
		document.removeEvent('mousemove', this.bound.vDrag);			
		document.removeEvent('mouseup', this.bound.end);
		this.vThumb.removeEvent('mouseup', this.bound.end);
		this.vThumb_t.removeEvent('mouseup', this.bound.end);
		this.vThumb_b.removeEvent('mouseup', this.bound.end);
		this.vThumbOut();
		event.stop();
	},

	vDrag: function(event){
		if(!this.fxOn){
			this.vMouse.now = event.page.y;
			this.vPosition.now = (this.vPosition.start + (this.vMouse.now - this.vMouse.start)).limit(0, (this.vTrackSize - this.vThumbSize));
			this.vUpdateContentFromThumbPosition();
			this.vUpdateThumbFromContentScroll();
		}
		
		event.stop();
	},
	
	vThumbOver: function(event){	
	},
	
	vThumbOut: function(event){
	}
});



function initScrollbars(){
	var sDivs, cDivs, scr;
	if(document.body){
		sDivs = $(document.body).getElements('.scrollable-content');		
		if(sDivs.length > 0){
			sDivs.each(function(sDiv, i){
				cDivs = sDiv.getElements('.content');
				if(cDivs.length > 0){				
					scr = new ScrollBar(sDiv, cDivs[0], {});	
				}
			});
		}
	}
}






/****************************************************
* Change Stars to Green on Required Fields in Forms	*
*													*
*****************************************************/

function initGreenStars(){
	var tds;
	if(document.body){
		tds = $(document.body).getElements('.form-wrapper td');		
		if(tds.length > 0){
			tds.each(function(td, i){
				if(td.innerHTML.indexOf('*') >= 0){
					td.innerHTML = td.innerHTML.replace(/\*/, '<span class="green">*</span>');
				}
			});
		}
	}
}




/****************************************************
* Check Data Table Widths							*
*													*
*****************************************************/

function fixDataTables(){
	if($(document.body)){
		var tables = $(document.body).getElements('.data-table');
		tables.each(function(table, i){
			if(table.getSize().x > 450 && table.getSize().x < 700){
				table.setStyle('width',700);
			} else if(table.getSize().x > 435 && table.getSize().x < 440){
				table.setStyle('width',435);
			}
		});
	}
}





/****************************************************
* On Page Load Functions							*
*													*
*****************************************************/

function init(){
	fixIE6Footer();
	fixDataTables();
	initAccordion();	
	initSifrNavFix();
	fixSifrHeadings();
	inspectFeatures();
	initInputs();
	initSelects();
	initCheckBoxes();
	initFeaturesSlider();	
	initImageBank();
	initLabCerts();
	initHPLabMenu();
	fixRelInfoMainLink();
	initLightBoxElements();
	initContactMap();
	initScrollbars();
	initGreenStars();
	fixIE6Footer();
}


function initLoad(){	
	for(var i=0; i<pImages.length; i++){
		pImages[i] = root + pImages[i];
	}
	
	var loader = new Asset.images(pImages, {
		onProgress: function(counter, index){
		},
		onComplete: function(){
		}
	});
}




/****************************************************
* On Page UnLoad Functions							*
*													*
*****************************************************/

function memoryClean(e){
}





writeJsStyles(1);
window.addEvent('domready', function() { init(); });
window.addEvent('load', function() { /*var timer = initLoad.delay(2000);*/ });
window.addEvent('unload', function() { memoryClean(); });