jQuery.loading = {};

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

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

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

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

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

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

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