var req;
var target;
var isIE;
var isValidScreenName = false;

function initRequest(url) {
	if(window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		isIE = true;
		req = new ActiveXObject("Microsoft.XMLHTTP");
	}
}

function validateUserId() {
	if(!target) {
		target = document.getElementById("screen_name");
	}
	
	var url = "validate.php?screen_name=" + escape(target.value);
	
	initRequest(url);
	req.onreadystatechange = processRequest;
	req.open("GET", url, true);
	req.send(null);
}

function validateEmailAddress() {
	target = document.getElementById("email_address");
	
	var url = "validate_email_address.php?email_address=" + escape(target.value);
	
	initRequest(url);
	req.onreadystatechange = processEmailAddressRequest;
	req.open("GET", url, true);
	req.send(null);
}

function processEmailAddressRequest() {
	if(req.readyState == 4) {
		if(req.status == 200) {
			var message = req.responseText;
			var submitBtn = document.getElementById("submit_button");
			
			setEmailAddressMessageUsingDOM(message);
			
			if(message == "false") {
			// Email address is taken (in use)
				submitBtn.disabled = true;
				isValidEmailAddress = false;
			} else {
			// Email address is not taken (not in use)
				submitBtn.disabled = false;
				isValidEmailAddress = true;
			}
		}
	}
}

function processRequest() {
	if(req.readyState == 4) {
		if(req.status == 200) {
			var message = req.responseText;
			var submitBtn = document.getElementById("submit_button");
			
			setMessageUsingDOM(message);
			
			if(message == "false") {
				submitBtn.disabled = true;
				isValidScreenName = false;
			} else {
				submitBtn.disabled = false;
				isValidScreenName = true;
			}
		}
	}
}

function setMessageUsingInline(message) {
	mdiv = document.getElementById("screen_name_message");
	
	if(message == "false") {
		mdiv.innerHTML = "<div style=\"color:red; font-size: 8pt;\">Not Available</div>";
	} else {
		mdiv.innerHTML = "<div style=\"color:green; font-size: 8pt;\">Available</div>";
	}
}

function setMessageUsingDOM(message) {
	var userMessageElement = document.getElementById("screen_name_message");
	var messageText;
	
	if(message == "false") {
		userMessageElement.style.color = "red";
		messageText = "Not Available";
	} else {
		userMessageElement.style.color = "green";
		messageText = "Available";
	}
	
	// if the messageBody element has been created simple replace it otherwise
	// append the new element
	var messageBody = document.createTextNode(messageText);
	
	if(userMessageElement.childNodes[0]) {
		userMessageElement.replaceChild(messageBody, userMessageElement.childNodes[0]);
	} else {
		userMessageElement.appendChild(messageBody);
	}
}

function setEmailAddressMessageUsingInline(message) {
	mdiv = document.getElementById("email_address_message");
	
	if(message == "false") {
		mdiv.innerHTML = "<div style=\"color:red; font-size: 8pt;\">Not Available</div>";
	} else {
		mdiv.innerHTML = "<div style=\"color:green; font-size: 8pt;\">OK</div>";
	}
}

function setEmailAddressMessageUsingDOM(message) {
	var userMessageElement = document.getElementById("email_address_message");
	var messageText;
	
	if(message == "false") {
		userMessageElement.style.color = "red";
		messageText = "Not Available";
	} else {
		userMessageElement.style.color = "green";
		messageText = "OK";
	}
	
	// if the messageBody element has been created simple replace it otherwise
	// append the new element
	var messageBody = document.createTextNode(messageText);
	
	if(userMessageElement.childNodes[0]) {
		userMessageElement.replaceChild(messageBody, userMessageElement.childNodes[0]);
	} else {
		userMessageElement.appendChild(messageBody);
	}
}

function disableSubmitBtn() {
	var submitBtn = document.getElementById("submit_button");
	submitBtn.disabled = true;
}

function validate_signup_form(form) {
	if(isValidScreenName == false) {
		alert("Please enter a different screen name.\n\nThe screen name you entered is already taken.");
		form.screen_name.focus();
		
		return false;
	}
	
	if(form.screen_name.value == "") {
		alert("Please enter your desired screen name.");
		form.screen_name.focus();
		
		return false;
	}
	
	if(form.password.value == "") {
		alert("Please enter your desired password.");
		form.password.focus();
		
		return false;
	}
	
	if(form.password_verification.value == "") {
		alert("Please verify your desired password.");
		form.password_verification.focus();
		
		return false;
	}
	
	if(form.password.value != form.password_verification.value) {
		alert("Your passwords do not match, please re-enter.");
		form.password.focus();
		
		return false;
	}
	
	if(form.email_address.value == "") {
		alert("Please enter your email address.");
		form.email_address.focus();
		
		return false;
	}
	
	var emailFilter=/^.+@.+\..{2,3}$/;
	
	if(!(emailFilter.test(form.email_address.value))) {
		alert("Please enter a valid email address.");
		form.email_address.focus();
		
		return false;
	}
	
	var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
	
	if(form.email_address.value.match(illegalChars)) {
		alert("The email address contains illegal characters.");
		form.email_address.focus();
		
		return false;
	}
	
	if(form.ethnicity_id.value == "") {
		alert("Please enter your ethnicity.");
		form.ethnicity_id.focus();
		
		return false;
	}
	
	var is_gender_checked = 0;
	
	for(i=0; i < form.gender.length; i++) {
		if(form.gender[i].checked) {
			is_gender_checked = 1;
		}
	}
	
	if(is_gender_checked == 0) {
		alert("Please indicate your gender.");
		
		return false;
	}
	
	if(form.birthday_month.value == "") {
		alert("Please enter the month of your birthday.");
		form.birthday_month.focus();
		
		return false;
	}
	
	if(form.birthday_day.value == "") {
		alert("Please enter the day of your birthday.");
		form.birthday_day.focus();
		
		return false;
	}
	
	if(form.birthday_year.value == "") {
		alert("Please enter the year of your birthday.");
		form.birthday_year.focus();
		
		return false;
	}
	
	if(form.country.value == "") {
		alert("Please indicate which country you live in.");
		form.country.focus();
		
		return false;
	}
	
	if(form.zip_code.value == "") {
		alert("Please provide your zip code.");
		form.country.focus();
		
		return false;
	}
	
	return true;
}
