// JavaScript Document

var intervalToCheckForChange = 750; // in milliseconds, 300 = 0.3sec
var request;
var	statusDivJS;
var	isAvailableDivJS;
var	domainInput;
var	extensionInput;
var domainsAvailableInput;
var isInProgress = false;
var prevCheckValue = ".com";
var intStartCheck;
var isLoaded = false;
var intFailedResponse;
var timesError = 0;
function checkDomain()
{	
	if (isInProgress) return;
	isInProgress = true;
	if (extensionInput == null)
	{
		prevCheckValue = domainInput.value;
		if (domainInput.value.indexOf(".") < 0)
		{
			statusDivJS.innerHTML = "<span style='color:red;'>Entre dominio (e.g: "+domainInput.value+".com)<\/span>";
			isInProgress = false;	
			return;
		}
	}
	else if (extensionInput != null)
	{
		prevCheckValue = domainInput.value+"."+extensionInput.value;
		if (domainInput.value.indexOf(".") > 0)
		{
			prevCheckValue = domainInput.value;
			selExtensions = document.getElementById("extension");
			tryExt = prevCheckValue.substr(domainInput.value.indexOf(".")+1);	
			tryExt = tryExt.toUpperCase();
			var isFoundValid = false;
			for (var i =0; i < selExtensions.length; i++)
			{
				if (selExtensions.options[i].text.toUpperCase() == tryExt)
				{
					selExtensions.options[i].selected = true;
					isFoundValid = true;
					break;
				}
			}
			if (!isFoundValid)
			{			
				statusDivJS.innerHTML = "<span style='color:red;'>."+tryExt+" is not supported.<\/span>";
				isInProgress = false;	
				return;
			}
		}
	}
	else
	{
		return;
	}
	re = new RegExp("^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?$"); 
	if (prevCheckValue.match(re) == null)
	{
		statusDivJS.innerHTML = "<span style='color:red;'>Dominio invalido (solo letras, numeros y guiones) <\/span>";
		isInProgress = false;	
		return;
	}
	statusDivJS.innerHTML = "<span style='color:green;'>Probando "+prevCheckValue+" ( <a href='#' onClick='abortRequest();return false;'>Cancelar<\/a> / <a href='#' onClick='retryRequest();return false;'>Reintentar<\/a> )<\/span>";
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		request = new XMLHttpRequest();
	} 
	else if (window.ActiveXObject) { // IE
		request = new ActiveXObject("Microsoft.XMLHTTP");
	}
	var requestUrl = "?aj=&ma="+Math.random()+"&domain="+prevCheckValue;
	//document.location.href = requestUrl;return;
	request.open("GET",requestUrl,true);
	request.onreadystatechange = processResponse; 
	intFailedResponse = setTimeout("failedResponse()",15000);
	try {request.send(null); }
	catch (e) 
	{
		timesError++;
		statusDivJS.innerHTML = "<span style='color:red;'>No se conecto al servidor ("+timesError+"x)<\/span>";	
	}
}
function failedResponse()
{
	if (!isInProgress) return;
	isInProgress = false;	
	timesError++;
	statusDivJS.innerHTML = "<span style='color:red;'>No se conecto al servidor ("+timesError+"x)(<a href='#' onClick='checkDomain();return false;'>Reintentar<\/a>)<\/span>";
	request.abort();
	request = null;
}
function retryRequest()
{	
	if (!isInProgress) return;
	request.abort();
	isInProgress = false;	
	request = null;
	statusDivJS.innerHTML = "<span style='color:red;'>Reintentando<\/span>";
	checkDomain();
}
function abortRequest()
{
	if (!isInProgress) return;
	request.abort();
	isInProgress = false;	
	request = null;
	statusDivJS.innerHTML = "<span style='color:red;'>Cancelado<\/span>";
}
function updateDomainTld(tldBox)
{
	var domainText = domainInput.value;
	if (domainText.indexOf('.') == -1) return;
	domainText = domainText.substr(domainText,domainText.indexOf('.'));
	domainInput.value = domainText + "." + tldBox.value;
}
function processResponse()
{	
	statusDivJS = document.getElementById("statusDiv");	
	if (request.readyState == 4)
	{			
		clearTimeout(intFailedResponse);
		var requestXML = request.responseXML; 
		if ((requestXML != null) && (typeof(requestXML) == "object") && (requestXML.getElementsByTagName("domainname")[0] != null))
		{	
			statusDivJS.innerHTML = "Fin (<a href='#' onClick='checkDomain();return false;'>Intento Manual<\/a>)";
			isInProgress = false;
			var domain = requestXML.getElementsByTagName("domainname")[0].firstChild.data;	
			var available = requestXML.getElementsByTagName("available")[0].firstChild.data;
			var errorMsg = "";
			if (requestXML.getElementsByTagName("errorMsg")[0].firstChild != null)
				errorMsg = requestXML.getElementsByTagName("errorMsg")[0].firstChild.data;
			if (available == "true") 
			{
				statusDivJS.innerHTML = "<span style='color:#008800;'>Esta disponible.  Llamenos para registar su dominio!</span>";			
				if (domainsAvailableInput.value.indexOf(domain +" ") == -1)
					domainsAvailableInput.value = domainsAvailableInput.value + domain +" \n";
			}
			else
			{
				statusDivJS.innerHTML = "No esta disponible.";
			}
			if (errorMsg != "")
			{
				statusDivJS.innerHTML = "<span style='color:red;'>"+errorMsg+"</span> (<a href='#' onClick='checkDomain();return false;'>Reintentar<\/a>)";			
			}
		}
		else
		{
			failedResponse();
			return;
		}		
	}
	else if (request.readyState == 3)
	{
		statusDivJS.innerHTML = "Prueba enviada...";
	}
}
function checkForChange()
{
	if (!isLoaded) return;
	if (domainInput.value == '') return;
	clearTimeout(intStartCheck);
	if (extensionInput != null) 
	{
		if ((prevCheckValue != (domainInput.value+'.'+extensionInput.value))
			&&  (prevCheckValue != domainInput.value))
		{
			intStartCheck = setTimeout("checkDomain()",intervalToCheckForChange);
		}
		else
		{
			return;
		}
	}
	else if (prevCheckValue != (domainInput.value)) 
	{
		intStartCheck = setTimeout("checkDomain()",intervalToCheckForChange);
	}
}
function bodyonLoad()
{
	statusDivJS = document.getElementById("statusDiv");
	domainInput =  document.getElementById("domain");
	extensionInput =  document.getElementById("extension");
	domainsAvailableInput = document.getElementById("domainsAvailable");
	isLoaded = true;
	setInterval("checkForChange()",intervalToCheckForChange);
}
window.onload = bodyonLoad;

