var PasswordReminder					= {
	init : function () {
		if(!document.getElementById||!document.createTextNode){return;}

		if (document.getElementById('frmPasswordReminder')) {
			PasswordReminder.loadValidation();
		}
	},
	
	loadValidation : function () {
		var eForm						= document.getElementById('frmPasswordReminder');
		eForm.onsubmit					= function() {
			return PasswordReminder.validate();
		}
	},
	
	validate : function () {
		var bPassed						= true;
		var eEmail						= document.getElementById('sEmail');
		if (!UserUtils.checkEmail(eEmail)) {
			bPassed						= false;
			UserUtils.showError('emailHelper', 'Please enter a valid email address.');
		}
		else {
			UserUtils.hideError('emailHelper');
		}
		
		UserUtils.errorDisplay(bPassed);
			
		return bPassed;
	}
}

var LoginValidation						= {
	sHelpDeskEmail : '',
	sSiteName : '',
	sLoginHelpOnClass : 'showHelp',
	sLoginHelpOffClass : 'hideHelp',
	
	init:function(sHelpDeskEmail, sSiteName) {
		LoginValidation.sHelpDeskEmail	= sHelpDeskEmail;
		LoginValidation.sSiteName		= sSiteName;
		if(!document.getElementById||!document.createTextNode){return;}
		
		if (document.getElementById('frmLogin')) {
			LoginValidation.loadValidation();
		}
	},
	
	loadValidation : function () {
		var eForm						= document.getElementById('frmLogin');
		eForm.onsubmit					= function() {
			return LoginValidation.validate();
		}
	},
	
	validate:function() {
		var bPassed						= true;
		var eUsername					= document.getElementById('sUserName');
		var bValidEmail					= UserUtils.checkEmail(eUsername);
		
		if (!bValidEmail) {
			bPassed						= false;
			UserUtils.showError('sUserNameHelper', 'Please enter your email address.');
		}
		else {
			UserUtils.hideError('sUserNameHelper');
		}
		var ePassword					= document.getElementById('sPassword');
		if (!UserUtils.checkLength(ePassword, 1)) {
			bPassed						= false;
			UserUtils.showError('sPasswordHelper', 'Please enter your password.');
		}
		else {
			UserUtils.hideError('sPasswordHelper');
		}
		
		// show help hint
		LoginValidation.showLoginHelp(bValidEmail, bPassed, 'loginTrouble', 'loginTroubleLink', 'sUserName');
		
		UserUtils.errorDisplay(bPassed);
			
		return bPassed;
	},
	
	showLoginHelp : function(bValidEmail, bPassed, sContainerDiv, sHelpDeskMailto, sEmailField) {
		var eContainerDiv				= document.getElementById(sContainerDiv);
		var eHelpDeskMailToLink			= document.getElementById(sHelpDeskMailto);
		var eEmailField					= document.getElementById(sEmailField);
		var sMailTo;
		
		if (eContainerDiv && bValidEmail && eEmailField && (!bPassed)) {
			eContainerDiv.className		= LoginValidation.sLoginHelpOnClass;
			sMailTo						= 'mailto:' + LoginValidation.sHelpDeskEmail + '?subject=' + LoginValidation.sSiteName + '- Login Page - Login Problems for ' + eEmailField.value;
			eHelpDeskMailToLink.setAttribute('href', sMailTo);
		}
		else if (eContainerDiv) {
			eContainerDiv.className		= LoginValidation.sLoginHelpOffClass;
		}
	}
}

var ActivationLookUp					= {
	init : function () {
		if(!document.getElementById||!document.createTextNode){return;}
		
		if (document.getElementById('frmActivationLookUp')) {
			ActivationLookUp.loadValidation();
		}
	},
	
	loadValidation : function () {
		var eForm						= document.getElementById('frmActivationLookUp');
		eForm.onsubmit					= function() {
			return ActivationLookUp.validate();
		}
	},
	
	validate : function () {
		var bPassed						= true;
		var eEmail						= document.getElementById('sEmail');
		if (!UserUtils.checkEmail(eEmail)) {
			bPassed						= false;
			UserUtils.showError('emailHelper', 'Please enter a valid email address.');
		}
		else {
			UserUtils.hideError('emailHelper');
		}
		
		return bPassed;
	}
}

