/*
 * jQuery Mediatool Ajax form plugin 0.1
 *
 * Copyright (c) 2009 Martin Lögdberg
 * 
 * Turns a form into a ajax-form with.
 * 
 * You can define a callback function that will be passed the Json response
 * 
 * IMPORTANT: This plugin depends on the mtMessage plugin.
 * 
 *
 */
(function($){
    $.fn.mtAjaxForm = function(options){
    
        var defaults = {
        	
			saveAlertClass: "fieldset",
			submitButtonClass: 'submit',
            formActionName: 'form-action',
			showTrueTime: 2000,
			submitOnEnter: true,
			loadMessage: "",
			onBefore: function(){},
			callBack: function(){}
        };
        
        var options = $.extend(defaults, options);
        
		
        return this.each(function(){
        	
            var obj = $(this);
			
            var submitButton = $("." + options.submitButtonClass, obj);
			
			/*
			 * Sets not-saved alert
			 * 
			 */
			/*$("input, textarea", obj).bind("keyup", function(e){
				$(options.saveAlertClass, obj).before("<span class='not-saved'> - Inte sparat!</strong>");
			});
			*/
			
			if (options.submitOnEnter) {
				$("input", obj).bind("keyup", function(e){
					var code = (e.keyCode ? e.keyCode : e.which);
					if (code == 13) {
						validateForm(obj);
					}
				});
			}
            
            
            submitButton.click( function(){
				validateForm(obj);
			});
            
        });
        /* End of each */
		
		
		function validateForm(obj){
			obj.validation();
                
            if (obj.validate()) {
                submitForm(obj);
            }
		}
        
        
        function submitForm(obj){
            showLoader();
			$(":input", obj).removeAttr("disabled");
            var dataString = obj.serialize();
			var action = $("input[name=" + options.formActionName + "]", obj).val();
            doAjaxPost(dataString, action, obj);
        }
        
        
        function doAjaxPost(dataString, action, obj){
        
            $.ajax({
                type: "POST",
                url: action,
                data: dataString,
				dataType: 'json',
                success: function(response){
                    showMessage( response );
                }
            });
        }
        
        
        function showLoader(){
            $.mtMessage.showLoader( options.loadMessage );
        }
        
        function showMessage( response ){
            $.mtMessage.showMessage( response, options.callBack, options.showTrueTime  );
        }
        
    };
    /* End of wrapper function */
	
})(jQuery);
