var WHOIS_TIMEOUT = 30000;   // 30 seconds
var def_url = "/fileadmin/emwho/whois.php";
whoisCallback = null;

function setDefaultUrl(u) {
	def_url = u;
}

function getDefaultUrl() {
	return def_url;
}

function WhoisAjax() {
//Eigenschaften deklarieren und initialisieren
	this.url = getDefaultUrl();
//	this.url="whois.php";

	this.method="POST";
	this.tld = "";
	this.sld = "";
	this.demand = "";
	this.included = -1;
	this.xmlHttpRequest = null;
	this.async = true;
	this.param = "";

	
	this.setTld = function(tld) {
		this.tld = tld;
	}
	
	this.setSld = function(sld) {
		this.sld = sld;
	}
	
	this.setDemand = function(demand) {
		this.demand = demand;
	}
	
	this.setIncluded = function(flag) {
		this.included = flag;
	}

	this.setAsync = function(flag) {
		this.async = flag;
	}
	
	this.setParameters = function(p) {
		this.param += p;
	}

	this.setUrl = function(u) {
		this.url = u;
	}
	
	this.run = function(url, id) {
		this.url = url;
		this.target = id;
		this.doRequest();
	}
	
	// called by doRequest	
	this.onSuccess = function(txt, xml) {
		switch(this.demand) {
			case "domains"	:	{
			  document.getElementById('content').innerHTML = txt;
			  break;
			}
			default	: {
			  var e = xml.getElementsByTagName('content')[0];
			  setDomainInfo(xml);
			  break;
			}
		}
	}
	
	this.onError = function (msg) {
		setDomainError(this.tld);
	}

}


WhoisAjax.prototype.getXMLHttpRequest = function() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else
		if (window.ActiveXObject) {
			try {
				return new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				try {
					return new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					return null;
				}
			}
		}
	return null;
}


WhoisAjax.prototype.doRequest=function() {
	var self = this;
	setTimeout(timeoutHandler, WHOIS_TIMEOUT);
	if((self.xmlHttpRequest=this.getXMLHttpRequest()) == null) {
		this.onError("Es konnte kein XMLHttpRequest-Objekt erstellt werden.");
		return false;
	}

	var p = "demand=" + this.demand + "&sld=" + this.sld + "&tld=" + this.tld;
	p += "&included=" + this.included;
	if(this.param != "")
		p += "&" + this.param;
	
	this.xmlHttpRequest.open(this.method, this.url, this.async);
	if(this.async == true) {
		this.xmlHttpRequest.onreadystatechange = readyStateHandler;
	}
	this.xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	this.xmlHttpRequest.send(p);

	if(this.async == false) {
		self.onSuccess(self.xmlHttpRequest.responseText, self.xmlHttpRequest.responseXML);
	}

	function readyStateHandler() {
		var now = new Date();
		if (self.xmlHttpRequest.readyState < 4) {
			return false;
		}
		if (self.xmlHttpRequest.status == 200 || self.xmlHttpRequest.status==304) {

			if (self.onSuccess) {
				self.onSuccess(self.xmlHttpRequest.responseText, self.xmlHttpRequest.responseXML);
			}
		} else {
			if (self.onError) {
				self.onError(self.tld + " ["+self.xmlHttpRequest.status+" "+ self.xmlHttpRequest.statusText+"] Es trat ein Fehler bei der Datenuebertragung auf.");
			}
		}
	}


	function timeoutHandler() {
		try{
			if(self.xmlHttpRequest) {
				if(self.xmlHttpRequest.status == 200 || self.xmlHttpRequest.status == 304) {
//					self.xmlHttpRequest.abort();
				} else {
//					self.onError("Timeout - request aborted: " + self.tld);
					self.xmlHttpRequest.abort();
				}
				delete self.xmlHttpRequest;
				delete self;
			}
		} catch(e) {
//			alert(self.tld + ": " + e);
		}
	}
}



function toggleWhois(flag) {
	
}


