var check_Phone				= "0123456789()- +";
var check_Letters			= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ";
var check_Username			= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var check_Username2			= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var check_LettersNumbers	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'-_,. \t\r\n\f";
var check_Email				= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.@_";

var nbsp = 160;
var emptyString = /^\s*$/ ;

function trim(s)
{
	while (s.substring(0,1) == ' ')
	{
		s = s.substring(1,s.length);
	}

	while (s.substring(s.length-1,s.length) == ' ')
	{
		s = s.substring(0,s.length-1);
	}

	return s;
}

function verifyInput(checkString, baseString)
{
	var allValid = true;

	for (i = 0; i < checkString.length; i++)
	{
		ch = checkString.charAt(i);
		for (j = 0; j < baseString.length; j++)
	 		if (ch == baseString.charAt(j))
				break;

		if (j == baseString.length)
		{
	 		allValid = false;
	 		break;
		}
	}
	return (allValid);
}

function validateName(nameField, nameMsgField)
{
//	if (nameField.value.length==0 || emptyString.test(nameField.value))
	if (emptyString.test(nameField.value))
	{
		document.getElementById(nameMsgField).firstChild.nodeValue = "Please enter your name.";
		nameField.focus();
		return false;
	}

	if (!verifyInput(nameField.value, check_Letters))
	{
		document.getElementById(nameMsgField).firstChild.nodeValue = "Please enter only letters.";
//		nameField.value = "";
		nameField.focus();
		return false;
	}

	document.getElementById(nameMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validatePosition(positionField, positionMsgField)
{
	if (!verifyInput(positionField.value, check_LettersNumbers))
	{
		document.getElementById(positionMsgField).firstChild.nodeValue = "Please enter only numbers and letters.";
//		positionField.value = "";
		positionField.focus();
		return false;
	}

	document.getElementById(positionMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validateCompany(companyField, companyMsgField)
{
	if (!verifyInput(companyField.value, check_LettersNumbers))
	{
		document.getElementById(companyMsgField).firstChild.nodeValue = "Please enter only numbers and letters.";
//		companyField.value = "";
		companyField.focus();
		return false;
	}

	document.getElementById(companyMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validateAddress(addressField, addressMsgField)
{
	if (addressField.value.length>250)
	{
		document.getElementById(addressMsgField).firstChild.nodeValue = "Address is too long (max 250 characters).";
//		addressField.value = "";
		addressField.focus();
		return(false);
	}

	if (!verifyInput(addressField.value, check_LettersNumbers))
	{
		document.getElementById(addressMsgField).firstChild.nodeValue = "Please enter only number and letters.";
//		addressField.value = "";
		addressField.focus();
		return false;
	}

	document.getElementById(addressMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validateCountry(countryField, countryMsgField)
{
//	if (countryField.value.length==0 || emptyString.test(countryField.value))
	if (emptyString.test(countryField.value))
	{
		document.getElementById(countryMsgField).firstChild.nodeValue = "Please enter your country.";
		countryField.focus();
		return false;
	}

	if (!verifyInput(countryField.value, check_Letters))
	{
		document.getElementById(countryMsgField).firstChild.nodeValue = "Please enter only letters.";
//		countryField.value = "";
		countryField.focus();
		return false;
	}

	document.getElementById(countryMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validateTelephone(telephoneField, telephoneMsgField)
{
	if (!verifyInput(telephoneField.value, check_Phone))
	{
		document.getElementById(telephoneMsgField).firstChild.nodeValue = "Please enter only numbers, whitespace, +()- characters.";
//		telephoneField.value = "";
		telephoneField.focus();
		return false;
	}

	document.getElementById(telephoneMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validateTelephonePlus(telephoneField, telephoneMsgField)
{
	if (emptyString.test(telephoneField.value))
	{
		document.getElementById(telephoneMsgField).firstChild.nodeValue = "Please enter your telephone number.";
		telephoneField.focus();
		return false;
	}

	if (!verifyInput(telephoneField.value, check_Phone))
	{
		document.getElementById(telephoneMsgField).firstChild.nodeValue = "Please enter only numbers, whitespace, +()- characters.";
//		telephoneField.value = "";
		telephoneField.focus();
		return false;
	}

	document.getElementById(telephoneMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validateFax(faxField, faxMsgField)
{
	if (!verifyInput(faxField.value, check_Phone))
	{
		document.getElementById(faxMsgField).firstChild.nodeValue = "Please enter only numbers, whitespace, +()- characters.";
//		faxField.value = "";
		faxField.focus();
		return false;
	}

	document.getElementById(faxMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validateEmail(emailField, emailMsgField)
{
//	if (emailField.value.length==0 || emptyString.test(emailField.value))
	if (emptyString.test(emailField.value))
	{
		document.getElementById(emailMsgField).firstChild.nodeValue = "Please enter your email address.";
		emailField.focus();
		return false;
	}

	emailField.value = trim(emailField.value)

	atsign = emailField.value.indexOf('@', 0);
	dot = emailField.value.lastIndexOf('.');

	// ** Use for output of values in variables
	//	alert("@ = " + atsign + "\n. = " + dot);
	// **

	// ** First check if the @ sign is at position 0 or if it exists at all
	// ** If in first position, it is not valid
	if(atsign <= 0)
	{
		document.getElementById(emailMsgField).firstChild.nodeValue = "Please enter a valid email address.";
//		emailField.value = "";
		emailField.focus();
		return(false);
	}

	// ** Make sure that there are at least 2 characters after the @ sign
	if(!(dot>atsign+2))
	{
		document.getElementById(emailMsgField).firstChild.nodeValue = "Please enter a valid email address.";
//		emailField.value = "";
		emailField.focus();
		return(false);
	}

	if (!verifyInput(Registration_Form.email.value, check_Email))
	{
		document.getElementById(emailMsgField).firstChild.nodeValue = "Please enter only letters, digits and .@_- characters.";
//		emailField.value = "";
		emailField.focus();
		return false;
	}

	document.getElementById(emailMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validateWebsite(websiteField, websiteMsgField)
{
	if (emptyString.test(websiteField.value.substring(7)))
	{
		document.getElementById(websiteMsgField).firstChild.nodeValue = "Please enter your website address.";
//		websiteField.value = "http://";
		websiteField.focus();
		return false;
	}

	var RegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;

	if(!RegExp.test(websiteField.value))
	{
		document.getElementById(websiteMsgField).firstChild.nodeValue = "Please enter a valid URL.";
//		websiteField.value = "http://";
		websiteField.focus();
		return false;
    }

	document.getElementById(websiteMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validateUsername(usernameField, usernameMsgField)
{
//	if(usernameField.value.length==0 || emptyString.test(usernameField.value))
	if (emptyString.test(usernameField.value))
	{
		document.getElementById(usernameMsgField).firstChild.nodeValue = "Please enter a username.";
		usernameField.focus();
		return(false);
	}

	if (!verifyInput(usernameField.value.charAt(0), check_Username2))
	{
		document.getElementById(usernameMsgField).firstChild.nodeValue = "Username must begin with a letter.";
//		usernameField.value = "";
		usernameField.focus();
		return(false);
	}

	if(usernameField.value.length<6)
	{
		document.getElementById(usernameMsgField).firstChild.nodeValue = "Username is too short (min 6 characters).";
//		usernameField.value = "";
		usernameField.focus();
		return(false);
	}

	if(usernameField.value.length>30)
	{
		document.getElementById(usernameMsgField).firstChild.nodeValue = "Username is too long (max 30 characters).";
//		usernameField.value = "";
		usernameField.focus();
		return(false);
	}

	if (!verifyInput(usernameField.value, check_Username))
	{
		document.getElementById(usernameMsgField).firstChild.nodeValue = "Please enter only letters and numbers.";
//		usernameField.value = "";
		usernameField.focus();
		return false;
	}

	document.getElementById(usernameMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function validatePassword(passwordField, passwordConfirmField, passwordMsgField)
{
//	if(passwordField.value.length==0 || emptyString.test(passwordField.value))
	if (emptyString.test(passwordField.value))
	{
		document.getElementById(passwordMsgField).firstChild.nodeValue = "Please enter a password.";
		passwordField.focus();
		return(false);
	}

	if(passwordField.value.length<6)
	{
		document.getElementById(passwordMsgField).firstChild.nodeValue = "Password is too short (min 6 characters).";
		passwordField.value = "";
		passwordConfirmField.value = "";
		passwordField.focus();
		return(false);
	}

	if(passwordField.value.length>8)
	{
		document.getElementById(passwordMsgField).firstChild.nodeValue = "Password is too long (max 8 characters).";
		passwordField.value = "";
		passwordConfirmField.value = "";
		passwordField.focus();
		return(false);
	}

	if (!verifyInput(passwordField.value, check_Username))
	{
		document.getElementById(passwordMsgField).firstChild.nodeValue = "Please enter only letters and numbers.";
		passwordField.value = "";
		passwordConfirmField.value = "";
		passwordField.focus();
		return false;
	}

//	if(passwordConfirmField.value.length==0 || emptyString.test(passwordConfirmField.value))
	if (emptyString.test(passwordConfirmField.value))
	{
		document.getElementById(passwordMsgField).firstChild.nodeValue = "Please confirm your password.";
		passwordConfirmField.focus();
		return(false);
	}

	if(passwordConfirmField.value != passwordField.value)
	{
		document.getElementById(passwordMsgField).firstChild.nodeValue = "Your passwords do not match. Please re-enter.";
		passwordField.value = "";
		passwordConfirmField.value = "";
		passwordField.focus();
		return(false);
	}

	document.getElementById(passwordMsgField).firstChild.nodeValue = String.fromCharCode(nbsp);
	return true;
}

function verify()
{
	var errs=0;

	if (!validatePassword	(document.Registration_Form.password,	document.Registration_Form.password_confirm, 'password_msg'))	errs += 1;
	if (!validateUsername	(document.Registration_Form.username,	'username_msg'))												errs += 1;
	if (!validateWebsite	(document.Registration_Form.website,	'website_msg')) 												errs += 1;
	if (!validateEmail		(document.Registration_Form.email,		'email_msg')) 													errs += 1;
	if (!validateFax		(document.Registration_Form.fax,		'fax_msg'))  													errs += 1;
	if (!validateTelephone	(document.Registration_Form.telephone,	'telephone_msg'))  												errs += 1;
	if (!validateCountry	(document.Registration_Form.country,	'country_msg'))  												errs += 1;
	if (!validateAddress	(document.Registration_Form.address,	'address_msg'))  												errs += 1;
	if (!validateCompany	(document.Registration_Form.company,	'company_msg'))  												errs += 1;
	if (!validatePosition	(document.Registration_Form.position,	'position_msg'))  												errs += 1;
	if (!validateName		(document.Registration_Form.name,		'name_msg'))  													errs += 1;

	return (errs==0)
}

function contactverify()
{
  var errs=0;

  if (!validateName (document.Registration_Form.name, 'name_msg'))                     errs += 1;
  if (!validateFax (document.Registration_Form.fax, 'fax_msg'))                        errs += 1;
  if (!validateTelephonePlus (document.Registration_Form.telephone, 'telephone_msg'))  errs += 1;
  if (!validateEmail (document.Registration_Form.email, 'email_msg'))                  errs += 1;

	return (errs==0)
}

