var domain_tld = null;

  function whois(){
    this.req_queue = new Array();
    this.domain = "";
    this.preload_image = new Image(); 
    this.preload_image.src = "/code/whois/images/pending.gif";    
    
    this.on_enter = function(sender,event,tldfields){
      if((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)){
        this.domain = this.prep_domain(sender.form.domain.value);
        sender.form.domain.value = this.domain;
        var inputs = document.getElementsByTagName("input");
        if(inputs.length > 0){
					this.domain_tld_reset();
          for(i=0;i<inputs.length;i++){
            if(inputs[i].type == "checkbox" && inputs[i].name == tldfields){
              this.row_reset(inputs[i].value);
              if(inputs[i].checked == true){
                this.row_search(inputs[i].value);
                this.request_add(inputs[i].value);
              }
            }
          }
        }
      }else{
        return true;
      }
    }

    this.search = function(sender,tldfields){
			if(!sender.form.domain.value.length)
				return;
      this.domain = this.prep_domain(sender.form.domain.value);
      sender.form.domain.value = this.domain;
      var inputs = document.getElementsByTagName("input");
      if(inputs.length > 0){
				this.domain_tld_reset();
        for(i=0;i<inputs.length;i++){
          if(inputs[i].type == "checkbox" && inputs[i].name == tldfields){
            this.row_reset(inputs[i].value);
            if(inputs[i].checked == true){
              this.row_search(inputs[i].value);
              this.request_add(inputs[i].value);
            }
          }
        }
      }
    }

    this.domain_tld_reset = function(){
			domain_tld = null;
			domain_tld = new Array();
		}
    
    this.prep_domain = function(domain){
      if(domain.indexOf('www.') > -1){
        domain = domain.replace(/www\./,'');
      }
      if(domain.indexOf('\u002C') > -1){ // Remove [comma]
        domain = domain.replace(/\u002C/g,'');
      }
      if(domain.indexOf('\u002E') > -1){ // Remove [dot]
        domain = domain.replace(/\u002E/g,'');
      }
      if(domain.indexOf('\u002F') > -1){ // Remove [slash]
        domain = domain.replace(/\u002F/g,'');
      }
      if(domain.indexOf('\u005F') > -1){ // Remove [underscore]
        domain = domain.replace(/\u005F/g,'');
      }
      if(domain.indexOf('\u003A') > -1){ // Remove [colon]
        domain = domain.replace(/\u003A/g,'');
      }
      if(domain.indexOf('\u003B') > -1){ // Remove [semi-colon]
        domain = domain.replace(/\u003B/g,'');
      }
      if(domain.indexOf('\u0020') > -1){ // Remove [space]
        domain = domain.replace(/\u0020/g,'');
      }
      return domain;
    }
    
    this.rem_childnodes = function(elm){
      if(elm){
        if (elm.hasChildNodes()){
          while ( elm.childNodes.length >= 1 ){
            elm.removeChild( elm.firstChild );
          } 
        }
      }
    }
    
    this.row_reset = function(tld){
      row = document.getElementById("tld_row" + tld);
      img_td = row.getElementsByTagName("td").item(1);
      this.rem_childnodes(img_td);
      var new_img = document.createElement("img");
      new_img.setAttribute("src","/code/whois/images/pending.gif");
      img_td.appendChild(new_img);  

      var tld_td = row.getElementsByTagName("td").item(2);
      this.rem_childnodes(tld_td);
      var tld_td_content = document.createTextNode(" ");
      tld_td.appendChild(tld_td_content);  
      
      var tld_td = row.getElementsByTagName("td").item(3);
      this.rem_childnodes(tld_td);
      var tld_td_content = document.createTextNode(tld);
      tld_td.appendChild(tld_td_content);  
    }
    
    this.row_search = function(tld){
      row = document.getElementById("tld_row" + tld);
      img_td = row.getElementsByTagName("td").item(1);
      this.rem_childnodes(img_td);
      var new_img = document.createElement("img");
      new_img.setAttribute("src","/code/whois/images/loading.gif");
      img_td.appendChild(new_img);
    }
    
    this.process_row = function(row,tld,status,debug){
      if(row){
        img_td = row.getElementsByTagName("td").item(1);
        this.rem_childnodes(img_td);
        var new_img = document.createElement("img");
        if(status == "UNAVAILABLE"){
          new_img.setAttribute("src","/code/whois/images/unavailable.gif");
        }else if(status == "AVAILABLE"){
          new_img.setAttribute("src","/code/whois/images/available.gif");
        }else{
          new_img.setAttribute("src","/code/whois/images/unknown.gif");
        }
        img_td.appendChild(new_img);

        if(status == "UNAVAILABLE" || status == "AVAILABLE"){

					name=this.domain;
	        var onclick = function(){
							tld_show(tld,name);
	          return false;
	        }

	        img_td = row.getElementsByTagName("td").item(2);
	        this.rem_childnodes(img_td);

	        new_img = document.createElement("img");
          new_img.setAttribute("src","/code/whois/images/status.gif");
					new_img.className="info";
	        new_img.onclick = onclick;
	        img_td.appendChild(new_img);
				}

        var tld_td = row.getElementsByTagName("td").item(3);
        this.rem_childnodes(tld_td);
        var tld_td_content = document.createTextNode(this.domain + tld);
        tld_td.appendChild(tld_td_content);

				domain_tld[tld]=this.nlfix(debug);
        
      }      
    }

    this.toggle_all = function(sender,tldfields){
      var inputs = document.getElementsByTagName("input");
      if(inputs.length > 0){
        for(i=0;i<inputs.length;i++){
          if(inputs[i].type == "checkbox" && inputs[i].name == tldfields){
            if(sender.checked == true){
              inputs[i].checked = true;
            }else{
              inputs[i].checked = false;
            }
          }
        }
      }
    }
    
    this.nlfix = function(text){
      text = escape(text);
      var re_nlchar = null;
		  if(text.indexOf('%0D%0A') > -1){
        re_nlchar = /%0D%0A/g;
      }else if(text.indexOf('%0A') > -1){
        re_nlchar = /%0A/g;
      }else if(text.indexOf('%0D') > -1){
        re_nlchar = /%0D/g;
      }
      if(re_nlchar){
        return unescape( text.replace(re_nlchar,'\u000A\u000D') );
      }
      return unescape(text);
    }

    this.request_add = function(e) {
      this.req_queue.push(e);
      this.execute_queue();
    }

    this.execute_queue = function() {
      if(this.req_queue.length == 0) return;
      var e = this.req_queue[0];
      this.req_queue.pop();
      this.request_execute(e)
    }

    this.request_execute = function(e) {
      var url = "/code/whois/whois_class.php?domain=" + escape(this.domain) + "&tld=" + escape(e);
      var xmlhttp = this.createXMLHttp();
      xmlhttp.open('GET', url , true);
      var _this = this;
      var callback = function(){
        _this.request_process(xmlhttp,e);
      }
      xmlhttp.onreadystatechange = callback;
      xmlhttp.send(null);
    }

    this.request_process = function(xmlhttp, e) {
      if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200) {
          var xmlDocument = xmlhttp.responseXML;
          var elements = xmlDocument.getElementsByTagName("result");
          for(var i=0; i<elements.length; i++){
            if(elements[i].attributes.getNamedItem("tld").value == e){
              elm_status = elements[i].attributes.getNamedItem("status");
              tld_row = document.getElementById("tld_row" + e);
              tld_debug = elements[i].getElementsByTagName("debug")[0].firstChild.nodeValue;
              
              if(tld_row && elm_status && tld_debug){
                this.process_row(tld_row,e,elm_status.value,tld_debug);
              }
            }
          }
        } else {
          alert("There was a problem retrieving the XML data:\n" + xmlhttp.statusText);
        }
      }
      this.execute_queue();
    }

    this.createXMLHttp = function() {
      try {
        var xmlhttp = new XMLHttpRequest();
        success = true;
      } catch (e) {
        var MSXML_XMLHTTP_PROGIDS = new Array(
                 'MSXML2.XMLHTTP.5.0',
                 'MSXML2.XMLHTTP.4.0',
                 'MSXML2.XMLHTTP.3.0',
                 'MSXML2.XMLHTTP',
                 'Microsoft.XMLHTTP'
            );
        var success = false;
        for (var i=0;i < MSXML_XMLHTTP_PROGIDS.length && !success; i++) {
          try {
            var xmlhttp = new ActiveXObject(MSXML_XMLHTTP_PROGIDS[i]);
            success = true;
          } catch (e) {}
        }
        if ( !success ) {
          alert('Cant create XMLHttpRequest - not supported');
        }
      }
      if(success){
        return xmlhttp;
      }
    }
  
}
  
  var whois_obj = new whois();

