/**
 * @author charnad
 * @version 1.0
 * @description Проверяет форму на заполненность
 * @param {Array} options Содержит опции валидации
 */
jQuery.fn.validForm = function(userOptions) {

    var options = {
    	errorContainer: "#errorList",
    	errorContainerCssClass: {
    		'text-color': "#F00"
    	}
    }, 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=submit]").click(function(event) {
        /**
         * @type int
         * @description Количество ошибок
         * @default 0
         */
        var errorAmount = 0;
        $('#errors').html('<span>Проверка данных...</span>');
        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.addClass('inputError');
	         			errorAmount++;
	         		} else {
	         			if (/\w*email\w*/.test(element.attr('name')) && 
	         				!(/\w+@\w+\.[a-z]{2,4}/i.test(element.val()))) {
	         				//errors += '<br />Правильно введите e-mail адрес';
	         				element.addClass('inputError');
	         				errorAmount++;
	         			} else {
	         				element.removeClass('inputError');
	         			}
	         		}
         		}
     	});

     	collection.keypress( function (){
            $(this).removeClass('inputError');
        });

        collection.change( function() {
            if (($(this).attr('value')).length < 1) {
                $(this).addClass('inputError');
            }
            else {
            	$(this).removeClass('inputError');
            }
        });


        if (errorAmount) {
        	$(options.errorContainer).html(errors);
        	$(options.errorContainer).slideDown();
            return false;
        } else {
        	//$(options.errorContainer).slideUp();
        	if (form.hasClass('ajax')) {
        		var url = form.attr('action'), data = {0:0}, collection, element;
            		$(options.errorContainer).html('<span>Отправка данных...</span>');
            		$(options.errorContainer).slideDown('slow');
                    collection = form.find("input")
                        .add(form.find("textarea"))
                        .add(form.find("select"));
                    
                    collection.each(function() {
                    	element = $(this);
                    	data[element.attr('name')] = element.val(); 
                    });
                    
                    form.find('input[type=radio]').each(function () {
                    	if ($(this).attr('checked')) {
                    		data[$(this).attr('name')] = $(this).val(); 
                    	}
                    });
                    
                    $.ajax({
                        url: url,
                        data: data,
                        success: function (res) {
                            if (res.success) {
                            	//alert(res.data.messages);
                            	$('div.overlayer').click();
                            	$(options.errorContainer).html('<strong>' + res.data.messages + '</strong>');
                            	$(options.errorContainer).slideDown('slow');
                            	setTimeout(function () {
                            		$(options.errorContainer).slideUp('slow');
                            	}, 5000);
                            } else {
                            	$(options.errorContainer).html(res.data.messages);
                                //alert(res.data.messages);
                            }
                        }
                    });
            	return false;
        	}
        }
        });
    }

}