function getHTTPObject() {
    var xmlhttp = false;
    if(window.ActiveXObject) {
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (E) {
                xmlhttp = false;
            }
        }
    }
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
        } catch (e) {
            xmlhttp = false;
        }
    }
    return xmlhttp;
}

function executeForm(form, layerId){

    var parameters = "";
    for (var i=0; i<form.length; i++){
        if (form.elements[i].type == 'submit'){
            continue;
        }
        if (form.elements[i].type == 'button'){
            continue;
        }
        if (form.elements[i].type == 'radio' && !form.elements[i].checked){
            //alert(form.elements[i].type + "-" + form.elements[i].name + "-" + form.elements[i].value + "-" + form.elements[i].checked)
            continue;
        }
        if (form.elements[i].type == 'checkbox' && !form.elements[i].checked){
            //alert(form.elements[i].type + "-" + form.elements[i].name + "-" + form.elements[i].value + "-" + form.elements[i].checked)
            continue;
        }
        // No se admiten ni select multiple ni file
        if (parameters != ""){
            parameters += "&";
        }
        parameters += form.elements[i].name +"=" + form.elements[i].value;
    }

    var url = form.action;

    return executeUrl(url,parameters, layerId);
}

function executeUrl(url,parameters, layerId,method){

    var http = getHTTPObject();
    // No soportamos AJAX
    if(!http ) {
        return true;
    }
    if(!method) method='POST';

    http.onreadystatechange = function() {
        if (http.readyState == 4) {
            if (http.status == 200) {
                // Si no recuperamos nada por ajax, sólo un montón de retornos de carro, no hacemos nada
				if(replaceAll(http.responseText,'\r\n','') != '') {
				    document.getElementById(layerId).innerHTML  = http.responseText;
					evalDivScripts(document.getElementById(layerId));
				}
	    	}
        }
    }
	
    if(method == 'GET') {
        http.open(method,url+'?'+parameters,true);	
        http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');		
        http.send(null);
    } else {
        http.open(method,url,true);
        http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');		
		
        if (parameters == null){
            // En firefox sin parámetros no funciona, así que se añade uno a piñon
            http.send('abcxyz=1');
        }else{
            http.send(parameters);
        }		
    }
    return false;
}

/**
 * Esta función reemplaza todas las coincidencias de strA por strB dentro de text
 */
function replaceAll(text, strA, strB){
	while ( text.indexOf(strA) != -1){
		text = text.replace(strA,strB);
	}
	return text;
}

/**
 * Esta función ejecuta todos los scripts definidos en el cuerpo del HTML para
 * permitir su funcionamiento correcto...
 *
 * @param	txt	El texto que contiene secuencias de tipo SCRIPT
 */
function evalDivScripts(bodyDocument) {
    var nodes = bodyDocument.getElementsByTagName('SCRIPT');
	for(var i=0;i<nodes.length;i++) {
		_script = nodes[i].text.replace('<!--','');
		_script = _script.replace('//-->','');
		_script = _script.replace('\n','');
		eval(_script);
	}
}