function tld_show(tld,name)
{
  GB_show(name+tld,null,300,550);
  greybox = document.getElementById("GB_frame");
 	pre_debug = document.createElement("pre");
  node_debug = document.createTextNode(domain_tld[tld]);
  pre_debug.appendChild(node_debug);
  greybox.appendChild(pre_debug);
}

function tld_info(tld)
{
  GB_show(tld,null,250,300);
  greybox = document.getElementById("GB_frame");

	var new_tb = document.createElement('TABLE');
  greybox.appendChild(new_tb);

  var new_tr = new_tb.insertRow(-1);
	var new_td = new_tr.insertCell(-1);
	new_td.className = "tld_info_label";
  var new_txt = document.createTextNode("TLD");
  new_td.appendChild(new_txt);
	new_td = new_tr.insertCell(-1);
  new_txt = document.createTextNode(tld);
  new_td.appendChild(new_txt);

  new_tr = new_tb.insertRow(-1);
	new_td = new_tr.insertCell(-1);
	new_td.className = "tld_info_label";
  new_txt = document.createTextNode("Land");
  new_td.appendChild(new_txt);
	new_td = new_tr.insertCell(-1);
  new_txt = document.createTextNode(dm_info[tld][0]);
  new_td.appendChild(new_txt);

  new_tr = new_tb.insertRow(-1);
	new_td = new_tr.insertCell(-1);
	new_td.className = "tld_info_label";
  new_txt = document.createTextNode("Kræver lokale tilhørsforhold");
  new_td.appendChild(new_txt);
	new_td = new_tr.insertCell(-1);
  new_txt = document.createTextNode(dm_info[tld][1]);
  new_td.appendChild(new_txt);

  new_tr = new_tb.insertRow(-1);
	new_td = new_tr.insertCell(-1);
	new_td.className = "tld_info_label";
  new_txt = document.createTextNode("Min. antal tegn");
  new_td.appendChild(new_txt);
	new_td = new_tr.insertCell(-1);
  new_txt = document.createTextNode(dm_info[tld][2]);
  new_td.appendChild(new_txt);

  new_tr = new_tb.insertRow(-1);
	new_td = new_tr.insertCell(-1);
	new_td.className = "tld_info_label";
  new_txt = document.createTextNode("Max. antal tegn");
  new_td.appendChild(new_txt);
	new_td = new_tr.insertCell(-1);
  new_txt = document.createTextNode(dm_info[tld][3]);
  new_td.appendChild(new_txt);

  new_tr = new_tb.insertRow(-1);
	new_td = new_tr.insertCell(-1);
	new_td.className = "tld_info_label";
  new_txt = document.createTextNode("IDN (specialtegn, æøå ol.)");
  new_td.appendChild(new_txt);
	new_td = new_tr.insertCell(-1);
  new_txt = document.createTextNode(dm_info[tld][4]);
  new_td.appendChild(new_txt);

  new_tr = new_tb.insertRow(-1);
	new_td = new_tr.insertCell(-1);
  new_td.colSpan="2";
  new_txt = document.createTextNode(dm_info[tld][5]);
  new_td.appendChild(new_txt);
}