var Registration							= {
	init : function () {
		if(!document.getElementById||!document.createTextNode){return;}
		
		if (document.getElementById('frmBasicReg')) {
			Registration.loadValidation();
		}
		
		if (document.getElementById('nCountryID')) {
			Registration.loadCountryChangeEvent();
			Registration.countryChanged();
		}
	},
	
	loadValidation : function() {
		var eForm						= document.getElementById('frmBasicReg');
		eForm.onsubmit					= function() {
			return Registration.validate();
		}
	},
	
	loadCountryChangeEvent : function () {
		eCountry						= document.getElementById('nCountryID');
		eCountry.onchange				= function() {
			Registration.countryChanged();
		}
	},
	
	validate : function() {
		var bPassed						= true;
		var eFirstName					= document.getElementById('sFirstName');
		var oTemp;
		if (!UserUtils.checkLength(eFirstName, 1)) {
			bPassed						= false;
			UserUtils.showError('firstNameHelper', 'Please enter your first name.');
		}
		else {
			UserUtils.hideError('firstNameHelper');
		}
		var eLastName					= document.getElementById('sLastName');
		if (!UserUtils.checkLength(eLastName, 1)) {
			bPassed						= false;
			UserUtils.showError('lastNameHelper', 'Please enter your last name.');
		}
		else {
			UserUtils.hideError('lastNameHelper');
		}
		/* var eSector						= document.getElementById('nIndustrySectorID');
		if (eSector) {
			if (eSector.selectedIndex == 0) {
				bPassed					= false;
				UserUtils.showError('industrySectorHelper', 'Please choose your area of work.');
			}
			else {
				UserUtils.hideError('industrySectorHelper');
			}
		} */
		var eJobTitle					= document.getElementById('sJobTitle');
		if (eJobTitle) {
			if (!UserUtils.checkLength(eJobTitle, 1)) {
				bPassed					= false;
				UserUtils.showError('jobTitleHelper', 'Please enter your job title.');
			}
			else {
				UserUtils.hideError('jobTitleHelper');
			}
		}
		var eCompany					= document.getElementById('sCompanyName');
		if (eCompany) {
			if (!UserUtils.checkLength(eCompany, 1)) {
				bPassed					= false;
				UserUtils.showError('companyNameHelper', 'Please enter your company name.');
			}
			else {
				UserUtils.hideError('companyNameHelper');
			}
		}
		var ePostCode					= document.getElementById('sPostCode');
		var eCountry					= document.getElementById('nCountryID');
		if (ePostCode && eCountry) {
			if (eCountry.value == -1) {
				bPassed					= false;
				UserUtils.showError('countryHelper', 'Please choose a country.');
			}
			else {
				UserUtils.hideError('countryHelper');
				var oTemp				= UserUtils.checkAddressCode(ePostCode, eCountry, 'postCodeLabel');
				if (!oTemp.bPassed) {
					bPassed				= false;
					UserUtils.showError('postCodeHelper', oTemp.sMessage);
				}
				else {
					UserUtils.hideError('postCodeHelper');
				}
			}
			
		}
		var eEmail						= document.getElementById('sEmail');
		var eEmailConfirm				= document.getElementById('sEmailConfirm');
		if (eEmail.value != eEmailConfirm.value) {
			bPassed						= false;
			UserUtils.showError('emailHelper', 'The email addresses entered do not match each other.');
		}
		else if (!UserUtils.checkEmail(eEmail)) {
			bPassed						= false;
			UserUtils.showError('emailHelper', 'Please enter a valid email address.');
		}
		else {
			UserUtils.hideError('emailHelper');
		}
		var ePassword					= document.getElementById('sPassword');
		var ePasswordConfirm			= document.getElementById('sPasswordConfirm');
		if (!UserUtils.checkLength(ePassword, 8)) {
			bPassed						= false;
			UserUtils.showError('passwordHelper', 'Your password is too short. It must be at least 8 characters long.');
		}
		else if (ePassword.value != ePasswordConfirm.value) {
			bPassed						= false;
			UserUtils.showError('passwordHelper', 'The passwords you entered do not match.');
		}
		else if (!UserUtils.checkPassword(ePassword)) {
			bPassed						= false;
			UserUtils.showError('passwordHelper', 'Your password should comprise of letters and numbers.');
		}
		else {
			UserUtils.hideError('passwordHelper');
		}
		var eTerms						= document.getElementById('bTerms');
		if (!eTerms.checked) {
			bPassed						= false;
			UserUtils.showError('termsHelper', 'You must agree to the terms and conditions.');
		}
		else {
			UserUtils.hideError('termsHelper');
		}
		
		UserUtils.errorDisplay(bPassed);
			
		return bPassed;
	},
	
	countryChanged : function () {
		var ePostCode					= document.getElementById('sPostCode');
		var eCountry					= document.getElementById('nCountryID');
		if (ePostCode && eCountry) {
			if (eCountry.value == UserUtils.nUKID) {
				UserUtils.showPostCode(ePostCode, 'postCodeLabel', UserUtils.sPostCodeLabel);
			}
			else if (eCountry.value == UserUtils.nUSID) {
				UserUtils.showPostCode(ePostCode, 'postCodeLabel', UserUtils.sZipCodeLabel);
			}
			else {
				UserUtils.hidePostCode(ePostCode);
			}
		}
	}
}

