/**
 * @author david.saenz
 */
$(function(){
// CONFIGURACION GENERAL PARA CUALQUIER PETICION AJAX CON jQuery

	// OBJETO JSON PARA ALMACENAR NUESTRA CONFIGURACION BASICA AJAX
	DY_AJAX				= {}

	// TARGET ESPECIFICADO
	// (Si queremos trabajar siempre con una capa en concreto podemos indicárselo aquí, 
	// por ejemplo en un div#ajaxInfo. Si no ponemos nada como en este caso nuestro target es el propio document)
	DY_AJAX.target		= $();

	// CONFIGURACION PARA $.ajaxSetup()
	DY_AJAX.ajaxSetup	= {
		// TIPO DE PEITCION
		type		: 'post',
		// TIPO DE DATOS RECIBIDOS
		dataType	: 'xml',
		// TIMEOUT DE LA PETICION
		timeout		: 10000
	}
	
	// Cargamos nuestra configuración ajax general
	$.ajaxSetup(DY_AJAX.ajaxSetup);
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// NOTA:
	// Los eventos descritos a continuación son globales a cualquier petición ajax y solo pueden 	
	// omitirse si en una petición $.ajax indicamos que 'global' es 'false'.
	// El orden en el que se lanzan es el siguiente:
	//		ajaxStart, ajaxSend, ajaxSuccess, [ajaxError], ajaxComplete, ajaxStop
	//
	// IMPORTANTE: Si por ejemplo en una petición $.ajax se configura 'success', 'error' o 'complete' 
	//			   y no se pone global a false, se lanza antes el evento local(success) que el global(ajaxSucces)
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////

	// INICIO DE LA PETICION
	// Parámetros:
	//		'e' es el evento
	//			e.type   =  tipo de evento (Ej: ajaxStart)
	//			e.target =  target configurado (aunque en esto caso al no tener ningún selector no existe target)
	DY_AJAX.target.ajaxStart(function(e)
	{
		// tu código... (por ejemplo, mostrar la típica imagen de loading)
	});	

	// INICIO DEL ENVIO DE DATOS
	// Parámetros:
	//		'e' es el evento
	//			e.type   =  tipo de evento
	//			e.target =  target configurado (por ejemplo una capa para mostrar informacion)
	//		'r' es el objeto XMLHttpRequest
	//			Estructura de 'r' según navegador
	//		's' es la configuración ajax general
	//			s.async		= por defecto a true
	//			s.contentType	= por defecto 'application/x-www-form-urlencoded'
	//			s.global	= por defecto a true
	//			s.processData   = por defecto a true
	//			s.timeout	= por defecto a 0
	//			NOTAS:
	//					1- Estos atributos pueden ser machacados por los establecidos en ajaxSetup
	//					1- Si se configuran mas atributos en $.ajax o en $.ajaxSetup, también se podrá acceder a sus valores desde 's'
	DY_AJAX.target.ajaxSend(function(e, r, s)
	{
		// tu código... (por ejemplo, indicar que los datos se están mandando)
	});

	// RESPUESTA RECIBIDA
	// Parámetros:
	//		'e' es el evento
	//		'r' es el objeto XMLHttpRequest
	//		's' es la configuracion ajax general
	//		'r' error lanzado	
	DY_AJAX.target.ajaxSuccess(function(e, r, s)
	{
		// tu código... (por ejemplo, indicar que ya tenemos respuesta a la peticion)
	});	

	// ERROR EN LA PETICION
	// Parámetros iguales que en ajaxSuccess
	DY_AJAX.target.ajaxError(function(e, r, s, err)
	{
		// tu código...  (por ejemplo, limpiar cualquier indicador de petición activa y avisar del error)
		// NOTA: si el dataType indicado es distinto al recibido salta este evento 
		//		 y no ajaxSucces aunque realmente la petición se haya realizado con éxito
	});	

	// PETICION COMPLETADA
	// Parámetros iguales que en ajaxSuccess
	DY_AJAX.target.ajaxComplete(function(e, r, s)
	{
		// tu código... (por ejemplo, indicar que la petición se completo y se proceso)
	});

	// FIN DE LA PETICION
	// Parámetros iguales que en ajaxStart
	DY_AJAX.target.ajaxStop(function(e)
	{
		// tu código... (por ejemplo, esconder la imagen de loading lanzada en ajaxStart)		
	});

})