(function($){
	
	$.widget( "sg.sg_simpleajax", {
		options: {
			buttons: {},
			buttons_setup: {},
			startFunc: function(){},
			completeFunc: function(data, e){},
			url: ''
		},
		
		vars:{
			post: [],
			get: []
		},
		
		_create: function() {
			var $widget = this;
			var $wrapper = this.element;
			var $options = this.options;
			var $vars = this.vars;
			
			$widget.deleteData();
			
			$wrapper.sg_autobuttons({
				buttons: $options.buttons,
				buttons_setup: $options.buttons_setup
			});
		},
		
		_init: function(){
			var $widget = this;
			$widget.deleteData();
		},
		
		deleteData: function(){
			var $vars = this.vars;
			$vars.post = [];
			$vars.get = [];
		},
		
		addPostItem: function($key, $val){
			var $vars = this.vars;
			$vars.post.push({
				'key': $key,
				'val': $val
			});
		},
		addGetItem: function($key, $val){
			var $vars = this.vars;
			$vars.get.push({
				'key': $key,
				'val': $val
			});
		},
		
		getUrl: function(){
			return this.options.url;
		},
		
		
		
		//##########################################################################################
		// submit form
		
		// reload window with url (GET)
		loadDataUrl: function( $url ){
			var $options = this.options;
			var $vars = this.vars;
			
			var $url_get = $url+'?';
			jQuery.each($vars.get, function(index, value){
				$url_get += value.key+'='+value.val+'&';
			});
			
			console.log('START loadDataUrl - url: '+$url_get);
			
			$options.startFunc();
			
			window.location = $url_get;
		},
		
		// submit loaded data per post (GET & POST)
		submitData: function( $url ){
			var $wrapper = this.element;
			var $options = this.options;
			var $vars = this.vars;
			
			var $url_get = $url+'?';
			jQuery.each($vars.get, function(index, value){
				$url_get += value.key+'='+value.val+'&';
			});

			var $post_data = '';
			jQuery.each($vars.post, function(index, value){
				$post_data += value.key+'='+value.val+'&';
			});
			
			$options.url = $url_get;
			console.log('START submitData - url: '+$options.url);
			$options.startFunc();
			
			$.post(
				$url_get,
				$post_data,
				function(data) {
					var e = {
						target: $wrapper
					};
					$options.completeFunc(data, e);
				}
			);
		},
		
		// submit FORM and data per ajax post (GET & POST)
		submitFormData: function( $tag_form ){
			var $wrapper = this.element;
			var $options = this.options;
			var $vars = this.vars;
			
			var $url_get = '?';
			jQuery.each($vars.get, function(index, value) {
				$url_get += value.key+'='+value.val+'&';
			});
			$tag_form.attr('action', $tag_form.attr('action')+$url_get);

			jQuery.each($vars.post, function(index, value) {
				$tag_input = $('<input name="'+value.key+'" value="'+value.val+'" type="text" />');
				$tag_form.append( $tag_input );
			});
			
			$options.url = $tag_form.attr('action');
			console.log('START submitFormData - url: '+$options.url);
			
			var $post_data = $tag_form.serialize();
			$.ajax({
				url: $tag_form.attr('action'),
				data: $post_data,
				dataType: 'text',
				type: 'POST',
				beforeSend: $options.startFunc,
				success: function(data){
					var e = {
						target: $wrapper
					};
					$options.completeFunc( data, e );
				}
			});
		},
		
		// submit FORM by default (GET & POST)
		submitForm: function( $tag_form ){
			var $options = this.options;
			var $vars = this.vars;
			
			var $url_get = '?';
			jQuery.each($vars.get, function(index, value){
				$url_get += value.key+'='+value.val+'&';
			});
			$tag_form.attr('action', $tag_form.attr('action')+$url_get);
			
			jQuery.each($vars.post, function(index, value){
				$tag_input = $('<input name="'+value.key+'" value="'+value.val+'" type="text" />');
				$tag_form.append( $tag_input );
			});
			
			$options.url = $tag_form.attr('action');
			
			console.log('START submitForm - url: '+$options.url);
			$options.startFunc();
			
			$tag_form.submit();
		},
		
		// submit FORM in iFrame (GET & POST & FILES)
		submitAjaxForm: function( $tag_form ){
			var $wrapper = this.element;
			var $options = this.options;
			var $vars = this.vars;
			
			var $url_get = '?';
			jQuery.each($vars.get, function(index, value){
				$url_get += value.key+'='+value.val+'&';
			});
			$tag_form.attr('action', $tag_form.attr('action')+$url_get);

			jQuery.each($vars.post, function(index, value){
				$tag_input = $('<input name="'+value.key+'" value="'+value.val+'" type="text" />');
				$tag_form.append( $tag_input );
			});
			
			$options.url = $tag_form.attr('action');
			
			console.log('START submitAjaxForm - url: '+$options.url);
			$options.startFunc();
			
			//###########################################################
			//iframe
			var $ID_iframe = 'ax_form_iframe';
			var $tag_iframe = $('body').find('#'+$ID_iframe);
			
			/*
			if(!$tag_iframe.length)
			{
				alert('no iframe found');
				//var iframe = $( '<iframe name="'+$ID_iframe+'" id="'+$ID_iframe+'" style="display:none" />' );
				var iframe = $( '<iframe name="'+$ID_iframe+'" id="'+$ID_iframe+'" style="display:none" />' );
        		$('body').append( iframe );
				
				$tag_iframe = iframe;
			}
			*/
			if(!$tag_iframe.length){
				var iframe = $( '<iframe name="'+$ID_iframe+'" id="'+$ID_iframe+'" style="display:none" src="" />' );
				$('body').append( iframe );
				$tag_iframe = iframe;
			}else{
				$tag_iframe.contents().find('body').empty();
			}
					
			/*
			var $tag_iframe = $('#'+$ID_iframe);
			$tag_iframe.bind('load', function(){
				
				alert('load');
				
				var $data_iframe = $(this).contents().find('body').html();
				//$(this).contents().find('body').html('');
				$(this).contents().find('body').empty();
                $options.completeFunc( $data_iframe, e );
				
				$tag_iframe.remove();
				
				//$(this).unbind('load');
			});
			*/
			
			
			var $target = $('body').find($wrapper);
			var $e = {
				target: $target 
			};
			
			$tag_form.attr( "target", $ID_iframe );
			
			$tag_form.submit(function(){
				$tag_iframe.load(function(){
					var $data_iframe = $tag_iframe.contents().find('body').html();
					$options.completeFunc( $data_iframe, $e );
					$tag_iframe.unbind('load');
				});
				$tag_form.unbind('submit');
			});
			
			$tag_form.submit();
		}
	});
  
})(jQuery);
