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;
			}
		}

		form.submit();
		return;
	}


	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;
		}
	}

	form.submit();
}


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 __init()
{
	initializeForms();
	if (typeof init == 'function') init();
}


window.onload = __init;


function bookmark(url, title)
{
	if (url == undefined)
	{
		url = document.location;
		title = document.title;
	}
	
	var agent = navigator.userAgent.toLowerCase();
	var ie = agent.indexOf('msie') != -1;

	var windows = agent.indexOf('windows') != -1;
	var key = (windows ? 'Ctrl' : 'Command');

	if (ie)
	{
		window.external.AddFavorite(url, title);
	}
	else
	{
		alert('To bookmark this page press (' + key + ' + D).');	
	}
}


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();
}