YUI({combine: true, timeout: 10000}).use('node', function(Y){ // , 'io', 'selector-css3', 'json-parse'
	
	function $(elem){
		return Y.one(elem);
	};
	
	// Images & Overlay
	
	function mw_hideOverlay(){
		$('#overlay').setStyle('left', '-3000px');
	};

	function mw_showOverlay(){
		var ht, pos;
		ht = (Y.DOM.winHeight() - 500) / 2;
		pos = Y.DOM.docScrollY() + ht;
		$('#overlay').setStyle('left', '0px');
		$('#mapholder').setStyle('top', pos + 'px');
	};
	
	function mw_resizeOverlay(){
		$('#screen').setStyles({'width': Y.DOM.docWidth() + 'px', 'height': Y.DOM.docHeight() + 'px'});
		$('#mapholder').setStyles({'left': ((Y.DOM.winWidth() - 970) / 2) + 'px', 'top': ((Y.DOM.winHeight() - 500) / 2) + 'px'});
	};
	
	function mw_createOverlay(){
		$('#screen').setStyle('opacity', '.75');
		mw_resizeOverlay();
		Y.on('click', mw_hideOverlay, '#screen, .closer');
		Y.on('resize', mw_resizeOverlay, window);
	};
	
	// Map and Directions
	var mapHTML = '<div class="marker"><strong>Car Audio Repair Service.<' + '/strong><br />29 Pondholton Drive, Witham, Essex CM8 1QG.<br>Tel: <strong>01376 521008<' + '/strong><' + '/div>', 
		map,
		marker,
		directions,
		localSearch = new Array(2),
		from,
		to;

	
	function mw_getCoOrds(e){
		var start = Y.DOM.byId('startPoint').value;
		if(start != ''){
			$('#directions').set('innerHTML', '<p><strong>Click on individual steps below for a detailled view of that part of the journey.<\/strong><\/p>');
			usePointFromPostcode(start, setFrom, 0);
			var pause = setTimeout(getDirections, 1000);
		}else{
			alert('Enter your address or postcode to get directions.');
			return false;
		};
	};

	function usePointFromPostcode(postcode, callbackFunction, ind) {
		localSearch[ind] = new GlocalSearch();
		localSearch[ind].setSearchCompleteCallback(null, 
			function() {
				
				if (localSearch[ind].results[0])
				{		
					var resultLat = localSearch[ind].results[0].lat;
					var resultLng = localSearch[ind].results[0].lng;
					var point = new GLatLng(resultLat,resultLng);
					callbackFunction(point);
				}else{
					alert(postcode + " not recognised!");
				}
			});	
			
		localSearch[ind].execute(postcode + ", UK");
	};

	function setFrom(point){
		from = point.toUrlValue();
	}
	
	function setTo(point){
		to = point.toUrlValue();
	}

	function getDirections(){	
		var textDirections = from + ' to ' + to;
		directions.load(textDirections);	
	};

	function onGDirectionsLoad(){
		$('#directions').setStyle('display', 'block');
	};
	
	function showAddress(point) {
		setTo(point);
		map.setCenter(point, 13);
		marker = new GMarker(point);
		map.addOverlay(marker);
		marker.openInfoWindowHtml(mapHTML);
		GEvent.addListener(marker, "mouseover", function() {
			marker.openInfoWindowHtml(mapHTML);
		 });
	};
	
	function mw_showMap(e){
		e.preventDefault();
		mw_showOverlay();
	};
	
	function mw_checkForm(e){
		var trimRegex = /^\s\+|\s+$/g;
		var fName = $('#frmName').get('value').replace(trimRegex, ''),
			fEmail = $('#frmE').get('value'),
			fMessage = $('#frmMessage').get('value').replace(trimRegex, ''),
			sErr = '';
		if('' === fName)sErr += 'You must enter your name.\n';
		if(!mw_checkEmail(fEmail)) sErr += 'You must enter a valid e-mail address.\n';
		if('' === fMessage)sErr += 'You must enter a message.\n';
		if(sErr !== ''){
			alert('The following errors occurred: \n\n' + sErr + '\nPlease correct and re-submit the form.');
			e.preventDefault();
			return false;
		};
	}
	
	function mw_checkEmail(string){
		var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
		var reg2 = /^([0-9a-zA-Z_]([-.\w]*[0-9a-zA-Z_])*@([0-9a-zA-Z_][-\w]*[0-9a-zA-Z_]*\.)+[a-zA-Z]{2,9})$/; // valid
		if (!reg1.test(string) && reg2.test(string)){
			return true;
		}else{
			return false;
		};
		
	};
	
	// Initialisation
	
	function init(){
//		swfobject.embedSWF("images/interface/header.swf", "noflash", "930", "130", "10", "images/interface/expressInstall.swf", 0, {wmode:"transparent",menu:"false"}, 0);
		Y.on('submit', mw_checkForm, '#frmEnquiries');
		if(GBrowserIsCompatible()){
			mw_createOverlay();
			var point = new GLatLng('51.789272', '0.638765');
			map = new GMap2(Y.DOM.byId('map'));
			directions = new GDirections(map, Y.DOM.byId('directions'));
			showAddress(point);
			GEvent.addListener(directions, 'load', onGDirectionsLoad);
			window.onunload='GUnload()'
			Y.on('click', mw_showMap, '#maplink');
			Y.on('click', mw_getCoOrds, '#submitMap');
		};
	};
	
	Y.on("domready", init);
});