//##########################################################################
//				COMMON VALIDATION FUNCTIONS

function validateEmail(string) {
	return (string.match(/^\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b$/i) != null ) ? true : false;
}

function trimString(string) {
	return string.replace(/^[ \t]+|[ \t]+$/g, "");
}

function validateNormalString(string) {
	// searches for ANY symbol
	return (string.match(/[^a-zA-Z0-9]/) == null ) ? true : false;
}


//#########################################################################
//				EDIT PROFILE

function profileFormButtons() {
	$('submitProfile').onclick = function() {validateProfileInfo(); return false;};
	$('submitPassword').onclick = function() {validatePasswordMyProfile(); return false;};
	$('submitBio').onclick = function() {submitBio(); return false;};
}

function characterLimit(element, limit) {
	var messageContainer = document.createElement('span');
	messageContainer.id = element.id + "_message";

	if ((element.value.length) >= limit) {
		element.value = element.value.substr(0,limit); // disable further typing, but they can go back and delete
		var message = document.createTextNode("Max character limit has been reached."); // append the message
		messageContainer.className = "error";
	} else {
		var message = document.createTextNode("Max "+limit+" characters. You have "+ (limit - element.value.length) +" characters left.");  // append the message
		messageContainer.className = "";
	}
	messageContainer.appendChild(message);
	($(element.id + "_message")) ? element.parentNode.removeChild($(element.id + "_message")) : null;	// if the warning already exists, delete it first

	element.parentNode.appendChild(messageContainer);
}

function validateProfileInfo() {
	var formContainer = $('info_form');
	var allElements = getElementsByTagNames('input,select,textarea',formContainer);
	var email, f_name, l_name, street, city, province, postal, country, phone, birthdate, birth_month, birth_day, birth_year, gender, gender_f, gender_m, updates;
	var ValidPhoneChars = "0123456789()-#ext. ";
	// collect inputs into vars
	for(i=0; i<allElements.length; i++) {
		var attributeCheck = allElements[i].getAttribute('name');
		email			= (attributeCheck == "email")		? allElements[i] : email;
		f_name		= (attributeCheck == "first_name")	? allElements[i] : f_name;
		l_name		= (attributeCheck == "last_name")	? allElements[i] : l_name;
		street		= (attributeCheck == "street")	? allElements[i] : street;
		city			= (attributeCheck == "city")		? allElements[i] : city;
		province		= (attributeCheck == "state")		? allElements[i].options[allElements[i].selectedIndex].value : province;
		postal		= (attributeCheck == "postal_zip")	? allElements[i] : postal;
		country		= (attributeCheck == "country")	? allElements[i].options[allElements[i].selectedIndex].value : country;
		phone			= (attributeCheck == "phone")		? allElements[i] : phone;
		birth_month	= (attributeCheck == "birth_month")? allElements[i].options[allElements[i].selectedIndex].value : birth_month;
		birth_day	= (attributeCheck == "birth_day")	? allElements[i].options[allElements[i].selectedIndex].value : birth_day;
		birth_year	= (attributeCheck == "birth_year")	? allElements[i].options[allElements[i].selectedIndex].value : birth_year;
		gender_f		= (attributeCheck == "gender" && allElements[i].getAttribute('value') == "female") ? allElements[i].checked : gender_f;
		gender_m		= (attributeCheck == "gender" && allElements[i].getAttribute('value') == "male") ? allElements[i].checked : gender_m;
		updates		= (attributeCheck == "updates")	? allElements[i].checked : updates;
	}
	//============== email ===============//
	email.value = trimString(email.value); // time whitespace first
	if (email.value.match(/^\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b$/i)) {
		$('email').className = "";// passed validation
	} else {
		$('email').className = "error";//failed validation
		email = null;
	}
	//============== first name, last name ===============//
	f_name.value = trimString(f_name.value); // sanitize
	l_name.value = trimString(l_name.value); // sanitize

	if (f_name.value == "") {
		$('first_name').className = "error";
		f_name = null;
	} else{
		$('first_name').className = "";
	}
	if (l_name.value == "") {
		$('last_name').className = "error";
		l_name = null;
	} else{
		$('last_name').className = "";
	}
	//=============== province/state ===============//
	(province == "XX" || province == "") ? $('state').className = "error" : $('state').className = "" ;
	//================ gender =================//
	gender = (gender_f == true) ? "female" : "male";
	
	//================ phone # ================//
	
	var IsNumber = true;
	var Char;
	for (i = 0; i < $("phone_field").value.length && IsNumber == true; i++) 
	{ 
		Char = $("phone_field").value.charAt(i); 
		if (ValidPhoneChars.indexOf(Char) == -1) 
		{
			IsNumber = false;
			$('phone').className = "error";
			phone = null;
		}
	}
	
	// if all critical info is valid, push info
	(email != null && f_name != null && l_name != null && phone != null) ? submitProfileInfo() : null;
}


