




function check_domain(x)
// This function checks if  x  is a domainname
{
  if (!(single_domain(x)))
    if (!(double_check(x)))
      return false;

  return true;
}




function check_subdomain(x)
{
  var b = /[\.\-]{2}/;	 // a domainname may not contain two of these next to eachother
  var c = /^[\.\-]/;	 // a domainname may not start with these

  if ((b.test(x))||(c.test(x))) return false;

  var m = /(^[A-Za-z0-9\-\.]+)\.([A-Za-z0-9\-]{2,})\.([A-Za-z]{2,6})$/;
  var p = x.match(m);

  if (p!=null) check_domain(p[2]+"."+p[3]);
  else return false;

  return true;
}




function single_domain(x)
// This function checks if  x  is a domainname with a single TLD extention
{
  if (!(double_check("testname."+x)))
  {
    var b = /[\.\-]{2}/;	 // a domainname may not contain two of these next to eachother
    var c = /^[\.\-]/;	 // a domainname may not start with these

    if ((b.test(x))||(c.test(x))) return false;

    var n = /(^[A-Za-z0-9\-]{2,})\.([A-Za-z]{2,6})$/;	// Single TLD extention
    var p = x.match(n);

    if ((!(p==null)) && (p.length==3))    // Single TLD
    {
      var q=p[2];

      var Name2 = /ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zr|zw/i;
          // 242 differend Name2
      var Name3 = /biz|com|edu|gov|int|mil|net|org|pro/i;
          // 9 differend Name3
      var Name4 = /info|name|coop|aero/i;
          // 4 differend Name4
      var Name6 = /museum/i;
          // 1 Name6

      if (((q.length==2) && (Name2.test(q))) ||
          ((q.length==3) && (Name3.test(q))) ||
          ((q.length==4) && (Name4.test(q))) ||
          ((q.length==6) && (Name6.test(q))) )  {return true;}

// Names with more then 2 characters are called   		generic
// Names with 2 characters or with a dot in it are called       country code

    }
  }

  return false;
}




function double_check(x)
// This function checks if  x  is a domainname with a double TLD extention
{
  var b = /[\.\-]{2}/;	 // a domainname may not contain two of these next to eachother
  var c = /^[\.\-]/;	 // a domainname may not start with these

  if ((b.test(x))||(c.test(x))) return false;

  var m = /(^[A-Za-z0-9\-]{2,})\.([A-Za-z]{2,6})\.([A-Za-z]{2})$/;	// Double TLD extention
  var p = x.match(m);

  if ((p!=null) && (p.length==4))    // Double TLD
  {
    var q=p[2]+"."+p[3];

    var NameAc2  = /^(ac)\.(ae|at|by|cn|cy|id|il|in|kr|ma|nz|pa|ru|th|tz|uk|uz|zw)/i
        // 18 differend NameAc2
    var NameCo2  = /^(co)\.(at|id|il|in|kr|ma|mz|nz|om|th|tz|uk|uz|ve|yu|za|zw)/i
        // 17 differend NameCo2
    var NameCom2 = /^(com)\.(ai|ar|au|ba|bb|bh|bm|bn|cn|cy|ec|eg|er|ge|gh|gi|gr|gu|jo|kh|kz|la|lb|ly|mm|mo|mt|mv|mx|my|na|nf|ng|ni|np|om|pa|pl|pr|py|qa|ro|sa|sb|sc|sg|tj|tr|tv|tw|ua|uy|uz|ve|vn|ye)/i
        // 56 differend NameCom2
    var NameEdu2 = /^(edu)\.(ag|al|ar|au|ba|bb|bh|bm|bn|bs|cn|ec|ee|eg|er|ge|gh|gi|gr|gu|jo|kh|kn|lb|lc|mo|mt|mv|mx|my|na|ng|pa|ph|pl|pr|py|qa|ru|sa|sg|tm|tr|tw|ua|uy|uz|ve|ye)/i
        // 49 differend NameEdu2
    var NameGov2 = /^(gov)\.(al|ar|au|bb|bh|bm|bn|cy|ec|eg|er|ge|gg|gh|gi|gu|gy|il|in|je|jo|kh|lb|lc|lv|ma|mo|mt|mv|my|na|nf|ng|np|ph|pl|pr|py|qa|sa|sg|tm|tr|ua|uk|ve|ye|zw)/i
        // 48 differend NameGov2
    var NameNet2 = /^(net)\.(ai|ar|au|ba|bb|bh|bm|bn|cn|ec|eg|er|ge|gr|gu|id|il|in|kh|la|lb|ly|ma|mo|mt|mv|mx|my|nf|ng|np|nz|pa|pl|pr|py|qa|sa|sg|sy|th|tr|ua|uk|uy|ve|ye)/i
        // 47 differend NameNet2
    var NameOrg2 = /^(org)\.(ai|al|ar|au|ba|bb|bh|bm|bn|by|cn|cy|ec|eg|er|ge|gh|gi|gr|gu|gy|il|in|jo|kh|la|lb|lc|ly|ma|mo|mt|mx|my|na|nf|ng|ni|np|nz|pa|pl|pr|py|qa|ro|sa|sg|tr|uk|uy|ve|ye|za|zw)/i
        // 55 differend NameOrg2

    if ((q.match(NameAc2))  ||
        (q.match(NameCo2))  ||
        (q.match(NameCom2)) ||
        (q.match(NameEdu2)) ||
        (q.match(NameGov2)) ||
        (q.match(NameNet2)) ||
        (q.match(NameOrg2)) )  {return true;}


    var Rest=/^(alt.na|arts.ro|arts.ve|asn.au|aus.nf|bbs.tr|bib.ve|cri.nz|csiro.au|eun.eg|fin.ec|firm.ro|firm.ve|gen.nz|go.id|go.kr|go.th|go.tz|gob.mx|gob.ni|gob.pa|gomel.by|govt.nz|grodno.by|gub.uy|gv.at|hk.cn|id.au|id.lv|info.au|info.ro|info.ve|int.ar|int.ru|int.ve|iwi.nz|k.ec|k.il|k.tr|ltd.gi|ltd.uk|med.ec|mil.ar|mil.ec|mil.nz|mil.tr|mil.ve|mo.cn|mogilev.by|muni.il|ne.kr|ne.tz|nhs.uk|nom.ro|nom.ve|nt.ro|off.ai|or.id|or.kr|or.th|or.tz|oz.au|oz.nf|pe.kr|plc.uk|pp.se|press.ma|priv.no|priv.pl|re.kr|rec.ro|rec.ve|res.in|sch.gg|sch.uk|school.nz|sci.eg|sld.cu|sld.pa|sport.hu|store.ro|store.ve|tec.ve|telememo.au|tm.mt|tm.ro|tm.za|tw.cn|uk.co|uk.com|una.py|us.com|uu.mt|vitebsk.by|web.id|web.ve|www.ro)/i
        // 97 other dubble TLD's with not ordened.
  
    if (q.match(Rest))
      return true;
  }

  return false;
}




function check_IP(x)
// This function checks if  x  is an IPnumber
{
  var s = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;  
  var t = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
  

  var k=x.match(s);
  if (k==null) {var k=x.match(t);}


  if (k!=null)
    if ((k[1]<256) && (k[2]<256) && (k[3]<256) && (k[4]<256))
      return true;
    
  return false;
}
