//Hash con los textos a mostrar segun la extension, hecho por los comes, orges y nomes,
//IMPORTANTE: se usa tambien para el input que usara la contratacion
var texts = {
	com:"com",
	net:"net",
	org:"org",
	info:"info",
	es:"es",
	biz:"biz",
	ws:"ws",
	cat:"cat",
	eu:"eu",
	be:"be",
	tel:"tel",
	mobi:"mobi",
	comes:"com.es",
	orges:"org.es",
	nomes:"nom.es",
	pt:"pt",
	compt:"com.pt",
	fr:"fr",
	cc:"cc",
	tv:"tv",
	mx:"mx",
	commx:"com.mx",
	orgmx:"org.mx"
}

//Variable que sirve para que al finalizar muestre el boton de buscar
var busqFinalizada=0;
//Variable que acumula los dominios disponibles
var dominio="";
var numDom=0;
//Creo la tabla y le pongo la id
var nodeTable=document.createElement("table");
			nodeTable.setAttribute('id', "tabla_resultados");

//ES NECESARIO CREAR UN TBODY PARA QUE SE VISUALICE EN IExplorer.
//http://developer.mozilla.org/es/docs/index.php?title=Referencia_DOM_de_Gecko:Ejemplos&printable=yes#Ejemplo_8:_Utilizaci.C3.B3n_del_interfaz_de_tabla_del_DOM
var nodeTbody=document.createElement("tbody");
nodeTable.appendChild(nodeTbody);

//Creo un tr standar con sus celdas que luego servira como modelo.
var nodeTr=document.createElement("tr");
var nodeTd1=document.createElement("td");
	nodeTd1.className="domain";
var nodeTd2=document.createElement("td");
	nodeTd2.className="status";
var nodeTd3=document.createElement("td");
	nodeTd3.className="precio";
var nodeTd4=document.createElement("td");

nodeTr.appendChild(nodeTd1);
nodeTr.appendChild(nodeTd2);
nodeTr.appendChild(nodeTd3);
nodeTr.appendChild(nodeTd4);


function buscar(dominio){
	
	dominio=dominio.trim();

        if (dominio == ""){
	    return;
	}

        partes = dominio.split("\.");
        dominio = partes[0];

	//Oculto el boton de buscar y quito el dominio del campo de texto
	docId('Dominio_texto').value="";
	docId("p_but_search").style.display="none";
	/*inicializo variables. Marcado indica si ha sido seleccionado en el buscador y firstNode sirve
	para situar los tr al hacer varias busquedas consecutivas*/
	var marcado=false;
	var firstNode;
	//Si aun no existe tabla de resultados la creo en la capa div_resultados
	if(docId("tabla_resultados")==null){
		var div_tabla=docId("div_resultados");
		div_tabla.appendChild(nodeTable);
	}

	/*Array que almacena las distintas extensiones, no se puede hacer extensiones=extensiones_base porque eso crea una referencia,
	no una asignacion de valores*/
	extensiones = [].concat(extensiones_base);
	
	//Pongo a 0 las variables que indican los dominios libres y ocupados
	numDom=0;
	//Recorro la tabla eliminando las filas de los dominios no marcados
	for(i=0;i<nodeTbody.childNodes.length;i++)
	{
		if(!nodeTbody.childNodes[i].childNodes[3].childNodes[0].checked)
		{
			nodeTbody.removeChild(nodeTbody.childNodes[i]);
			i=i-1;
		}
		else //Si el dominio esta marcado no se elimina
		{
			//Si esta libre le cambio la id y el name para que ocupe el siguiente lugar en los libres
			if(nodeTbody.childNodes[i].childNodes[1].innerHTML==dominioLibre)
			{
				nodeTbody.childNodes[i].childNodes[3].childNodes[0].setAttribute("name", "disponible"+numDom);
				nodeTbody.childNodes[i].childNodes[3].childNodes[1].setAttribute("name", "dom_disponible"+numDom);
				nodeTbody.childNodes[i].childNodes[3].childNodes[1].setAttribute("id", "dom_disponible"+numDom);
				numDom++;
			}
			else//Si esta ocupado le cambio la id y el name para que ocupe el siguiente lugar en los ocupados
			{
				nodeTbody.childNodes[i].childNodes[3].childNodes[0].setAttribute("name", "ocupado"+numDom);
				nodeTbody.childNodes[i].childNodes[3].childNodes[1].setAttribute("name", "dom_ocupado"+numDom);
				nodeTbody.childNodes[i].childNodes[3].childNodes[1].setAttribute("id", "dom_ocupado"+numDom);
				numDom++;
			}
		}
	}

	//Como los com.es,org.es y nom.es solo se buscan si son seleccionados o si es multilingüe compruebo si están 
	//seleccionados y los añado. Tambien compruebo si estamos en españa, mirando si existe el check.
	insertExtensions();
	//Recorro el array de extensiones creando un tr por cada extension 
	for(i=0;i<extensiones.length;i++)
	{
		if(!docId("tr"+dominio+extensiones[i]))
		{
			marcado="";
			//Clono el nodo creado al principio para crear una fila
			newNodeTr = nodeTr.cloneNode(true);
			//Le pongo una id que identifique la fila
			newNodeTr.setAttribute('id', "tr"+dominio+extensiones[i]);
			//Primera celda con el dominio y la extension
			newNodeTr.childNodes[0].innerHTML="<strong>"+dominio+"."+texts[extensiones[i]]+"</strong>";
			//Segunda celda con id para identificarla y la imagen de carga
			newNodeTr.childNodes[1].setAttribute('id', "td"+dominio+extensiones[i]);
			newNodeTr.childNodes[1].innerHTML="<img src='/es/img/ajax-loader.gif' alt='Loading...' />";
			newNodeTr.childNodes[2].innerHTML="<strong>" + prices[extensiones[i]] +  "</strong>";
			newNodeTr.childNodes[2].setAttribute('id', "price_"+dominio+extensiones[i]);
			//Cuarta celda con el checkbox desactivado mientras carga
			newNodeTr.childNodes[3].innerHTML="<input name='' type='checkbox' value='valor' id='check"+dominio+extensiones[i]+"'  disabled='true' />";

			//Si es el primer nodo lo pongo al final y lo guardo en una variable para colocar el resto respecto a el
			if(i==0)
			{
				nodeTbody.appendChild(newNodeTr);
				firstNode=newNodeTr;
				//compruebo si esta marcado para marcarlo en la respuesta

				if(docId(extensiones[i]).checked)
				{
					marcado=true;
				}
			}
			else
			{	
				// Si esta chequeado lo inserto delante y guardo en la variable que esta marcado para ponerlo como checked en la pantalla
				if(docId(extensiones[i]).checked)
				{
					marcado=true;
					nodeTbody.insertBefore(newNodeTr,firstNode);
				}
				else// Si no esta chequeado lo envio al final
				{
					nodeTbody.appendChild(newNodeTr);
				}
			}
			//Al campo hidden numdominios le doy el valor del numero de dominios que muestro
			docId("numdominios").value=nodeTbody.childNodes.length-1;
			//Llamo a la funcion que hace la consulta. Le paso el dominio, la extension, y si esta esta seleccionada en el buscador
			
			checkDomain(dominio,extensiones[i],marcado,i);
		}
		
	}
}



