/*
// 2006-03-18
// Copyright (c) Artburo | http://www.artburo.ru/
// Author - Stepan Galkin
*/

var currError = null;

var validators = new Array();
	validators['username'] = /[a-zA-Z0-9_-]$/i;
	validators['email'] = /^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i;
	validators['phone'] = /[+?0-9-(),]$/i;
	validators['number'] = /[0-9]$/i;
	validators['decimal'] = /[\.0-9]$/i;
	validators['zip'] = /[a-zA-Z0-9]$/i;
	validators['date'] = /[0-9]{4}-[0-9]{2}-[0-9]{2}$/i;
	validators['ipaddr'] = /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/i;

function doSubmit(form)
{
	if (Validate(form))
	{
		with (form.elements)
		{
			for (var i = 0; i < length; i++)
				if (item(i).type == 'submit' || item(i).type == 'image') item(i).disabled = true;
		}
		return true;
	} return false;
}

function Validate(form)
{
	var error = false;
	var value;
	var label;
	var field_name;
	var validatorName = null;
	var minlength;
	var maxlength;
	var error_message;
	try
	{
		with (form.elements)
		{
			if (currError != null) currError.className = 'label';
			for (var i = 0; i < length; i++)
			{
				if (item(i).getAttribute('type') == 'hidden' ||
					item(i).getAttribute('type') == 'submit' ||
					item(i).getAttribute('type') == 'button' ||
					item(i).getAttribute('type') == 'image') continue;

				var depth = 2;
				label = item(i);
				while (depth && label.className != 'label')
				{
					label = label.previousSibling;
					depth--;
				}

				if (label == null) continue;

				value			= item(i).value;
				field_name		= label.childNodes.item(0).nodeValue.replace(/:/,'');
				minlength		= new Number(item(i).getAttribute('minlength'));
				maxlength		= new Number(item(i).getAttribute('maxlength'));
				validatorName	= validators[item(i).getAttribute('validator')];
				error_message	= 'Поле "' + field_name + '" ';

				if (!value.length && item(i).getAttribute('required') == 1)
				{
					error_message += 'не заполнено!';
					error = true;
				}
				else if (item(i).tagName == 'SELECT' && item(i).getAttribute('required') == 1 && value == '0') 
				{
					var error_message = 'Пожалуйста, выберите опцию в поле ' + field_name + '!';
					error = true;
				}
				else if (value.length < minlength)
				{
					error_message += 'содержит слишком мало символов!\n' +
									 (maxlength && maxlength > minlength ? 'Необходимая длина текста: от ' + minlength + ' до ' + maxlength + ' символов.' :
									 'Минимальное длина текста: ' + minlength + ' символов.');
					error = true;
				}
				else if (maxlength > 0 && value.length > maxlength)
				{
					error_message += 'содержит слишком много символов!\n' +
									 (minlength && maxlength > minlength ? 'Необходимая длина текста: от ' + minlength + ' до ' + maxlength + ' символов.' :
									 'Максимальная длина текста: ' + maxlength + ' символов.');
					error = true;
				}
				else if (value.length && validatorName != null && validatorName && !validatorName.test(value))
				{
					error_message += ' не соответствует определенным условиям!\nЧитайте примечание сразу под полем.';
					error = true;
				}

				if (error)
				{
					currError = label;
					label.className += ' error';
					item(i).className += ' error';
					alert(error_message);
					item(i).focus();
					break;
				} else {
					currError = null;
					label.className = 'label';
					item(i).className = 'wide';
					error = 0;
				}
			}
		}
		if (error) return false;
		else return true;
	}
	catch (exeption)
	{
		return true;
	}
}