/* Copyright Netnames 2000
   nn.dns.search.js

It pays to become a Netnames Affiliate. It's easy. It's fun. You make money quick
with every click! Sign up at http://www.netnames.com/affiliate-program/.

nn.dns.search.js let's you insert a domain name search right on your website.
To use it, insert the following two lines in any HTML 3.2 compliant page:

<html>
  <head>
    .
    ... your "head" material here
    .
    <!-- you add the next line below to fetch the widget for your page... -->
    <script language="javascript1.2" type="text/javascript" 
      src="http://www.netnames.com/affilate-program/nn.dns.search.js"></script>
  </head>
  <body ...>
    .
    ... your "body" material here
    .
    <script language="javascript1.2">nn.dns.search("netnames");</script>
    .
    ... rest of your "body" material here
    .
  </body>
</html>

The script filename (nn.dns.search.js) is named similar to the function use (nn.dns.search())
to make it easier to remember. nn.dns.search takes a single optional argument, a string,
which is the default name in the search box. You can leave it blank, in which case there's
no initial value.

For more information, see http://www.netnames.com/affiliate-program/.

If you have problems using this code, please send email to 'affiliate-program@netnames.com'
or contact Commission Junction at <where? how?>.

Thanks for using Netnames!

*/

var nn = new Object(); nn.dns = new Object(); 

// The dictionary of all known currencies and associated hostnames.
// Currencies are encoded as ISO 4217 currency codes.
nn.dns.currency2hostname = new Object();
nn.dns.currency = "USD";  // Default value is US dollars. Selected from the associations below.
nn.dns.currency2hostname.USD = "www.netnames.com";
nn.dns.currency2hostname.GBP = "www.netnames.co.uk";
nn.dns.setCurrency = function (iso4217_code) {
    if (typeof nn.dns.currency2hostname[iso4217_code] != "undefined") {
	nn.dns.currency = iso4217_code;
    } else {
	alert("Can't change currency to " + iso4217_code + ". " + nn.dns.currency + " retained.");
    }
}


nn.dns.search_aid = 897100; // Don't change this w/o contacting Commission Junction.




nn.dbgon = false;
//nn.dbgon = true;
nn.dbg = function (msg) { if (nn.dbgon) alert(msg); }

nn.msg = true;
nn.errorMessage = function(msg) { if (nn.msg) alert(msg); return false; }

nn.isEmpty = function (str) {
    return str.search(/^\s*$/) > -1;
}

nn.trim = function (str) {
    var leading = str.match(/^(\s*)/); // search leading white space
    var trailing = str.match(/(\s*)$/);	// search trailing whitespace
    left = leading ? leading[1].length : 0;
    right = trailing ? str.length - trailing[1].length : str.length;
    return str.slice(left, right);
}


/* 
   According to RFC1034, a domain name syntax is:
   name := <label>.+{1,255}   -- names are at most 255 characters long, separated by dots.
   label := [a-zA-Z]+[[a-zA-Z0-9-]?[a-zA-Z0-9]]?{1,63}  -- each label is at most 63 characters long
   We actually check for a label...
*/
nn.isDomainName = function (domain1) {
    return domain1.length < 64 && domain1.search(/^[a-zA-Z]+([a-zA-Z0-9-]?[a-zA-Z0-9])*$/) > -1;
}

// Inserts string into current document.
nn.dns.say = function(string) {
    nn.dbg("saying |" + string +"|");
    document.write(string);
}


// Create a new form name for each call to nn.dns.search().
nn.dns.formName_counter = 0;
nn.dns.formName = function () {
  return "__nn__formForRegistration" + nn.dns.formName_counter++;
}


