function createRequestObject() {
	var ro;
	ro = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	return ro;
}

var http = createRequestObject();

function sendRequest(type, action) {

	displayProcessingMessage();

	var date = new Date();
	var url = '/ajaxRemote?timestamp=' + date.getTime() + '&action=' + action;
	
	http.open('get', url);
	
	switch (type) {
		case 'checkRegistrationEmail':
			http.onreadystatechange = processEmailCheckResponse;
			break;
		case 'updateAddressSelection':
			http.onreadystatechange = updateAddressSelection;
			break;
	}
	
	http.send(null);
	
}

function processEmailCheckResponse() {
	if (http.readyState == 4) {
		if (http.status != 200) return false;
		var xml = http.responseXML;
		var error = xml.getElementsByTagName('error');
		if (error && error.length > 0) {
			for (var i = 0; i < error.length; i++) {
				alert(error[i].getElementsByTagName('errorMessage')[0].childNodes[0].nodeValue);
			}
			if (document.getElementById('userEmail')) {
				document.getElementById('userEmail').className = 'error';
				document.getElementById('userEmail').focus();
				document.getElementById('userEmail').select();
			}
		} else {
			if (document.getElementById('userEmail')) {
				document.getElementById('userEmail').className = '';
			}
		}
	} else {
		
	}
}

function updateAddressSelection() {
	if (http.readyState == 4) {
		if (http.status != 200) {
			alert("An error occurred. Please refresh the page.");
			return false;
		}
		var xml = http.responseXML;
		var error = xml.getElementsByTagName('error');
		if (error && error.length > 0) {
			alert(error[0].getElementsByTagName('errorMessage')[0].childNodes[0].nodeValue);
			return false;
		}
		
		var address = xml.getElementsByTagName('addressBookEntry')[0];
		
		var f = document.getElementById('userInfoID').form;
		var fields = new Array("userTitle", "userFirstName", "userLastName", 
			"userAddr1", "userAddr2", "userAddr3", "userAddr4", "userPostCode", 
			"userCountry", "userTelephone", "userEmail");
		
		for (var i = 0; i < fields.length; i++) {
			var temp = address.getElementsByTagName(fields[i])[0];
			if (f.elements[fields[i]].tagName == 'INPUT') {
				if (temp.childNodes[0]) {
					f.elements[fields[i]].value = temp.childNodes[0].nodeValue;
				} else {
					f.elements[fields[i]].value = '';
				}
			} else if (f.elements[fields[i]].tagName == 'SELECT') {
				var s = f.elements[fields[i]];
				for (var j = 0; j < s.options.length; j++) {
					if (s.options[j].value == temp.childNodes[0].nodeValue) {
						s.selectedIndex = j;
					}
				}
			}
		}
		
	}
}

function blurOnEnter(f, e, evt) {
	evt = (evt) ? evt : event;
	var charCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode);
	if (charCode == 13 || charCode == 2) {
		e.blur();
		return false;
	}
	return true;
}

function displayProcessingMessage(display) {
	if (!display) var display = 'inline';
	if (document.getElementById('processingMessage')) {
		document.getElementById('processingMessage').style.display=display;
	}
}

function checkRegistrationEmailAddress(ad) {
	var type = 'checkRegistrationEmail';
	var action = 'checkRegistrationEmail&address=' + encodeURIComponent(ad);
	
	sendRequest(type, action);
}

function updateSelectedAddress(f) {
	var s = f.userInfoID;
	if (!s) return false;
	
	if (s.options[s.selectedIndex].value == '') return false;
	
	var type = 'updateAddressSelection';
	var action = 'getAddressEntry&userInfoID=' + s.options[s.selectedIndex].value;
	
	sendRequest(type, action);
}