//document.write('<scr','ipt language="javascript" src="/inc/javascript/getElement.js" type="text\/javascript"><\/scr ','ipt>');
//document.write('<scr','ipt language="javascript" src="/inc/javascript/getControl.js" type="text\/javascript"><\/scr ','ipt>');
//document.write('<scr','ipt language="javascript" src="/inc/javascript/xml_util.js" type="text\/javascript"><\/scr ','ipt>');

var avReq;
var avDom;

/*******************************************************************************
 * getValidateAddressRequestXML - Create an XML ValidateAddressRequest string from the array
 *******************************************************************************/
function getValidateAddressRequestXML(address,callback)
{
	var xml = '';

// Start the request
	xml += '<'+"?xml version=\"1.0\" xml:lang=\"UTF-8\"?>\n";
	xml += "<maverick>\n";

// Start the request
	var t = new Date();
	avTimestamp = t.getTime();
	xml += "<ValidateAddressRequest callback=\""+callback+"\"";
	xml += ">\n";

// Format the address
	for (var i in address)
	{
		var tmp = i.split('_');
		var tag = '';
		for (var x=0;x<tmp.length;x++)
			tag += tmp[x].substring(0,1).toUpperCase()+tmp[x].substring(1,tmp[x].length);
		xml += '<'+tag+'>'+address[i]+'</'+tag+'>\n';
	}

// End request
	xml += "</ValidateAddressRequest>\n";
	xml += "</maverick>\n";

	return xml;
}

/*******************************************************************************
 * validateAddress - use XMLHttpRequest to validate the address
 *******************************************************************************/
function validateAddress(address)
{
	var xml_request = getValidateAddressRequestXML(address,'');
//alert(xml_request);
	var url = '/xml/validateAddress.php';
	if (window.XMLHttpRequest)
	{
	// Non-IE browsers
		avReq = new XMLHttpRequest();
		try {
			avReq.open("POST", url, false);
		} catch (e) {
			alert(e);
		}
		avReq.setRequestHeader('Content-Type', 'text/xml');
		avReq.send(xml_request);
	}
	else if (window.ActiveXObject)
	{
	// IE
		avReq = new ActiveXObject("Microsoft.XMLHTTP");
		if (avReq)
		{
			avReq.open("POST", url, false);
			avReq.setRequestHeader('Content-Type', 'text/xml');
			avReq.send(xml_request);
		}
	}

	while (avReq.readyState != 4 || avReq.status != 200) {}
//alert(avReq.responseText);

// OK response
	if (typeof avReq.responseXML != 'undefined')
		avDom = avReq.responseXML;
	else
		parseXMLIntoDOM(avReq.responseText);
//alert(avDom);
	if (!avDom)
		return;
//alert(print_dom(avDom));

// Make sure the response isn't stale
	var maverick = avDom.getElementsByTagName('maverick')[0];
	if (!maverick)
		return;
	return maverick.getElementsByTagName('ValidateAddressResponse')[0];
}

/*******************************************************************************
 * validateAddressWithCallback - use XMLHttpRequest to validate the address
 *******************************************************************************/
function validateAddressWithCallback(address,callback)
{
	var xml_request = getValidateAddressRequestXML(address,callback);
//alert(xml_request);
	var url = '/xml/validateAddress.php';
	if (window.XMLHttpRequest)
	{
	// Non-IE browsers
		avReq = new XMLHttpRequest();
		try {
			avReq.onreadystatechange = processValidateAddress;
			avReq.open("POST", url, true);
		} catch (e) {
			alert(e);
		}
		avReq.setRequestHeader('Content-Type', 'text/xml');
		avReq.send(xml_request);
	}
	else if (window.ActiveXObject)
	{
	// IE
		avReq = new ActiveXObject("Microsoft.XMLHTTP");
		if (avReq)
		{
			avReq.onreadystatechange = processValidateAddress;
			avReq.open("POST", url, true);
			avReq.setRequestHeader('Content-Type', 'text/xml');
			avReq.send(xml_request);
		}
	}
}

function processValidateAddress()
{
	if (avReq.readyState != 4 || avReq.status != 200)
		return;

//alert(avReq.responseText);
// OK response
	if (typeof avReq.responseXML != 'undefined')
		avDom = avReq.responseXML;
	else
		parseXMLIntoDOM(avReq.responseText);
//alert(avDom);
	if (!avDom)
		return;
//alert(print_dom(avDom));

// Make sure the response isn't stale
	var maverick = avDom.getElementsByTagName('maverick')[0];
	if (!maverick)
		return;
	var response = maverick.getElementsByTagName('ValidateAddressResponse')[0];
	if (!response)
		return;

// If there's a callback specified, look for it and run it
	var callback = response.getAttribute('callback');
	if (callback != null && callback.value != '')
	{
	// Look for the function (defined outside of this file, of course)
		var callback_function = self[callback];
		if (callback_function)
			callback_function(response);
	}
}
