// Validate email
function emailIsValid(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
		//alert("Invalid E-mail ID")
		return false;
	}
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		//alert("Invalid E-mail ID")
		return false;
	}
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		//alert("Invalid E-mail ID")
		return false;
	}
	if (str.indexOf(at,(lat+1))!=-1){
		//alert("Invalid E-mail ID")
		return false;
	}
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		//alert("Invalid E-mail ID")
		return false;
	}
	if (str.indexOf(dot,(lat+2))==-1){
		//alert("Invalid E-mail ID")
		return false;
	}
	if (str.indexOf(" ")!=-1){
		//alert("Invalid E-mail ID")
		return false;
	}
 	return true;			
}

// VALIDATING USER INPUT
function validateUserInput(){
	// alert('validating');
	// Numerical constants
	var USERNAME_MIN_LENGTH = 4;
	var USERNAME_MAX_LENGTH = 20;
	var PASSWORD_MIN_LENGTH = 4;
	var PASSWORD_MAX_LENGTH = 20;	
	var NAME_MIN_LENGTH = 3;		
	var NAME_MAX_LENGTH = 30;
	
	var username = $('#username').val();
	var name = $('#name').val();
	var email = $('#email').val();
	var password = $('#password').val();
	var picture = $('#picFile').val();

	// set the facebook variable only if the facebook field exists
	if ($('#facebookid').length != 0) {
		var facebookid = $('#facebookid').val();
	}

	// set the validation flag
	var formInputValid = true;


	// // Validate Username // //

	// get its length
	var usernameLength = username.length;

	// check its length
	if (usernameLength == 0) {
		formInputValid = false;
		$('#invalidUsername').html('username required').css('display', 'inline');
	} else {
		if (usernameLength < USERNAME_MIN_LENGTH) {
			formInputValid = false;
			$('#invalidUsername').html('username too short').css('display', 'inline');
		} else if (usernameLength > USERNAME_MAX_LENGTH) {
			formInputValid = false;
			$('#invalidUsername').html('username too long').css('display', 'inline');
		} else if (usernameLength > USERNAME_MIN_LENGTH && usernameLength < USERNAME_MAX_LENGTH) {
			// the username has changed, and it is the right length
			// so check for uniqueness
			var checkUsername = true;
			$('#invalidUsername').css('display', 'none');
		}
	}


	// // Validate Password // //

	// only check for password if there's no facebook user active
	if (facebookid) {
	} else {
		// get the length of the password
		passwordLength = password.length;

		if (passwordLength == 0) {
			formInputValid = false;
			$('#invalidPassword').html('enter a password').css('display', 'inline');
		} else {
			if (passwordLength < PASSWORD_MIN_LENGTH) {
				formInputValid = false;
				$('#invalidPassword').html('too short').css('display', 'inline');
			} else if (passwordLength > PASSWORD_MAX_LENGTH) {
				formInputValid = false;
				$('#invalidPassword').html('too long').css('display', 'inline');
			} else if (passwordLength > PASSWORD_MIN_LENGTH && passwordLength < PASSWORD_MAX_LENGTH) {
				$('#invalidPassword').css('display', 'none');
			}
		}
	}


	// // Validate Email // //
	
	// check if it's in the correct format
	if (emailIsValid(email) == false) {
		formInputValid = false;
		$('#invalidEmail').html('enter a valid email').css('display', 'inline');
	} else {
		// email is the right format and different from the original
		// so check its uniqueness
		var checkEmail = true;
		$('#invalidEmail').css('display', 'none');
	}


	// // Validate Name // //

	// get its length
	var nameLength = name.length;

	// check its length
	if (nameLength == 0) {
		formInputValid = false;
		$('#invalidName').html('enter your name').css('display', 'inline');
	} else {
		if (nameLength < NAME_MIN_LENGTH) {
			formInputValid = false;
			$('#invalidName').html('name too short').css('display', 'inline');
		} else if (nameLength > NAME_MAX_LENGTH) {
			formInputValid = false;
			$('#invalidName').html('name too long').css('display', 'inline');
		} else if (nameLength > NAME_MIN_LENGTH && nameLength < NAME_MAX_LENGTH) {
			if (!name.match(/^[a-zA-Z0-9_\s\.-]+$/)) {
				formInputValid = false;
				$('#invalidName').html('invalid character').css('display', 'inline');
			} else {
				$('#invalidName').css('display', 'none');
			}
		}
	}


	// since we only want to do database validation on the fields that have passed length validation
	// make new variables for the ajax validation url based on the checkFIELDNAME variables
	
	if (checkUsername == true) {
		urlUsername = username;
	} else {
		urlUsername = '';
	}

	if (checkEmail == true) {
		urlEmail = email;
	} else {
		urlEmail = '';
	}

	// run database validation
	$.ajax({
		url: "api/validate.php?username=" + urlUsername + "&email=" + urlEmail,
		success: function(data) {
			// set db validation flag
			var dbValid = true;

			// validateProfileResponse is the array returned
			eval(data);

			// is username ok?
			if (validateProfileResponse[0] == 'ok') {
				$('#invalidUsername').css('display', 'none');
			} else if (validateProfileResponse[0] == '') {
			} else {
				dbValid = false;
				$('#invalidUsername').html(validateProfileResponse[0]).css('display', 'inline');
			}
			
			// is email ok?
			if (validateProfileResponse[1] == 'ok') {
				$('#invalidEmail').css('display', 'none');
			} else if (validateProfileResponse[1] == '') {
			} else {
				dbValid = false;
				$('#invalidEmail').html(validateProfileResponse[1]).css('display', 'inline');
			}

			// now that we've gone through all the non db and db validation
			// check the flags, and if eveything checks out, update the user
			if (formInputValid == true && dbValid == true) {
				insertNewUser(username, password, email, name, picture, facebookid);
			} else {
				return false;
			}
		}
	});
}