//########################################################################
//				ABOUT US
function validateAboutUs() {
	var formContainer = $('about_form');
	var allElements = getElementsByTagNames('input,select,textarea',formContainer);
	var email, f_name, l_name, phone, company, publication, job, comment;
	// collect inputs into vars
	for(i=0; i<allElements.length; i++) {
		var elementName = allElements[i].getAttribute('name');
		f_name		= (elementName == "firstname")	? trimString(allElements[i].value) : f_name;
		l_name		= (elementName == "lastname")	? trimString(allElements[i].value) : l_name;
		email			= (elementName == "email")		? trimString(allElements[i].value) : email;
		company		= (elementName == "companyname")? trimString(allElements[i].value) : company;
		phone			= (elementName == "phone")		? trimString(allElements[i].value) : phone;
		publication	= (elementName == "pubs")		? trimString(allElements[i].value) : publication;
		job			= (elementName == "purpose" && allElements[i].checked == true) ? allElements[i] : job ;
		comment		= (elementName == "info")		? trimString(allElements[i].value) : comment;
	}
	// error printout
	(f_name == "")				? $('val_firstname').className = "error" : $('val_firstname').className = "";
	(l_name == "")				? $('val_lastname').className = "error" : $('val_lastname').className = "";
	(!validateEmail(email))	? $('val_email').className = "error" : $('val_email').className = "";
	(company == "")			? $('val_company').className = "error" : $('val_company').className = "";
	(phone == "")				? $('val_phone').className = "error" : $('val_phone').className = "";
	(publication == "")		? $('val_pub').className = "error" : $('val_pub').className = "";
	(job == undefined)		? $('val_id').className = "error" : $('val_id').className = "";
	(comment == "")			? $('val_comment').className = "error" : $('val_comment').className = "";
	// process form only if all items are good
	return (f_name == "" || l_name == "" || !validateEmail(email) || company == "" || phone == "" || publication == "" || job == undefined || comment == "") ? false : true;
}

//########################################################################
//				STEP 1 SIGNUP
var error_flag;

