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 warning = field[3];
		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;
				}
				
				if (warning != undefined && value == warning) 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;
				
			case 'PHONE':
				var elements = form[name + '[]']

				if (elements[0].value.length < 3 || isNaN(elements[0].value)) valid = false;
				if (elements[1].value.length < 3 || isNaN(elements[1].value)) valid = false;
				if (elements[2].value.length < 4 || isNaN(elements[2].value)) valid = false;

				break;
		}

		if (!valid)
		{
			alert(field[1] + '.');
			element = form[field[0]];
			if (element != undefined) element.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]); }
	
	var method;

	for (var i = 0; i < input.length; i++)
	{
		field = input[i];
		field.message = field.value;

		field.onfocus = function()
		{
			if (this.value == this.message) this.value = '';
		}

		field.onblur = function()
		{
			if (this.value.length == 0) this.value = this.message;
		}
	}
}


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, scrolling)
{
	if (scrolling == undefined) scrolling = 0;

	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=" + scrolling + ",resizable=0,width=" + width + ",height=" + height + ",top=" + y + ",left=" + x;
	var popup;

	popup = window.open(url, 'default', properties);
	popup.focus();
}


function redirect(url)
{
	document.location = url;	
}


function __init()
{
	initializeForms();

	if (typeof init == 'function') init();
}


function error(message)
{
	setTimeout("alert('" + message + "');", 100);	
}


window.onload = __init;



function hover()
{
	var elements = document.getElementById('menu1-items').getElementsByTagName('li');

	for (var i = 0; i < elements.length; i++)
	{
		elements[i].onmouseover = function() { this.className += ' hover'; }
		elements[i].onmouseout = function() { this.className = this.className.replace(new RegExp(" hover\\b"), ''); }
	}
}

if (window.attachEvent) window.attachEvent('onload', hover);


function contact_submit()
{
	var input = new Array(
		['name', 'Please enter a name', 'STRING(3)', 'Full Name...'],
		['email', 'Please enter an email address', 'EMAIL', 'Email Address...'],
		['message', 'Please enter a message', 'STRING(3)', 'Quick Overview...']
	);

	validate(document.contact, input);
}


function contact_reset()
{
	var form = document.contact;
	
	form.name.value = form.name.message;
	form.email.value = form.email.message;
	form.phone.value = form.phone.message;
	form.message.value = form.message.message;
}
