window.addEvent('domready', function() {
	$(document.body).getElements('a[rel=external]').set('target', '_blank');		// EXTERNAL LINKS	 
	// BACKGROUND IMAGE CACHE
	try {
		document.execCommand("BackgroundImageCache", false, true);
	} catch(err) {}
	// SIDEBAR SLIDER
	var slider = new Fx.Tween('slide_out', {property: 'left', duration:700 });
	
	var state = 105;
	$('slide_btn').addEvent('click', function(){ 
			state = (state == 0 ? 105 : 0); 
			slider.start(state);
	});
	
	if(location.pathname.search('service')!=-1){
		state = 0;
		slider.start(state);
	}
	
 	new SmoothScroll({ duration:700 }, window);	// SMOOTH SCROLL PAGE
	var tooltip = new Tips($$('.tooltip'));			// TOOL TIPS			
});


function showSideBar(){
	state = 105;
	slider.start(state);
}

/*
* Validates data types below using regular expressions
* 
*		-	email
*		-	date
*		-	mobile
*		-	postcode
*		-	password
*/
function validateType(type, val){
	switch(type){
		case 'email':
			var pattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
			break;
		case 'date':
			var pattern = /^(((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))$/;
			break;
		case 'mobile':
			var pattern = /^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$/;
			break;
		case 'telephone':
			var pattern = /^((\(?0\d{4}\)?\s?\d{3}\s?\d{3})|(\(?0\d{3}\)?\s?\d{3}\s?\d{4})|(\(?0\d{2}\)?\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$/;
			break;
		case 'postcode':
			var pattern = /^((([A-PR-UWYZ](\d([A-HJKSTUW]|\d)?|[A-HK-Y]\d([ABEHMNPRVWXY]|\d)?))\s*(\d[ABD-HJLNP-UW-Z]{2})?)|GIR\s*0AA)$/;
			break;
		case 'password':
			var pattern = /(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,15})$/;
			break;
		case 'name':
			var pattern = /^[a-zA-Z\s]{3,64}$/;
			break;
		default:
			break;
	}
	return pattern.test(val); 
}

/*
*  Validates form content
*/
function validateForm(frm,reporting_div_id){
	/*------------------------------------------*/
	/*  CHECK ALL REQUIRED FIELDS HAVE A VALUE  */
	/*------------------------------------------*/
	var errors = [];
	var req;
	var error_string = '';
	//  Check for required hidden field so we know which fields are mandatory
	if(typeof frm.required==undefined){
		alert('Required hidden field missing');
		return false;
	}
	//  Check all required fields exist and have a value
	req = frm.required.value.split(",");

	for(var x=0; x<req.length; x++){
		if(typeof frm.elements[req[x]]=="undefined")
			errors[errors.length] = req[x] + ' field doesn\'t exist';
		else{
			if(frm.elements[req[x]].value=='')
				errors[errors.length] = 'the ' + req[x] + ' field must contain a value';
		}
	}
	//  Output errors if there are any
	if(errors.length>0){
		if(reporting_div_id!==false){						//  Either, print to screen within supplied <div>.....
			for(var x=0; x<errors.length; x++)
				error_string += '<li>' + errors[x] + '</li>';
			document.getElementById(reporting_div_id).innerHTML = '<ul class="error">' + error_string + '</ul>';
		}
		else{																			//	Or, show in alert box
			for(var x=0; x<errors.length; x++)
				error_string += '- ' + errors[x] + "\n";
			alert(error_string);
		}
		return false;
	}
	/*--------------------------------------------------------*/
	/*  PERFORM VALIDATION OF FIELD DATA BASED ON FIELD NAME  */
	/*--------------------------------------------------------*/
	var elems = frm.elements;
	for(var x=0; x<elems.length; x++){
		if(elems[x].name!='required' && in_array(elems[x].name, req)){
			switch(true){
				case elems[x].name.search('email')!=-1:
					if(!validateType('email', elems[x].value))
						errors[errors.length] = 'Invalid email address';
					break;
				case elems[x].name.search('date')>-1:
					if(!validateType('date', elems[x].value))
						errors[errors.length] = 'Invalid date (DD/MM/YY)';
					break;
				case elems[x].name.search('mobile')>-1:
					if(!validateType('mobile', elems[x].value))
						errors[errors.length] = 'Invalid mobile phone number';
					break;
				case elems[x].name.search('telephone')>-1:
					if(!validateType('telephone', elems[x].value))
						errors[errors.length] = 'Invalid phone number';
					break;
				case elems[x].name.search('postcode')>-1:
					if(!validateType('postcode', elems[x].value))
						errors[errors.length] = 'Invalid postcode';
					break;
				case elems[x].name.search('name')>-1:
					if(!validateType('name', elems[x].value))
						errors[errors.length] = 'Invalid ' + elems[x].name;
					break;
				/*case elems[x].name.search('password')>-1:
					if(!validateType('password', elems[x].value))
						errors[errors.length] = 'Invalid password (must contain 1 number, 1 capital letter and be between 6 and 15 characters)';
					break;*/
				default:
					break;
			}
		}
	}
	//  Output errors if there are any
	if(errors.length>0){
		if(reporting_div_id!==false){						//  Either, print to screen within supplied <div>.....
			for(var x=0; x<errors.length; x++)
				error_string += '<li>' + errors[x] + '</li>';
			document.getElementById(reporting_div_id).innerHTML = '<ul class="error">' + error_string + '</ul>';
		}
		else{																			//	Or, show in alert box
			for(var x=0; x<errors.length; x++)
				error_string += '- ' + errors[x] + "\n";
			alert(error_string);
		}
		return false;
	}
	return true;
}

function in_array(needle, haystack, argStrict) {
	var key = '', strict = !!argStrict;
	if (strict) {
		for (key in haystack) {
			if (haystack[key] === needle) {
				return true;
			}
		}
	}
	else {
		for (key in haystack) {
			if (haystack[key] == needle) {
				return true;
			}
		}
	}
	return false;
}