var WHOIS_TIMEOUT = 30000;   // 30 seconds

whoisCallback = null;

function WhoisAjax() {
//Eigenschaften deklarieren und initialisieren
	this.url="/shop/emwho/whois.php";
	this.method="POST";
	this.tld = "";
	this.sld = "";
	this.demand = "";
	
	
	this.setTld = function(tld) {
		this.tld = tld;
	}
	
	this.setSld = function(sld) {
		this.sld = sld;
	}
	
	this.setDemand = function(demand) {
		this.demand = demand;
	}
	
	this.onError = function (msg) {
//		alert(msg)
		setDomainError(this.tld);
	}

	this.run = function(url, id) {
		this.url = url;
		this.target = id;
		this.doRequest();
	}
	
	// called by doRequest	
	// default handling - sets target to responseText 
	// overwrite for special function handling 
	this.onSuccess = function(txt, xml) {
		
		//if(!xml.getElementsByTagName('whois')[0])
			//alert('txt: '+txt+'\n\nxml: '+ xml);
		
		var e = xml.getElementsByTagName('whois')[0];
		setDomainInfo(xml);
	}
	
}


WhoisAjax.prototype.doRequest=function() {
//Zugriff auf Klasse fuer readyStateHandler ermoeglichen
	var self = this;
	setTimeout(timeoutHandler, WHOIS_TIMEOUT);
//XMLHttpRequest-Objekt erstellen
	var xmlHttpRequest=getXMLHttpRequest();
	if (!xmlHttpRequest) {
		this.onError("Es konnte kein XMLHttpRequest-Objekt erstellt werden.");
		return false;
	}

	var p = "demand=" + this.demand + "&sld=" + this.sld + "&tld=" + this.tld;

	xmlHttpRequest.open(this.method, this.url, true);
	xmlHttpRequest.onreadystatechange = readyStateHandler;
	xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttpRequest.send(p);

//Private Methode zur Verarbeitung der erhaltenen Daten
	function readyStateHandler() {
		var now = new Date();
		if (xmlHttpRequest.readyState < 4) {
			return false;
		}
		if (xmlHttpRequest.status == 200 || xmlHttpRequest.status==304) {
			if (self.onSuccess) {
				self.onSuccess(xmlHttpRequest.responseText, xmlHttpRequest.responseXML);
			}
		} else {
			if (self.onError) {
				self.onError(self.tld + " ["+xmlHttpRequest.status+" "+xmlHttpRequest.statusText+"] Es trat ein Fehler bei der Datenuebertragung auf.");
			}
		}
	}
		
	
	function timeoutHandler() {
		try{
			if(xmlHttpRequest) {
				if(xmlHttpRequest.status == 200 || xmlHttpRequest.status == 304) {
//					xmlHttpRequest.abort();
				} else {
//					self.onError("Timeout - request aborted: " + self.tld);
					xmlHttpRequest.abort();
				}
				delete xmlHttpRequest;
				delete self;
			}
		} catch(e) {
//			alert(self.tld + ": " + e);
		}
	}
}



function toggleWhois(flag) {
	
}


function startDomainCheck() {
	if(document.getElementById('req_domain').value) {
		var domain = document.getElementById('req_domain').value;
			
			if(domain.substr(0,4) == 'www.') {
				domain = domain.substring(4,domain.length);
				document.getElementById('req_domain').value = domain;
			}
			
			checkWhoisDomains(document.forms.domaincheck, domain);
	} else
		alert('Geben Sie zuerst einen Domainnamen ein!');
}

function checkWhoisDomains(f, sld) {
	if((sld == "") || (sld == "hier Ihren Domainnamen eingeben")) {
		alert("Kein Domainname gew&auml;hlt");
		return false;
	}
	var pos = sld.indexOf(".");
	if(pos > 0) {
		sld = sld.substring(0, pos);
	}

	for(var i = 0; i < f.length; i++) {
		var e = f.elements[i];
		if(e.type == "button") {
			var tld = unescape(e.name);
			var str = "DOMAIN_" + tld;
			document.getElementById(str).innerHTML = sld + "." + tld;
			str = "AVAIL_" + tld;
			document.getElementById(str).innerHTML = "Pr&uuml;fung gestartet, bitte warten...";
			document.getElementById("ROW_" + tld).className = "notready";
			//e.checked = false;
			getWhoisDomain(sld, tld, 'cb');
		}
	}
}


