﻿/*
Funciones útiles para envío genérico de forms por ajax

Requisitos:
- Que el formulario sea html bien formado
- Que exista un botón con id = "boton_enviar_formulario"
- Que exista un contenedor vacío con id = "info_envio"
- Que esté previamente cargado "jquery.tools.expose.min.js"

Autor : Juan Capristán
Versión : 1.0.1
Fecha : 22/03/2010
(c) CreativeCocos

Historial : 
V.1.0.0 : 04/02/2010 - Versión inicial
V.1.0.1 : 22/03/2010 - Añadido el uso de la variable "ruta_base" que permite llamar a procesa.php desde cualquier subcarpeta.
*/

//obtiene todos los elementos input, select y textarea asociados al formulario padre del botón pasado.
//es útil para enviar el formulario por ajax.
function obtener_cadena_parametros(boton) {
	var elementos = boton.parent("form").find("input, select, textarea"); //si uso children en vez de find, no puedo poner los elementos del formulario en una tabla (por ejemplo)
	var resultado = new Object;
	elementos.each(function(){
		if ($(this).attr("name")!="")
			eval("resultado." + ($(this).attr("name")) + "='" + encodeURIComponent($(this).val()) + "'"); //mandamos el contenido del formulario escapado
	})
	return resultado;
}

$(document).ready(function() {
	//Activamos exposé en la capa de info_envio
	$("#info_envio").expose({color:"#000",opacity:0.6,closeOnClick:false,closeOnEsc:false});
	
	$("#boton_enviar_formulario").click(function(){
		var accion_formulario = $(this).parent("form").attr("action");
		var info_formulario = new Object;
		info_formulario.data = new Object;
		info_formulario.data.formulario = $(this).parent("form");
		if (validateAllFields(info_formulario)) {
			$("#info_envio").html("<img src=img/esperando.gif /><br /><br />Enviando formulario, paciencia...");
			$("#info_envio").show("slow");$("#info_envio").expose().load();
			var cadena_parametros = obtener_cadena_parametros($(this));
			$.ajaxSetup({ 
					scriptCharset: "utf-8" ,
					contentType: "application/x-www-form-urlencoded; charset=UTF-8",
					dataType: "html"
			});
			//var ruta_base = document.location.href.substring(0,document.location.href.indexOf("/"))
			//$.post(ruta_base + "/formularios/procesa.php", cadena_parametros, function(resultado){
			$.post(accion_formulario, cadena_parametros, function(resultado){
				$("#info_envio").html(resultado + "<br /><input type=\"button\" id=\"boton_cerrar\" value=\"ok\" />");
				$("#boton_cerrar").click(function(){
					$(this).parent().hide("slow");$(this).parent().expose().close();
				});
			})
		}
		return false;
	});
});
