/*
function show_window(url) {
	if (window.showModalDialog) {
		window.showModalDialog(url, "editor", "dialogWidth:600px;dialogHeight:400px");
	} else {
		alert('ok');
		window.open(url,'editor', 'height=255,width=250,toolbar=no,directories=no,status=no, continued from previous linemenubar=no,scrollbars=no,resizable=no ,modal=yes');
	}
}
*/
function trim(value) {
	return value.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function is_valid_email(value) {
	return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(value));
}

function is_valid_date(value) {
	return (/^\d{1,2}\.\d{1,2}\.\d{2,4}$/.test(value));
}

function is_numeric(value) {
	return (/^\d+$/.test(value));
}

function is_money(value) {
	return (/^[-+]?\d+(\.\d{1,2})?$/.test(value));
}

function hide_errors(form) {
	$(".error", form).slideUp('fast');
//	$(".error", form).hide();
}

function show_error(element, message) {
	var error = element.prevAll('div.error:first');
	error.html(message);
	error.slideDown('fast');
}

function hide_error(element) {
	element.prevAll('div.error:first').slideUp('fast');
}

function check_required(form) {
	var result = true;
    $("input.required", form).each(function(i) {
		var value = trim(this.value);
		if (value == '' && $(this).is(":visible")) {
			result = false;
			show_error($(this), 'Поле обязательно для заполнения');
		}
	});
    $("textarea.required", form).each(function(i) {
		var value = trim($(this).val());
		if (value == '') {
			result = false;
			show_error($(this), 'Поле обязательно для заполнения');
		}
	});
	return result;
}

function check_emails(form) {
	var result = true;
    $("input.email", form).each(function(i) {
		var value = trim(this.value);
		if (value != '' && $(this).is(":visible") && !is_valid_email(value)) {
			result = false;
			show_error($(this), 'Неверный формат электронного адреса');
		}
	});
	return result;
}

function check_numerics(form) {
	var result = true;
    $("input.numeric", form).each(function(i) {
		var value = trim(this.value);
		if (value != '' && $(this).is(":visible") && !is_numeric(value)) {
			result = false;
			show_error($(this), 'Неверный формат числа');
		}
	});
	return result;
}

function check_money(form) {
	var result = true;
    $("input.money", form).each(function(i) {
		var value = trim(this.value);
		if (value != '' && $(this).is(":visible") && !is_money(value)) {
			result = false;
			show_error($(this), 'Неверный формат суммы');
		}
	});
	return result;
}

function check_passwords(form) {
	var result = true;
    $("input.password", form).each(function(i) {
		var value = trim(this.value);
		if (value != '' && $(this).is(":visible") && value.length < 6) {
			result = false;
			show_error($(this), 'Пароль слишком короткий');
		}
	});
	return result;
}

function check_dates(form) {
	var result = true;
    $("input.date", form).each(function(i) {
		var value = trim(this.value);
		if (value != '' && $(this).is(":visible") && !is_valid_date(value)) {
			result = false;
			show_error($(this), 'Неверный формат даты');
		}
	});
	return result;
}

function validate(form) {
	hide_errors(form);
	var result = check_required(form);
	result = check_emails(form) && result;
	result = check_numerics(form) && result;
	result = check_money(form) && result;
	result = check_passwords(form) && result;
	result = check_dates(form) && result;
	return result;
}

