// 	------------------------------------------	
//	  $Id: registration.js,v 1.5 2009/05/08 16:51:08 rhardy Exp $
//    $Source: /bbsrc/web/docs/en/jscommon/registration.js,v $
// 	------------------------------------------
	
	function validateForm() 
	{
		return (requiredFieldsFilled() && 
			   	minsixchars() &&
				passwordsMatch() &&
			   	noBadChars()  &&
				noLeadAlpha() &&
				legalZip()); 
	}
	
	function validateProfileForm()
	{
		return (requiredFieldsFilled()&& 
			   	minsixchars() &&
				passwordsMatch() &&
			   	noBadChars() &&
				noLeadAlpha() &&
				legalZip() &&
				looksLikeEmailAddress());
	}
	
	function validateForgotForm()
	{
	  	return (forgotrequiredfields() &&
			  	looksLikeEmailAddress());
		
	}
	
	function validateLegalForm()
	{	
		return (requiredFieldsFilled() &&
				looksLikeEmailAddress());
	}
	
	function requiredFieldsFilled() 
	{
	
		var myForm = document.forms.registration;
	
		var requiredFieldsInit = new Array("BLOOMBERG_ID", "PASSWORD", "REPASSWORD", "FIRST_NAME", "LAST_NAME", "ZIPCODE", "COUNTRY", "CHALLENGEQ", "CHALLENGEA");
		var reqFieldNamesInit = new Array("Username", "Password", "Re-type Password", "First Name", "Last Name", "Postal Code", "Country", "Account Verification Question", "Account Verification Answer" );
		var reqFieldNamesInitJP = new Array("ﾕｰｻﾞｰ名", "ﾊﾟｽﾜｰﾄﾞ", "ﾊﾟｽﾜｰﾄﾞ再入力", "名", "姓", "郵便番号", "国", "質問", "回答");
	
		var requiredFieldsUpd = new Array("FIRST_NAME", "LAST_NAME", "ZIPCODE", "COUNTRY", "CHALLENGEQ", "CHALLENGEA");
		var reqFieldNamesUpd = new Array("First Name", "Last Name", "Postal Code", "Country", "Account Verification Question", "Account Verification Answer");
		var reqFieldNamesUpdJP = new Array( "名", "姓", "郵便番号", "国", "質問", "回答");
		
		var requiredFieldsUpdPwd = new Array("OLDPASSWORD", "PASSWORD", "REPASSWORD", "FIRST_NAME", "LAST_NAME", "ZIPCODE", "COUNTRY", "CHALLENGEQ", "CHALLENGEA");
		var reqFieldNamesUpdPwd = new Array("Old Password", "Password", "Re-type Password", "First Name", "Last Name", "Postal Code", "Country", "Account Verification Question", "Account Verification Answer");
		var reqFieldNamesUpdPwdJP = new Array("ﾊﾟｽﾜｰﾄﾞ", "ﾊﾟｽﾜｰﾄﾞ", "ﾊﾟｽﾜｰﾄﾞ再入力", "名", "姓", "郵便番号", "国", "質問", "回答");
		
		var requiredFieldsWebl = new Array("FIRST_NAME", "LAST_NAME", "ZIPCODE");
		var reqFieldNamesWebl = new Array("First Name", "Last Name", "Postal Code");
		
		var requiredFieldsLegl = new Array("EMAIL", "FIRST_NAME", "LAST_NAME");
		var reqFieldNamesLegl = new Array( "E-mail Address", "First Name", "Last Name");
		var reqFieldNamesLeglJP = new Array( "Eメール","名", "姓");
		
		var alertString = "";
		var language = "en";
		
		var formtype = document.forms.registration.formtype.value;
		
		if (formtype == "upd")
		{
			var requiredFields = requiredFieldsUpd;
			var reqFieldNames = reqFieldNamesUpd;
		}
		else if (formtype == "jpupd")
		{
			var requiredFields = requiredFieldsUpd;
			var reqFieldNames = reqFieldNamesUpdJP;
			language = "jp";
		}
		else if (formtype == "updpwd")
		{
			var requiredFields = requiredFieldsUpdPwd;
			var reqFieldNames = reqFieldNamesUpdPwd;
		}
		else if (formtype == "jpupdpwd")
		{
			var requiredFields = requiredFieldsUpdPwd;
			var reqFieldNames = reqFieldNamesUpdPwdJP;
			language = "jp";
		}
		else if (formtype == "webl")
		{
			var requiredFields = requiredFieldsWebl;
			var reqFieldNames = reqFieldNamesWebl;
		}
		else if (formtype == "jpinit")
		{
			var requiredFields = requiredFieldsInit;
			var reqFieldNames = reqFieldNamesInitJP;
			language = "jp";
		}
		else if (formtype == "legal")
		{
			var requiredFields = requiredFieldsLegl;
			var reqFieldNames = reqFieldNamesLegl;
		}
		else if (formtype == "jplegal")
		{
			var requiredFields = requiredFieldsLegl;
			var reqFieldNames = reqFieldNamesLeglJP;
			language = "jp";
		}
		else
		{
			var requiredFields = requiredFieldsInit;
			var reqFieldNames = reqFieldNamesInit;
		}
	
		for (var i = 0; i < requiredFields.length; i++)
		{	
			if (isblank(myForm[requiredFields[i]].value) == true)
			{
				alertString += "- " + reqFieldNames[i] + "\n";
			}
		}
		
		if (alertString != "") 
		{
			if(language == "jp")
			{
				alert("以下の項目を必ず入力してください\n" + alertString); 
				return false;
			}
			else
			{
				alert("The following fields must be filled before submitting:\n" + alertString);
				return false;
			}
		} 
		else 
		{
			return true;
		}
		
	} 
	
	function looksLikeEmailAddress() 
	{
		var email = document.forms.registration.EMAIL.value;
		var formtype = document.forms.registration.formtype.value;
		var language = "en";
		
		if ((formtype == "jpinit")  || (formtype == "jpupd") || (formtype == "jpforget"))
		{
			language = "jp";
		}
		
		if(email != ""){
			ret = isemail(email);
			if (ret == true)
			{
				return true;
			} 
			else
			{
				if (language == "jp")
				{
					alert('無効なﾒｰﾙｱﾄﾞﾚｽが入力されました。再入力してください。');
                	return false;
				}
				else
				{
					alert('Invalid E-Mail Address format, please re-enter');
					return false;
				}
			}
		}
		else 
		{
		  return true;
		}
		
	}
	
	function passwordsMatch() 
	{
		var formtype = document.forms.registration.formtype.value;
		var myForm = document.forms.registration;
		var language = "en";
	
		if ((formtype == "upd") || (formtype == "jpupd") || (formtype == "webl"))
		{
			return true;
		}
		else if ((formtype == "jpinit") || (formtype == "jpupdpwd"))
		{
			language = "jp";
		}
	
		if (myForm.PASSWORD.value != myForm.REPASSWORD.value) 
		{
			if (language =="jp")
			{
				alert("パスワードとパスワード再入力 の項目が一致しません。訂正後、入力し直してください。");
				return false;
			}
			else{
				alert('Passwords do not match, please re-enter');
				return false;
			}
		} 
		else 
		{
			return true;
		}
	}
	
	function emailsMatch() 
	{
		var myForm = document.forms.registration;
		var language = "en";

		if ((formtype == "upd") || (formtype == "jpupd") || (formtype== "webl"))
		{
			return true;
		}
	
		if (myForm.EMAIL.value != myForm.EMAIL2.value) 
		{
			if (language =="jp")
			{
				alert("Eメールの項目が一致しません。訂正後、入力し直してください。");
				return false;
			}
			else{
				alert('E-mails do not match, please re-enter');
				return false;
			}
		} 
		else 
		{
			return true;
		}
	}
	
	function minsixchars() 
	{
		// check for minimum 6 chars
		var minlength = 6;
		var alertstring = "";
		var language = "en";
		var myForm = document.forms.registration;
		var formtype = document.forms.registration.formtype.value;
		
		var requiredFieldsUpdpwd = new Array("PASSWORD", "REPASSWORD");
		var reqFieldNamesUpdpwd = new Array("Password", "Retype Password"); 
		
		var requiredFieldsInit = new Array("BLOOMBERG_ID", "PASSWORD", "REPASSWORD");
		var reqFieldNamesInit = new Array("User Name", "Password", "Retype Password");
	
		var reqFieldNamesInitJP = new Array("ﾕｰｻﾞｰ名", "ﾊﾟｽﾜｰﾄﾞ", "ﾊﾟｽﾜｰﾄﾞ再入力");
		 
		if(formtype == "upd")
		{
		  return true;
		}
		if(formtype == "webl")
		{
		  return true;
		}
		else if (formtype == "updpwd")
		{
			var requiredFields = requiredFieldsUpdpwd;
			var reqFieldNames = reqFieldNamesUpdpwd;
		}
		else if (formtype == "jpinit")
		{
			var requiredFields = requiredFieldsInit;
			var reqFieldNames = reqFieldNamesInitJP;
			language = "jp";
		}
		else
		{
			var requiredFields = requiredFieldsInit;
			var reqFieldNames = reqFieldNamesInit;
		}
		
		
		for (var i = 0; i < requiredFields.length; i++)
		{
		   if (myForm[requiredFields[i]].value.length < minlength)
		   {
			  alertstring += "- " + reqFieldNames[i] + "\n";
		   }
		} 
	   if(alertstring == "")
	   {
		 return true;
	   }
	   else
	   { 
		   if(language == "jp")
		   {
				alert("以下の項目には、最低6文字以上が必要となります。\n" + alertstring); 
				return false;
		   }
		   else
		   {	   
				alert("The following fields require a minimum 6 characters:\n" + alertstring);
				return false;
		   }
		}
	}
		
	function noLeadAlpha() 
	{
		var myForm = document.forms.registration;
		var formtype = document.forms.registration.formtype.value;
		var requiredFieldsInit = new Array("BLOOMBERG_ID", "PASSWORD", "REPASSWORD");
		var reqFieldNamesInit = new Array("User Name", "Password", "Retype Password");
		var reqFieldNamesInitJP = new Array("ﾕｰｻﾞｰ名", "ﾊﾟｽﾜｰﾄﾞ", "ﾊﾟｽﾜｰﾄﾞ再入力");
		
		var alertString = "";
		var leadChar = "";
		var language = "en";
	
		if ((formtype == "webl") || (formtype == "upd") || (formtype == "jpupd"))
		{
			return true;
		}
		else if ((formtype == "jpinit") || (formtype == "jpupdpwd"))
		{
			var requiredFields = requiredFieldsInit;
			var reqFieldNames = reqFieldNamesInitJP;
			language = "jp";
		}
		else
		{
			var requiredFields = requiredFieldsInit;
			var reqFieldNames = reqFieldNamesInit;
		}
	
		for (var i = 0; i < requiredFields.length; i++)
		{
			leadChar = myForm[requiredFields[i]].value.substr(0,1);
			if (isalpha(leadChar) == false)
			{
				alertString += "- " + reqFieldNames[i] + "\n";
			}
		}
		
		if (alertString != "") 
		{
			if (language == "jp")
			{
				alert("以下の項目には、アルファベット（半角）ではじめる必要があります。\n" + alertString);
				return false;
			}
			else
			{
				alert("The following fields must start with an alpha character:\n" + alertString);
				return false;
			} 
		}
		else 
		{
			return true;
		}
	} 
		
	function noBadChars() 
	{
		var myForm = document.forms.registration;
		var requiredFieldsInit = new Array("BLOOMBERG_ID", "PASSWORD", "REPASSWORD");
		var reqFieldNamesInit = new Array("User Name","Password", "Retype Password");
		var reqFieldNamesInitJP = new Array("ﾕｰｻﾞｰ名", "ﾊﾟｽﾜｰﾄﾞ", "ﾊﾟｽﾜｰﾄﾞ再入力");
				
		var formtype = document.forms.registration.formtype.value;
		var language = "en";
		
		if ((formtype == "webl") || (formtype == "upd") || (formtype == "jpupd"))
		{
			return true;
		}
		else if ((formtype == "jpinit") || (formtype == "jpupdpwd"))
		{ 
			var requiredFields = requiredFieldsInit;
			var requiredNames = reqFieldNamesInitJP;
			language = "jp";
		}
		else
		{	
			var requiredFields = requiredFieldsInit;
			var requiredNames = reqFieldNamesInit;
		}
		 
		var alertString = "";
		var goodChars=/[a-zA-Z0-9_.@-]/;
		var badCharFound;
		
		for (var i = 0; i < requiredFields.length; i++)
		{
			badCharFound = false;
			for (var j = 0; j < myForm[requiredFields[i]].value.length; j++)
			{
				if (myForm[requiredFields[i]].value.substr(j,1).match(goodChars) == null)
				{
				   badCharFound = true;
				   break;
				}
			}
			if (badCharFound){
				alertString += "- " + requiredNames[i] + "\n";
			}
		}
		
		if (alertString != "") 
		{
			if(language == "jp")
			{    
				alert("以下の項目には、半角英数字、またはアンダーバー(_)のみ入力可能です。\n" + alertString);
				return false;
			}
			else
			{
				alert("The following fields can only contain alphas, numerics, or the underscore character:\n" + alertString);
				return false;
			}
		} 
		
		return true;
		
	} 
	
	function legalZip() 
	{
		var zipcode = document.forms.registration.ZIPCODE;
		var goodChars=/[ a-zA-Z0-9_.@-]/;
		
		var formtype = document.forms.registration.formtype.value;
		if ((formtype == "jpinit") || (formtype == "jpupd"))
		{
			return true;
		}
		
		for (var j = 0; j < zipcode.value.length; j++)
		{
			if (zipcode.value.substr(j,1).match(goodChars) == null)
			{
			  	alert("Postal code can only contain alphas, numerics, or the underscore character.");
		 		return false;
			}
		}
		
		return true;
	} 

	
	function forgotrequiredfields()
	{
	  	var myForm = document.forms.registration;
		var requiredFieldsforget = new Array("BLOOMBERG_ID", "EMAIL", "CHALLENGEQ", "CHALLENGEA");
		var reqFieldNamesforget = new Array("Username","E-Mail", "Account Verification Question", "Account Verification Answer" );
		var reqFieldNamesForgetJP = new Array("ﾕｰｻﾞｰ名", "Eメール","質問", "回答");
		var alertString = "";
		
		var formtype = document.forms.registration.formtype.value;
		var language = "en";
		
		if (formtype == "jpforget")
		{
			var requiredFields = requiredFieldsforget;
			var reqFieldNames = reqFieldNamesForgetJP;
			language = "jp";
		}
		else
		{
			var requiredFields = requiredFieldsforget;
			var reqFieldNames = reqFieldNamesforget;
		}
		
		for (var i = 0; i < requiredFields.length; i++)
		{	
			if (isblank(myForm[requiredFields[i]].value) == true)
			{
				alertString += "- " + reqFieldNames[i] + "\n";
			}
		}
		
		if (alertString != "") 
		{
			if (language == "jp")
			{
				alert("以下の項目を必ず入力してください\n" + alertString);
				return false;
			}
			else
			{
				alert("The following fields must be filled before submitting:\n" + alertString);
				return false;
			}
		} 
		else 
		{
			return true;
		}
		
	}