function validateStepOneForm() {
	var inputs = document.getElementById('regform').getElementsByTagName('input');
	error_flag = new Array();
	var f_name, l_name, username, password, password_conf, email, email_conf, captcha, tos;
	// Fill vars with values when name is hit
	// name attribute of input is paired with ID of container
	for(i=0; i<inputs.length; i++) {
		var attributeCheck = inputs[i].getAttribute('name');
		email				= (attributeCheck == "email")				? inputs[i] : email;
		email_conf		= (attributeCheck == "email_confirm")	? inputs[i] : email_conf;
		f_name			= (attributeCheck == "first_name")		? inputs[i] : f_name;
		l_name			= (attributeCheck == "last_name")		? inputs[i] : l_name;
		username			= (attributeCheck == "choose_username")? inputs[i] : username;
		password			= (attributeCheck == "choose_password")? inputs[i] : password;
		password_conf	= (attributeCheck == "password_confirm")? inputs[i] : password_conf;
		captcha			= (attributeCheck == "image_code")		? inputs[i] : captcha;
		tos				= (attributeCheck == "terms")				? inputs[i] : tos;
	}
	//============== email ===============//
	email.value = trimString(email.value); // time whitespace
	if (email.value != '' && validateEmail(email.value)) {
		$(email.getAttribute('name')).className = "";
		$(email.getAttribute('name')+'_msg').setStyle('display','none');
		//checkForEmail(email);
	} else {
		$(email.getAttribute('name')).className = "error";
		error_flag.push(email);
	}

	//============== email confirm ===============//
	email_conf.value = trimString(email_conf.value); // time whitespace
	if (email_conf.value == email.value && email_conf.value != '') {
		// passed validation
		$(email_conf.getAttribute('name')).className = "";
		$(email_conf.getAttribute('name')+'_msg').setStyle('display','none');
	} else {
		//failed validation, flag errors
		$(email_conf.getAttribute('name')).className = "error";
		error_flag.push(email_conf);
	}

	//============== First name last name ===============//
	f_name.value = trimString(f_name.value); // time whitespace
	if (f_name.value != '') {
		$(f_name.getAttribute('name')).className = "";
		$(f_name.getAttribute('name')+'_msg').setStyle('display','none');
	} else {
		$(f_name.getAttribute('name')).className = "error";
		error_flag.push(f_name);
	}
	l_name.value = trimString(l_name.value); // time whitespace
	if (l_name.value != '') {
		$(l_name.getAttribute('name')).className = "";
		$(l_name.getAttribute('name')+'_msg').setStyle('display','none');
	} else {
		$(l_name.getAttribute('name')).className = "error";
		error_flag.push(l_name);
	}

	//============== Username ===============//
	username.value = trimString(username.value);
	if (validateNormalString(username.value)){
		if (username.value.length >=4 && username.value.length <=12) {
			$(username.getAttribute('name')).className = "";
			$(username.getAttribute('name')+'_msg').setStyle('display','none');
			//$('processing').setStyle('display','inline');
			//checkForUsername(username);
		} else {
			$(username.getAttribute('name')).className = "error";
			error_flag.push(username);
		}
	} else {
		$(username.getAttribute('name')).className = "error";
		error_flag.push(username);
	}

	//============== Password ===============//
	password.value = trimString(password.value); 			// time whitespace
	if (password.value.length >= 4 && password.value.length <= 12 && validateNormalString(password.value)) {
		// passed validation
		$(password.getAttribute('name')).className = "";
		$(password.getAttribute('name')+'_msg').setStyle('display','none');
	} else {
		//failed validation, flag errors
		$(password.getAttribute('name')).className = "error";
		error_flag.push(password);
	}

	//============== Password Confirmation ===============//
	password_conf.value = trimString(password_conf.value); // time whitespace
	if (password_conf.value == password.value && password_conf.value != '') {
		// passed validation
		$(password_conf.getAttribute('name')).className = "";
		$(password_conf.getAttribute('name')+'_msg').setStyle('display','none');
	} else {
		//failed validation, flag errors
		$(password_conf.getAttribute('name')).className = "error";
		error_flag.push(password_conf);
	}

	//============== TOS ===============//
	if (tos.checked == false) {
		$(tos.getAttribute('name')).className = "error";
		error_flag.push(tos);
	} else {
		$(tos.getAttribute('name')).className = "";
		$(tos.getAttribute('name')+'_msg').setStyle('display','none');
	}

	//============== Error Processing ===============//
	for(var i=0; i<error_flag.length; i++){
		switch(true){
			case(error_flag[i].getAttribute('name') == "email"):
				$(error_flag[i].getAttribute('name')+'_msg').setHTML('Email address is either invalid or already in use').setStyle('display','block');
				break;
			case(error_flag[i].getAttribute('name') == "email_confirm"):
				$(error_flag[i].getAttribute('name')+'_msg').setHTML('Confirm email does\'nt match').setStyle('display','block');
				break;
			case(error_flag[i].getAttribute('name') == "first_name"):
				$(error_flag[i].getAttribute('name')+'_msg').setHTML('Missing first name').setStyle('display','block');
				break;
			case(error_flag[i].getAttribute('name') == "last_name"):
				$(error_flag[i].getAttribute('name')+'_msg').setHTML('Missing last name').setStyle('display','block');
				break;
			case(error_flag[i].getAttribute('name') == "choose_username"):
				$(error_flag[i].getAttribute('name')+'_msg').setHTML('Please choose a valid username').setStyle('display','block');
				break;
			case(error_flag[i].getAttribute('name') == "choose_password"):
				$(error_flag[i].getAttribute('name')+'_msg').setHTML('Please choose a valid password').setStyle('display','block');
				break;
			case(error_flag[i].getAttribute('name') == "password_confirm"):
				$(error_flag[i].getAttribute('name')+'_msg').setHTML('Confirm password does\'nt match').setStyle('display','block');
				break;
			case(error_flag[i].getAttribute('name') == "terms"):
				$(error_flag[i].getAttribute('name')+'_msg').setHTML('You must accept the terms of service').setStyle('display','block');
				break;
		}
	}

	if (error_flag.length == 0) {
		// captcha verification
		var ajaxObject = new Ajax('includes/image_check.php?code='+escape(captcha.value), {
			method: 'get',
			onComplete: function(result) {
				if (result != 1) {
					$(captcha.getAttribute('name')).className = "error";
					$(captcha.getAttribute('name')+'_msg').setHTML('Security image text does not match.').setStyle('display','block');
				} else {
					document.regform.submit();
				}
			}
		}).request();
	}
}


