YUI({combine: true, timeout: 10000}).use('node', 'io', function(Y){ // , 'selector-css3', 'json-parse'
	
	function $(elem){
		return Y.one(elem);
	};
	
	// Images & Overlay
	
	function mw_hideOverlay(){
		$('#overlay').setStyle('left', '-3000px');
		$('#largeimage').set('text', '');
	};

	function mw_showOverlay(){
		var ht, pos;
		ht = (Y.DOM.winHeight() - 500) / 2;
		pos = Y.DOM.docScrollY() + ht;
		$('#overlay').setStyle('left', '0px');
		$('#holder').setStyle('top', pos + 'px');
	};
	
	function mw_resizeOverlay(){
		$('#screen').setStyles({'width': Y.DOM.docWidth() + 'px', 'height': Y.DOM.docHeight() + 'px'});
		$('#holder').setStyles({'left': ((Y.DOM.winWidth() - 660) / 2) + 'px', 'top': ((Y.DOM.winHeight() - 500) / 2) + 'px'});
	};
	
	function mw_createOverlay(){
		Y.DOM.addHTML($('body'), '<div id="overlay"><div id="screen"></div><div id="holder"><div id="caption"></div><div id="largeimage"></div></div></div>');
		$('#screen').setStyle('opacity', '.75');
		$('#caption').setStyle('opacity', '.75');
		mw_resizeOverlay();
		Y.on('click', mw_hideOverlay, '#overlay');
		Y.on('resize', mw_resizeOverlay, window);
	};
	
	function mw_showLargeImage(e){
		var url = this.getAttribute('src'), 
			caption = this.getAttribute('alt');
		url = url.substring(0, url.indexOf('/client')) + '/client/large' + url.substring(url.lastIndexOf('/', url.length));
		$('#largeimage').setStyle('backgroundImage', 'url(' + url + ')');
		if(caption != ''){
			$('#caption').set('text', caption).removeClass('hidden');
		}else{
			$('#caption').addClass('hidden');
		};
		mw_showOverlay();
	};
	
	function mw_setupImages(){
		var imgs = Y.all('img.flt, img.frt');
		if(imgs.size() > 0){
		imgs.setStyle('cursor','pointer').setAttribute('title', 'Click for larger image.');
		Y.on('click', mw_showLargeImage, imgs);
			mw_createOverlay();
		};
	};
	
	// Map Rollovers
	
	function mw_handleMapRollover(e){
		var btn = e.currentTarget,
			url = 'url(images/interface/map/map-' + btn.getAttribute('id') + '.png)';
		$('#map').setStyle('backgroundImage', url);	
	};
	
	function mw_handleMapRolloff(e){
		$('#map').setStyle('backgroundImage', 'url(images/interface/map/map-uk.png)');	
	};

	// Containers act as links when clicked
	
	function mw_handleContainerClick(e){
		location.href = this.one('a').getAttribute('href');
	};
	
	function mw_handleContainerRollover(e){
		var btn = e.currentTarget,
			panel = btn.one('.panel');
		panel.setStyles({background: '#fff', border: '1px solid #060'});	
	};
	
	function mw_handleContainerRolloff(e){
		var btn = e.currentTarget,
			panel = btn.one('.panel');
		panel.setStyles({background: '#eee', border: '1px solid #eee'});	
	};

	
	// Glossary
	
	function mw_lookupTerm(term){
		var callback = {
			timeout: 3000,
			on: {
				success: function(x, o){
					var response = o.responseText.split('||'),
						definition = response[1],
						term =  response[0];
					if(definition != ''){
						$('#caption').setContent(term);
						$('#largeimage').setStyle('backgroundImage', 'none').setContent('<div id="scroller">' + definition + '</div>');
						mw_showOverlay();
					};
				},
				failure: function(x, o){
					alert("Async call failed!");
				}
			}
		};		
		Y.io('ajax/glossary.asp?topic=' + term, callback);
	};
	
	function mw_handleGlossaryClick(e){
		e.preventDefault();
		var lnk = e.currentTarget, 
			url = lnk.getAttribute('href'), 
			term = url.substring(url.indexOf('=') + 1, url.length);
		mw_lookupTerm(term);
	};
	
	function mw_setupGlossary(){
		var lnks = Y.all('#main a'), 
			glossaryLinks;
		lnks.each(function(v, k) {
			var url = v.getAttribute('href');
			if(url.substring(0, 12) == 'glossary.asp'){
				v.addClass('glossary');
			};
		});
		glossaryLinks = Y.all('.glossary')
		if(glossaryLinks.size() > 0){
			if($('#caption') === null){
				mw_createOverlay();
			};
			Y.on('click', mw_handleGlossaryClick, '.glossary');
		};
	};
	
	// Displaying Large Scrolling Images
	
	function mw_displayScrollingImage(e){
		e.preventDefault();
		var lnk = e.currentTarget,
			url = lnk.getAttribute('href'),
			txt = lnk.one('img').getAttribute('alt');
		if($('#caption') === null){
			mw_createOverlay();
		};
		$('#caption').setContent(txt);
		$('#largeimage').setStyle('backgroundImage', 'none').setContent('<div id="scroller"><img src="' + url + '" alt="' + txt + '" width="620" height="875" /></div>');
		mw_showOverlay();
	};
	
	// Initialisation
	
	function init(){
		var maps = Y.all('div.mapbutton'),
			containers = Y.all('div.three-col div.col');
		swfobject.embedSWF(headerMovie, "noflash", "930", "212", "10", "images/interface/expressInstall.swf", 0, {wmode:"transparent",menu:"false"},0);
		mw_setupImages();
		mw_setupGlossary();
		Y.on('click', mw_handleContainerClick, containers);
		Y.on('mouseover', mw_handleContainerRollover, containers);
		Y.on('mouseout', mw_handleContainerRolloff, containers);
		Y.on('click', mw_displayScrollingImage, Y.all('.docs'));
		Y.on('mouseover', mw_handleMapRollover, maps);
		Y.on('mouseout', mw_handleMapRolloff, maps);
		Y.all('.external').setAttribute('target', '_blank');
	};
	
	Y.on("domready", init);
});