var xmlReq = null;
function getXML(file,str,funcion) {
  xmlReq=null;

  var doc =xmlHTTPRequestObject();
  doc.onreadystatechange = funcion;
  doc.open( "POST", file, true );
  //doc.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
  doc.setRequestHeader("Content-Type","application/x-www-form-urlencoded; ");
  doc.send(str);

  return doc;
}
function getXMLGET(file,funcion) {
  xmlReq=null;

  var doc =xmlHTTPRequestObject();
  doc.onreadystatechange = funcion;
  doc.open( "GET", file, true );
  doc.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=ISO-8859-1");
  //doc.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
  doc.send("");

  return doc;
}
function xmlHTTPRequestObject()
{
	var obj = false;

	try
	{
		obj = new XMLHttpRequest();
	}
    catch (e) { obj = false; }

    if(!obj && document.implementation && document.implementation.createDocument)
	{
		obj = document.implementation.createDocument("","",null);
	}

	if (!obj)
	{    //Estas versiones no fallan con el encoding "Msxml2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"
             //Estas versiones fallan con el encoding    "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.5.0"
             //No sabemos si falla no lo hemos podido probar "Msxml2.XMLHTTP.7.0"
             var objectIDs = new Array("Msxml2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.7.0");
      	     var success = false;

		for (i=0; !success && i < objectIDs.length; i++)
		{
			try
			{
				obj = new ActiveXObject(objectIDs[i]);
				success = true;
			}
			catch (e) { obj = false; }
		}
	}

	return obj;
}
/**
 * Constantes para la propiedad Node.nodeType
 */

var XML_ELEMENT_NODE                		= 1;
var XML_ATTRIBUTE_NODE              		= 2;
var XML_TEXT_NODE                   		= 3;
var XML_CDATA_SECTION_NODE          		= 4;
var XML_ENTITY_REFERENCE_NODE       		= 5;
var XML_ENTITY_NODE                 		= 6;
var XML_PROCESSING_INSTRUCTION_NODE 	= 7;
var XML_COMMENT_NODE                		= 8;
var XML_DOCUMENT_NODE               		= 9;
var XML_DOCUMENT_TYPE_NODE			= 10;
var XML_DOCUMENT_FRAGMENT_NODE		= 11;
var XML_NOTATION_NODE               		= 12;

/**
 * Obtiene el contenido de un Element (XML)
 * @param el        Elemento XML
 * @return String   Contenido del elemento
 */

function xmlGetElementContent(el)
{
    var __str = "";
    if (el)
    {
	    try
	    {
	//      alert(el.nodeType + ":" + el.nodeValue);
		if (el.nodeType == XML_ELEMENT_NODE)
		{
		    for(var i=0;i<el.childNodes.length;i++)
		    {
			var __child = el.childNodes[i]; // alert(__child.nodeType + ":" + __child.nodeValue);
			if ((__child.nodeType == XML_TEXT_NODE) || (__child.nodeType == XML_CDATA_SECTION_NODE))
			{
			    __str += __child.nodeValue;
			}
		    }
		}
	    }
	    catch (ex)
	    {
		//alert(ex);
	    };
    }
    return __str;
}
/**
 * Obtiene el contenido de un Element (XML)
 * @param DOMDoc        Documento DOM
 * @param id Nombre del elemento
 * @return String   Contenido del elemento
 */

function xmlGetElementContent_(DOMDoc,id){
  return xmlGetElementContent(DOMDoc.getElementsByTagName(id).item(0));
}

/**
 * Codificar una cadena como una URI valido
 * @param  uri String - Cadena a codificar
 * @return Cadena URI codificada
 */

function encodeURI(uri) {
    if (encodeURIComponent) {
        return encodeURIComponent(uri);
    }

    if (escape) {
        return escape(uri);
    }
}

/**
 * Decodificar una URI a la codificación de la pagina (UTF-8, ISO....)
 * @param  uri String - Cadena a decodificar
 * @return Cadena  decodificada
 */

function decodeURI(uri) {
    uri = uri.replace(/\+/g, ' ');

    if (decodeURIComponent) {
        return decodeURIComponent(uri);
    }

    if (unescape) {
        return unescape(uri);
    }

    return uri;
}

function convertToUTF8(s)
    {
	var re = /[^\u0000-\u007F]/g ;

        //return s.replace(re, "_");

	return s.replace(re, function($0)
        {
	//alert($0.charCodeAt(0));

	    if ($0.charCodeAt(0) > 0 && $0.charCodeAt(0) < 32768)
	        return("&#" + $0.charCodeAt().toString() + ";");
	    else
	        return " ";
	//alert("&#" + $0.charCodeAt().toString() + ";");
	//else return($0);

	});
    }

