// form validation

// custom error messages
bbcjs.forms.req_err.email = "Your email address must be entered correctly";
bbcjs.forms.req_err.email_address = "Your email address must be entered correctly";
bbcjs.forms.req_err.retype_email = "The email addresses you have entered must be identical";
bbcjs.forms.req_err.name = "Please enter your screen name";
bbcjs.forms.req_err.gender = "Please select your gender";
bbcjs.forms.req_err.agerange = "Please select your age range";
bbcjs.forms.req_err.parentalpermission = "Please confirm you have parental permission to register";
bbcjs.forms.req_err.worldregion = "Please select your world region";
bbcjs.forms.req_err.region = "Please select your region";
bbcjs.forms.req_err.location = "Please select your location";
bbcjs.forms.req_err.relationship = "Please select your relationship";
bbcjs.forms.req_err.children = "Please select if you have children";

var ProfileForm = {
	init:function(){
		if(!document.forms['profile_form']) return false;
		if ($("register-form") || $("profile-form")){
			ProfileForm.worldregionSelect = document.forms['profile_form']['worldregion'];
			bbcjs.dom.addEventListener( ProfileForm.worldregionSelect, "change", ProfileForm.enableDisableRegion);
			ProfileForm.loadUnder16();
		}
		bbcjs.dom.addEventListener( document.forms['profile_form'], "submit", ProfileForm.handleFormSubmit);
	},
	enableDisableRegion: function()
	{
		if (document.forms['profile_form'])
		{
			regionSelect = document.forms['profile_form']['region'];
			if (bbcjs.forms.getSelectValue(ProfileForm.worldregionSelect) != "UK")
			{
				regionSelect.disabled=true;
				bbcjs.forms.setSelectValue(regionSelect,'Other');
			}
			else
			{
				regionSelect.disabled=false;
			}
		}
	},
	loadUnder16: function()
	{
		if(!$("agerange")) return false;
		if(bbcjs.forms.getSelectValue($("agerange"))=="15-"){
			bbcjs.dom.setStyle( $("under16"), {display:"block"} );
		}
		bbcjs.dom.addEventListener( $("agerange"), 'change', ProfileForm.showUnder16 );
	},
	showUnder16: function()
	{
		if(bbcjs.forms.getSelectValue($("agerange"))=="15-"){
			bbcjs.dom.setStyle( $("under16"), {display:"block"} );
		} else {
			bbcjs.dom.setStyle( $("under16"), {display:"none"} );
		}
	},
	handleFormSubmit:function(e){
		var formid = e.target.id.split("-");
		if(!ProfileForm.validate($(e.target.id),formid[0])){
			bbcjs.dom.stopEvent(e);
		}
	},
	validate: function(formObj, screenId)
	{
		// field validation types
		if(screenId == 'forgotten'){
			bbcjs.forms.required.email_address = bbcjs.regex.email;
		}
		if (screenId == 'register'){
			bbcjs.forms.required.email = bbcjs.regex.email;
			bbcjs.forms.required.retype_email = new matchingEmail();
		}
		if (screenId == 'register' || screenId == 'profile')
		{
			bbcjs.forms.required.name = bbcjs.regex.not_empty;
			bbcjs.forms.required.gender = bbcjs.regex.not_empty;
			bbcjs.forms.required.agerange = bbcjs.regex.not_empty;
			if(bbcjs.forms.getSelectValue($("agerange"))=="15-"){
				bbcjs.forms.required.parentalpermission = bbcjs.regex.not_empty;
			}
			else
			{
				bbcjs.forms.required.parentalpermission = '.*';
			}
			bbcjs.forms.required.region = bbcjs.regex.not_empty;
			bbcjs.forms.required.location = bbcjs.regex.not_empty;
			bbcjs.forms.required.relationship = bbcjs.regex.not_empty;
			bbcjs.forms.required.children = bbcjs.regex.not_empty;
		}
		return bbcjs.forms.validate(formObj);
	}
}

matchingEmail = function(val){
	this.type = "matchingEmail";
}

matchingEmail.prototype.validate = function (val){
	if(val != bbcjs.forms.getValue($("email"))){
		return false;
	} else {
		return true;
	}
}

bbcjs.addOnLoadItem(ProfileForm.init);