function checkForEmail(email){
	var ajaxObject = new Ajax('step1_check_email.php?email='+email.value, {
		method: 'get',
		onComplete: function(result) {
			if (result != 0) {
				$(email.getAttribute('name')).className = "error";
				$(email.getAttribute('name')+'_msg').setHTML('Email address is either invalid or already in use').setStyle('display','block');
			} else {
				$(email.getAttribute('name')).className = "";
				$(email.getAttribute('name')+'_msg').setHTML('').setStyle('display','none');
			}
		}
	}).request();
}

function checkForUsername(){
	$('processing').setStyle('display','inline');
	var username = $E('input[name=choose_username]');

	$(username.getAttribute('name')+'_msg').setStyle('display','none');
	var ajaxObject = new Ajax('step1_check_user.php?user_name='+username.value, {
		method: 'get',
		onComplete: function(result) {
			$('processing').setStyle('display','none');
			if (result == 0) {
				$('user_availability').removeClass('grey').removeClass('red').addClass('green'); // double remove, in case of multiple checks
				$('user_availability').setHTML('<img src="images/button_cap_green.gif" />Available!');
				$(username.getAttribute('name')).className = "";
			} else {
				$('user_availability').removeClass('grey').removeClass('green').addClass('red'); // double remove, in case of multiple checks
				$('user_availability').setHTML('<img src="images/button_cap_red.gif" />Not Available');
				$(username.getAttribute('name')).className = "error";
			}
		}
	}).request();
}

//########################################################################
//				CONTACT US / FEEDBACK VALIDATION

function validateContactUs(form) {

	var is_error 	= false;
	var email_error = true;
	var email 		= trimString(document.getElementById("email").value);
	email_error 	= validateEmail(email);

	if (email_error == false){
		document.getElementById("register_messages_email").style.display = "inline";
		document.getElementById("email").className = "error";
		document.getElementById("email_title").className = "error";
	} else {
		document.getElementById("email").className = "";
		document.getElementById("email_title").className = "";
		document.getElementById("register_messages_email").style.display = "none";
	}

	if (document.getElementById("subject").value == "") {
		document.getElementById("register_messages_other").style.display = "inline";
		document.getElementById("subject").className = "error";
		document.getElementById("subject_title").className = "error";
		is_error = true;
	} else {
		document.getElementById("subject").className = "";
		document.getElementById("subject_title").className = "";
		document.getElementById("register_messages_other").style.display = "none";
	}

	if (document.getElementById("message").value == "") {
		document.getElementById("register_messages_other").style.display = "inline";
		document.getElementById("message").className = "error";
		document.getElementById("message_title").className = "error";

		is_error = true;
	} else {
		document.getElementById("message").className = "";
		document.getElementById("message_title").className = "";
	}

	if(email_error == false) {
		document.getElementById("register_messages_email").innerHTML = "Invalid email address.";
		return false;
	} else if(is_error == true) {
		document.getElementById("register_messages_other").innerHTML = "Please fill out the missing fields.";
		return false;
	} else if(is_error == false && email_error == true) {
		return true;
	}
}

function submitContactUs() {
	//to = "owenw@view22.com";
	to = "support@scenecaster.com";
	from = document.getElementById("email").value;
	subject = document.getElementById("subject").value;
	message = "Site feedback: <br /><br />" + document.getElementById("message").value;
	sendEmail(to, from, subject, message);
}