function emailCheck (emailStr) {

emailStr = emailStr.trim();

var checkTLD=1;
var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
var emailPat=/^(.+)@(.+)$/;
var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
var validChars="\[^\\s" + specialChars + "\]";
var quotedUser="(\"[^\"]*\")";
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
var atom=validChars + '+';
var word="(" + atom + "|" + quotedUser + ")";
var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
var matchArray=emailStr.match(emailPat);

if (matchArray==null) {
alert("Your email address seems incorrect (check @ and .'s)");
return false;
}
var user=matchArray[1];
var domain=matchArray[2];

for (i=0; i<user.length; i++) {
if (user.charCodeAt(i)>127) {
alert("Ths username in your email address contains invalid characters.");
return false;
   }
}
for (i=0; i<domain.length; i++) {
if (domain.charCodeAt(i)>127) {
alert("Ths domain name supplied in your email address contains invalid characters.");
return false;
   }
}

if (user.match(userPat)==null) {

alert("The username in your email address doesn't seem to be valid.");
return false;
}

var IPArray=domain.match(ipDomainPat);
if (IPArray!=null) {

for (var i=1;i<=4;i++) {
if (IPArray[i]>255) {
alert("Destination IP supplied in your email address is invalid");
return false;
   }
}
return true;
}
 
var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;
for (i=0;i<len;i++) {
if (domArr[i].search(atomPat)==-1) {
alert("The domain name in your email address does not seem to be valid.");
return false;
   }
}

if (checkTLD && domArr[domArr.length-1].length!=2 && 
domArr[domArr.length-1].search(knownDomsPat)==-1) {
alert("Your email address must end in a well-known domain or two letter " + "country.");
return false;
}
if (len<2) {
alert("Your email address is missing a hostname.");
return false;
}
return true;
}


// create the prototype on the String object 

String.prototype.trim = function() { 

// skip leading and trailing whitespace 
// and return everything in between 
var x=this; 
x=x.replace(/^\s*(.*)/, "$1"); 
x=x.replace(/(.*?)\s*$/, "$1"); 
return x; 
} 