var UserUtils							= {
	nUKID : 207,
	nUSID : 208,
	sErrorShowClass : 'showError',
	sErrorHideClass : 'hideError',
	sPostCodeHideClass : 'hide',
	sPostCodeLabel : 'Post Code:<span class= "required">*</span>',
	sZipCodeLabel : 'Zip Code:<span class= "required">*</span>',
	
	checkLength : function(eElem, nMinLength) {
		var sValue						= eElem.value;
		var nLength						= sValue.replace(/^(\s)*/, '').replace(/(\s)*$/, '').length;
		return nLength >= nMinLength;
	},
	
	checkAddressCode : function (ePostCode, eCountry, sPostCodeLabel) {
		var nIndex						= eCountry.selectedIndex;
		var nCountryID					= eCountry.options[nIndex].value;
		var oResult						= new Object();
		oResult.bPassed					= true;
		if (nCountryID == UserUtils.nUKID) {
			if (!UserUtils.isPostCode(ePostCode)) {
				oResult.bPassed			= false;
				oResult.sMessage		= 'Post Code is not in the correct format. Please ensure it contains the correct spacing e.g W1 1AA';
			}
			UserUtils.showPostCode(ePostCode, sPostCodeLabel, UserUtils.sPostCodeLabel);
		}
		else if (nCountryID == UserUtils.nUSID) {
			if (!UserUtils.isZipCode(ePostCode)) {
				oResult.bPassed			= false;
				oResult.sMessage		= 'Zip Code is not in the correct format.';
			}
			UserUtils.showPostCode(ePostCode, sPostCodeLabel, UserUtils.sZipCodeLabel);
		}
		else {
			UserUtils.hidePostCode(ePostCode);
		}
		
		return oResult;
	},
	
	isPostCode : function (ePostCode) {
		var rePostCode					= /^\w{1,2}[\dR][\d\w]? \d\w{2}$/i;
		var sPostCode					= ePostCode.value.replace(/^(\s)*/, '').replace(/(\s)*$/, '');
		return rePostCode.test(sPostCode);
	},
	
	isZipCode : function (eZipCode) {
		var reZipCode					= /^(\d{5}-\d{4})|(\d{5})$/i;
		var sZipCode					= eZipCode.value.replace(/^(\s)*/, '').replace(/(\s)*$/, '');
		return reZipCode.test(sZipCode);
	},
	
	checkEmail : function (eEmail) {
		var sEmail						= eEmail.value;
		var at							= "@";
		var dot							= ".";
		var lat							= sEmail.indexOf(at);
		var lstr						= sEmail.length;
		var ldot						= sEmail.indexOf(dot);
		
		if (sEmail.indexOf(at) == -1) {return false;}
		if (sEmail.indexOf(at) == -1 || sEmail.indexOf(at)==0 || sEmail.indexOf(at)==lstr) {return false;}
		if (sEmail.indexOf(dot) == -1 || sEmail.indexOf(dot)==0 || sEmail.indexOf(dot)==lstr) {return false;}
		if (sEmail.indexOf(at,(lat+1)) != -1) {return false;}
		if (sEmail.substring(lat-1,lat) == dot || sEmail.substring(lat+1,lat+2)==dot) {return false;}
		if (sEmail.indexOf(dot,(lat+2)) == -1) {return false;}
		if (sEmail.indexOf(" ")!=-1) {return false;}
		return true;
	},
	
	checkPassword : function (ePassword) {
		var rePassword					= /^[\da-z]+$/i;
		var sPassword					= ePassword.value;
		return rePassword.test(sPassword);
	},
	
	errorDisplay : function (bShow) {
		if (!bShow) {
			UserUtils.showMainErrorMessage('regError');
		}
		else {
			UserUtils.hideMainErrorMessage('regError');
		}		
	},
	
	showError : function (sHelperID, sMessage) {
		var eHelper						= document.getElementById(sHelperID);
		if (eHelper) {
			eHelper.innerHTML			= '<p>' + sMessage + '</p>';
			DOMUtils.cssjs('remove', eHelper, UserUtils.sErrorHideClass);
			DOMUtils.cssjs('add', eHelper, UserUtils.sErrorShowClass);
		}
	},
	
	hideError : function (sHelperID) {
		var eHelper						= document.getElementById(sHelperID);
		if (eHelper) {
			eHelper.innerHTML			= '';
			DOMUtils.cssjs('remove', eHelper, UserUtils.sErrorShowClass);
			DOMUtils.cssjs('add', eHelper, UserUtils.sErrorHideClass);
		}
	},
	
	showMainErrorMessage : function (sHelperID) {
		var eHelper						= document.getElementById(sHelperID);
		if (eHelper) {
			eHelper.className			= "showErrorGeneral";
		}
	},
	
	hideMainErrorMessage : function (sHelperID) {
		var eHelper						= document.getElementById(sHelperID);
		if (eHelper) {
			eHelper.className			= "errorHideGeneral";
		}
	},
	
	showPostCode : function (ePostCode, sPostCodeLabelID, sLabelText) {
		var eDiv						= ePostCode.parentNode;
		var eLabel						= document.getElementById(sPostCodeLabelID);
		eLabel.innerHTML				= sLabelText;
		DOMUtils.cssjs('remove', eDiv, UserUtils.sPostCodeHideClass);
	},
	
	hidePostCode : function (ePostCode) {
		var eDiv						= ePostCode.parentNode;
		ePostCode.value					= '';
		DOMUtils.cssjs('add', eDiv, UserUtils.sPostCodeHideClass);
	}
}

WindowListener.add("load","ActivationLookUp.init()");
WindowListener.add("load","Registration.init()");
WindowListener.add("load","PasswordReminder.init()");