var config = new Array();
var ready = true;
   

jQuery(document).ready(function(){
	
	for(keyvalidation in config) {		
		jQuery("//form[@name='"+keyvalidation+"']/input:submit").click(function() {
			
			jQuery("form[@name='"+keyvalidation+"'] *").removeClass("error");
			
			eval('validate_showErrorMethod = validate_'+keyvalidation+'_showErrorMethod;');
			if (validate_showErrorMethod.indexOf("#")!= -1) {
				jQuery(validate_showErrorMethod+" > *").remove("*");							
			}	
			
			var res = new Array(0);
			
			res = checkForm(keyvalidation);
			for (element in res) {
				if (element.length > 0) {
					var tttt = 11;
					displayErrors(res, keyvalidation); break;
				}
			}

			if (tttt != 11) {
				eval('validate_sendMethod = validate_'+keyvalidation+'_sendMethod;');
				if (validate_sendMethod == 'ajax') {
					post(keyvalidation);				
				}
				else {
					jQuery("form[name='"+keyvalidation+"']").submit();
				}
			}


			return false;
		});
		
	}

});

function post(fName) {	
	if (ready) {
		var b = jQuery("form[@name='"+fName+"'] input, form[@name='"+fName+"'] textarea");
		var newstr = "";
		b.each(function() {
			if (jQuery(this).val() == "") {
				jQuery(this).val("");
			}
			newstr += this.name + '=' + jQuery(this).val() + '&';		
			
		});

		newstr += 'ajax=true';
		newstr += '&formName='+fName;

		$.ajax({
		   type: "POST",
		   url: jQuery("form[name='"+fName+"']").attr('action'),
		   data: newstr,
		   success: function(msg){			
			 if (msg.indexOf(" ok ") != -1) {
				 jQuery("#preloader").hide();
				 eval('validate_showErrorMethod = validate_'+fName+'_showErrorMethod;');
				 if (validate_showErrorMethod.indexOf("#")!= -1) {	
					jQuery("<p>Спасибо, мы свяжемся с Вами</p>").appendTo(validate_showErrorMethod);
				 }
				 ready = false;
				 setTimeout('readyFalse()', 15000);
			 }
			 else {
				var src = jQuery("captcha", msg).text();					
				src = "/libs/imgcode/"+src+".jpg";
				document.getElementById("captcha").src = src;
				
				text1 = jQuery("errors", msg).text();
						

				jQuery("#preloader").hide();
				eval('validate_showErrorMethod = validate_'+fName+'_showErrorMethod;');				
				if (validate_showErrorMethod.indexOf("#")!= -1) {	
					text1 = "<p>"+text1+"</p>";		
					jQuery(text1).appendTo(validate_showErrorMethod);
				}
				else {
					alert(text1);
				}			 
			}
		  }
		 });
		 jQuery("#preloader").show();
	}

	else {		
		eval('validate_showErrorMethod = validate_'+fName+'_showErrorMethod;');
		if (validate_showErrorMethod.indexOf("#")!= -1) {
			jQuery("<p>Слишком частое отправление запроса, подождите, пожалуйста</p>").appendTo(validate_showErrorMethod);
		}
		else {
			alert("Слишком частое отправление запроса, подождите, пожалуйста");
		}
	}
	
}

function readyFalse() {
	ready = true;
}



function displayErrors(array, formName) {
	eval('validate_highlight = validate_'+formName+'_highlight;');
	eval('validate_showErrorMethod = validate_'+formName+'_showErrorMethod;');	
	if (validate_highlight) {
		highlight(array, formName);
	}

	if (validate_showErrorMethod == "alert") {		
		alertError(array);
	}
	if (validate_showErrorMethod.indexOf("#")!= -1) {		
		showErrorInDiv(array, validate_showErrorMethod);
	}		
}

function highlight(array, formName) {

	for (field in array) {		
		for (error in array[field]) {			
			jQuery("form[@name='"+formName+"'] *[name='"+field+"']").addClass('error');
		}
	}
}
function alertError(array) {
	var string = "";
	out: 
	for (field in array) {		
		for (error in array[field]) {			
			var newError = getError(error, array[field]['caption'], array[field][error]);
			string += newError+"\n";
			continue out;			
		}
	}
	alert(string);
}