function checkWhoisDomains(f) {
	var sld = f.req_domain;
	if((sld.value == "") || (sld.value == "hier Ihren Domainnamen eingeben")) {
		alert("Kein Domainname gewählt");
		return false;
	}
	var pos = sld.value.indexOf(".");
	if(pos > 0) {
		sld.value = sld.value.substring(0, pos);
	}
		
	for(var i = 0; i < f.length; i++) {
		var e = f.elements[i];
		if(e.type == "button") {
			var tld = e.name;
			var str = "DOMAIN_" + tld;
			document.getElementById(str).innerHTML = sld.value + "." + 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.value, e.name, 'cb');
		}
	}
}


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




function sendWhois(flag, f) {
	if(flag == 1) {
		addDomains(f);
	}
	if(flag == 2) {
		getDomains(f);
	}
	if(flag == 3) {
		orderDomain(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 = decodeURIComponent(sld + "." + tld);
	var domainName = encodeURIComponent(sld + "." + tld);

	var inp = document.getElementById("WHOISINFO_" + tld);
	inp.value = domainName + ":" + available + ":" + valid + ":" + sconf;
	cb.checked = "";
	
	domSpan.innerHTML = sld + "." + tld;
	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=" + domainName + "&demand=details'>Whois-Server Fehler</a>";
			cb.disabled = true;
		} else {
			if(available == 1) {
				row.className = 'free';
				aSpan.innerHTML = "Domain frei";
				cb.disabled = false;
			} else {
				row.className = 'taken';
				domSpan.innerHTML = "<a href='http://www." + sld + "." + tld + "' target='_blank'>" + decodeURIComponent(domainName) + "</a>";
				aSpan.innerHTML = "<a target='_blank' href='http://www.adino.at/index.php?id=223&domain=" + domainName + 						"&demand=details'>Domain bereits registriert</a>";
				cb.disabled = false;
			}
		}
	}
}

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 ***";
}




function addDomains(f) {
	for(var i = 0; i < f.length; i++) {
		var e = f.elements[i];
    	if((e.type == 'checkbox') && (e.checked)) {
			var preis = document.getElementById("PREIS_"+e.name).firstChild.data;
			var mlz = f.elements["MLZ_" + e.name].value;
			var included = f.elements["INCL_" + e.name].value;
			var info = document.getElementById("WHOISINFO_" + e.name).value.split(":");
	// info = domain : available : valid : configured
			dc.addDomain(info[0], info[1], info[2], info[3], included, preis, mlz, e.name);
    	}
	}
	dc.checkDomains();
}


function getDomains(flag) {
	if(document.getElementById("req_domain")) {
		var dn = document.getElementById("req_domain").value;
	}
	var ajax = new WhoisAjax();
	ajax.setDemand("domains");
	ajax.setIncluded(flag);
//	ajax.addParameter("ust", with_ust());
//	whodiv = "whois_domains";
	if(dn) {
		ajax.setParameters("domain=" + dn);
	}
//	ajax.setTarget(whodiv);
	ajax.doRequest();
}


var partnerId = "0";
function setPartnerId(p) {
	partnerId = p;
}

function orderDomain(name) {
	var f = document.forms.domaincheck;
	for(var i = 0; i < f.length; i++) {
		var e = f.elements[i];
		if(e.type == "button" && e.name == name) {
		  if(document.getElementById("WHOISINFO_" + e.name).value.substr(0, 10) != "WHOISINFO_") {
		    var preis = document.getElementById("PREIS_"+e.name).firstChild.data;
		    var preis_nto = document.getElementById("PREIS_NTO_"+e.name).firstChild.data;
		    var mlz = f.elements["MLZ_" + e.name].value;
		    var included = f.elements["INCL_" + e.name].value;
		    var info = document.getElementById("WHOISINFO_" + e.name).value.split(":");
				var domaininfo = document.getElementById("WHOISINFO_" + e.name).value + ":" + included + ":" + preis + ":" + preis_nto + ":" + mlz + ":" + e.name;
	// info = domain : available : valid : configured
	//	    w = window.open("index.php?id=222", "_blank");
		    w = window.open("http://www.adino.at/index.php?id=222" 
			+ "&partner=" + partnerId
			+ "&domaininfo=" 
			+ domaininfo,
			"_blank");
			}
		}
	}

}