// Inserts a 211x127 search widget into the current document.
// Create different sized widgets by creating new functions, then
//   assign the right function to nn.dns.search...
nn.dns.search211x127 = function(pid) {
    var strInitialValue = "";
    var fn = nn.dns.formName();
    var hostname = nn.dns.currency2hostname[nn.dns.currency];

    if (arguments.length == 2) strInitialValue = arguments[1];

    nn.dns.say('<TABLE BORDER="0" WIDTH="211" CELLPADDING="0" CELLSPACING="0">' +
	       '<TR><TD COLSPAN="3" WIDTH="211">' +
	       '<IMG SRC="http://' + hostname + '/images/searchWidgetTop.gif" WIDTH="211" HEIGHT="50"></TD></TR><TR BGCOLOR="#330099"><TD WIDTH="6"><IMG SRC="http://' + hostname + '/images/sidePanelLeft.gif" WIDTH="6" HEIGHT="30"></TD><TD WIDTH="150">' +
	       '<FORM NAME="' + fn + '" VALIGN="TOP" action="http://' + hostname +
	       '/dnrs/netnames.client.Search" onSubmit="javascript:return nn.dns.formForRegistrationSubmit2(document.' + fn + ');" METHOD=POST>' +
	       '&nbsp; <INPUT NAME="domainName" TYPE="text" VALUE="' + strInitialValue + '" maxlength="63" SIZE="15">' +
	       '<input type="hidden" name="packageList" value="1">' +
	       '<input type="hidden" name="tld" value=".com,.net,.org,.co.uk,.ltd.uk,.plc.uk,.org.uk,.com.ar,.com.au,.at,.co.at,.com.br,.ca,.dk,.tm.fr,.com.fr,.fr,.de,.co.jp,.co.kr,.pe.kr,.nl,.nu,.no,.co.za,.se,.ch,.com.tw">' +
	       '<input type="hidden"  name="pid" value="' + pid + '">' +
	       '<input type="hidden"  name="aid" value="' + nn.dns.search_aid + '">' +
	       '<INPUT TYPE="hidden"  VALUE="4" NAME="type">' +
	       '<INPUT type="hidden"  VALUE="" NAME="domainNames">' +
	       '<INPUT type="hidden"  NAME="searchForParameter" VALUE=",exact,exact,exact">' +
	       '<INPUT type="hidden"  NAME="usingWhoIs" VALUE=",0,0,0">' +
	       '<INPUT type="hidden"  NAME="sourceParameter" value=",reg,unreg,del">' +
	       '<INPUT type="hidden"  NAME="typeParameter"   value=",111111,111111,111111">' +
	       '<INPUT type="hidden"  NAME="dateParameter" value=",,,">' +
	       '<INPUT type="hidden"  NAME="countryNameParameter" value=",,,">' +
	       '<INPUT type="hidden"  NAME="sortbyParameter" value=",,,">' +
	       '<INPUT type="hidden"  NAME="viewResultParameter" value="20">' +
	       '<INPUT type="hidden"  NAME="packageIdParameter" value="">' +
	       '<INPUT type="hidden"  NAME="usenslookup" value="yes">' +
	       '</TD><TD WIDTH="50" align="right"><INPUT TYPE="image" SRC="http://' + hostname + '/images/searchWidgetSubmit.gif" BORDER="0" VALUE="Begin Search" WIDTH="50" HEIGHT="30"></TD>' +
	       '</TR><TR><TD COLSPAN=3 WIDTH=211><IMG SRC="http://' + hostname + '/images/searchWidgetBottom.gif" WIDTH="211" HEIGHT="17" border="0"></A></TD></TR>' +
	       '</TABLE>' +
	       '</FORM>');
}

// The default search widget is 211x127.
nn.dns.search = nn.dns.search211x127;

// Sets the search widget to be one of several kinds. Currently on "211x127" is supported.
nn.dns.searchSize = function (strSizeName) {
    if (strSizeName == "211x127") {
	nn.dns.search = nn.dns.search211x127;
    } else {
	// strSizeName is not a known size. Default to 
	nn.dns.search = nn.dns.search211x127;
    }
}





//-----------------  form checking functions


nn.dns.formForRegistrationSubmit2 = function (f) {
    f.domainName.value=nn.trim(f.domainName.value);
    var domainstr = f.domainName.value;      
    if (nn.isEmpty(domainstr))
      return nn.errorMessage("Entered an empty domain name. Please try again.");
    if (! nn.isDomainName(domainstr))
      return nn.errorMessage(domainstr + " is not a domain name. Please try again.");
    nn.dns.fillNeedHidden3(f);
    nn.dbg("submitting " + domainstr);
    status = "Searching for " + domainstr + "...";
    f.submit();
}

nn.dns.fillNeedHidden3 = function (f) {
    f.domainNames.value = "";
    var domainname = nn.trim(f.domainName.value);//the name user wants to search
    var domainlist = "";
    var tlds = f.tld.value;
    var tldrest = tlds;
    var pos = tlds.indexOf(",");
    while ( pos != -1 ){
	tld_token = tldrest.substring(0,pos);
	domainlist += "," + domainname + tld_token;
	tldrest = tldrest.substring(pos+1, tlds.length);
	pos = tldrest.indexOf(",");
    }
    // add the last token
    if ( tldrest.length > 0 ) {
	domainlist += "," + domainname + tldrest;
    }
    f.domainNames.value = domainlist;
    nn.dbg("domain list = " + domainlist);
}

// eof nn.dns.search.js
