
function defined (x) {
	if (typeof x == "undefined"){
		// variable x does not exist
		return false;
	}
	return true;
}

function checkandset(x,y) {
	return defined(x) ? x : y;
}

var debugId = 0;
var debugenabled  = checkandset(debugenabled, 0);

var telform       = checkandset(telform, "telform");
var telfield      = checkandset(telfield, "teldomain");
var lookup_button = checkandset(lookup_button, "lookup");
var debugform     = checkandset(debugform, "debugform");
var lookup_error  = checkandset(lookup_error, "lookup_error");
var type          = checkandset(type, "personal");
var callback      = checkandset(callback, false);
var mapping       = checkandset(mapping, new Array());

function addOption(selectbox,text,value ) {
	var optn = document.createElement("OPTION");
	optn.text = text;
	optn.value = value;
	selectbox.options.add(optn);
}

function clearDebug(selectbox) {
	selectbox.innerHTML = "";
	for (var i in document[theform]) {
		document[debugform][i].value = "";
	}
}

function debug(string) {
	if (debugenabled) {
		addOption(document.getElementById(debugform).debug, string, debugId++);
	}
}

debug("Ver = " + YAHOO.env.ua.ie);
debug("TelForm element = "  + document.getElementById( telform));
debug("TelField element = " + document.getElementById(telfield));

for (var i in YAHOO.env.ua) {
	debug(i + " = " + YAHOO.env.ua[i]);
}

var YCM = YAHOO.util.Connect;



var baseUri = "/cgi-bin/telLookup.php?nameserver=8.8.8.8&domain=";


var request;
var callback;
var responseSuccess;
var responseFailure;

var theform = document.getElementById(telform);
var theerror = document.getElementById(lookup_error) || {};
debug("theform = " + theform);
debug("theerror = " + theerror);

var fields = new Array(
	"email", "phone", "fax", "salutation", "first_name", "last_name",
	"address_1", "address_2", "address_3", "town_city", "state_province",
	"postal_code", "country", "name", "company_name", "website"
);

responseSuccess = function (o) {
	/*
	* The argument "o" is the response object.  Its
	* properties are:
	*
	* - tId
	* - responseText
	* - argument
	*/
	
	debug("tId = " + o.tId);
	debug("responseText = " + o.responseText);
	debug("argument = " + o.argument);
	debug("type = " + type);
	
	
	var parsed = YAHOO.lang.JSON.parse(o.responseText);
	
	debug("Message = " + parsed.message);
	debug("Status = " + parsed.status);
	debug("Form = " + theform);
	
	if (parsed.status == "pass") {
		
		// Check if we"ve mapped the field names
		var mapped = defined(mapping) ? true : false;
		debug("mapped = " + mapped);
		
		var formfields = new Array();
		
		if (mapped) {
			for (var c in fields) {
				if (mapping[fields[c]]) {
					if (theform[ mapping[fields[c]] ] && typeof theform[ mapping[fields[c]] ] == "object") {
						formfields[ mapping[fields[c]] ] = 1;
					}
				}
				else {
					if (theform[ fields[c] ] && typeof theform[ fields[c] ] == "object") {
						formfields[ fields[c] ] = 1;
					}
				}
			}
		}
		else {
			for (var c in fields) {
				if (theform[ fields[c] ] && typeof theform[ fields[c] ] == "object") {
					formfields[ fields[c] ] = 1;
				}
			}
		}
		
		debug("formfields = " + formfields);
		for (var f in formfields) {
			debug("Formfield: " + f);
		}
		
		if (type == "personal") {
			if (parsed.form["business_address"] && parsed.form["address"]) {
				delete parsed.form["business_address"];
			}
		}
		else if (type == "business") {
			if (parsed.form["address"] && parsed.form["business_address"]) {
				delete parsed.form["address"];
			}
		}
		
		if (parsed.form) {
			for (var i in parsed.form) {
				// Only add the first value, even if theres more than one
				for (var j = 0; j < 1; j++) {
					if (typeof parsed.form[i][j] == "object") {
						for (var k in parsed.form[i][j]) {
							if (mapped) {
								if (mapping[k]) {
									if (formfields[ mapping[k] ]) {
										theform[ mapping[k] ].value = parsed.form[i][j][k];
										delete formfields[k];
									}
								}
								else {
									if (formfields[k]) {
										theform[k].value = parsed.form[i][j][k];
										delete formfields[k];
									}
								}
							}
							else {
								if (formfields[k]) {
									theform[k].value = parsed.form[i][j][k];
									delete formfields[k];
								}
							}
						}
					}
					else {
						if (mapping[i]) {
							if (formfields[ mapping[i] ]) {
								theform[ mapping[i] ].value = parsed.form[i][j];
								delete formfields[i];
							}
						}
						else {
							if (formfields[i]) {
								theform[i].value = parsed.form[i][j];
								delete formfields[i];
							}
						}
						
					}
				}
			}
			theerror.innerHTML = "";
		}
		else {
			theerror.innerHTML = "Domain has no usable details";
		}
	}
	else {
		theerror.innerHTML = parsed.message;
	}
	
/*	
	// Check if any fields werent populated
	var warnings = new Array();
	
	for (var field in formfields) {
		warnings.push(field);
	}
	
	// Alert the user
	if (warnings.length) {
		// Do the callback
		try {
			callback(warnings);
		}
		catch (e) {
			// If it fails, fail silently!
			//alert("no callback");
		}
	}
*/
};

responseFailure = function (o) {
	/*
	* The argument "o" is the response object.  Its
	* properties are:
	*
	* - tId
	* - responseText
	* - argument
	*/
	
	debug("Failed");
	theerror.innerHTML = "Unknown error";
};

// Create a callback object that defines success and failure handlers
callback = new Object();
callback.success = responseSuccess;
callback.failure = responseFailure;



function makeRequest(domain) {
	// Send request to xml.weather.yahoo.com
	var uri = baseUri + domain;
	debug("uri = " + uri);
	request = YCM.asyncRequest("GET", uri, callback);
	debug("request sent");
}

function enableLookup() {
	document.getElementById(lookup_button).style.visibility = "visible";
}

function doLookup(domain) {
	if (domain) {
		debug("Lookup for " + domain);
		makeRequest(domain);
	}
	else {
		debug("No domain");
		return false;
	}
}

function checkTelValid(tel) {
	var ret = false;
	
	var matches = tel.match("^([a-z0-9\-.]{3,})(\.tel)?$");
	// If its in the form of a domain name
	if (matches != null && matches[0]) {
		if (!matches[2] && !tel.match(".tel$")) {
			theform[telfield].value += ".tel";
		}
		// And has at least one letter
		if (matches[1].match("[a-z]")) {
			// And maybe other stuff .. ?
			ret = true;
		}
	}
	return ret;
}

function telLookup() {
	formfield = document.getElementById(telfield);
	if (checkTelValid(theform[telfield].value)) {
		doLookup(theform[telfield].value);
	}
	else {
		alert("Not a valid .tel domain name");
	}
}


enableLookup();