function showErrorInDiv(array, id) {
	var string = "";
	out: 
	for (field in array) {		
		for (error in array[field]) {			
			var newError = getError(error, array[field]['caption'], array[field][error]);			
			string += "<p>"+newError+"</p>";			
			continue out;
		}
	}	
	jQuery(id).append(string);
}


function getError(errorType, fieldName, value) {	
	switch (errorType) {
		case "maxlength": string = "У поля \"" + fieldName + "\" превышена максимальная длина - " + value; break;
		case "minlength": string = "Поле \"" + fieldName + "\" - недостаточно символов"; break;
		case "email": string = "Поле \"" + fieldName + "\" типа \"E-mail\" заполнено неверно"; break;
		case "noempty": string = "Поле \"" + fieldName + "\" обязательно для заполнения"; break;
		case "nonumber": string = "Поле \"" + fieldName + "\" не должно содержать цифры"; break;
		case "numberonly": string = "Поле \"" + fieldName + "\" должно содержать только цифры"; break;
		case "numberonly": string = "В Поле \"" + fieldName + "\" введен неверный цифровой код"; break;
		default: string = "Ошибка";
	}
	return string;
}


//Проверка формы
//formName - имя формы
function checkForm(formName) {	
	var res;
	var error = new Array(0);
	var newArr = config[formName];
	
	for(elem in newArr) {		
		res = checkField(elem, newArr[elem], formName);
		for (what in res) {
			if (what.length > 0) {
				error[elem] = new Array();
				error[elem] = res;
				error[elem]['caption'] = newArr[elem]['caption'];
				break;
			}
			else {
				delete error[elem];
				break;
			}
		}		
	}
	
	return error;
}

//Проверяет поле
//field - имя поля
//value - массив с ограничителями и их значения
//formName - имя формы
function checkField(field, value, formName) {	
	var error2 = new Array(0);
	var res;
	var newArr = value;
	for (var handler in newArr) {
		if (handler != 'caption') {
			functionName = "check_"+handler;		
			res = eval(functionName+"('"+field+"','"+ newArr[handler]+"','"+ formName+"')");
			
			if (!res) {
				error2[handler] = newArr[handler];
			}
			else {
				delete error2[handler];
			}
		}
	}
		
	return error2;
}
















/*Обработчики*/



	function check_maxlength(field, value, formName) {		
		if (jQuery("form[@name='"+formName+"'] *[name='"+field+"']").val().length > parseInt(value)) {
			return false;
		}
		return true;
	}

	function check_captcha(field, value, formName) {		
		return true;
	}

	
	/*Min-lenght validation*/
	function check_minlength(field, value, formName) {
		if (jQuery("form[@name='"+formName+"'] *[name='"+field+"']").val().length < parseInt(value)) {
			return false;
		}
		return true;		
	}
	
	/*Only numbers validation*/
	function check_numberonly(field, value, formName) {
		var string = jQuery("form[@name='"+formName+"'] *[name='"+field+"']").val();

		var reg = new RegExp("[^0-9]+", 'i');
		var result = reg.test(string);			
		if (result)  {
			return false;
		}
		return true;
	}
	
	
	/*No numbers validation*/
	function check_nonumber(field, value, formName) {
		
		var string = jQuery("form[@name='"+formName+"'] *[name='"+field+"']").val();
		

		var reg = new RegExp("[0-9]", 'i');
		var result = reg.test(string);		
		
		if (result)  {
			return false;
		}
		return true;
	}
	
	/*Only numbers and symbols validation*/
	function check_numberandsimbols(field, value, formName) {
		var string = jQuery("form[@name='"+formName+"'] *[name='"+field+"']").val();
		
		var reg = new RegExp("[^0-9-_+@\s]", 'i');
		var result = reg.test(string);			
		if (!result)  {
			return false;
		}
		return true;		
	}
	
	/*E-mail validation*/
	function check_email(field, value, formName) {
		var string = jQuery("form[@name='"+formName+"'] *[name='"+field+"']").val();
		
		var reg = new RegExp("[0-9a-z_]+@[0-9a-z_^.]+\\.[a-z]{2,3}", 'i');
		var result = reg.test(string);			
		if (!result)  {
			return false;
		}
		return true;	
		
	}
	
	/*No empty validation*/
	function check_noempty(field, value, formName) {
		var string = jQuery("form[@name='"+formName+"'] *[name='"+field+"']").val();
		if (string.length < 1 || string=='Ваше имя' || string=='Ваше мнение') {
			return false;
		};
		
		return true;
	}