// Declaration of the namespace
var CFDForms = function() {

	// Private variables within the namespace
	var emailRegX = /^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/;
	var pcRegX = /(GIR 0AA)|(GIR0AA)|((([A-PRSTUWYZ][0-9][0-9]?)|(([A-PRSTUWYZ][A-HK-Y][0-9][0-9]?)|(([A-PRSTUWYZ][0-9][A-HJKSTUW])|([A-PRSTUWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) ?[0-9][ABD-HJLNP-UWXYZ]{2})/i;
	var scrNameRegX = /[^a-zA-Z0-9\-_]/gi;
	var Xwidth = 13;
	var	Xheight = 10;
	var Xsrc = '/images/form/x.gif';
	var OKwidth = 24;
	var OKheight = 11;
	var OKsrc = '/images/form/ok.gif';

	// Private functions of the namespace
	function formFocusResponse(e) { e.element().addClassName('active');	}
	function formBlurResponse(e) { e.element().removeClassName('active'); }
	function formRMReasonCheck(e) {
		var reasonImg = $('reasonImg');
		if (this.value == '') {
			reasonImg.width=Xwidth;reasonImg.height=Xheight;reasonImg.src=Xsrc;
			$('reasonMsg').innerHTML = 'You must at least one reason.';
			$('rm_FFReasonMsg').style.display = 'block';
		} else {
			reasonImg.width=OKwidth;reasonImg.height=OKheight;reasonImg.src=OKsrc;
			$('reasonMsg').innerHTML = '&nbsp;';
			$('rm_FFReasonMsg').style.display = 'none';
		}
	}
	function formMMSubjectCheck(e) {
		var subImg = $('subImg');
		if (this.value == '') {
			subImg.width=Xwidth;subImg.height=Xheight;subImg.src=Xsrc;
			$('subMsg').innerHTML = 'Please enter a subject.';
		} else {
			subImg.width=OKwidth;subImg.height=OKheight;subImg.src=OKsrc;
			$('subMsg').innerHTML = '&nbsp;';
		}
	}
	function formMMMsgCheck(e) {
		var msgImg = $('msgImg');
		if (this.value == '') {
			msgImg.width=Xwidth;msgImg.height=Xheight;msgImg.src=Xsrc;
			$('msgMsg').innerHTML = 'Please enter a message.';
			$('mm_FFMsgMsg').style.display = 'block';
		} else {
			msgImg.width=OKwidth;msgImg.height=OKheight;msgImg.src=OKsrc;
			$('msgMsg').innerHTML = '&nbsp;';
			$('mm_FFMsgMsg').style.display = 'none';
		}
	}
	function formFPEmailCheck(e) {
		var emImg = $('emImg');
		if (!emailRegX.test(this.value)) {
			emImg.width=Xwidth;emImg.height=Xheight;emImg.src=Xsrc;
			$('emMsg').innerHTML = 'Email address not valid, please try again.';
		} else {
			emImg.width=OKwidth;emImg.height=OKheight;emImg.src=OKsrc;
			$('emMsg').innerHTML = '&nbsp;';
		}
	}
	function formPostcodeCheck(e) {
		var str_Postcode = e.element().value;
		var pcImg = $('pcImg');
		if (!pcRegX.test(str_Postcode)) {
			pcImg.width=Xwidth;pcImg.height=Xheight;pcImg.src=Xsrc;
			$('pcMsg').innerHTML = 'Postcode not valid, please try again.';
		} else {
			pcImg.width=OKwidth;pcImg.height=OKheight;pcImg.src=OKsrc;
			$('pcMsg').innerHTML = '&nbsp;';
		}		
	}
	function formJustEmailCheck(e) { 
		var str_Email = e.element().value;
		var emImg = $('emImg');
		if (!emailRegX.test(str_Email)) {
			emImg.width=Xwidth;emImg.height=Xheight;emImg.src=Xsrc;
			$('emMsg').innerHTML = 'Email address not valid, please try again.';
		} else {
			emImg.width=OKwidth;emImg.height=OKheight;emImg.src=OKsrc;
			$('emMsg').innerHTML = '&nbsp;';
		}
		var url='/ajax/checkEmail.cfm';
		var pars='reg=1&em='+str_Email;
		var reqAjax=new Ajax.Request(url,{method:'get',parameters:pars,onComplete:updateEmailCheck});
	}
	function formEmailCheck(e) { 
		var str_Email = $F('emailAddress');
		var str_EmailConfirm = $F('confirmEmailAddress');
		var emImg = $('emImg');
		var cemImg = $('cemImg');
		var bol_PassedOthers = false;
		if (!emailRegX.test(str_Email)) {
			emImg.width=Xwidth;emImg.height=Xheight;emImg.src=Xsrc;
			$('emMsg').innerHTML = 'Email address not valid, please try again.';
			$('emMsg').style.display = 'block';
			bol_PassedOthers = false;
		} else {
			emImg.width=OKwidth;emImg.height=OKheight;emImg.src=OKsrc;
			$('emMsg').innerHTML = '&nbsp;';
			$('emMsg').style.display = 'none';
			bol_PassedOthers = true;
		}
		if ((str_Email != "") && (str_EmailConfirm != "") && (str_Email != str_EmailConfirm)) {
			cemImg.width=Xwidth;cemImg.height=Xheight;cemImg.src=Xsrc;
			$('cemMsg').innerHTML = 'Emails do not match. Please try again.';
			$('cemMsg').style.display = 'block';
			bol_PassedOthers = false;
		} else if (str_EmailConfirm != "") {
			cemImg.width=OKwidth;cemImg.height=OKheight;cemImg.src=OKsrc;
			$('cemMsg').innerHTML = '&nbsp;';
			$('cemMsg').style.display = 'none';
			bol_PassedOthers = true;
		}
		if (bol_PassedOthers) {
			var url='/ajax/checkEmail.cfm';
			var pars='em='+str_Email;
			var reqAjax=new Ajax.Request(url,{method:'get',parameters:pars,onComplete:updateEmailCheck});
		}
	}
	function updateEmailCheck(responseData) {
		var EMC=eval('('+responseData.responseText+')');
		var emImg = $('emImg');
		if (EMC.emailinuse) {
			emImg.width=Xwidth;emImg.height=Xheight;emImg.src=Xsrc;
			$('emMsg').innerHTML = 'This email address already registered.';
			$('emMsg').style.display = 'block';
		} else {
			$('emMsg').style.display = 'none';
		}
		formCheckComplete();
	}
	function formPasswordCheck(e) {
		var str_Password = $F('password');
		var str_PasswordConfirm = $F('confirmPassword');
		var cpImg = $('cpImg');
		if ((str_Password != "") && (str_PasswordConfirm != "") && (str_Password != str_PasswordConfirm)    ) {
			cpImg.width=Xwidth;cpImg.height=Xheight;cpImg.src=Xsrc;
			$('cpMsg').innerHTML = 'Passwords do not match. Please try again.';
			$('cpMsg').style.display = 'block';
		} else if ((str_Password != "") && (str_PasswordConfirm != "")) {
			cpImg.width=OKwidth;cpImg.height=OKheight;cpImg.src=OKsrc;
			$('cpMsg').innerHTML = '&nbsp;';
			$('cpMsg').style.display = 'none';
		}
		formCheckComplete();
	}
	function formScreenNameCheck(e) {
		var str_ScrName = $F('screenName'); 
		if (scrNameRegX.test(str_ScrName)) {
			var snImg = $('snImg');
			snImg.width=Xwidth;snImg.height=Xheight;snImg.src=Xsrc;
			$('snMsg').innerHTML = 'This screen name invalid. Only A to Z, 0 to 9, hyphen (-) and underscore (_) allowed. Please try again.';
			$('snMsg').style.display = 'block';
		} else if (str_ScrName != "") {
			var url='/ajax/checkUsername.cfm';
			var pars='un='+str_ScrName;
			var reqAjax=new Ajax.Request(url,{method:'get',parameters:pars,onComplete:updateScreenNameCheck});
		}
	}
	function updateScreenNameCheck(responseData) {
		var UNC=eval('('+responseData.responseText+')');
		var snImg = $('snImg');
		if (UNC.usernametaken) {
			snImg.width=Xwidth;snImg.height=Xheight;snImg.src=Xsrc;
			$('snMsg').innerHTML = 'This screen name is taken. Please try again.';
			$('snMsg').style.display = 'block';
		} else {
			snImg.width=OKwidth;snImg.height=OKheight;snImg.src=OKsrc;
			$('snMsg').innerHTML = '&nbsp;';
			$('snMsg').style.display = 'none';
		}
		formCheckComplete();
	}
	function formCheckComplete() {
		arr_InputObjs = $$('input.text');
		for (i=0; i<arr_InputObjs.length; i++) {
			if (arr_InputObjs[i].descendantOf(thisFormName)) {
				
			}
		}
	}
	function formCreateObserve(obj) {
		if (obj.descendantOf(thisFormName)) {
			$(obj).observe('focus', formFocusResponse);	
			$(obj).observe('blur', formBlurResponse);	
		}
	}

	// Public functions of the namespace
	return {
		// Global variables
		formComplete:false,
		thisFormName:'',

		// Initate a form with the required observer's
		initForm : function(formName) {
			thisFormName = formName;
			$$('input').each(formCreateObserve);
			$$('textarea').each(formCreateObserve);
		},
		
		// Initiate the register form with the required observer's
		initRegisterForm : function() {
			$$('input.text').each ( function(obj) {
				switch (obj.id) {
					case "emailAddress": $(obj).observe('blur', formEmailCheck); break;
					case "confirmEmailAddress": $(obj).observe('blur', formEmailCheck); break;
					case "password": $(obj).observe('blur', formPasswordCheck); break;
					case "confirmPassword": $(obj).observe('blur', formPasswordCheck);	break;
					case "screenName": $(obj).observe('blur', formScreenNameCheck); break;
				}
			});
			$('emailAddress').focus();
		},
		initLoginForm : function() {
			$$('input').each ( function(obj) {
				switch (obj.id) {
					case "mem_username": $(obj).observe('blur', formFPEmailCheck); break;
				}
			});
		},
		initForgottenPasswordForm : function() {
			$$('input.text').each ( function(obj) {
				switch (obj.id) {
					case "frm_email_address": $(obj).observe('blur', formFPEmailCheck);	break;
				}
			});
		},
		initMessageMemberForm : function() {
			$$('input').each ( function(obj) {
				switch (obj.id) {
					case "frm_subject": $(obj).observe('blur', formMMSubjectCheck);	break;
				}
			});
			$$('textarea').each ( function(obj) {
				switch (obj.id) {
					case "frm_msg": $(obj).observe('blur', formMMMsgCheck); break;
				}
			});
		},
		initForumPostForm : function() {
			$$('textarea').each ( function(obj) {
				switch (obj.id) {
					case "frm_msg": $(obj).observe('blur', formMMMsgCheck); break;
				}
			});
		},
		initReportMemberForm : function() {
			$$('textarea').each ( function(obj) {
				switch (obj.id) {
					case "frm_reason": $(obj).observe('blur', formRMReasonCheck); break;
				}
			});
		},
		initASForm : function() {
			$$('input.text').each ( function(obj) {
				switch (obj.id) {
					case "emailAddress": $(obj).observe('blur', formJustEmailCheck); break;
					case "postcode": $(obj).observe('blur', formPostcodeCheck); break;
				}
			});
		}
	};
}();