// This function registers a user using ajax.
function insertNewUser(username, password, email, name, picture, facebookid) {
	// alert('inserting the user\nname: ' + name + '\nusername: ' + username + '\nemail: ' + email + '\npassword: ' + password + '\nfacebook id: ' + facebookid);
	$.ajax({
		url: "api/register.php?username=" + username + "&password=" + password + "&email=" + email + "&name=" + name + "&picture=" + picture + "&facebookid=" + facebookid,
		success: function(data) {
			if (data == "1") {
				userHasSuccessfullyRegistered(email, password);
			}
		}
	});
}

// This function is called when user has successfully registered
function userHasSuccessfullyRegistered(email, password){
	$('#form1').css('display', 'none');
	$('#registrationComplete').css('display', 'block');
	
	// get the user's id and set the session variable
	$.ajax({
		url: "api/loginAfterRegistration.php?email=" + email + "&password=" + password,
		success: function(data) {
			// alert('you signed up for an account with username: ' + data);
			window.location.href = 'http://3yh.com/' + data;
		}
	});
}

// Validate Reset Password Form
function validateResetPassword(){
	// Numerical constants
	var PASSWORD_MIN_LENGTH = 4;
	var PASSWORD_MAX_LENGTH = 20;	

	var email = $('#email').val();
	var tempPass = $('#tempPass').val();
	var newPass = $('#password').val();

	// set the validation flag
	var formInputValid = true;

	if (newPass.length < PASSWORD_MIN_LENGTH) {
		formInputValid = false;
		$('#invalidPassword').html('your password is too short').css('display', 'inline');
	}
	
	if (newPass.length > PASSWORD_MAX_LENGTH) {
		formInputValid = false;
		$('#invalidPassword').html('your password is too long').css('display', 'inline');
	}

	// if formInputValid hasn't been flagged, insert the user
	if (formInputValid == true) {
		urlVar = "api/resetPassword.php?email=" + email + "&tempPass=" + tempPass + "&newPass=" + newPass;

		// reset the password
		$.ajax({
			url: urlVar,
			success: function(data) {
				if (data.match(/something's funky, /)) {
					$('#toReplace').html(data);
				} else {
					window.location.href = 'http://3yh.com/' + data;					
				}
			}
		});
	} else {
		return false;
	}
}