/**
 * @author charnad
 * @version 1.0
 * @description Проверяет форму на заполненность
 * @param {Array} options Содержит опции валидации
 */
jQuery.fn.validForm = function(userOptions) {

    var options = {
    	errorContainer: "#errorList",
    	errorContainerCssClass: {
    		'text-color': "#F00"
    	}
    }, i, errors = 'Пожалуйста, правильно заполните выделенные поля';
    
    $.extend(options, userOptions);
    /**
     * @description Если в форме инпутов больше, чем 0, то валидируем ее
     */

    $('head').append("<style>.inputError{display: block; border: 1px solid #FF0000 !important; background: #FAA;}</style>");
    
    if($(this).find('input').length > 0 && !$(this).hasClass('not-check')) {
    		Validate($(this));
    }
    
    /**
     * @argument {$} form Форма для валидации
     */
    function Validate(form) {
    	
    	form.find("input[type=image]").click(function(event) {
        /**
         * @type int
         * @description Количество ошибок
         * @default 0
         */
        var errorAmount = 0;

        var collection = form.find("input[type=text]")
            .add(form.find("input[type=password]"))
            .add(form.find("textarea"))
            .add(form.find("select"));

        collection.each(function() {
         	    var element = $(this);
         		var length = $.trim(element.val());

         		if (!(element.hasClass('empty'))) {
	         		if (!length) {
	         			element.parent().parent().addClass('inputError');
	         			errorAmount++;
	         		} else {
	         			if (/\w*email\w*/.test(element.attr('name')) && 
	         				(!(/\w+@\w+\.[a-z]{2,4}/i.test(element.val())) ||
	         				(element.val() == 'email@tut.by'))) {
	         				//errors += '<br />Правильно введите e-mail адрес';
	         				element.parent().parent().addClass('inputError');
	         				errorAmount++;
	         			} else {
	         				element.parent().parent().removeClass('inputError');
	         			}
	         		}
         		}
     	});

     	collection.keypress( function (){
            $(this).parent().parent().removeClass('inputError');
        });

        collection.change( function() {
            if (($(this).attr('value')).length < 1) {
                $(this).parent().parent().addClass('inputError');
            }
            else {
            	$(this).parent().parent().removeClass('inputError');
            }
        });

        if (errorAmount) {
        	$(options.errorContainer).html(errors);
        	for (i = 1; i < 3; i++) {
	        	$(options.errorContainer).fadeOut('fast');
	        	$(options.errorContainer).fadeIn('fast');
        	}
            return false;
        } else {
        	if (form.hasClass('ajax')) {
        		var url = form.attr('action'), data = {0:0}, collection, element;
            		$(options.errorContainer).html('<span>Отправка данных...</span>');
            		form.animate({opacity: 0.5}, 'slow');
            		form.parent().find('div.loading').show();
                    collection = form.find("input")
                        .add(form.find("textarea"))
                        .add(form.find("select"));
                    
                    collection.each(function() {
                    	element = $(this);
                    	data[element.attr('name')] = element.val(); 
                    });
                    
                    $.ajax({
                        url: url,
                        data: data,
                        success: function (res) {
                            if (res.success) {
                            	$(options.errorContainer).html('<strong>' + res.message + '</strong>');
                            	form.fadeOut('slow');
                            	form.parent().find('div.loading').hide();
                            } else {
                            	$(options.errorContainer).html(res.message);
                            	form.parent().find('div.loading').hide();
                            	alert(res.message);
                            	form.animate({opacity: 1}, 'slow');
                            }
                        }
                    });
            	return false;
        	}
        }
        });
    }
}
