/************************/
/**** Funciones AJAX ****/
/************************/

function jx_new_ajax()
{
	var xmlhttp = false;

	try
	{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
	catch (e) 
	{
		try 
		{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} 
		catch (e)
		{
			xmlhttp = false;
		}
	}

	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 
	{
		xmlhttp = new XMLHttpRequest();
	}

	return xmlhttp;

}

function jx_send_data()
{
	//argumentos recibidos
        var container = arguments[0];
        var url = arguments[1];
        var params = arguments[2];
        var method = arguments[3];
        var jxdiv = arguments[4];
        var loading = arguments[5];

        if (!jxdiv) jxdiv = 'jxDiv';
        if (!loading) loading = '';

        var ajax = jx_new_ajax();
        var scrpt;

        //contenedor
        var div_content = document.getElementById(container);
        //div adicional para solventar bug AJAX con IE
        var div_aux = document.getElementById(jxdiv);
	
	//para GET añadimos los parámetros en la url
	var url_params = url;
	if (method == 'GET')
	{
		url_params = url + '?' + params;
	}
	
	ajax.open(method,url_params,true);
	
	ajax.onreadystatechange = function() 
	{
                if (ajax.readyState == 1)
		{
			if (loading != '')
			{
				div_content.innerHTML = loading;
			}
		}
                if (ajax.readyState == 4)
		{			                        
                        scrpt = ajax.responseText.extractScript();
                        try {
                             div_content.innerHTML = ajax.responseText;
                        }
                        catch (e) {
                             // Para IE debemos crear un div
                             div_content.removeChild(div_aux);
                             var new_div = document.createElement('div');
                             new_div.setAttribute('id', jxdiv);
                             new_div.innerHTML = ajax.responseText;
                             div_content.appendChild(new_div);
                        }
                        scrpt.evalScript();
		}
	}
	
	if (method == 'POST')
	{
		ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		ajax.send(params);
	}
	else
	{
		ajax.send(null);
	}

}
/****************************/
/**** Interpretador AJAX ****/
/****************************/

var tagScript = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';

/* Eval script fragment */
String.prototype.evalScript = function()
{
    return (this.match(new RegExp(tagScript, 'img')) || []).evalScript();
};

/* strip script fragment */
String.prototype.stripScript = function()
{
    return this.replace(new RegExp(tagScript, 'img'), '');
};

/* extract script fragment */
String.prototype.extractScript = function()
{
    var matchAll = new RegExp(tagScript, 'img');
    return (this.match(matchAll) || []);
};

/* Eval scripts */
Array.prototype.evalScript = function(extracted)
{
    if (this.map)
    {
        var s = this.map(function(sr)
        {
            var sc = (sr.match(new RegExp(tagScript, 'im')) || ['', ''])[1];
            if(window.execScript)
            {
                window.execScript(sc);
            }
            else
            {
                window.setTimeout(sc,0);
            }
        });
    }
    return true;
};

/* Map array elements */
Array.prototype.map = function(fun)
{
    if (typeof fun!=="function")
    {
        return false;
    }
    var i = 0, l = this.length;
    for (i = 0; i < l; i++)
    {
        fun(this[i]);
    }
    return true;
};
