
(function($) {
    /**
     * error_show_method - defined how to show errors
     * values:
     * 1 - show error bottom of input field where error was
     * 2 - show shortcut right of input 
     */
    var defaults = {
        error_show_method: 1
    };
    var options;
    var obj;
    var checkFieldId;
    var checkFieldParams;

    var methods = {
        init:function(params) {
            options = $.extend({}, defaults, params);
            return this.each(function(){
                obj = $(this);

                obj.find('.reset_button').click(function(){
                    obj.find('.form_field').val('');
                    return false;
                });

                obj.find('.submit_button').click(function() {
                    var formError = false;
                    obj.find('.form_field').each(function(){
                        var checkFuncsStr = $(this).attr('check');
                        checkFieldId =  $(this).attr('field_id');
                        if( checkFuncsStr ){
                            var funcs = checkFuncsStr.split(';');
                            var errorsArr = [];
                            
                            for(var i=0; i<funcs.length; i++){
                                var error = false;
                                var tryFuncArr = funcs[i].split('[');
                                if(tryFuncArr.length > 1){
                                    var param = tryFuncArr[1].replace(']','');
                                    var current_check_function = tryFuncArr[0];
                                    var ff = tryFuncArr[0];
                                    //var error = !call_user_func_array(ff,[$(this).val(),param]);
                                    //console.warn('ff = '+ff);
                                    var error = !call_user_func(ff,[checkFieldId,obj,param]);
                                } else {
                                    var current_check_function = funcs[i];
                                    var error = !eval(current_check_function)();
                                }
                                if(error){
                                    var errText = obj.find('.check_'+checkFieldId+'[check_name = '+current_check_function+']').attr('error_text');
                                    obj.find('.error_'+checkFieldId).html( errText );
                                    formError = true;
                                    break;
                                } else {
                                    obj.find('.error_'+checkFieldId).html( '&nbsp;' );
                                }
                            }
                        }
                    });
                    if (!formError){
                        obj.submit();
                    } else {
                        return false;
                    }
                });
            });
        },
        confirm: function() {
            return this.each(function(){
                obj = $(this);
                var h = obj.height();
                var w = obj.width();
                $('.confirm_wrap').height(h).width(w);
                $('.confirm_wrap').fadeIn(400);
                setTimeout(function(){
                        obj.find('.form_field').val('');
                        $('.confirm_wrap').fadeOut(600);
                    }
                    ,10000
                );
            });
        }
    };


    function not_empty(){
        if(!checkFieldId){
			alert('Error in former.not_empty: checkFieldId not defined');
            return false;
		}
        var val = trim( obj.find('.form_field[field_id = '+checkFieldId+']').val() );
		return val;
    }

    function valid_email(){
		if(!checkFieldId){
			alert('Error in former.not_empty: checkFieldId not defined');
            return false;
		}
		var val = trim( obj.find('.form_field[field_id = '+checkFieldId+']').val() );
		return emailValidate(val);
	}

    $.fn.former = function(method){
        if ( methods[method] ) {
            // если запрашиваемый метод существует, мы его вызываем
            // все параметры, кроме имени метода прийдут в метод
            // this так же перекочует в метод
            return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            // если первым параметром идет объект, либо совсем пусто
            // выполняем метод init
            return methods.init.apply( this, arguments );
        } else {
            // если ничего не получилось
            $.error( 'Метод "' +  method + '" не найден в плагине jQuery.mySimplePlugin' );
        }
    };
})(jQuery);


$(document).ready(function() {
    var f_obj = $('.form_g');
    if(f_obj.length){
        $.each(f_obj, function(i,item){
            var cl = $(item).attr('class').split(' ');
            $('.'+cl[0]).former();
        });
    }

        
});