//Funcion que consulta un dominio
function checkDomain(sld,tld,marcado,vuelta){
	var http_request = false;
 	try{
 	 	http_request=new XMLHttpRequest();
 	 }catch (trymicrosoft){
 	 	try{
 			http_request=new ActiveXObject("Msxml2.XMLHTTP");
 	 		}catch(othermicrosoft){
 	 			try{
 	 				http_request=new ActiveXObject("Microsoft.XMLHTTP");
 	 			}catch (failed){
 		 			http_request=false;
 	 			} 
 	 		}
		}
	//Creo conexion
   

	//Paso al php el dominio y la extension a buscar
	http_request.open("GET", '../mainsearchxml.php?sld='+encodeURIComponent(sld)+'&'+tld+'=1',true);

	//Cada vez que el objeto cambia de estado compruebo si es el 4 (finalizado). Si es 4 lo envio a la funcion que procesa el XML
	http_request.onreadystatechange =function(){
		if(http_request.readyState == 4){
				var respuesta=http_request.responseXML;
					processXml(respuesta,marcado);
			}
		}
	http_request.send(null);
}

//Funcion que procesa el XML
function processXml(xmlStatus, marcado){
	//variables que indican cuales son los elementos a modificar tras la evaluacion del xml recibido.
	var sldR=xmlStatus.getElementsByTagName("sld")[0].getElementsByTagName("value")[0].firstChild.nodeValue;
	var tldR=xmlStatus.getElementsByTagName("tld")[0].getElementsByTagName("value")[0].firstChild.nodeValue;
	
	//sldR=sldR.replace('.','');
	tldR=tldR.replace('.','');
	
	var tdActivo="td"+sldR+tldR;
	var priceActivo="price_"+sldR+tldR;
	var CheckActivo="check"+sldR+tldR;
	var status = "";
	var idprod;
	var mensaje="";

	//Si no se recibe nada es error de conexion
	if(!xmlStatus) {
		status = 'errorConex';
	}
	//Si se recibe pero cin contenido es un error del buscador
	else if(xmlStatus.getElementsByTagName("status").length==0){
		status = 'errorArsys';
	}else{
	//Si se recibe correctamente guardo en status el estado del dominio
		status = xmlStatus.getElementsByTagName("status")[0].firstChild.nodeValue;
	}
	
	//Si tiene id de producto es que es contratable, por lo que activo el check
	
	existsId=true;
	if(xmlStatus.getElementsByTagName("product_id")[0].firstChild!=null)
	{
		//saco la id de producto
		idprod=xmlStatus.getElementsByTagName("product_id")[0].firstChild.nodeValue;
		existsId=false;
		//docId(CheckActivo).disabled=false; //opera no cambia el parametro en este momento, por eso guardamos para después		
	}
	
	//Si tiene mensaje
	if(xmlStatus.getElementsByTagName("message")[0].firstChild!=null)
	{
		//saco el mensaje y lo pongo en la variable
		mensaje=xmlStatus.getElementsByTagName("message")[0].firstChild.nodeValue;
	}

	//switch con las diferentes acciones a realizar dependiendo del status del dominio
	switch(status)
	{
		case "free":
		/*Si esta libre pongo el texto correspondiente, dejo disponible el checkbox y lo marco si es necesario,
		y muestro los botones de carrito*/
			
	                docId(tdActivo).className += " free";
			docId(tdActivo).innerHTML=dominioLibre;
			if(marcado){
			    docId(CheckActivo).setAttribute("checked",true);
			}
			//Pongo el mensaje
			docId(tdActivo).nextSibling.nextSibling.innerHTML=docId(tdActivo).nextSibling.nextSibling.innerHTML+"<input name='dom_disponible"+numDom+"' type='hidden' value='"+sldR+"."+texts[tldR]+"' id='dom_disponible"+numDom+"'/> "+mensaje;
			docId(CheckActivo).setAttribute("name","disponible"+numDom);
			docId(CheckActivo).setAttribute("value",idprod);
			numDom++;
			docId("addToCartTop").style.display="block";
			docId("addToCartBottom").style.display="block";
		break;
			case "invalid":
			//
			//Si el dominio no es valido muestro el mensaje correspondiente
			docId(tdActivo).innerHTML=dominioNoValido;
			//Pongo el mensaje
			docId(tdActivo).nextSibling.nextSibling.innerHTML=mensaje;
			break;
		case "registered":
		//Si el dominio esta registrado muestro el mensaje correspondiente enlazado al Whois 
			docId(priceActivo).innerHTML="<strong>" + pricesTr[tldR] +  "</strong>";
			docId(tdActivo).innerHTML='<a href="whois.php?dominio='+sldR+'.'+texts[tldR]+'" target="_blank" onclick="openWhois(this.href); return false;" title="'+verDatosWhois+'">'+dominioOcupado+'</a>';
			if(idprod){
				if(marcado){
					docId(CheckActivo).setAttribute("checked",true);
				}
				docId("addToCartTop").style.display="block";
				docId("addToCartBottom").style.display="block";
				docId(tdActivo).nextSibling.nextSibling.innerHTML=docId(tdActivo).nextSibling.nextSibling.innerHTML+"<input name='dom_ocupado"+numDom+"' type='hidden' value='"+sldR+"."+texts[tldR]+"' id='dom_ocupado"+numDom+"' /> "+" "+mensaje;
				docId(CheckActivo).setAttribute("value",sldR+"."+tldR);
				docId(CheckActivo).setAttribute("value",sldR+"."+texts[tldR]);
				docId(CheckActivo).setAttribute("name","ocupado"+numDom);
				numDom++;
				
			}
			else{
			//Pongo el mensaje
			docId(tdActivo).nextSibling.nextSibling.innerHTML=mensaje;
			}
		break;
			case "errorArsys":
			//Si hay error del buscador muestro el mensaje "Error buscando"
			docId(tdActivo).innerHTML="Error buscando";
		break;
			case "errorConex":
			//Si hay error al conectar con el php muestro el mensaje "Error de conexion"
			docId(tdActivo).innerHTML="Error de conexión";
		break;
		
	}
	
	if(docId(CheckActivo)){
		docId(CheckActivo).disabled=existsId; //por opera
	}
	
	busqFinalizada++;
	//si ha terminado muestro el boton de buscar
	if(busqFinalizada==extensiones.length)
	{
		docId("p_but_search").style.display="block";
		busqFinalizada=0;
	}
}

/*Función que crea los textos para el estado de los dominios es los diferentes idiomas y 
comprueba si hemos llegado desde un buscador externo*/

afterCount=0;
function afterLoad(){
	//Si llegamos de un buscador externo
	if(afterCount==0){
		if(extSeleccionadas && extSld)
		{
			for(i=0;i<extSeleccionadas.length;i++)
			{
				docId(extSeleccionadas[i]).checked="checked";
			}
				buscar(extSld);
		}
	}
	afterCount++;
}

function addEvent(obj, evType, fn){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, true);
    return true;
  } else if (obj.attachEvent){
  	var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
  	return false;
  }
}

addEvent(window, "load", afterLoad);
String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,'') }

