var x;
function checkBirthDay()
{
	var y_combo = getByID("year");
	var m_combo = getByID("month");
	var d_combo = getByID("day");

	var y_index = y_combo.selectedIndex;
	var m_index = m_combo.selectedIndex;
	var d_index = d_combo.selectedIndex;

	var v_y = y_index > 0 ? 1 : 0;
	var v_m = m_index > 0 ? 1 : 0;
	var v_d = d_index > 0 ? 1 : 0;

	if(v_y + v_m + v_d == 3){
		var y = y_combo.options[y_index].value;
		var m = m_combo.options[m_index].value;
		var d = d_combo.options[d_index].value;
		
		var checkedDate = new Date();
		checkedDate.setFullYear(y);
		checkedDate.setMonth(m);
		checkedDate.setDate(d);		

		if(m != checkedDate.getMonth()){
			return 0;
		} else {
			return checkedDate.getFullYear()+'-'+(checkedDate.getMonth()+1)+'-'+checkedDate.getDate();
		}
	} else {
		return "";
	}
}
function checkDate()
{
	var valid = checkBirthDay();
	var message = "";
	switch(valid)
	{
		case "":
			message = "[optional]";
			break;
		case 0:
			message = "invalid date!";
			break;
		default:
			message = "ok";
	}
	getByID("birthday_check").innerHTML = message;
}
function checkUsername()
{
	var c_name = getByID("username_check");
	var f_name = Trim(getByID("username").value);
	getByID("username").value = f_name;
	
	var re = new RegExp("^[a-zA-Z0-9_]{5,20}$");
	//alert("match:"+f_name.match(re));
	//alert("test:"+re.test(f_name));
	if(f_name == ""){
		c_name.innerHTML = "please insert a valid username";
	} else if(!re.test(f_name)){ 
		c_name.innerHTML = "username should be 5-20[azAZ09_]";
	} else if(f_name.length < 5){ 
		c_name.innerHTML = "username should be 5 - 20 chars";
	} else if(f_name.length > 20){
		c_name.innerHTML = "username should be 5 - 20 chars";
	} else {
		checkUsernameAvailability(f_name);
	}
}
function checkPassword()
{
	var c_pass = getByID("password_check");
	var f_pass = Trim(getByID("password").value);
	getByID("password").value = f_pass;
	if(f_pass == ""){
		c_pass.innerHTML = "please insert a valid password";
	} else if(f_pass.length < 5){ 
		c_pass.innerHTML = "password should be 5 - 20 chars";
	} else if(f_pass.length > 20){
		c_pass.innerHTML = "password should be 5 - 20 chars";
	} else {
		c_pass.innerHTML = "ok";
	}
}
function checkConfirm()
{
	var c_conf = getByID("confirm_check");
	var f_conf = Trim(getByID("confirm").value);
	var f_pass = Trim(getByID("password").value);
	getByID("confirm").value = f_conf;
	if(f_conf == ""){
		c_conf.innerHTML = "please insert a valid password";
	} else if(f_conf.length < 5){ 
		c_conf.innerHTML = "password should be 5 - 20 chars";
	} else if(f_conf.length > 20){
		c_conf.innerHTML = "password should be 5 - 20 chars";
	} else if(f_pass.toString() != f_conf.toString()){
		c_conf.innerHTML = "confirm password is wrong";
	} else {
		c_conf.innerHTML = "ok";
	}
}
function checkFirstname()
{
	var c_first = getByID("firstname_check");
	var f_first = Trim(getByID("firstname").value);
	getByID("firstname").value = f_first;
	if(f_first == ""){
		c_first.innerHTML = "please insert your first name";
	} else {
		c_first.innerHTML = "ok";
	}
}
function checkLastname()
{
	var c_last = getByID("lastname_check");
	var f_last = Trim(getByID("lastname").value);
	getByID("lastname").value = f_last;
	if(f_last == ""){
		c_last.innerHTML = "please insert your last name";
	} else {
		c_last.innerHTML = "ok";
	}
}
function checkEmail()
{
	var c_mail = getByID("email_check");
	var f_mail = Trim(getByID("email").value);
	getByID("email").value = f_mail;
	if(f_mail == ""){
		c_mail.innerHTML = "please insert your email address";
	} else {
		var regex = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
		if(regex.test(f_mail)){
			checkEmailAvailability(f_mail);
		} else {
			c_mail.innerHTML = "please insert a valid email address";
		}
	}
}
function setFieldsEnabled(enable)
{
	var u = getByID("username");
	var p = getByID("password");
	var c = getByID("confirm");
	var f = getByID("firstname");
	var l = getByID("lastname");
	var e = getByID("email");
	var y = getByID("year");
	var m = getByID("month");
	var d = getByID("day");
	var a = getByID("male");
	var g = getByID("female");
	var s = getByID("subscribe");

	var allFields  = [u, p, c, f, l, e, y, m, d, a, g, s];
	var textFields = [u, p, c, f, l, e];
	
	for(var i = 0; i < allFields.length; i++)
	{
		allFields[i].disabled = !enable;
	}
	for(var i = 0; i < textFields.length; i++)
	{
		textFields[i].style.backgroundColor = enable ? "#fff" : "#ddd";
	}
}
function checkUsernameAvailability(name)
{
	x = getXMLobject
	(
		"GET",
		"ajax.php?action=checkUsername&username=" + escape(name),
		function() // onLoad
		{
			getByID("username").disabled = false;
			getByID("subscribe").disabled = false;
			if(x.responseText == "ok"){
				getByID("username_check").innerHTML = "ok";
			} else {
				getByID("username_check").innerHTML = "attention: username already in use...";
			}
		},
		function() // onFault
		{
			getByID("username").disabled = false;
			getByID("subscribe").disabled = false;
			alertError("There was a problem checking username availability. Please try again later...");
		},
		function() // wait..
		{
			getByID("username_check").innerHTML = "checking username availability...";
			getByID("username").disabled = true;
			getByID("subscribe").disabled = true;
		},
		true
	);
}
function checkEmailAvailability(email)
{
	x = getXMLobject
	(
		"GET",
		"ajax.php?action=checkEmail&email=" + escape(email),
		function() // onLoad
		{
			getByID("email").disabled = false;
			getByID("subscribe").disabled = false;
			if(x.responseText == "ok"){
				getByID("email_check").innerHTML = "ok";
			} else {
				getByID("email_check").innerHTML = "attention: email address already in use...";
			}
		},
		function() // onFault
		{
			getByID("email").disabled = false;
			getByID("subscribe").disabled = false;
			alertError("There was a problem checking email availability. Please try again later...");
		},
		function() // wait..
		{
			getByID("email_check").innerHTML = "checking email availability...";
			getByID("email").disabled = true;
			getByID("subscribe").disabled = true;
		},
		true
	);
}
function checkFields()
{
	var f = getByID("female").checked;
	var m = getByID("male").checked;
	var d = checkBirthDay();
	var username  = Trim(getByID("username").value);
	var password  = Trim(getByID("password").value);
	var lastname  = Trim(getByID("lastname").value);
	var firstname = Trim(getByID("firstname").value);
	var email     = Trim(getByID("email").value);
	var gender    = !f && !m ? "N" : (f ? "F" : "M");
	var birthday  = d == "" ? 0 : d;
	var accetta = getByID("accetta").checked;
	
	if(accetta != true) {
		alertError("accept condition!");
	} else {
		if(username == "" || password == "" || lastname == "" || firstname == "" || email == "") {
			alertError("please fill all required fields!");
		} else {
			if (
				Trim(getByID("username_check").innerHTML)  != "ok" ||
				Trim(getByID("password_check").innerHTML)  != "ok" ||
				Trim(getByID("confirm_check").innerHTML)   != "ok" ||
				Trim(getByID("lastname_check").innerHTML)  != "ok" ||
				Trim(getByID("firstname_check").innerHTML) != "ok" ||
				Trim(getByID("security_check").innerHTML)  != "ok" ||
				Trim(getByID("email_check").innerHTML)     != "ok" ||
				Trim(getByID("birthday_check").innerHTML)  == "invalid date!"
				){
					alertError("Please check that all fields are valid");
			} else {
				var qstring = "";
				qstring += "&username="  + username;
				qstring += "&password="  + hex_md5(password);
				qstring += "&lastname="  + lastname;
				qstring += "&firstname=" + firstname;
				qstring += "&email="     + email;
				qstring += "&birthday="  + birthday;
				qstring += "&gender="    + gender;
				x = getXMLobject
				(
					"GET",
					"ajax.php?action=subscribe" + qstring,
					function() // onLoad
					{
						setFieldsEnabled(true);
						switch(x.responseText)
						{
							case "user":
								alertError("There chosen username is already in use...");
								getByID("username").focus();
								break;
							case "mail":
								alertError("The chosen email address is already in use...");
								getByID("email").focus();
								break;
							case "ko":
								alertError("There was a problem during subscription process. Please try again later...");
								break;
							case "ok":
								document.location.href = "main.php";
								break;
						}
					},
					function() // onFault
					{
						setFieldsEnabled(true);
						alertError("There was a problem during subscription process. Please try again later...");
					},
					function() // wait..
					{
						setFieldsEnabled(false);
					},
					true
				);
			}
		}
	}
}
function checkSecurityCode(private_key, public_key)
{
	x = getXMLobject
	(
		"GET",
		"ajax.php?action=checkSecurityCode&private_key=" + escape(getByID("security").value) + "&public_key=" + escape(getByID("public_key").value),
		function() // onLoad
		{
			setFieldsEnabled(true);
			if (x.responseText=="1") {
				getByID("security_check").innerHTML = "ok";
			} else {
				getByID("security_check").innerHTML = "insert the right code";
			}
		},
		function() // onFault
		{
			setFieldsEnabled(false);
		},
		function() // wait..
		{
			setFieldsEnabled(false);
		},
		true
	);
}