function validate(form, input)
{
	var field;

	if (input == undefined)
	{
		for (var i = 0; i < form.length; i++)
		{
			field = form[i];
	
			var valid = true;

			switch (field.type)
			{
				case 'text': if (field.value.length < 1) valid = false; break;	
				case 'select-one': if (field.value == 0) valid = false;
			}

			if (!valid)
			{
				switch (field.type)
				{
					case 'text': alert('Please enter a ' + field.id + '.'); break;
					case 'select-one': alert('Please select a ' + field.id + '.'); break;
				}

				field.focus();
				return;
			}
		}

		if (String(form.action).length > 0) form.submit();
		return true;
	}


	for (var i = 0; i < input.length; i++)
	{
		field = input[i];

		var name = field[0];
		var element = form[name];

		if (element != undefined)
		{
			var value = element.value;

			switch (element.type)
			{
				case 'checkbox':
					if (!element.checked) value = undefined;
					break
				
				case 'select-one': break;
				case 'textarea': break;
				case 'text': break;
				case 'password': break;

				default:
					for (var i = 0; i < element.length; i++)
					{
						if (element[i].checked)
						{
							value = element[i].value;
							break;
						}
					}
			}
		}

		var format = field[2];
		var j = format.indexOf('(');
		var k = format.indexOf(')');
		if (j == -1) j = format.length;

		var command = format.slice(0, j);
		var arguments = String(format.slice(j + 1, k)).split(', ');

		var valid = true;
		
		switch (command)
		{
			case 'STRING':
				switch (arguments.length)
				{
					case 0: if (value.length < 2) valid = false; break;
					case 1: if (value.length < arguments[0]) valid = false; break;
					case 2: if (value.length < arguments[0] || value.length > arguments[1]) valid = false;
				}

				break;

			case 'NUMBER':
				if (isNaN(value) || value == '')
				{
					valid = false;
				}
				else
				{
					switch (arguments.length)
					{
						case 1: if (value < Number(arguments[0])) valid = false; break;
						case 2: if (value < Number(arguments[0]) || value > Number(arguments[1])) valid = false;
					}
				}

				break;
				
			case 'MATCH':
				if (value != form[arguments[0]].value) valid = false;
				break;
				
			case 'EMAIL':
				var regex = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/;

				if (!regex.test(value)) valid = false;
				break;
				
			case 'DATE':
				var day = form[name + '[]'][0].value;
				var month = form[name + '[]'][1].value;
				var year = form[name + '[]'][2].value;

				var date = new Date();
				date.setFullYear(Number(year), Number(month) - 1, Number(day));

				var value = date.getTime();

				switch (arguments.length)
				{
					case 1: if (value < Number(arguments[0])) valid = false; break;
					case 2: if (value < Number(arguments[0]) || value > Number(arguments[1])) valid = false;
				}
				break;
		}

		if (!valid)
		{
			alert(field[1] + '.');
			form[field[0]].focus();
			return;
		}
	}

	if (String(form.action).length > 0) form.submit();
	return true;
}


function initializeForms()
{
	var input = new Array();

	var elements = document.getElementsByTagName('input');
	var element;

	var field;

	for (var i = 0; i < elements.length; i++)
	{
		element = elements[i];
		if (element.type == 'text' || element.type == 'password') input.push(element);	
	}

	elements = document.getElementsByTagName('textarea');
	for (var i = 0; i < elements.length; i++) { input.push(elements[i]); }

	for (var i = 0; i < input.length; i++)
	{
		field = input[i];
		field.__className = field.className;
		field.onfocus = function() { this.className = this.type + '-focus'; this.select(); }
		field.onblur = function() { this.className = this.__className; }
	}
}


function bookmark(url, title)
{
	if (url == undefined)
	{
		url = document.location;
		title = document.title;
	}
	
	if (window.sidebar)
	{
		window.sidebar.addPanel(title, url,"");
	}
	else if ( window.external )
	{
		window.external.AddFavorite( url, title);
	}
	else if (window.opera && window.print)
	{
		return true;
	}
}


function popup(url, width, height)
{
	var x = (screen.width / 2) - (width / 2);
	var y = (screen.height / 2) - (height / 2);
	var properties = "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=" + width + ",height=" + height + ",top=" + y + ",left=" + x;

	var popup;
	
	popup = window.open(url, 'default', properties);
	popup.focus();
}


function __init()
{
	initializeForms();
	
	/* custom */
	
	//showMap();

	if (typeof init == 'function') init();
}


window.onload = __init;



function createMarker(x, y, title)
{
	var marker = new GMarker(new GLatLng(x, y), { title: title });

	/*
	GEvent.addListener(marker, 'click', function()
	{
		marker.openInfoWindow(title, { maxWidth: 50 });
	});
	*/

	return marker;
}


function showMap(x, y)
{
	var map = document.getElementById('map');

	if (map == undefined) return;
	if (!GBrowserIsCompatible()) return;

	map = new GMap2(map);

	var marker;

	if (x == undefined && y == undefined)
	{
		map.setCenter(new GLatLng(52.484453, -1.994019), 8);

		marker = createMarker(52.456715, -1.91132, 'The Priory Hospital');
		map.addOverlay(marker);
		marker = createMarker(52.26582, -2.149737, 'The Droitwich Spa Hospital');
		map.addOverlay(marker);
		marker = createMarker(52.457552, -1.932993, 'The Birmingham Nuffield Hospital');
		map.addOverlay(marker);
		marker = createMarker(52.602174, -1.861217, 'BUPA Hospital Little Aston');
		map.addOverlay(marker);
		marker = createMarker(52.457618, -2.076695, 'The West Midlands Hospital');
		map.addOverlay(marker);
		marker = createMarker(52.436614, -1.937563, 'Dept. of Plastic Surgery');
		map.addOverlay(marker);
	}
	else
	{
		map = new GMap2(map);
		map.setCenter(new GLatLng(x, y), 15);
		map.addOverlay(new GMarker(new GLatLng(x, y)));
	}
}


function __send(url)
{
	var input = new Array(
		['name', 'Please enter your name', 'STRING(3)'],
		['email', 'Please enter your email', 'EMAIL'],
		['message', 'Please enter your inquiry', 'STRING(3)']
	);

	if (!validate(document.__form, input)) return;

	var data = new Object();

	data['name'] = document.__form.name.value;
	data['email'] = document.__form.email.value;
	data['message'] = document.__form.message.value;

	var ajax = new AJAX();

	ajax.onLoad = function()
	{
		alert("Your message has been sent successfully.\r\nYou should recieve a reply within the next 24 hours.");
	}

	ajax.post(url + 'contact/3', data);
}


function __reset()
{
	document.__form.name.value = '';
	document.__form.email.value = '';
	document.__form.message.value = '';
}