/*
 * Check errors inline
 */

function makeGood(el) {
	if (el.up("li").hasClassName("bad")) el.up("li").removeClassName("bad");
	if (!el.up("li").hasClassName("good")) el.up("li").addClassName("good");
}

function makeBad(el) {
	if (!el.up("li").hasClassName("bad")) el.up("li").addClassName("bad");
}

function isGood(el) {
	return el.up("li").hasClassName("good");
}

var userName = $("user-name");
function validateUsername(ev) {
	var usernamePattern = /^[a-z0-9A-Z._-]+$/;
	if (!usernamePattern.test(userName.value)) {
		makeBad(userName);
	} else {
		new Ajax.Request('/ctyf/app/ajax/validate/username/' + userName.value,
			{method: 'get', onSuccess: function (transport) {
					if (transport.responseText.strip()) {
						makeBad(userName);
					} else {
						makeGood(userName);
					}					
				}
			}
		);
	}
}

userName.observe("change", validateUsername);
userName.observe("blur", validateUsername);

var userEmail = $("user-email");
function validateEmail(ev) {
	var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; 
	if (!emailPattern.test(userEmail.value)) {
		if (!userEmail.up("li").hasClassName("bad")) userEmail.up("li").addClassName("bad");
	} else {
		new Ajax.Request('/ctyf/app/ajax/validate/email/' + userEmail.value,
			{method: 'get', onSuccess: function (transport) {
					if (transport.responseText.strip()) {
						makeBad(userEmail);
					} else {
						makeGood(userEmail);
					}					
				}
			}
		);
	}
}
userEmail.observe("change", validateEmail);
userEmail.observe("blur", validateEmail);

var userPass = $("user-pass");
function validatePass(ev) {
	if (userPass.value.length < 7) {
		makeBad(userPass);
	} else {
		makeGood(userPass);
	}
}
userPass.observe("change", validatePass);
userPass.observe("blur", validatePass);

var firstName = $("profile-first_name");
function validateFirstName(ev) {
	if (firstName.value.strip() == '') {
		makeBad(firstName);
	} else {
		makeGood(firstName);
	}
}
firstName.observe("change", validateFirstName);
firstName.observe("blur", validateFirstName);

var City = $("profile-city");
function validateCity(ev) {
	if (City.value.strip() == '') {
		makeBad(City);
	} else {
		makeGood(City);
	}
}
City.observe("change", validateCity);
City.observe("blur", validateCity);

var State = $("profile-state");
function validateState(ev) {
	if (State.selected == '' || State.value == '') {
		makeBad(State);
	} else {
		makeGood(State);
	}
}
State.observe("change", validateState);
State.observe("blur", validateState);

var d=new Date();
var month=new Array(12);
month[0]="January";
month[1]="February";
month[2]="March";
month[3]="April";
month[4]="May";
month[5]="June";
month[6]="July";
month[7]="August";
month[8]="September";
month[9]="October";
month[10]="November";
month[11]="December";

var monthMap = {
	"January": 1,
	"February": 2,
	"March": 3,
	"April": 4,
	"May": 5,
	"June": 6,
	"July": 7,
	"August": 8,
	"September": 9,
	"October": 10,
	"November": 11,
	"December":12
};


var bYear = $("profile-birth_year");

function checkBirth (){
	var passCount = 0;
	
	if (bYear.value == "" || parseInt(bYear.value) > 1997) {
		makeBad(bYear);
	} else {passCount++;}
	
	if ($("profile-birth_month").value == "") {
		makeBad(bYear);
	} else {passCount++;}
		
	if ($("profile-birth_day").value == "") {
		makeBad(bYear);
	} else {passCount++;}
	
	if (passCount == 3) {
		makeGood(bYear);
	}
}

bYear.observe("change", checkBirth);
bYear.observe("blur", checkBirth);
$("profile-birth_day").observe("change", checkBirth);
$("profile-birth_day").observe("blur", checkBirth);
$("profile-birth_month").observe("change", checkBirth);
$("profile-birth_month").observe("blur", checkBirth);

/*
 * Check for errors on submit.
 */
$("signup").observe('submit', function (ev) {			
	if (!$("agreed").checked) {
		ev.stop();
		alert("You must agree to the the Terms & Conditions.");
		return;
	} 
	
	var flag = false;
	
	var badFields = $$(".bad");
	if (badFields.length) {
		// alert("Please correct the errors.");
		flag = true;
	}
	
	[
		"user-name", 
		"user-email", 
		"user-pass", 
		"profile-first_name", 
		"profile-city", 
		"profile-state",
		"profile-birth_year"
	].each(function (elId) {
		if (!isGood($(elId))) {
			makeBad($(elId));
			flag = true;
		}
	});
	
	if (flag) {
		ev.stop();
		alert("You must correct the registration form.");
		return;
	}	
});