function getWhoisDomain(sld, tld) {
	var ajax = new WhoisAjax();
		ajax.setDemand("get");
		ajax.setTld(tld);
		ajax.setSld(sld);
		ajax.doRequest();
}

function setWhoisCallback(fn) {
	whoisCallback = fn;
}

function sendWhois(flag, f) {
	if(whoisCallback != null) {
		whoisCallback(flag, f);
  	}
}

function setDomainInfo(xml) {
	var e = xml.getElementsByTagName("whois")[0];
	var sld = e.getAttribute("sld");
	var tld = e.getAttribute("tld");
	var flag = e.getAttribute("flag");
	var valid = e.getAttribute("valid");
	var invalid_reason = e.getAttribute("invalid_reason");
	var err = e.getAttribute("error");
	var available = e.getAttribute("available");
	var sconf = e.getAttribute("server_conf");
	var cb = document.getElementById("CB_" + tld);
	var domSpan = document.getElementById("DOMAIN_" + tld);
	var aSpan = document.getElementById("AVAIL_" + tld);
	var row = document.getElementById("ROW_" + tld);
	var domainName = sld + "." + tld;

	var inp = document.getElementById("WHOISINFO_" + tld);
	inp.value = domainName + ":" + available + ":" + valid + ":" + sconf;
	//cb.checked = "";

		
	domSpan.innerHTML = domainName;
	if(sconf == 1) {
		row.className = "notconf";
		aSpan.innerHTML = "No server configured for " + tld;
		cb.disabled = true;
	} else {
		if(valid == 0) {
			row.className = "notvalid";
			if(invalid_reason == -1) {
				aSpan.innerHTML = "Domainname nicht m&ouml;glich!";
			} else {
				aSpan.innerHTML = "Domainname Mindestl&auml;nge: " + invalid_reason + " Zeichen";
			}
			cb.disabled = true;
		} else if(err == 1) {
			row.className = "notvalid";
			aSpan.innerHTML = "<a target='_blank' href='http://www.adino.at/index.php?id=223&domain=" + encodeURIComponent(domainName) + 						"&demand=details'>Whois-Server Fehler</a>";
			cb.disabled = true;
		} else {
			if(available == 1) {
				row.className = 'free';
				aSpan.innerHTML = "Domain frei";
				//cb.value = domainName;
				cb.disabled = false;
				cb.style.backgroundImage = 'url(../../shop/Bilder/btn.bestellen.gif)';
			} else {
				row.className = 'taken';
				domSpan.innerHTML = "<a href='http://www." + domainName + "' target='_blank' title='Webseite &ouml;ffnen'>" + sld + "." + tld + "</a>";
				aSpan.innerHTML = "<a target='_blank' href='index.php?&id=223&domain=" + encodeURIComponent(domainName) + "&demand=details' title='Inhaberdaten ansehen'>Domain bereits registriert</a>";
				//cb.value = domainName;
				cb.disabled = false;
				cb.style.backgroundImage = 'url(../../shop/Bilder/btn.transfer.gif)';
			}
		}
	}
}

function setDomainError(tld) {
	var domSpan = document.getElementById("DOMAIN_" + tld);
	domSpan.innerHTML = tld;
	var row = document.getElementById("ROW_" + tld);
	row.className = "notconf";
	var cb = document.getElementById("CB_" + tld);
	cb.value = "";
	cb.disabled = true;
	document.getElementById("AVAIL_" + tld).innerHTML = "*** Whois Fehler ***";
}


var f_req_domain;

function start_reqdCheck() {
	document.getElementById('req_domain').onkeydown = checkIfEnter;
}
function checkIfEnter(e) {
	var keycode;
	if (window.event)
		keycode = window.event.keyCode;
	else if(e)
		keycode = e.which;
		
	if(keycode == 13)
		startDomainCheck();
}
