/* Check Email Function */
function checkEmail (emailStr) 
	{
		var num_error=0;
		var NewemailStr="";
		var emailPat=/^(.+)@(.+)$/
		var specialChars="\\(\\)\\{\\}\/%?\\$\\*\\^\\|\\.=&`~#!<>@,;:\\\\\\\"\\.\\[\\]"
		var invalidchars="\\(\\)\\{\\}\/%?\\$\\s\\^~#!&`\\*\\|=@<>,;:\\\\\\\"\\[\\]'"
		var validChars="\[^\\s" + specialChars + "\]"
		var validChars1="\[^\\s" + invalidchars + "\]"
		var quotedUser=/(\"[^\"]*\"\')/
		var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
		var atom=validChars + '+'
		var atom1=validChars1 + '+'
		var word="(" + atom + "|" + quotedUser + ")"
		var word1="(" + atom1 + "|" + quotedUser + ")"
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
		var domainPat=new RegExp("^" +  word1 + "(" + word1 + ")*$")

		if (emailStr == "") {
			// change to false
			return "An email address is required";
		} else {
			var NewemailStr=emailStr;
			// need to trim space beginning and the end each email, then pass back to the form. 
		}

		var matchArray=NewemailStr.match(emailPat);

		if (matchArray==null) {
			return "E-mail address is not a valid format (check @ and .'s)";
		}
		var user=matchArray[1];
		var domain=matchArray[2];

		if (user.match(userPat)==null) {
		    return "The username in the email address doesn't seem to be valid.";
		}

		var IPArray=domain.match(ipDomainPat);
		if (IPArray!=null) 
		{
			for (var i=1;i<=4;i++)
			{
				if (IPArray[i]>255)
			 	{
					return "Destination IP address in the email address is invalid!";
				}
			}
			return true;
		}

		var domainArray=domain.match(domainPat);	
		if (domainArray==null) {
			return "Please enter a valid email address.";
		}

		if(domain.length>0)
		{
			if(domain.charAt(0)==".")	
			{
				return "Please enter a valid email address.";
			} else if(domain.charAt(domain.length-1)==".")
			         {
				return "Please enter a valid email address.";
			         } else {
				var errors=0;
				for(var k=1; k<domain.length; k++)
				{
					if(domain.charAt(k)==".")
						errors++;
					if((domain.charAt(k)==".") && (domain.charAt(k+1)=="."))
				              {
					     errors=errors + 5;
					     k=domain.length;
					}
				}
				if(errors>4)
				{
					return "Please enter a valid email address.";
				}
			}				 
		}

		var atomPat=new RegExp(atom,"g");
		var domArr=domain.match(atomPat);

		var len=domArr.length;
		if (domArr[domArr.length-1].length < 2) 
		{
		   return "The email address must end in a valid domain.";
		}

		if (len<2)
	              {
		   return "This email address is missing a hostname!";
		}

	//	return "good";
		return true;
	}


// ZIP
//zip paramater should be the Input Element
function checkZip(zip) {
	var jsZipExprUS = '^[0-9]{5}([-]?[0-9]{4})?$'
	var jsZipExprCAN = '^[A-Za-z][0-9][A-Za-z] ?[0-9][A-Za-z][0-9]$'
	var jsZipExprINTL = '^[- 0-9A-Za-z]+$'	
	if (typeof zip != "undefined") {
		if (zip.type != "hidden") {
			if (zip.value.length > 10) {
				ttalert += 'Zip/Postal Code maximum length is 10 characters.\\n';
				return false;
			}
			if (countryVal == 'US') {
				if (zip.value.search(jsZipExprUS) == -1) {
					ttalert += 'Please enter a valid U.S. Zip Code.\\n';
					zip.focus();
					return false;
				}
			} else if (countryVal == 'CA') {
				if (zip.value.search(jsZipExprCAN) == -1) {
					ttalert += 'Please enter a valid Canadian Postal Code.\\n';
					zip.focus();
					return false;
				}
			} else { 
				if (form.zip.value.search(jsZipExprINTL) == -1) {
					ttalert += 'Please enter a valid Zip or Postal Code.\\n';
					zip.focus();
					return false;
				}
			}
		}
	}
	return true;
}

function setError(label, input) {
	if(label != null) {
		label.setAttribute("class", "errortext");
	}

	if(input != null) {
		input.setAttribute("class", "red");
	}
}

function appendErrorMessage(message, prefix) {
	if(prefix == undefined || prefix == null)  prefix = '';
	var msg = getElement(prefix+'error_message');
	msg.innerHTML = msg.innerHTML + message + "<br>";
}

function clearErrorMessage(prefix) {
	if(prefix == undefined || prefix == null)  prefix = '';
	var msg = getElement(prefix+'error_message');
	msg.innerHTML = '';
}

function clearError(label, input) {
	if(label != null) {
		label.setAttribute("class", "");
	}

	if(input != null) {
		input.setAttribute("class", "");
	}
}


function validateRegistrationForm() {
	var error_message_id_prefix = 'register_';
	clearErrorMessage(error_message_id_prefix);
	var errors = false;
	var handle = getElement('handle');
	var handleLabel = getElement('handle_label');

	//handle too small
	//only validate handle if it was actually editable
	if (handle) {
		if(handle.value.length < 1) {
			appendErrorMessage('Handle must be at least 1 character', error_message_id_prefix);
			setError(handleLabel, handle);
			errors = true;
		} else if(handle.value.length > 30) { 	//handle too big
			appendErrorMessage('Handle must be less than 31 characters.', error_message_id_prefix);
			setError(handleLabel, handle);
			errors = true;
		} else if(!validateLegalCharacters('handle', '/')) {
			appendErrorMessage('Handle cannot contain a slash character.', error_message_id_prefix);
			setError(handleLabel, handle);
			errors = true;
		} else if(!checkForLegalCharacters('handle', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')) {
			appendErrorMessage('Handle can only contain the letters A-Z and numbers 0-9.', error_message_id_prefix);
			setError(handleLabel, handle);
			errors = true;
		} else {
			clearError(handleLabel, handle);
		}
	}
	
	var password = getElement('password');
	var passwordLabel = getElement('password_label');
	var confirmPass = getElement('confirm');
	var confirmLabel = getElement('confirm_label');

	//no password typed
	if(!validatePassword(password.value)) {
		appendErrorMessage('Please enter your password.', error_message_id_prefix);
		setError(passwordLabel, password);
		errors = true;
	} else {
		clearError(passwordLabel, password);
	}

	//password not confirmed
	if(password.value != confirmPass.value || password.value == '') {
		appendErrorMessage('Please type your Password twice, correctly.', error_message_id_prefix);
		setError(confirmLabel, confirmPass);
		errors = true;
	} else {
		clearError(confirmLabel, confirmPass);
	}

	var title = getElement('title');
	var titleLabel = getElement('title_label');
	//no title selected
	if(title.selectedIndex == 0) {
		appendErrorMessage('Please choose a Job Title.', error_message_id_prefix);
		setError(titleLabel, title);
		errors = true;
	} else {
		clearError(titleLabel, title);
	}


	var industry = getElement('industry');
	var industryLabel = getElement('industry_label');
	//no title selected
	if(industry.selectedIndex == 0) {
		appendErrorMessage('Please choose an Industry.', error_message_id_prefix);
		setError(industryLabel, industry);
		errors = true;
	} else {
		clearError(industryLabel, industry);
	}

	var zip = getElement('zip');
	var zipLabel = getElement('zip_label');
	//zip too short
	if(zip.value.length < 5) {
		appendErrorMessage('Please enter a valid Postal/Zip code.', error_message_id_prefix);
		setError(zipLabel, zip);
		errors = true;
	} else {
		clearError(zipLabel, zip);
	}

	//terms & conditions
	var terms = getElement('terms');
	var termsLabel = getElement('terms_label');
	if(!terms.checked) {
		appendErrorMessage('You must accept the Terms and Conditions', error_message_id_prefix);
		setError(termsLabel, null);
		errors = true;
	} else {
		clearError(termsLabel, null);
	}

	if(!errors) {
		//submit the form!
		var registerForm = getElement('register_form');
		registerForm.submit();
	} else {
		errbox = getElement('errorbox');
		errbox.style.display = "block";

		errbox = getElement('errorbox_space');
		errbox.style.display = "block";
		
		//Don't remove this.  It clears the error
		//that came from the web service.  We want that
		//error gone when the form is validated again.
		errbox2 = getElement('errorbox2');
		if(errbox2 != undefined) errbox2.style.display = "none";
		
		gotoName('error');
	}
}

function validateRegistrationEditForm() {
	error_message_id_prefix = 'register_';
	clearErrorMessage(error_message_id_prefix);
	var errors = false;
	var handle = getElement('handle');
	var handleLabel = getElement('handle_label');
	//handle too small
	//only validate handle if it was actually editable
	if (handle) {
		if(handle.value.length < 1) {
			appendErrorMessage('Handle must be at least 1 character', error_message_id_prefix);
			setError(handleLabel, handle);
			errors = true;
		} else if(handle.value.length > 30) { 	//handle too big
			appendErrorMessage('Handle must be less than 31 characters.', error_message_id_prefix);
			setError(handleLabel, handle);
			errors = true;
		} else {
			clearError(handleLabel, handle);
		}
	}
	
	var newEmail = getElement('newEmail');
	var newEmailLabel = getElement('newemail_label');
	var confirmEmail = getElement('confirmEmail');
	var confirmEmailLabel = getElement('newemailconfirm_label');

	//email not confirmed
	if(newEmail.value != '' || confirmEmail.value != '') {
		if(validateEmail(newEmail.value)) {
			if(newEmail.value != confirmEmail.value || newEmail.value == '') {
				appendErrorMessage('Please type your new email address twice, correctly.', error_message_id_prefix);
				setError(confirmEmailLabel, confirmEmail);
				setError(newEmailLabel, newEmail);
				errors = true;
			} else {
				clearError(confirmEmailLabel, confirmEmail);
				clearError(newEmailLabel, newEmail);
			}
		} else {
			appendErrorMessage('Please enter a valid email address.', error_message_id_prefix);
			setError(confirmEmailLabel, confirmEmail);
			setError(newEmailLabel, newEmail);
			errors = true;
		}
	} else {
		clearError(confirmEmailLabel, confirmEmail);
		clearError(newEmailLabel, newEmail);
	}
	
	var password = getElement('password');
	var newpassword = getElement('newPassword');
	var passwordLabel = getElement('password_label');
	var newpasswordLabel = getElement('newpassword_label');
	var confirmPass = getElement('confirmPassword');
	var confirmLabel = getElement('confirm_label');

	//password not confirmed
	if(newpassword.value != '' || confirmPass.value != '') {
		//no password typed
		if(!validatePassword(password.value)) {
			appendErrorMessage('Please enter your password.', error_message_id_prefix);
			setError(passwordLabel, password);
			errors = true;
		} else {
			clearError(passwordLabel, password);
		}
		if(newpassword.value != confirmPass.value || newpassword.value == '') {
			appendErrorMessage('Please type your new Password twice, correctly.', error_message_id_prefix);
			setError(confirmLabel, confirmPass);
			setError(newpasswordLabel, newpassword);
			errors = true;
		} else {
			clearError(confirmLabel, confirmPass);
			clearError(newpasswordLabel, newpassword);
		}
	} else {
		clearError(confirmLabel, confirmPass);
		clearError(newpasswordLabel, newpassword);
	}

	var title = getElement('title');
	var titleLabel = getElement('title_label');
	//no title selected
	if(title.selectedIndex == 0) {
		appendErrorMessage('Please choose a Job Title.', error_message_id_prefix);
		setError(titleLabel, title);
		errors = true;
	} else {
		clearError(titleLabel, title);
	}


	var industry = getElement('industry');
	var industryLabel = getElement('industry_label');
	//no title selected
	if(industry.selectedIndex == 0) {
		appendErrorMessage('Please choose an Industry.', error_message_id_prefix);
		setError(industryLabel, industry);
		errors = true;
	} else {
		clearError(industryLabel, industry);
	}

	var zip = getElement('zip');
	var zipLabel = getElement('zip_label');
	//zip too short
	if(zip.value.length < 5) {
		appendErrorMessage('Please enter a valid Postal/Zip code.', error_message_id_prefix);
		setError(zipLabel, zip);
		errors = true;
	} else {
		clearError(zipLabel, zip);
	}

	if(!errors) {
		//submit the form!
		var registerForm = getElement('register_form');
		registerForm.submit();
	} else {
		errbox = getElement('errorbox');
		errbox.style.display = "block";

		errbox = getElement('errorbox_space');
		errbox.style.display = "block";
		gotoName('error');
	}
}

function validatePassword(password) {
	//no password typed
	if(password.length > 0) {
		return true;
	} 
	return false;
}

function validateEmail(email) {
	if(email.length == 0) {
		return false;
	}
	var msg = checkEmail(email); 
	if(msg === true) {
		return true;
	}
	return false;
}

function validateRegisterAttempt() {
	// IE will pickup a name element if it has the same name
	// we have the case on the registration page that
	// there is an name='email' element in two places
	// so we'll set it to a different name and use an id.
	var email = document.getElementById('registration_email');
	var error_message_id_prefix = 'register_';
	errbox = getElement('errorbox');
	errbox.style.display = "none";
	clearErrorMessage(error_message_id_prefix);
	if(validateEmail(email.value)) {
		var registerForm = getElement('registerattemptform');
		registerForm.submit();
	} else {
		appendErrorMessage('Please enter a valid email address.', error_message_id_prefix);
		errbox = getElement('errorbox');
		errbox.style.display = "block";
		
		//Don't remove this.  It clears the error
		//that came from the web service.  We want that
		//error gone when the form is validated again.
		errbox2 = getElement('errorbox2');
		if(errbox2 != undefined) errbox2.style.display = "none";
		
		return false;
	}
	return false;
}

function validateLoginAttempt() {
	var email = getElement('login_email');
	var password = getElement('login_password');
	var errors = false;
	errbox = getElement('errorbox');
	errbox.style.display = "none";
	var error_message_id_prefix = 'register_';
	clearErrorMessage(error_message_id_prefix);
	
	if(!validateEmail(email.value)) {
		errors = true;
		appendErrorMessage('Please enter a valid email address.', error_message_id_prefix);
	}
	if(!validatePassword(password.value)) {
		errors = true;
		appendErrorMessage('Please enter a password.', error_message_id_prefix);
	}
	if(!errors) {
		var registerForm = getElement('login_attempt_form');
		registerForm.submit();
	} else {
		errbox = getElement('errorbox');
		errbox.style.display = "block";
		
		//Don't remove this.  It clears the error
		//that came from the web service.  We want that
		//error gone when the form is validated again.
		errbox2 = getElement('errorbox2');
		if(errbox2 != undefined) errbox2.style.display = "none";
		
		return false;
	}		
}

function validateLostPasswordAttempt() {
	var email = getElement('lost_email');
	errbox = getElement('errorbox');
	errbox.style.display = "none";
	var error_message_id_prefix = 'register_';
	clearErrorMessage(error_message_id_prefix);
	if(validateEmail(email.value)) {
		var registerForm = getElement('lostattemptform');
		registerForm.submit();
	} else {
		errbox = getElement('errorbox');
		errbox.style.display = "block";
		appendErrorMessage('Please enter a valid email address.', error_message_id_prefix);
		return false;
	}
}

function getElement( whichLayer) {
	var elem;
/*
  if( document.getElementById ) // this is the way the standards work
	elem = document.getElementById( whichLayer );
  else if( document.all ) // this is the way old msie versions work
	  elem = document.all[whichLayer];
  else if( document.layers ) // this is the way nn4 works
	elem = document.layers[whichLayer];
*/
elem = document.getElementById(whichLayer);
//alert(whichLayer+':'+elem);
  return elem;
}

function validateAskQuestionAttempt() {
	var valid = (validateCharacterCount('title', 1, 150) && validateLegalCharacters('title', '<>') && validateCharacterCount('question', 1, -1) && validateCharacterCount('AddCategories', 1, -1));
	if(valid) {
		var questionForm = getElement('askquestionform');

		//disable button to prevent multiple form submits
		questionForm.button_askQuestion.disabled=true;

		questionForm.submit();
	} else {
		if(!validateLegalCharacters('title', '<>')) {
			alert('Angle brackets < and > cannot be used in a question title');
		} else if(!validateCharacterCount('title', 0, 150)) {
			alert('Title must be less than 150 characters');
		} else {
			alert('Please fill in all fields');
		}
	}
}

var askQuestionSplashWorking = false;
function validateAskQuestionSplashAttempt() {
	if(true==askQuestionSplashWorking) return;
	askQuestionSplashWorking = true;
	var  valid = (validateCharacterCount('splashquestiontitle', 1, 150) && validateLegalCharacters('splashquestiontitle', '<>') && validateCharacterCount('splashquestion', 1, -1) && validateCharacterCount('AddCategories', 1, -1));
	if(valid) {
		var questionForm = getElement('askquestionform');

		//disable button to prevent multiple form submits
		//questionForm.button_askQuestion_splash.disabled=true;
		questionForm.submit();
	} else {
		askQuestionSplashWorking = false;
		if(!validateLegalCharacters('splashquestiontitle', '<>')) {
			alert('Angle brackets < and > cannot be used in a question title');
		} else if(!validateCharacterCount('splashquestiontitle', 0, 150)) {
			alert('Title must be less than 150 characters');
		} else {
			alert('Please fill in all fields');
		}
	}
}

function validateDiscussAttempt(prefix) {
	if(undefined==prefix) prefix = '';
	if (validateCharacterCount('discussionTextArea', 1, -1)) {
		var discussionform = document.getElementById('discussionform');
		
		//disable button to prevent multiple form submits
		//discussionform.button_discuss.disabled=true;
		var but = document.getElementById(prefix+'button_askQuestion');
		if(undefined!=but) but.disabled=true;
		discussionform.submit();
	} else {
		var error_message_id_prefix = prefix+'register_';
		appendErrorMessage('Please enter a comment', error_message_id_prefix);

		return false;
	}
}

function validateLegalCharacters(inputFieldName, illigalCharacters) {
	elem = getElement(inputFieldName);
	for(var i=0; i<illigalCharacters.length; i++) {
		if(elem.value.match(illigalCharacters.charAt(i))!= null) {
			return false;
		}
	}
	return true;
}

function checkForLegalCharacters(inputFieldName, legalCharacters) {
	elem = getElement(inputFieldName);
	for(var i=0; i<elem.value.length; i++) {
		if(legalCharacters.indexOf(elem.value.charAt(i))== -1) {
			return false;
		}
	}
	return true;
}

function validateCharacterCount(inputFieldName, minimumCharacters, maximumCharacters) {
	var elem = getElement(inputFieldName);
	var text = $(inputFieldName).value.strip();
	if(minimumCharacters > -1) {
		if(text.length < (minimumCharacters)) {
			return false;
		}
	}

	if(maximumCharacters > -1) {
		if(text.length > (maximumCharacters)) {
			return false;
		}
	}

	return true;
}

function pageXY( el)
{
var XY={x:0, y:0};
for( var node = el; node; node=node.offsetParent)
{ XY.x += node.offsetLeft;
XY.y += node.offsetTop;
}
return XY;
}
function gotoName( name)
{
var anchors, anchor, XY;
anchors=document.anchors;
anchor=anchors[name];

if(!anchor) // IE sucks
{ for( var i = 0; i < anchors.length; ++i)
{ if(anchors[i].name==name)
{ anchor = anchors[i];
break;
}
}
}
if(!anchor)
{ if( document.getElementById)
anchor=document.getElementById(name);
else if( document.all) // untested
anchor=document.all[name];
}
if(anchor)
{ XY = pageXY(anchor);
window.scrollTo(XY.x, XY.y);
}
}
