$(function(){
	
	// Configuramos algunos valores por defecto para las peticiones con AJAX
	$.ajaxSetup({
		dataType: 'html',
		timeout: 10000,
		type: 'GET'
	});

});
	/**
	 * @author    Alexei Betancourt Brito
	 * @copyright Copyright (c) 2010, Grupo Humidif
	 * @link      http://www.humidif.com
	 * @package   jQuery 1.3.2
	 * @category  Plugin
	 * @licence   GPL MIT
	 * 
	 * Plugin con funciones para el manejo de peticiones con AJAX.
	 */
	$.humidifAjax = {
		
		runtimeConfig : function(){
			loadImage : null
			url_params = window.location.pathname
			url_array   = url_params.split("/")
			application = url_array[1]
			if(application == 'backend'){
				loadImage = admin_img + 'loading.gif'
			}else{
				loadImage = assets_img + 'loading.gif'
			}
		},
		/**
		 * Description: Genera un numero aleatorio para evitar que se almacene en cache
		 *              las peticiones con AJAX.
		 */
		randInteger: function(){
			var seed = 9352761408;
			return Math.floor(Math.random() * (seed + 1));
		},
		/**
		 * @param {string} el
		 * 
		 * Description: Incluye código HTML dentro del layer pasado por parámetro a la función
		 *              para mostrar el mensaje de cargando. 
		 */
		loadStart: function(el){
			html = '<div id="ajax-status"><img class="loading-indicator" src="' + assets_img + 'loading.gif" height="14" width="64" /></div>';
			action = (el == 'body') ? $(el).append(html) : $(el).html(html);
		},
		/**
		 * 
		 */
		loadEnd: function(){
			$('div#ajax-status').remove();
		},
		/**
		 * @param {string} url
		 * @param {string} funct
		 * @param {string} param
		 * 
		 * Description: Realiza una llamada a un script del lado del servidor y ejecuta una función
		 *              una vez completada la ejecucion del mismo. 
		 */
		loadScript: function(url, funct, param){
			$.ajax({
				url: url + $.humidifAjax.randInteger(),
				success: function(data){
					if(funct == null){
						return data;
					}else if(param == null){
						funct;
					}else{
						funct(param);
					}
				}
			});
		},
		postData : function(el, url, params, funct){
			$.post({
				contentType : 'multipart/form-data',
				processData : false,
				ajaxStart : $.humidifAjax.loadStart(el),
				ajaxStop: $.humidifAjax.loadEnd(),
				url : url,
				data : params,
				success : function(data){
					funct(data)
				}			
			});
		},
		/**
		 * @param {string} el     Elemento donde se va mostrar el mensaje de estado de la peticion
		 * @param {string} type   Tipo de peticion, puede ser POST o GET
		 * @param {string} url    URL que se desea solicitar
		 * 
		 * Description: Realiza una petición a una url especifica, puede ser del typo GET o POST
		 *              y muestra el mensaje de cargando en el layer pasado por parámetro a la
		 *              función. Si se ha pasado por parámetro el id de una ventana entonces la
		 *              función la centra en el navegador. 
		 */
		getData: function(el, type, url, funct){
			$.ajax({
				ajaxStart: $.humidifAjax.loadStart(el),
				ajaxStop: $.humidifAjax.loadEnd(),
				url: url + $.humidifAjax.randInteger(),
				success: function(data){
					action = (el == 'body') ? $(el).append(data) : $(el).html(data);
					exec   = (funct != undefined && funct != null && funct != '') ? funct : false;
				}
			});
		},
		/**
		 * @param {string} layer
		 * @param {string} url
		 * @param {string} funct
		 * 
		 * Description: Realiza una peticion AJAX a una url pasada a la funcion, si se ha enviado 
		 *              el parametro layer, la funcion mostrara el mensaje de cargando, cuando 
		 *              finalice se ejecutara la funcion enviada por parametro. 
		 */
		returnData: function(layer, url, funct){
			if(layer == null){
				$.ajax({
					url: url + $.humidifAjax.randInteger(),
					success: function(data){
						funct(data);
					}
				});
			}else{
				$.ajax({
					ajaxStart: $.humidifAjax.loadStart(layer),
					url: url + $.humidifAjax.randInteger(),
					success: function(data){
						funct(data);
					}
				});
			}
			
		}		
	}