var Error = {
	_errors: [],

	check: function(name) {
		$("*:enabled[@required = 1]").each(function() {
			if (name == undefined || (name && $(this.form).attr("name") == name)) {
				switch ($(this).attr("reqtype")) {
					case "string":
						if ($(this).val().length < 1) {
							Error.add($(this)[0], 'Поле должно быть заполнено');
						}
					break;
					case "uname":
						if (!/^[0-9a-zA-Z-_]+$/.test($(this).val())) {
							Error.add($(this)[0], 'Значение поля может содержать только цифры, латинские буквы, сомвол - и _');
						}
					break;
					case "email":
						if (!/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/.test($(this).val())) {
							Error.add($(this)[0], 'Значение поля должно иметь формат address@domain.ru');
						}
					break;
					case "int":
						if ($(this).val() <= 0) {
							Error.add($(this)[0], 'Поле должно быть заполнено');
						}
					break;
					case "pattern":
						if ($(this).val().length < 1) {
							Error.add($(this)[0], 'Поле должно быть заполнено');
						}
					break;
				}
			}
		});
	},
	
	reset: function() {
		if (Error._errors.length) {
			$("div.error").each(function() {
				$(this).removeClass("error");
				$(this).addClass("important");
				$(this).attr("title", "");
			});
		}
		Error._errors = [];
	},
	
	add: function(obj, title) {
		Error._errors.push({'obj': obj, 'title': title});
		Error.show({'obj': obj, 'title': title});
	},
	
	show: function(error) {
		$(error['obj'].parentNode).removeClass("important");
		$(error['obj'].parentNode).addClass("error");
		$(error['obj'].parentNode).attr("title", error['title']);
	}
}

function findParent(obj, tag) {
	var parent = obj.parentNode;
	while (parent.nodeName != tag && parent.nodeName != 'HTML') parent = parent.parentNode;
	return parent.nodeName == 'HTML' ? false : parent;
}

function submitEnter(myfield, e) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	
	if (keycode == 13) {
	   checkAndSumbit(myfield);	   
	} else {
	   return true;
	}
}

function checkAndSumbit(_this) {
	var form = findParent(_this, 'FORM');
	if (!form) return false;
	
	Error.reset();
	Error.check($(form).attr("name"));
	
	if (Error._errors.length == 0) {
		form.submit();
	}
}

function checkUserAndSubmit(_this) {
	var form = findParent(_this, 'FORM');
	if (!form) return false;
	
	Error.reset();
	Error.check($(form).attr("name"));
	
	if (form.user_id.value > 0) {
		if(form.password.value.length > 0 && form.confirm_password.value.length == 0) {
			Error.add(form.confirm_password, 'Поле должно быть заполнено');
		} else if (form.password.value.length == 0 && form.confirm_password.value.length > 0) {
			Error.add(form.password, 'Поле должно быть заполнено');
		} else if(form.password.value.length > 0 && form.confirm_password.value.length > 0 && form.password.value != form.confirm_password.value) {
			Error.add(form.password, 'Значение пароля и его подтверждения должны совпадать');
			Error.add(form.confirm_password, 'Значение пароля и его подтверждения должны совпадать');
		}
	}
	
	if (!form.user_id.value || form.user_id.value == 0) {
		if (form.password.value.length == 0) {
			Error.add(form.password, 'Поле должно быть заполнено');
		}
		if (form.confirm_password.value.length == 0) {
			Error.add(form.confirm_password, 'Поле должно быть заполнено');
		}
		if((form.password.value.length > 0 && form.confirm_password.value.length > 0 && form.password.value != form.confirm_password.value)) {
			Error.add(form.password, 'Значение пароля и его подтверждения должны совпадать');
			Error.add(form.confirm_password, 'Значение пароля и его подтверждения должны совпадать');
		}
	}
	
	if (/^[0-9a-zA-Z]+$/.test(form.login.value)) {
		$.ajax({
			type: "GET",
	  		url: "/check-client/",
	  		data: "uname="+form.login.value+"&user_id="+form.user_id.value,
	  		async: false,
			success:
				function(data) {
					if (data > 0) Error.add(form.login, 'Значение логина не уникально. Введите другое значение');
				}
	 	});
	}
	
	if (Error._errors.length == 0) {
		return form.submit();
	}
	
	return false;
}
