/* *******************************************************************************************
Funcion de envio en AJAX, metodos GET o POST
============================================

Como usar:
----------
1) - Vincular este archivo con la pagina:
<script src="popup.js" type="text/javascript" language="javascript"></\script>

Si se desea enviar un formulario:

2) - Agregar en el evento onsubmit la funcion de esta forma
<form id="form1" name="form1" method="post" action="pagina.php" onsubmit="return p_xsend(this,'');">

Si es un vinculo:
<a href="pagina.php?txtNom=Marcelo&txtEdad=31" onclick="return p_xsend(this);">Un LINK</a>

Referencias:
------------
p_xsend(this,ID_DIV)

this 		-> OBLIGATORIO!!!!!
DIV			-> Opcional, ID del contenedor <div> o <span> donde se mostrara el resultado de la operacion

Otras configuraciones:
----------------------
p_E_404		-> Mensaje de error cuando no se puede establecer la pagina destino o fallo la conexion
p_load		-> Mensaje que aparecera en el <div> o <span> hasta que se reciban los
				resultados (loading), puede contener codigo HTML.
				Si no se especifica, devolvera un alert con el resultado.
p_ok		-> Mensaje de confirmacion de datos procesados, se usa en el caso de no especificar
				un <div> o <span> donde mostrar los resultados.
************************************************************************************************* */
var p_E_404 = "La conexion fallo, intentelo mas tarde...";
var p_load = "<strong>Espere</strong> un momento por favor.....";
var p_ok = "Los datos se recibieron correctamente.";
var p_obj_form;
var p_div;
function p_ajax(){
	var p_ajax;
	try{
		p_ajax = new ActiveXObject("Msxml2.XMLHTTP");
	}catch(e){
		try{
			p_ajax = new ActiveXObject("Microsoft.XMLHTTP");
		}catch(E){
			p_ajax = false;
		}
	}
	if (!p_ajax && typeof XMLHttpRequest!='undefined'){
		p_ajax = new XMLHttpRequest();
	}
	return p_ajax;
}
//********************************
function p_disable(flag){
	if(p_obj_form.nodeName=='FORM'){
		for(i=0;i<p_obj_form.length;i++){
			if(p_obj_form[i].type=='submit'){
				p_obj_form[i].disabled = flag;
				break;
			}
		}
	}
}
//********************************
function p_send(query,url,method){
	var ajax = p_ajax();
	if(method.toLowerCase() == 'get'){
		ajax.open("GET",url+'?'+query,true);
		ajax.onreadystatechange = function(){
			if(ajax.readyState==4){
				if(ajax.status==200){
					if(p_div!=''){
						document.getElementById(p_div).innerHTML = ajax.responseText;
					}else{
						alert(p_ok);
					}
					p_disable(false);
				}
				if(ajax.status==404){
					alert(p_E_404);
					if(p_div!='' && document.getElementById(p_div).innerHTML==p_load) document.getElementById(p_div).innerHTML = '';
					p_disable(false);
				}
			}
		}
		ajax.send(null);
	}else if(method.toLowerCase() == 'post'){
		ajax.open("POST",url,true);
		ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		ajax.send(query);
		ajax.onreadystatechange = function(){
			if(ajax.readyState==4){
				if(ajax.status==200){
					if(p_div!=''){
						document.getElementById(p_div).innerHTML = ajax.responseText;
					}else{
						alert(p_ok);
					}
					p_disable(false);
				}
				if(ajax.status==404){
					alert(p_E_404);
					if(p_div!='' && document.getElementById(p_div).innerHTML==p_load) document.getElementById(p_div).innerHTML = '';
					p_disable(false);
				}
			}
		}
	}
}
//********************************
function p_xsend(obj,capa){
	p_obj_form = obj;
	p_div = capa;
	var controls = new Array();
	var _method = (obj.nodeName=='FORM') ? obj.method : "get";
	var _url = (obj.nodeName=='FORM') ? obj.action : obj.href.replace(/\?.+/g, "");
	//************
	if(obj.nodeName=='FORM'){
		for(i=0;i<obj.length;i++){
			if(obj[i].type!='reset' && obj[i].type!='submit' && obj[i].type!='button'){
				if(obj[i].type=='checkbox' || obj[i].type=='select-multiple' || obj[i].type=='radio'){
					switch(obj[i].type){
						case "checkbox":
							if(obj[i].checked){
								p = controls.length;
								controls[p] = new Array();
								controls[p]['campo'] = obj[i].name;
								controls[p]['valor'] = obj[i].value;
							}
							break;
						case "radio":
							if(obj[i].checked){
								p = controls.length;
								controls[p] = new Array();
								controls[p]['campo'] = obj[i].name;
								controls[p]['valor'] = obj[i].value;
							}
							break;
						case "select-multiple":
							for(y=0;y<obj[i].options.length;y++){
								if(obj[i].options[y].selected){
									p = controls.length;
									controls[p] = new Array();
									controls[p]['campo'] = obj[i].name;
									controls[p]['valor'] = obj[i].options[y].value;
								}
							}
							break;
					}
				}else{
					if(obj[i].value!=''){
						p = controls.length;
						controls[p] = new Array();
						controls[p]['campo'] = obj[i].name;
						controls[p]['valor'] = obj[i].value;
					}
				}
			}else if(obj[i].type=='reset'){
				if(obj[i].addEventListener){
					obj[i].addEventListener('click',p_reset,false);
				}else if(obj[i].attachEvent){
					obj[i].attachEvent('onclick',p_reset);
				}
			}
		}
	}
	var query = '';
	for(i=0;i<controls.length;i++){
		query += controls[i]['campo']+"="+controls[i]['valor'];
		if(1+i<controls.length){
			query += "&";
		}
	}
	query += "&p_ajax=1";
	if(obj.nodeName=='FORM') p_disable(true);
	if(p_div!='') document.getElementById(p_div).innerHTML = p_load;
	p_send(query,_url,_method)
	return false;
}
function p_reset(){
	if(p_div!='') document.getElementById(p_div).innerHTML = '';
}
