






















function domain_search(domains, options) {
	options.imagePrefix = options.imagePrefix || "";
	var response_to_element={
		initial: function(d) {
			return _mkel("tr", "", [
				_mkel("td", "", [d]),
				_mkel("td", "", [
					_mkel("img",{src: options.imagePrefix + "/images/domains/loading.gif"}),
				], function(e) {e.style.textAlign="center"}),
				_mkel("td", "", ["Searching..."])
			]);
		},
		timeout: function(d) {
			return _mkel("tr", "", [
				_mkel("td", "", [d]),
				_mkel("td", "", [
					"Timed out",
				], function(e) {e.style.textAlign="center"}),
				_mkel("td", "", ["Timed out"])
			]);
		},
		unknown: function(d) {
			return _mkel("tr", "", [
				_mkel("td", "", [d]),
				_mkel("td", "", [
					"Unknown",
				], function(e) {e.style.textAlign="center"}),
				_mkel("td", "", ["Unknown"])
			]);
		},
		success: function(d, tld, type) {
			var message=(prices && prices[tld])?unhtml("Register for only &pound;")+(prices[tld]['new']):"Register";
			return _mkel("tr", "", [
				_mkel("td", "", [d]),
				_mkel("td", "", [
					_mkel("div", {className: "available"}, [
						_mkel("img",{src: options.imagePrefix + "/images/content/tick_sml_green.gif", alt: "Domain Available"}),
						"Available"
					])
				], function(e) {e.style.textAlign="center"}),
				_mkel("td", "", [
					_mkel("input", {name: "ppb-domain", value: "new:"+d, type: "checkbox", price: prices[tld]['new']}, [], function(e) {if((!type) && prices && prices[tld] && prices[tld]['preTick']) {e.checked = true; e.defaultChecked = true}; e.value="new:"+d}),
					options.messagesByType && options.messagesByType[tld] ? _mkel("strong", {}, [options.messagesByType[tld].success || message]) : message,
          options.highlightImagesByType && options.highlightImagesByType[tld] ? _mkel("img", {src: options.highlightImagesByType[tld]}) : ""
				])
			]);
		},
		premium: function(d, p) {
			return "";
		},
		fail: function(d, tld) {
			var result_content=[];
			if(prices && prices[tld] && prices[tld]["transfer"] !== undefined) {
				result_content = [
					_mkel("input", {name: "ppb-domain", value: "transfer:"+d, type: "checkbox", price: prices[tld]["transfer"]}, [], function(e) {e.value="transfer:"+d}),
					unhtml("I own this - transfer it for &pound;")+(prices[tld]["transfer"])
				];
			} else {
				result_content = ["Unavailable"];
			}
			return _mkel("tr", "", [
				_mkel("td", "", [d]),
				_mkel("td", "", [
					_mkel("div", {className: "taken"}, [
						_mkel("img",{src: options.imagePrefix + "/images/content/cross_sml.gif", alt: "Domain Available"}),
					"Taken"
					])
				], function(e) {e.style.textAlign="center"}),
				_mkel("td", "", result_content)
			]);
		},
		'fail-bad-uk': function(d, tld) {
			var message=(prices && prices[tld])?unhtml("I own this - transfer it for &pound;")+(prices[tld]["transfer"]):"I own this - transfer it";
			return _mkel("tr", "", [
				_mkel("td", "", [d]),
				_mkel("td", "", [
					_mkel("div", {className: "taken"}, [
						_mkel("img",{src: options.imagePrefix + "/images/content/cross_sml.gif", alt: "Domain Available"}),
					"Taken"
					])
				], function(e) {e.style.textAlign="center"}),
				_mkel("td", "", [
					_mkel("input", {name: "ppb-domain", value: "transfer:"+d, type: "checkbox", price: prices[tld]["transfer"], onclick: function() {
						alert("Please arrange for your current provider to change the IPS-TAG to 'HEARTINTERNET' or 'EXTEND' and then you'll be able to do the transfer");
						return false;
					}}),
					message
				])
			]);
		}
	};
	function response_to_el(r, d, other, type) {
		if(!response_to_element[r])
			return;
		var e = response_to_element[r](d, other, type);
		e.style.height="30px";
		e.responseType=r;
    if(options.hoverMessagesByType && other) {
      if(options.hoverMessagesByType[other]) {
        var hover_el;
        e.onmouseover = function(evt) {
          this.onmousemove(evt);
        };
        e.onmousemove = function(evt) {
          evt = evt || window.event; 
          var x = evt.clientX;
          var y = evt.clientY;
          if( typeof( window.pageYOffset ) == 'number' ) {
              x += window.pageXOffset;
              y += window.pageYOffset;
          } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
              x += document.documentElement.scrollLeft;
              y += document.documentElement.scrollTop;
          } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
              x += document.body.scrollLeft;
              y += document.body.scrollTop;
          }
          if(!hover_el) {
            document.body.appendChild(
              hover_el = _mkel(
                "div",
                {className: "hoverbox"},
                [ options.hoverMessagesByType[other] ]
              )
            );
          }
          hover_el.style.top = y + 10 + "px";
          hover_el.style.left = x + 10 + "px";
        };
        e.onmouseout = function() {
          document.body.removeChild(hover_el);
          hover_el = undefined;
        };
      }
    }

		return e;
	}
	function make_row_dark(e) {
		// Ben likes CSS on the <td> not the <tr> for some reason
		e.className="alt-row";
		for(var j=0; j<e.childNodes.length; j++) {
			e.childNodes.item(j).className="alt";
		}
	}

	var ah = new AJAXHelper();
	options.searchScriptPrefix = options.searchScriptPrefix || "";
	var search_script = options.searchScriptPrefix + "domain-jax.cgi";
	var interval = 500;
	return ah.post(search_script, {domain: domains, multi: options.multi, expand: options.expand, cid: options.customerID||""}, function(x) {
		var search_info=x.responseText.split(/\n/);
		var search_id = search_info.shift();

		var suggestion_body_current = document.getElementById("domain-search-suggestions");
		var suggestion_body = suggestion_body_current.cloneNode(false);
		var suggestion_parent = suggestion_body_current.parentNode.parentNode.parentNode;
		var to_readd = suggestion_parent.removeChild(suggestion_body_current.parentNode.parentNode);
		suggestion_body_current.parentNode.replaceChild(suggestion_body, suggestion_body_current);

		var body_current = document.getElementById("domain-search-results");
		var body = body_current.cloneNode(false);
		var name_to_element = {};
		for(var i=0; i<search_info.length; i++) {
			var domain_name = search_info[i];
			if(!domain_name) continue;
			name_to_element[domain_name]=response_to_el("initial", domain_name);

			if(i % 2 == 1) make_row_dark(name_to_element[domain_name]);

			body.appendChild(name_to_element[domain_name]);
		}
		body_current.parentNode.replaceChild(body, body_current);
		var search_poll = function() {
			ah.post(search_script, {'search-id': search_id}, function(x) {
				var result_info=x.responseText.split(/\n/);
				var completeness_indicator = result_info.shift();
				for(var i=0; i<result_info.length; i++) {
					if(!result_info[i]) continue;
					var result_p = result_info[i].split(/ /);
					var d = result_p[0];
					var type = result_p[1];
					var r = result_p[2];
					var tld = result_p[3];
					var e = name_to_element[d];
					if(e && e.responseType!=r && response_to_element[r]) {
						name_to_element[d]=response_to_el(r, d, tld);
						if(name_to_element[d]) {
							if(e.className=="alt-row") make_row_dark(name_to_element[d]);
							e.parentNode.replaceChild(name_to_element[d], e);
						}
					} else if(type=="suggestion" && response_to_element[r] && !e) {
						if(!d) continue;
						var ne=response_to_el(r, d, tld, type);
						if(to_readd) {
							suggestion_parent.appendChild(to_readd);
							to_readd = false;
						}
						if((suggestion_body.childNodes.length+1) % 2 == 1)
							make_row_dark(ne);
						suggestion_body.appendChild(ne);
						name_to_element[d]=ne;
					} else if(!e) {
						//alert(result_info[i]); // FIXME
					}
				}
				if(completeness_indicator.match(/incomplete/)) {
					// Check again
					setTimeout(search_poll, interval); 
				} else {
					// Mark all the rest unknown.
					for(var d in name_to_element)
						if(name_to_element[d].responseType=="initial") {
							var e = name_to_element[d];
							name_to_element[d]=response_to_el("unknown", d);
							e.parentNode.replaceChild(name_to_element[d], e);
						}
				}
			});
		};
		search_poll();
	});
}

