function checkFormError(obj, arr) {
	var errorFlag = false;
	var errorText = '';
	var errorType = '';
	for (c=0;c<arr.length;c++) {
		if (arr[c] == 'required' && obj.val().length < 1) {
			errorFlag = true;
			errorType = arr[c];
			errorText = $('#const_form37').text();
		}
		var regemail = new RegExp("^[0-9a-z_\.\-]+@[0-9a-z_^\\.\-]+\\.[a-z]{2,6}$", 'i');
		if (!errorFlag && arr[c] == 'email' && obj.val() && !regemail.test(obj.val())) {
			errorFlag = true;
			errorType = arr[c];
			errorText = $('#const_form38').text();
		}
		if (!errorFlag && arr[c] == 'number' && parseInt(obj.val()) != obj.val()) {
			errorFlag = true;
			errorType = arr[c];
			errorText = 'Введите число';
		}
		if (!errorFlag && arr[c].indexOf('min') == 0 && parseInt(obj.val()) < arr[c].substr(3, arr[c].length - 3))
		{
			errorFlag = true;
			errorType = arr[c];
			errorText = 'Число не меньше <a href="#" onmousedown="pasteErrorValue(this);" onclick="return false;">' + arr[c].substr(3, arr[c].length - 3) + '</a>';
		}
		if (!errorFlag && arr[c].indexOf('max') == 0 && parseInt(obj.val()) > arr[c].substr(3, arr[c].length - 3))
		{
			errorFlag = true;
			errorType = arr[c];
			errorText = 'Число не больше <a href="#" onmousedown="pasteErrorValue(this);" onclick="pasteErrorValue(this); return false;">' + arr[c].substr(3, arr[c].length - 3) + '</a>';
		}
		if (!errorFlag && arr[c].indexOf('file_') == 0)
		{
			var val = obj.val();
			var extensions = arr[c].split(' ');
			var badExtension = true;
			for (j=0;j<extensions.length;j++)
				if (extensions[j].indexOf('file_') == 0) {
					var checkExt = extensions[j].substr(5, extensions[j].length - 5);
					var fileExt;
					var posExt = val.lastIndexOf('.');
					if (posExt >= 0) fileExt = val.substr(posExt + 1, val.length - posExt - 1);
					if (fileExt) fileExt = fileExt.toLowerCase();
					if (fileExt == checkExt) badExtension = false;
				}
			if (badExtension) {
				errorFlag = true;
				errorType = arr[c];
				errorText = 'Выбранный Вами тип файла не поддерживается.';
			}
		}
		if (!errorFlag && arr[c] == 'length')
		{
			var val = obj.val();
			var classes = obj.attr('class').split(' ');
			var badLength = false;
			for (j=0;j<classes.length;j++)
				if (classes[j].indexOf('min_length') == 0) {
					var minlength = classes[j].substr(10, classes[j].length - 10);
					if (val.length > 0 && val.length < minlength) badLength = true;
				}
			if (badLength) {
				errorFlag = true;
				errorType = arr[c];
				errorText = 'Символов, не менее: '+minlength;
			}
		}
		if (!errorFlag && arr[c] == 'password')
		{
			var fields = obj.parent().parent().find('input[type=password]');
			for (j=0;j<fields.length;j++)
				if (fields.eq(j).val() != '' && fields.eq(j).val() != obj.val()) {
					errorFlag = true;
					errorType = arr[c];
					errorText = 'Пароли не совпадают';
				}
		}
	}
	if (errorFlag) {
		if (errorType == 'password') {
			obj.parent().parent().removeClass('error').addClass('correct');
			$('span.error_'+obj.attr('name'), obj.parent()).remove();
			obj = obj.parent().parent().find('input[type=password]:last');
		}
		if (!obj.parent().parent().hasClass('error')) {
			obj.parent().parent().removeClass('correct').addClass('error');
   			obj.after($('<span class="comment error-txt message error error_type_'+errorType+' error_'+obj.attr('name')+'">'+errorText+'</span>'));
		} else {
			$('span.error_'+obj.attr('name'), obj.parent()).html(errorText);
		}
	} else {
		if (obj.hasClass('val_password')) {
			var fields = obj.parent().parent().find('input[type=password]');
			for (j=0;j<fields.length;j++)
				if ($('span.error_'+fields.eq(j).attr('name')).text() == 'Пароли не совпадают') {
					$('span.error_'+fields.eq(j).attr('name')).parent().removeClass('error').addClass('correct');
					$('span.error_'+fields.eq(j).attr('name')).remove();
				}
		}
		if (!obj.parent().parent().hasClass('correct')) {
			obj.parent().parent().removeClass('error').addClass('correct');
		        $('span.error_'+obj.attr('name'), obj.parent()).remove();
		}
	}
	return errorFlag;
}