function checkform() {

		if (document.forms["register"].elements["mo_user_email"].value == "") {
			alert ("Please enter your Email address.");
			document.forms["register"].elements["mo_user_email"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_email"].value != '') {
			var ec = emailCheck(document.forms["register"].elements["mo_user_email"].value) 
			if (ec == false) {
			document.forms["register"].elements["mo_user_email"].focus();
			return false;
			}						
		}				
		if (document.forms["register"].elements["mo_user_password"].value == "") {
			alert ("Please enter a password.");
			document.forms["register"].elements["mo_user_password"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_password_confirm"].value == "") {
			alert ("Please confirm your password.");
			document.forms["register"].elements["mo_user_password_confirm"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_password"].value != document.forms["register"].elements["mo_user_password_confirm"].value) {
			alert ("The passwords do not match. Please re-enter your password.");
			document.forms["register"].elements["mo_user_password"].focus();
			return false;
		}	
		if (document.forms["register"].elements["mo_user_last_name"].value == "") {
			alert ("Please enter your Surname.");
			document.forms["register"].elements["mo_user_last_name"].focus();
			return false;
		}		
		if (document.forms["register"].elements["mo_user_first_name"].value == "") {
			alert ("Please enter your Full Name.");
			document.forms["register"].elements["mo_user_first_name"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_known_as"].value == "") {
			alert ("Please enter your Known As Name.");
			document.forms["register"].elements["mo_user_known_as"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_birthday_day"].value == "") {
			alert ("Please select your Day of birth.");
			document.forms["register"].elements["mo_user_birthday_day"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_birthday_month"].value == "") {
			alert ("Please select your Month of birth.");
			document.forms["register"].elements["mo_user_birthday_month"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_birthday_year"].value == "") {
			alert ("Please select your Year of birth.");
			document.forms["register"].elements["mo_user_birthday_year"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_race"].value == "") {
			alert ("Please select your Race.");
			document.forms["register"].elements["mo_user_race"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_gender"].value == "") {
			alert ("Please select your Gender.");
			document.forms["register"].elements["mo_user_gender"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_nationality"].value == "") {
			alert ("Please enter your Nationality.");
			document.forms["register"].elements["mo_user_nationality"].focus();
			return false;
		}
		if (document.forms["register"].elements["mo_user_alt_contact_number"].value == "" && document.forms["register"].elements["mo_user_mobile_number"].value == "") {
			alert ("Please enter your Telephone/Mobile Number.");
			document.forms["register"].elements["mo_user_alt_contact_number"].focus();
			return false;
		}	
		if (document.forms["register"].elements["mo_user_alt_email"].value != '') {
			var ec = emailCheck(document.forms["register"].elements["mo_user_alt_email"].value) 
			if (ec == false) {
			document.forms["register"].elements["mo_user_alt_email"].focus();
			return false;
			}						
		}	
		if (document.forms["register"].elements["mo_user_company"].value == '') {
			alert ("Please enter your Most Recent Company.");
			document.forms["register"].elements["mo_user_company"].focus();
			return false;
			}	
		if (document.forms["register"].elements["mo_user_job_title"].value == '') {
			alert ("Please enter your Most Recent Job Title.");
			document.forms["register"].elements["mo_user_job_title"].focus();
			return false;
			}		
		if (document.forms["register"].elements["temp_ctc"].value == '') {
			alert ("Please select your Most Recent Cost to Company.");
			document.forms["register"].elements["temp_ctc"].focus();
			return false;
		}	
separate_listbox("temp_ctc","ID_salary_range","salary");
	if (document.forms["register"].elements["salary"].value == 'Unwilling to Disclose') {
		document.forms["register"].elements["salary"].value = 'UTD';
	}
// new degree combo fields as of 9/04/03		
separate("temp_degree_major","mo_user_degree_major","degree_major");		
separate("temp_degree_level","mo_user_degree_level","degree_level");
		if (document.forms["register"].elements["mo_user_degree_major"].value == "" && document.forms["register"].elements["mo_user_degrees_other"].value == "") {
			alert ("Please make a selection from the University Degrees or enter information in the Other University Degrees field.");
			document.forms["register"].elements["mo_user_degrees_other"].focus();
			return false;
		}	
		if (document.forms["register"].elements["mo_user_degree_level"].value == "" && document.forms["register"].elements["mo_user_degrees_other"].value != ""  && document.forms["register"].elements["mo_user_degree_major"].value == "") {
			alert ("Please select the level of degree obtained for the information you have provided in the Other University Degrees field.");
			document.forms["register"].elements["temp_degree_level"][0].focus();
			return false;
		}
		if (document.forms["register"].elements["temp_degree_major"][0].checked == false) {
			if (document.forms["register"].elements["mo_user_degree_major"].value != "" && document.forms["register"].elements["mo_user_degree_level"].value == "")  {
				alert ("Please select the level of degree obtained for the selections you have made in the University Degrees field.");
				document.forms["register"].elements["temp_degree_level"][0].focus();
				return false;
			}
		}	
// separation and validation removed for field 9/04/03 as it has become dormant - uncomment to reactivate - see possible conflicts above
//separate("temp_degrees","mo_user_degrees","degrees");		
//		if (document.forms["register"].elements["mo_user_degrees"].value == "" && document.forms["register"].elements["mo_user_degrees_other"].value == "") {
//			alert ("Please make a selection from the University Degrees or enter information in the Other University Degrees field.");
//			document.forms["register"].elements["mo_user_degrees_other"].focus();
//			return false;
//		}
separate("temp_articles","mo_user_articles","articles");	
		if (document.forms["register"].elements["mo_user_articles"].value == "" && document.forms["register"].elements["mo_user_articles_other"].value == "") {
			alert ("Please make a selection from the Articles/Internships/Apprenticeships field or enter information in the Other Articles/Internships/Apprenticeships field.");
			document.forms["register"].elements["mo_user_articles_other"].focus();
			return false;
		}	
separate("temp_qualifications","mo_user_qualifications","qualifications");
		if (document.forms["register"].elements["mo_user_qualifications"].value == "" && document.forms["register"].elements["mo_user_qualifications_other"].value == "") {
			alert ("Please make a selection from the Professional Qualifications field or enter information in the Other Professional Qualifications field.");
			document.forms["register"].elements["mo_user_qualifications_other"].focus();
			return false;
		}

		if (document.forms["register"].elements["mo_user_cv"].value == "") {
			alert ("Please attach your CV by clicking on the browse button.");
			document.forms["register"].elements["mo_user_cv"].focus()
			return false;
		}	
validate("register","mo_user_mobile_number","tel");	
validate("register","mo_user_alt_contact_number","tel")
document.forms["register"].elements["submit"].value = "Processing Registration...";
document.forms["register"].elements["submit"].disabled = true;
document.forms["register"].elements["reset"].disabled = true;
}
function validate(frm,elem,type) {
	var str = document.forms[frm].elements[elem].value
	var valid = 1
	var AcceptChars 
	if (type == "sum") {
	AcceptChars = "0123456789."
	}
	if (type == "tel") {
	AcceptChars = "0123456789"
	}
	var i = 0
	var ii_chr
	var ii_cnt
	if (str=="") {
		valid = 0
	}
	for (i=0;i<=str.length-1;i++) {
		if (AcceptChars.indexOf(str.charAt(i)) == -1) {
				tempstr = str.charAt(i);
				str = str.replace(tempstr,'');
				alert("You may only use the following characters in this field:\n" + AcceptChars)
				valid = 0
		} 
		if (type == "sum") {	
			ii_chr = str.indexOf(".")	
			ii_cnt = str.indexOf(".",ii_chr+1);
			if (str.length == 1 && str == "." ) {
				str = str.replace(str.charAt(ii_chr),'1.'); 
			}
			else {
				str = str.replace(str.charAt(ii_cnt),'');
			}
			if (str.indexOf(".") != -1) {
				str = str.substr(0,ii_chr+3)	
			}	
			valid = 0	
		}
		document.forms[frm].elements[elem].value = str
	}
	return valid
}
function checklen(elem,member,maxlen,f_name) {
	var i_count = 0
	var i_len = document.forms["register"].elements[elem].length
	for (var i=0; i < i_len; i++) {
		if (document.forms["register"].elements[elem][i].checked == true) {
			i_count = i_count + 1
				if (i_count > maxlen)		{
						member.checked = false						
						alert("Please select a maximum of " + maxlen + " entries for the " + f_name + " field.");
						member.focus();
						return false;			
					}
				}
			}		
}
function separate(elem,mo_f_name,pt_f_name) {
	var i_value = ""
	var c_value = ""
	var i_len = document.forms["register"].elements[elem].length
		for (var i=0; i < i_len; i++) {
			if (document.forms["register"].elements[elem][i].checked == true) {
				splitstring = document.forms["register"].elements[elem][i].value.split('^')
				i_value = i_value + ", " + splitstring[0]
				// splitstring[1] is just the full name for display on the site
				// splitstring[2] is the papertrail code
				c_value = c_value + ", " + splitstring[2]
				}
			}	
			i_value = i_value.substring(1,i_value.length);
			document.forms["register"].elements[mo_f_name].value = i_value;
			c_value = c_value.substring(1,c_value.length);
			document.forms["register"].elements[pt_f_name].value = c_value;
		}
function separate_listbox(elem,mo_f_name,pt_f_name) {
var i_value = ""
var c_value = ""
splitstring = document.forms["register"].elements[elem].options[document.forms["register"].elements[elem].selectedIndex].value.split('^')
i_value = i_value + ", " + splitstring[0]
// splitstring[0] is just the db value
// splitstring[1] is the papertrail value
c_value = c_value + ", " + splitstring[1]
i_value = i_value.substring(1,i_value.length);
document.forms["register"].elements[mo_f_name].value = i_value;
c_value = c_value.substring(1,c_value.length);
document.forms["register"].elements[pt_f_name].value = c_value;
		}
function showselections(elem) {
	var c_value = ""
	var i_len = document.forms["register"].elements[elem].length
		for (var i=0; i < i_len; i++) {
			if (document.forms["register"].elements[elem][i].checked == true) {
				splitstring = document.forms["register"].elements[elem][i].value.split('^')
				c_value = c_value + "\n >>  " + splitstring[1]
				}
			}	
			c_value = c_value.substring(1,c_value.length);
			if (c_value == "") { c_value = "There are no selected options to show." }
			alert(c_value);
		}
function clearselections(elem,popalert) {
	var c_value = ""
	var clear_flag = false
	var i_len = document.forms["register"].elements[elem].length
		for (var i=0; i < i_len; i++) {
			if (document.forms["register"].elements[elem][i].checked == true) {
				document.forms["register"].elements[elem][i].checked = false
				clear_flag = true
				}
			}	
			if (popalert == true) {
				if (clear_flag == false) { 
					c_value = "There are no selected options to clear."
				 }
				else {
					c_value = "Selected options cleared."
				}
				alert(c_value);
			}
		}
function checkuncheck(elem,i,set) {
// basic check uncheck
		document.forms["register"].elements[elem][i].checked = set
}
function clearrelatedtextfield(elem) {
// clears the related fields which are text input
		document.forms["register"].elements[elem].value = ""
}
function checkset(elem,val,maxlen,f_name) {
// search by field value
	var i_len = document.forms["register"].elements[elem].length;
	for (var i=0; i < i_len; i++) {

		if (document.forms["register"].elements[elem][i].value == val) {
			if (document.forms["register"].elements[elem][i].checked == false) {
				document.forms["register"].elements[elem][i].checked = true	
				checklen(elem,document.forms["register"].elements[elem][i],maxlen,f_name)					
				}
			else {
				document.forms["register"].elements[elem][i].checked = false
				}
			document.forms["register"].elements[elem][i].focus()	
		}
	}
}
function moveset(elem,val,maxlen,f_name) {
	var i_len = document.forms["register"].elements[elem].length
	var change_flag = false
	for (var i=0; i < i_len; i++) {
		if (change_flag != true) {
		if (document.forms["register"].elements[elem][i].checked == true) {
			if (i == i_len-1) 
				{var i_tocheck = 0} 
			else 
				{i_tocheck = i+1}
			document.forms["register"].elements[elem][i_tocheck].checked = true;
			checklen(elem,document.forms["register"].elements[elem][i_tocheck],maxlen,f_name);				
			change_flag = true;
			}
		}
	}
	if (change_flag == false) {
		document.forms["register"].elements[elem][0].checked = true;
		var global_elem = (elem.substring(0,elem.indexOf("^")));
		checklen(global_elem,document.forms["register"].elements[elem][0],maxlen,f_name);
		}
}
