/**
 * If there is key released, wait and then execute url check
 * @param input
 */
function urlCheckKeyUp(domainInput) {
	//filter domain names
	input = domainInput.toLowerCase();
	input = input.replace(/[.]/g,'');
	
	$('#domainInput').val(input);
	
	if (typeof(timeout) != 'undefined') {
        	window.clearTimeout(timeout);
    	}
	
	if(domainInput.length > 2) {
		timeout = window.setTimeout('urlCheck()', 500);
	}
}


/**
 * Request if domain is available. Change HTML Content.
 * @param input
 */
function urlCheck() {
	//create absolute url
	var path = window.location.href;
	if (document.all) {
	path = path.replace(/\\/g,"/");
	}
	path = path.substr(0,path.lastIndexOf("/")+1);
	var url = path + "url_check.php";
	
	//get Array of configured extensions
	extensions = getCheckboxExtensions();
	
	//join extensions array for post
	extensionsPost = extensions.join(";");
	
	//build content for xml data
	buildTbodyContent();
	
	//set gif loading picture
	for(extensionsCounter = 0;extensionsCounter < extensions.length;extensionsCounter++) {
		extension = extensions[extensionsCounter];
		//set name
		//set domain from input and extension
		domain = htmlentities(input+'.'+extension);
		$("#"+extension+"Name").html('<a href="http://www.'+domain+'" title="'+domain+'besuchen" target="_blank">'+domain+'</a>');
		//set picture
		$("#"+extension+"IsAvailable").html('<img src="images/indicator.gif" title="Laden..." alt="Laden..." />');
		//unset whois
		$("#"+extension+"Whois").html('');
	}
	//post url and get xml data from url_check.php
	$.post(url, {input:input,extensions:extensionsPost},
		function(data){		
			xmlDoc = parseXML(data);
			//check if input changed			
			dataInput = xmlDoc.getElementsByTagName('data_input')[0].childNodes[0].nodeValue;	
			if(dataInput != input) {
				return;
			}		
			//get is available for different extensions from XML
			for(extensionsCounter = 0;extensionsCounter < extensions.length;extensionsCounter++) {
				extension = extensions[extensionsCounter];
				
				//get available status
				isAvailable = xmlDoc.getElementsByTagName(extension)[0].childNodes[0].nodeValue;
				if(isAvailable == 'true') {
					isAvailableHtml = '<span class="free">verfügbar</span>';
				} else {
					isAvailableHtml = '<span class="busy">belegt</span>';
				}
			
				//output in table
				$("#"+extension+"IsAvailable").html(isAvailableHtml);
				
				//set domain
				domain = htmlentities(input+'.'+extension);
				if(isAvailable == 'false') {
					$("#"+extension+"Whois").html('<a href="http://www.platinpower.com/wp-content/plugins/domaincheck/whois.php?d='+domain+'" onclick="return GB_showCenter(\'Whois Abfrage\', this.href,500,500)">Whois</a>');
				}
			
			}
		}
	);
}

/**
 * set configured extensions
 * @param extensions
 */
function setExtensions(extensions) {
	extensionsInputArray = extensions;
	extensionsInputArray = extensionsInputArray.split(',');
}

/**
 * Get data from checkboxes and fill an array
 */
function getCheckboxExtensions() {
	extensionsArray = new Array();
	
	extensionsCounter = 0;
	for(i = 1; i <= extensionsInputArray.length; i++) {
		if($("#checkbox"+extensionsInputArray[i-1]).attr('checked')) {
			extensionsArray[extensionsCounter] = extensionsInputArray[i-1];
			extensionsCounter++;
		}
	}
	
	return extensionsArray;
}

/**
 * build content for xml data
 * @param extensions
 */
function buildTbodyContent() {
	for(i = 0; i < extensionsInputArray.length; i++) {
		extension = extensionsInputArray[i];
		if($("#checkbox"+extension).attr('checked')) {
			//make row visible
			$("#"+extension+"Row").css('display','table-row');
		} else {
			//dont show row
			$("#"+extension+"Row").css('display','none');
		}
	}
}

/**
 * htmlentities equivalent to php
 * @param str
 * @param typ 
 */
function htmlentities(str,typ) {
if(typeof str=="undefined") str="";
if(typeof typ!="number") typ=2;
typ=Math.max(0,Math.min(3,parseInt(typ)));
var html=new Array();
html[38]="&amp;"; html[60]="&lt;"; html[62]="&gt;";
if(typ==1 || typ==3) html[39]="&#039;";
if(typ==2 || typ==3) html[34]="&quot;";
	for(var i in html) eval("str=str.replace(/"+String.fromCharCode(i)+"/g,\""+html[i]+"\");");
		var entity=new Array(
		"&nbsp;","&iexcl;","&cent;","&pound;","&curren;","&yen;","&brvbar;","&sect;",
		"&uml;","&copy;","&ordf;","&laquo;","&not;","&shy;","&reg;","&macr;",
		"&deg;","&plusmn;","&sup2;","&sup3;","&acute;","&micro;","&para;","&middot;",
		"&cedil;","&sup1;","&ordm;","&raquo;","&frac14;","&frac12;","&frac34;","&iquest;",
		"&Agrave;","&Aacute;","&Acirc;","&Atilde;","&Auml;","&Aring;","&AElig;","&Ccedil;",
		"&Egrave;","&Eacute;","&Ecirc;","&Euml;","&Igrave;","&Iacute;","&Icirc;","&Iuml;",
		"&ETH;","&Ntilde;","&Ograve;","&Oacute;","&Ocirc;","&Otilde;","&Ouml;","&times;",
		"&Oslash;","&Ugrave;","&Uacute;","&Ucirc;","&Uuml;","&Yacute;","&THORN;","&szlig;",
		"&agrave;","&aacute;","&acirc;","&atilde;","&auml;","&aring;","&aelig;","&ccedil;",
		"&egrave;","&eacute;","&ecirc;","&euml;","&igrave;","&iacute;","&icirc;","&iuml;",
		"&eth;","&ntilde;","&ograve;","&oacute;","&ocirc;","&otilde;","&ouml;","&divide;",
		"&oslash;","&ugrave;","&uacute;","&ucirc;","&uuml;","&yacute;","&thorn;","&yuml;"
		);
		for(var i in entity) eval("str=str.replace(/"+String.fromCharCode(i*1+160)+"/g,\""+entity[i]+"\");");
			return str;
		
}

/**
 * parse xml string and return xmlDoc object
 * from: http://www.w3schools.com/Xml/xml_dom.asp
 * @param xmlString
 * @return xmlDoc
 */
function parseXML(xmlString)
{
	try //Internet Explorer
	{
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(xmlString);
	}
	catch(e)
	{
		try // Firefox, Mozilla, Opera, etc.
		{
			parser=new DOMParser();
			xmlDoc=parser.parseFromString(xmlString,"text/xml");
		}
		catch(e)
		{
			alert(e.message);
			return;
		}
	}
	return xmlDoc;
}