function checkSubmitBtn(btn, arr) {
	var errorFlag = false;
	for (c=0;c<arr.length;c++) {
		if (!arr[c].parent().parent().hasClass('correct')) errorFlag = true;
	}
	if (!errorFlag) {
		btn.removeAttr('disabled').removeClass('disabled');
		btn.parent().removeClass('disabled');
	}
	else {
		btn.attr('disabled', 'disabled');
		if (!btn.hasClass('disabled')) btn.addClass('disabled');
		if (!btn.parent().hasClass('disabled')) btn.parent().addClass('disabled');
	}
}

var needValidate = new Array();
var checkArray = new Array();

function feedformval(formId, ajaxSubmit) {
	if (!formId || !$('#'+formId).length) return false;

	if (ajaxSubmit) $('#'+formId+' .block_hidden').append('<input name="ajax" value="" type="hidden" />');

	var form = $("#"+formId);
	var inputs = $("input[type='text'], input[type='password'], textarea", form);
	var btn = $('input[type=submit]', form);

	if (inputs.length) {
		var i = -1;
		needValidate[formId] = new Array();
		inputs.each(function(){
			if ($(this).hasClass('val_required') || $(this).hasClass('val_email') || $(this).hasClass('val_length') || $(this).hasClass('val_password')) {
				i++;
				needValidate[formId][i] = $(this);
			}
		});

		if (needValidate[formId].length) {
			btn.attr('disabled', 'disabled').addClass('disabled');
			btn.parent().addClass('disabled');

			for (var j_counter = 0; j_counter < needValidate[formId].length; j_counter++) {
				$(needValidate[formId][j_counter]).bind('keyup paste focus blur change', function() {
					i = -1;
					checkArray = new Array();

					if ($(this).hasClass('val_required')) {i++;checkArray[i] = 'required';}
					if ($(this).hasClass('val_email')) {i++;checkArray[i] = 'email';}
					if ($(this).hasClass('val_length')) {i++;checkArray[i] = 'length';}
					if ($(this).hasClass('val_password')) {i++;checkArray[i] = 'password';}
					checkFormError($(this), checkArray);

					var elem = $('form[id='+formId+']:eq(0)', $(this).parents());
					checkSubmitBtn($('input[type=submit]', elem), needValidate[elem.attr('id')]);
				});
				$(needValidate[formId][j_counter]).blur();
			}
		}

		if (btn.hasClass('disabled')) {
			alertBox($('#const_form39').text()+'<br/> '+$('#const_form40').text());
			return false;
		} else {

			if (ajaxSubmit) {				
				$('input:submit', form).attr('disabled','disabled').addClass('disabled');
				$('input:submit', form).parent().addClass('disabled');
				var formPostedId = form.attr('id');
				$.post(
					'/feedback.php',
					form.serializeArray(),
					function(xmlObj) {
						var obj = $('#'+formPostedId);
						var alertMsg = null;
						var flagError = false;
						if ($('redirect', xmlObj).length) window.location = $('redirect', xmlObj).text();
						if ($('success', xmlObj).length) alertMsg = $('success', xmlObj).text();
						if ($('error', xmlObj).length) {
							flagError = true;
							alertMsg = $('error', xmlObj).text();							
						}							
						if (!flagError) {
							//$( 'span.error', obj ).remove();
							$( '.error', obj ).removeClass('error');
							$( '.valid', obj ).removeClass('correct');
							document.getElementById( formPostedId ).reset();								
							$('.overlay').hide().next().hide();
						}
						if ($('captcha_img', xmlObj).length) {
							form.find('.img-captcha').attr('src', $('captcha_img', xmlObj).text());//.parent().find('input').attr('value', '');
						}
						if (alertMsg != null && alertMsg != '') {
							if ($('#'+alertMsg).length)
								alertMsg = $('#'+alertMsg).text();
							alertBox(alertMsg);
						}
						for (j = 0; j < needValidate[formPostedId].length; j++) {
							$(needValidate[formPostedId][j]).blur();
						}
					});
				return false;
			} else {
				return true;
			}
		}
	}

}
