jQuery.fn.extend({
	hicone_container_load: function(url, parameters, limit_unique_id, settings) {
		
		if ( !this.length ) { return this; }
		
		var me = this;
				
		if (!limit_unique_id) {
			var unique_ids = new Array();
			jQuery(me).each(function (i, e) {
				if(limit_unique_id = jQuery(e).attr('data-unique-id'))
				{
					jQuery(me).hicone_container_load(url, parameters, limit_unique_id, settings);
				}
			});
			return this;
		}
		
		if (!settings) { settings = {}; }
		
		settings['url'] = url;
		settings['data'] = parameters;
		
		if (!settings['global']) { settings['global'] = false; }
		if (!settings['type']) { settings['type'] = 'post'; }
		
		var arg_before_send = settings['beforeSend'];
		settings['beforeSend'] = function (XMLHttpRequest) {
			jQuery(me).each(function (i, e) {
				var cur_unique_id = jQuery(e).attr('data-unique-id');
				if (limit_unique_id == null || (cur_unique_id != null && cur_unique_id == limit_unique_id)) {
					jQuery(e).hicone_container_show_loading(cur_unique_id); 
					jQuery(e).trigger('container_load_send');
				}
			});
			if (jQuery.isFunction(arg_before_send)) { jQuery(me).each(function (i, e) { arg_before_send(e, XMLHttpRequest); }); }
		};
		
		var arg_complete = settings['complete'];
		settings['complete'] = function (XMLHttpRequest, textStatus) {
			jQuery(me).each(function (i, e) {
				var cur_unique_id = jQuery(e).attr('data-unique-id');
				if (limit_unique_id == null || (cur_unique_id != null && cur_unique_id == limit_unique_id)) {
					jQuery(e).hicone_container_hide_loading(cur_unique_id); 	
					jQuery(e).trigger('container_load_complete');
				}
			});
			if (jQuery.isFunction(arg_complete)) { jQuery(me).each(function (i, e) { arg_complete(e, textStatus, XMLHttpRequest); }); }
		};
		
		var arg_success = settings['success'];
		settings['success'] = function (data, textStatus, XMLHttpRequest) {
			jQuery(me).each(function (i, e) {
				var cur_unique_id = jQuery(e).attr('data-unique-id');
				if (limit_unique_id == null || (cur_unique_id != null && cur_unique_id == limit_unique_id)) {
					jQuery(e).replaceWith(data);
					jQuery(e).trigger('container_load_success');
				}
			});
			if (jQuery.isFunction(arg_success)) { jQuery(me).each(function (i, e) { arg_success(e, data, textStatus, XMLHttpRequest); }); }
		};
		
		if (!(settings['data'] instanceof Object)) { settings['data'] = {}; }
		
		settings['data']['unique_id'] = limit_unique_id;
		
		var hicone_dnr_js = {};
		jQuery('.hicone_dnr_js').each(function (i, e) {
			hicone_dnr_js[i] = jQuery(e).attr('data-js-id');
		});
		
		var hicone_page_load_id = jQuery('meta[name="page_load_id"]').attr('content');
		
		settings['data']['hicone_dnr_js'] = hicone_dnr_js;
		settings['data']['hicone_before_ajax_uri'] = document.location.href;
		settings['data']['hicone_ajax'] = 1;
		settings['data']['hicone_page_load_id'] = hicone_page_load_id;
		
		var request = jQuery.ajax(settings);
		return this;
	},
	
	hicone_container_request: function (url, parameters, limit_unique_id, settings) {
		var me = this;		
		unique_id = jQuery(me).attr('data-unique-id');
		
		if (!unique_id) { return 'Pas unqiue od'; }
		if (!settings) { settings = {}; }
		
		settings['url'] = url;
		settings['data'] = parameters;
		settings['async'] = false;
		
		if (!settings['global']) { settings['global'] = false; }
		if (!settings['type']) { settings['type'] = 'post'; }
		
		if (!(settings['data'] instanceof Object)) { settings['data'] = {}; }
		settings['data']['unique_id'] = unique_id;
		settings['data']['hicone_ajax'] = 1;
		
		var results = jQuery.ajax(settings).responseText;
		return results;
	},
	
	hicone_container_show_loading: function (unique_id)
	{
		var el = jQuery('<div/>', {'class': 'loadbg'});
		var ela = jQuery('<div/>', {'class': 'load'});
		ela.appendTo(el);
		var me = this;
		var inject = new Array;
		jQuery(me).each (function (i, e) { 
			var cur_unique_id = jQuery(e).attr('data-unique-id');
			if (unique_id == null || cur_unique_id == unique_id)
			{
				inject[i] = el.clone();
				inject[i].appendTo(e);
			}
		});
		return this;
	},

	hicone_container_hide_loading: function (unique_id)
	{
		var me = this;
		jQuery(me).each (function (i, e) { 
			var cur_unique_id = jQuery(e).attr('data-unique-id');
			if (unique_id == null || cur_unique_id == unique_id) { jQuery(e).find('.loadbg').remove(); }
		});
		return this;
	},
	
	hicone_load: function(url, parameters, load_unique_id, settings) {
		
		if ( !this.length ) {
			return this;
		}
		
		var me = this;
		
		if (!settings) { settings = {}; }
		
		settings['url'] = url;
		settings['data'] = parameters;
		
		if (!settings['global']) { settings['global'] = false; }
		if (!settings['type']) { settings['type'] = 'post'; }
		
		var arg_before_send = settings['beforeSend'];
		settings['beforeSend'] = function (XMLHttpRequest) {
			jQuery(me).each(function (i, e) {
				jQuery(e).hicone_show_loading(); 
				jQuery(e).trigger('load_send');
			});
			if (jQuery.isFunction(arg_before_send)) { jQuery(me).each(function (i, e) { arg_before_send(e, XMLHttpRequest); }); }
		};
		
		var arg_complete = settings['complete'];
		settings['complete'] = function (XMLHttpRequest, textStatus) {
			jQuery(me).each(function (i, e) {
				jQuery(e).hicone_hide_loading(); 	
				jQuery(e).trigger('load_complete');
			});
			if (jQuery.isFunction(arg_complete)) { jQuery(me).each(function (i, e) { arg_complete(e, textStatus, XMLHttpRequest); }); }
		};
		
		var arg_success = settings['success'];
		settings['success'] = function (data, textStatus, XMLHttpRequest) {
			jQuery(me).each(function (i, e) {
				jQuery(e).html(data);
				jQuery(e).trigger('load_success');
			});
			if (jQuery.isFunction(arg_success)) { jQuery(me).each(function (i, e) { arg_success(e, data, textStatus, XMLHttpRequest); }); }
		};
		
		if (load_unique_id) {
			settings['data']['unique_id'] = load_unique_id;
			var hicone_dnr_js = {};
			jQuery('.hicone_dnr_js').each(function (i, e) {
				hicone_dnr_js[i] = jQuery(e).attr('data-js-id');
			});
			settings['data']['hicone_dnr_js'] = hicone_dnr_js;
			settings['data']['hicone_before_ajax_uri'] = document.location.href;
			settings['data']['hicone_ajax'] = 1;
			
			var request = jQuery.ajax(settings);
		}
		return this;
	},
	
	hicone_show_loading: function ()
	{
		var el = jQuery('<div/>', {'class': 'loadbg'});
		var ela = jQuery('<div/>', {'class': 'load'});
		ela.appendTo(el);
		var inject = new Array;
		jQuery(this).each (function (i, e) { 
			inject[i] = el.clone();
			inject[i].appendTo(e);
		});
		return this;
	},

	hicone_hide_loading: function ()
	{
		jQuery(this).each (function (i, e) { jQuery(e).find('.loadbg').remove(); });
		return this;
	}
});
