/**
 * Control de peticiones via Ajax
 */


/**
 * Envia $form por Ajax y ejecuta el codigo JS producido por la respuesta
 * $params (opcional) puede contener...
 *		action: url a donde se envia el formulario
 *		names[]: arreglo de cadenas con nombres de parametros extras que se enviaran (el values de este areglo debe se igual al de names)
 *		values[]: arreglo de valores de parametros extras que se enviaran (el length de este areglo debe se igual al de names)
 *		enctype: tipo de envio del formilario (por default: "application/x-www-form-urlencoded")
 *		sendFiles: booleano que indica si el formulario admite archivos
 */
function sendCodecAjaxRequest (form, params)
	{
	if(form==null||form==undefined)
		{
		alert('Formulario No Encontrado');
		return false;
		}

	
	if(form.set==undefined||form.set==null)
		form = $(form);
	
	addFieldToCodecAjaxForm(form, '___codec___ajax___request', '1');

	var action = form.action;

	if(params===undefined)
		params = null;
		
	if(params!=null)
		{
		if(params.action!=undefined&&params.action!=null)
			action = params.action;

		if(params.enctype!=undefined&&params.enctype!=null)
			{
			form.enctype = params.enctype;
			}
		else
			{
			if(params.sendFiles!=undefined&&params.sendFiles)
				form.enctype = 'multipart/form-data';
			}

		if(params.names!=undefined&&params.names!=null&&params.names.each!=undefined&&params.names.each!=null&&params.values!=undefined&&params.values!=null&&params.values.each!=undefined&&params.values.each!=null)
			{
			params.names.each
				(
				function(name, index)
					{
					if(index<params.values.length)
						addFieldToCodecAjaxForm(form, name,params.values[index]);
					}
				);
			}
		}
	
	var iAncha = action.lastIndexOf('#');

	if(iAncha>=0)
		{
		if(iAncha==0)
			action = '/';
		else
			action = action.substring(0,iAncha);
		}
									
	form.set('send',
		{
		url: action,
										
		onFailure: function(response) {alert('No fue posible efectuar la peticion.');},

		onSuccess: function(responseText, responseXML) 
			{
			//alert(responseText);

			if(responseText.indexOf('/'+'*~CODEC-OK~*'+'/')!=0)
				{
				alert('Existen problemas con la peticion');
				return;
				}


			try 
				{
				eval(responseText);
				}
			catch(err) 
				{
				alert('Existen problemas con el codigo de respuesta.');
				}
			}
		});
			
	form.send();

	addFieldToCodecAjaxForm(form, '___codec___ajax___request', '0');
			
	return false;
	}



/**
 * Envia una peticion Ajax a la $url y ejecuta el codigo JS producido por la respuesta, esto sin necesidad de un formulario
 */
function sendNoFormCodecAjaxRequest (url, params)
	{
	if(params===undefined)
		params = null;

	return sendCodecAjaxRequest(new Element('form',{action: url, method:'post'}), params);
	}


/**
 * Agrega un campo oculto a un formulario
 */
function addFieldToCodecAjaxForm (form, fieldName, fieldValue)
	 {
	if(form!=null&&form!=undefined&&(form.adopt==undefined||form.adopt==null))
		form = $(form);
	
	if(form==null||form==undefined)
		return;
		
	 var inputs = form.getElements('input');
	 var find = false;

	 inputs.each
		(
		function(input)
			{
		 
			 if(input.name!=undefined&&input.name!=null&&input.name==fieldName)
				 {
				 input.value = fieldValue;
				 find = true;
				 return;
				 }
			}
		);

	if(!find)
		 form.adopt(new Element('input', {type:'hidden', name:fieldName, value:fieldValue}));
	}


/**
 * Alias de la funcion $ de mootools
 */
function codecWeb (element)
	{
	return $(element);
	}
