$.loading = {};

$.loading.globalOptions = {
	loadingContainerSelector 	: '.loadingContainer',
	loadingClass				: 'loading',
	loadingHtml					: '<span>Cargando...</span>',

	eventsByNode 	: {
		'a' 		: 'click',
		'input' 	: 'click',
		'form' 		: 'submit',
		'span' 		: 'click'
	}
};

$.loading.globalFunctions = {
	getEventByNodeType : function(node) {
		var var_event = node!=null?$.loading.globalOptions.eventsByNode[node.nodeName.toLowerCase()]:null;
		return var_event != undefined||null?var_event:'click';
	}
};

jQuery.showLoadingHtml = function(options) {
	var options = jQuery.extend($.loading.globalOptions, options);
	
	if ($(options.loadingContainerSelector).find('.'+ options.loadingClass).length <= 0) {
		var loadingHtml = $(options.loadingHtml);
		loadingHtml.addClass(options.loadingClass);
		$(options.loadingContainerSelector).append(loadingHtml);
	}
};

jQuery.hideLoadingHtml = function(options) {
	var options = jQuery.extend($.loading.globalOptions, options);
	var stringSelector = options.loadingContainerSelector +' .'+ options.loadingClass;
	
	$(stringSelector).remove();
};

jQuery.fn.showLoading = function(options) {
	var options = jQuery.extend($.loading.globalOptions, options);
	var element = $(this);
	
	return this.each(function(){
		(function($) {
			var event = $.loading.globalFunctions.getEventByNodeType(element[0]);
			element.bind(event, function() {
				jQuery.showLoadingHtml(options);
			});
		})(jQuery);
	});
};

jQuery.fn.hideLoading = function(options) {
	var options = jQuery.extend($.loading.globalOptions, options);
	
	return this.each(function(){
		var element = $(this);
		
		(function($) {
			var event = $.loading.globalFunctions.getEventByNodeType(element[0]);
			element.bind(event ,function() {
				$.hideLoadingHtml();
			});
		})(jQuery);
	});
};
