// -----------------------------------------------------------------------------------
//
//	ConstructorXMLHttpRequest
//	Author : Ana Celia Molina Cabrera
//	Descripcion: Objeto principal de Ajax.
// -----------------------------------------------------------------------------------
function ConstructorXMLHttpRequest()
{
	/*Vemos si el objeto window (la base de la ventana del navegador) posee el método	XMLHttpRequest(Navegadores como Mozilla y Safari). */
	if(window.XMLHttpRequest){ 
		//Si lo tiene, crearemos el objeto con este método.
		return new XMLHttpRequest(); 
	}else if(window.ActiveXObject){
		 /*Sino tenía el método anterior,
		debería ser el Internet Exp. un navegador que emplea objetos
		ActiveX, lo mismo, miramos si tiene el método de creación. */
		
		/*Hay diferentes versiones del objeto, creamos un array, que
		contiene los diferentes tipos desde la
		versión mas reciente, hasta la mas antigua */
		var versionesObj = new Array(
		'Msxml2.XMLHTTP.5.0',
		'Msxml2.XMLHTTP.4.0',
		'Msxml2.XMLHTTP.3.0',
		'Msxml2.XMLHTTP',
		'Microsoft.XMLHTTP');
		for (var i = 0; i < versionesObj.length; i++){
			try{
				/*Intentamos devolver el objeto intentando crear las diferentes
				versiones se puede intentar crear uno que no existe y se
				producirá un error. */
				return new ActiveXObject(versionesObj[i]);
			}catch (errorControlado){ //Capturamos el error, ya que podría crearse otro objeto.
			
			}
		}
	}
	/* Si el navegador llego aquí es porque no posee manera alguna de
	crear el objeto, emitimos un mensaje de error. */
	throw new Error("No se pudo crear el objeto XMLHttpRequest");
}





/******
* select_innerHTML - corrige EL bug do InnerHTML em selects no IE
* Ver problema en: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Versión: 2.1 - 04/04/2011
* Autor: Ana Celia Molina Cabrera
* @objeto(tipo HTMLobject):select a ser alterado
* @innerHTML(tipo string):nuevo valor de innerHTML
*******/
function select_innerHTML(objeto,innerHTML){

    objeto.innerHTML = ""
    var selTemp = document.createElement("micoxselect")
    var opt;
    selTemp.id="micoxselect1"
    document.body.appendChild(selTemp)
    selTemp = document.getElementById("micoxselect1")
    selTemp.style.display="none"
    if(innerHTML.toLowerCase().indexOf("<option")<0){
        innerHTML = "<option>" + innerHTML + "</option>"
    }
    innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
    innerHTML = innerHTML.replace(/<OPTION/g,"<span").replace(/<\/OPTION/g,"</span")
    selTemp.innerHTML = innerHTML
      
    
    for(var i=0;i<selTemp.childNodes.length;i++){
  		var spantemp = selTemp.childNodes[i];
  
        if(spantemp.tagName){     
            opt = document.createElement("OPTION")
    
   			if(document.all){ //IE
   				objeto.add(opt)
   			}else{
    			objeto.appendChild(opt)
   			}       
    
  			//getting attributes
   			for(var j=0; j<spantemp.attributes.length ; j++){
    			var attrName = spantemp.attributes[j].nodeName;
    			var attrVal = spantemp.attributes[j].nodeValue;
    			if(attrVal){
     				try{
      					opt.setAttribute(attrName,attrVal);
      					opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));
     				}catch(e){}
    			}
  			 }
  			
  			//getting styles
   			if(spantemp.style){
    			for(var y in spantemp.style){
     				try{opt.style[y] = spantemp.style[y];}catch(e){}
    			}
   			}
   			
		   //value and text
		   opt.value = spantemp.getAttribute("value")
		   opt.text = spantemp.innerHTML
		   //IE
		   opt.selected = spantemp.getAttribute('selected');
		   opt.className = spantemp.className;
  		} 
 	}    
 	document.body.removeChild(selTemp)
 	selTemp = null
}


