/*
Классы:

notempty		- не пустой и тире
alpha			- только буквы и тире
alpha_s			- только буквы, тире и пробел
rualpha			- только русские буквы и тире
laalpha			- только латинские буквы и тире
alphadigit		- буквы, цифры и тире
rualphadigit	- русские буквы, цифры и тире
laalphadigit	- латинские буквы, цифры и тире
digit,int			- только цифры
tel				- номер телефона (цифры, пробел, тире)
email			- e-mail



Дополнительно:
если в форме есть поля с атрибутом name равным pass1 и pass2, 
то скрипт проверит их равенство.
*/

function checkForm(form, erShow) {
	var pass = {};
	if(typeof erShow == 'undefined') erShow = true; // показывать всплывающие подсказки
	
	var param = [];
	param[0] = [/\balpha\b/i, /[^a-z\u0410-\u042F\-]/i, 'Здесь разрешено вводить только буквы'];
	param[1] = [/\balpha_s\b/i, /[^a-z\u0410-\u042F\-\s]/i, 'Здесь разрешено вводить только буквы и пробелы'];
	param[2] = [/\brualpha\b/i, /[^\u0410-\u042F\-]/i, 'Здесь разрешено вводить только русские буквы'];
	param[3] = [/\blaalpha\b/i, /[^a-z\-]/i, 'Здесь разрешено вводить только латинские буквы'];
	param[4] = [/\balphadigit\b/i, /[^a-z\u0410-\u042F\-\d]/i, 'Здесь разрешено вводить только буквы и цифры'];
	param[5] = [/\brualphadigit\b/i, /[^\u0410-\u042F\-\d]/i, 'Здесь разрешено вводить только русские буквы и цифры'];
	param[6] = [/\blaalphadigit\b/i, /[^a-z\-\d]/i, 'Здесь разрешено вводить только латинские буквы и цифры'];
	param[7] = [/\b(digit|int)\b/i, /[^\d]/, 'Здесь разрешено вводить только цифры, без пробелов'];
	param[8] = [/\btel\b/i, /[^\d\-\s\(\)]/, 'Здесь разрешено вводить только цифры, пробелы, тире и круглые скобки'];

	var erempty = '&nbsp;&nbsp;данное поле не должно быть пустым';
	var erpass = '&nbsp;&nbsp;пароли не совпадают';
	var eremail = '&nbsp;&nbsp;неправильно введен адрес электронной почты';
	
	var empty = /\bnotempty\b/i;
	var email = /\bemail\b/i;
	var reemail = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,30})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;

	var x = param.length;
	var flag = true;

	$('input:text, input:password, textarea, select', form).each(function (){
		///////////////////// password checking /////////////////////////////////////////////////////
			if(this.name == 'pass1') pass = $(this).val();
			if(this.name == 'pass2') {
				if($(this).val() != pass)	{err(this,erpass); return;}
				else good(this);
			}
		///////////////////// not empty checking /////////////////////////////////////////////////////
			if(empty.test(this.className))	{
				if($(this).val() == '')	{err(this,erempty); return;}
				else good(this);
			}
		///////////////////// e-mail checking ////////////////////////////////////////////////////////
			if(email.test(this.className) && $(this).val() != '') {
				if(!reemail.test($(this).val()))	{err(this,eremail); return;}
				else good(this);
			}
		///////////////////// alpha and digit checking ///////////////////////////////////////////////
			for(var j=0; j<x; j++) {
				if(param[j][0].test(this.className) && $(this).val() != '') {
					if(param[j][1].test($(this).val()))	{err(this,param[j][2]); return;}
					else good(this);
				}
			}
	});

	
	return flag;
	
	function err(el,erMes)	{
		$(el).css('border','1px solid red');
		flag = false;
		if(erShow)	{
			if($(el).next('b.ermsg').length == 0) $(el).after('<b class="ermsg pad3 abs">'+erMes+'</b>');
			else $(el).next('b.ermsg').html(erMes);
		}
	}

	function good(el) {
		$(el).css('border','1px solid green');
		if(erShow)	$(el).next('b.ermsg').remove();
	}
}