/**
 * formN plugin 1.0
 *
 * Copyright (c) 2010 Nur Hasan 
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 */

/**
 * For comments, suggestions or bug reporting,
 * email me at: nur858ATgmailDOTcom
 */

(function($) {
	$.fn.formN = function(config){
		this.each(function(){
			el = new $formN(this, config);		
		});
		return config.api?el:this;
	};
	var defaults = {
			api:false,
			url: '#',			
			loading: '<div class="loading" style="height: 400px;" />',
			method: 'get',
			params: {},
			onUnload:function(){}
	};
	$.formN = function(element, config){
	    this.config = $.extend({}, defaults, config || {});
	    this.trigger = element;	    
    	var $target = $('.apple_overlay');
    	if(!$target.length) {
    		var $container = $("<div class='apple_overlay'></div>");	    		
    		$container.appendTo($('body'));
	    	$target = $container;
    	}
    	this.preloader = $(this.config.loading);    
 	    this.target = $target;
 	    var $this = this;
    	$.each("onUnload".split(","),function(i,name){
    		if($.isFunction($this.config[name]))
    			$($this.trigger).bind(name, $this.config[name]);
    	}); 	    
	    $(this.trigger).click(function(e){	    	
	    	$this.target.html('');
	    	var closer = $('.close');
	    	if(!closer.length){
	    		var closer = $('<a class="close"></a>').click(function(){
	    			$this.overlay.close();
	    		});
	    		$this.target.append(closer);
	    	}
	    	//e.preventDefault();
            $this.overlay = $(this).overlay({
                api:true,
            	top: '10%',
            	mask: {
            		//color: '#DBDCED',
            	    //color:'green',
            	    color:'#464646',
            		loadSpeed: 200,
            		opacity: 0.5
            	},
            	onLoad:function(){
            		var overlay = this.getOverlay();
            		$this.preloader.show();
            		overlay.append($this.preloader);
            		$this.load();
            	},
            	effect:'apple',
            	closeOnClick: false,
            	closeOnEscape:true,
            	load: true,
                target:$this.target
            });	    	
	    });
	};
	
    $formN    = $.formN;
    $formN.fn = $formN.prototype = {};
    $formN.fn.extend = $formN.extend = $.extend;
    $formN.fn.extend({
	    load:function(url, params){
	    	url    = url?url:this.config.url;
	    	params = params?params:this.config.params;
	    	var $this = this;
		    $.post(url, params,function(data){
		    	$this.preloader.hide();
		    	switch(data.event){
		    		case 'init':	    	
				    	$this.target.append(data.payload);
				    	data = $(data);
			    	    window.eval(data.filter('script').html());
			    	    $('form', $this.target.get(0)).submit(function(e){
			    	        e.preventDefault();
			    	        $this.load($this.config.url, $(this).serialize());
			    	    });		    			
		    			break;
		    		case 'failed':
		    			$('#message_ajax').css('color','red').html(data.payload);
		    			break;
		    		case 'done':		    			
		    	        $($this.trigger).trigger('onUnload');
		    	    	$this.overlay.close();		    			
		    	    	$('#message').html(data.payload);
		    	}
		    },"json");    	   
        } 
    });
	
})(jQuery);