//validation for contact us form

function contactVal(f) {
  
 if (f.firstname.value == null || f.firstname.value == '' || isblank(f.firstname.value)) {
   alert('Please enter a first name.');
   f.firstname.focus();
   return false;
 }

 if (f.lastname.value == null || f.lastname.value == '' || isblank(f.lastname.value)) {
   alert('Please enter a last name.');
   f.lastname.focus();
   return false;
 }
 
 if (f.email.value == null || f.email.value == '' || isblank(f.email.value)) {
   alert('Please enter an email address.');
   f.email.focus();
   return false;
 } else {
  if (checkEmail(f.email.value)) {
    alert(checkEmail(f.email.value));
    f.email.value = "";
    f.email.focus();
    return false;
  }
 }

 if (f.contact_method_id.options[f.contact_method_id.options.selectedIndex].text == 'Phone') {
   if (f.phone.value == null || f.phone.value == '' || isblank(f.phone.value)) {
     alert('You have chosen phone as your preferred contact method.\n\nPlease enter a phone number.');
     f.phone.focus();
     return false;
   }
 }
 
 f.contact_method_text.value = f.contact_method_id.options[f.contact_method_id.options.selectedIndex].text;
 f.contact_source_text.value = f.contact_source_id.options[f.contact_source_id.options.selectedIndex].text;
 
 return true;
 
}

//validation for login form in the publications section

function loginVal(f) {
  
 if (f.username.value == null || f.username.value == '' || isblank(f.username.value)) {
   alert('Please enter your username.');
   f.username.focus();
   return false;
 }

 if (f.password.value == null || f.password.value == '' || isblank(f.password.value)) {
   alert('Please enter your password.');
   f.password.focus();
   return false;
 }  
  
 return true; 
  
}

//validation for registration form in the publications section

function pubRegVal(f) {
 
 pass_entered = false;
 pass_confirmed = false;
 
 if (f.username.value == null || f.username.value == '' || isblank(f.username.value)) {
   alert('Please enter an username.');
   f.username.focus();
   return false;
 } else {
   if (f.username.value.length < 3) {
     alert('Username has to be at least 3 characters long.');
     f.username.focus();
     return false;
   }
 }
 
 if (f.password.value == null || f.password.value == '' || isblank(f.password.value)) {
   alert('Please enter a password.');
   f.password.focus();
   return false;
 } else {
   if (f.password.value.length < 6) {
     alert('Password has to be at least 6 characters long.');
     f.password.focus();
     return false;
   }
   pass_entered = true;
 }
 
 if (f.password_conf.value == null || f.password_conf.value == '' || isblank(f.password_conf.value)) {
   alert('Please re-type the password for confirmation.');
   f.password_conf.focus();
   return false;
 } else {
   pass_confirmed = true;
 } 
 
 if (pass_entered && pass_confirmed) {
  if (f.password.value != f.password_conf.value) {
   alert('Passwords didn\'t match.  Please enter them again.');
   f.password.value = '';
   f.password_conf.value = '';
   f.password.focus();
   return false;    
  }
 }
 
 if (f.firstname.value == null || f.firstname.value == '' || isblank(f.firstname.value)) {
   alert('Please enter a first name.');
   f.firstname.focus();
   return false;
 }

 if (f.lastname.value == null || f.lastname.value == '' || isblank(f.lastname.value)) {
   alert('Please enter a last name.');
   f.lastname.focus();
   return false;
 }
 
 if (f.email.value == null || f.email.value == '' || isblank(f.email.value)) {
   alert('Please enter an email address.');
   f.email.focus();
   return false;
 } else {
  if (checkEmail(f.email.value)) {
    alert(checkEmail(f.email.value));
    f.email.value = "";
    f.email.focus();
    return false;
  }
 }

 return true;
 
}

//validation for updating a profile - publication section

function updateVal(f) {
 
 pass_entered = false;
 pass_confirmed = false;
 
 if (!(f.password.value == null || f.password.value == '' || isblank(f.password.value))) {
   if (f.password.value.length < 6) {
     alert('Password has to be at least 6 characters long.');
     f.password.focus();
     return false;
   }
   pass_entered = true;
   
   if (f.password_conf.value == null || f.password_conf.value == '' || isblank(f.password_conf.value)) {
     alert('Please re-type the password for confirmation.');
     f.password_conf.focus();
     return false;
   } else {
     pass_confirmed = true;
   } 
 
   if (pass_entered && pass_confirmed) {
    if (f.password.value != f.password_conf.value) {
     alert('Passwords didn\'t match.  Please enter them again.');
     f.password.value = '';
     f.password_conf.value = '';
     f.password.focus();
     return false;    
    }
   }   
   
 }
 
 if (f.firstname.value == null || f.firstname.value == '' || isblank(f.firstname.value)) {
   alert('Please enter a first name.');
   f.firstname.focus();
   return false;
 }

 if (f.lastname.value == null || f.lastname.value == '' || isblank(f.lastname.value)) {
   alert('Please enter a last name.');
   f.lastname.focus();
   return false;
 }
 
 if (f.email.value == null || f.email.value == '' || isblank(f.email.value)) {
   alert('Please enter an email address.');
   f.email.focus();
   return false;
 } else {
  if (checkEmail(f.email.value)) {
    alert(checkEmail(f.email.value));
    f.email.value = "";
    f.email.focus();
    return false;
  }
 }

 return true;
 
}

//validate subscription form

function subVal(f) {

 if (f.firstname.value == null || f.firstname.value == '' || isblank(f.firstname.value)) {
   alert('Please enter a first name.');
   f.firstname.focus();
   return false;
 }

 if (f.lastname.value == null || f.lastname.value == '' || isblank(f.lastname.value)) {
   alert('Please enter a last name.');
   f.lastname.focus();
   return false;
 }
 
 if (f.email.value == null || f.email.value == '' || isblank(f.email.value)) {
   alert('Please enter an email address.');
   f.email.focus();
   return false;
 } else {
  if (checkEmail(f.email.value)) {
    alert(checkEmail(f.email.value));
    f.email.value = "";
    f.email.focus();
    return false;
  }
 }
 
 f.contact_type_text.value = f.contact_type_id.options[f.contact_type_id.options.selectedIndex].text;
 f.contact_source_text.value = f.contact_source_id.options[f.contact_source_id.options.selectedIndex].text;
 
 return true;
 
}

//check to see if the field is blank

function isblank(s)
{
	for(var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if((c != ' ') && (c != '\n') && (c != '\t')) return false;
	}
	return true;
}

//checks an email address

function checkEmail (emailStr) {

var error = null;


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) {
	error = "Email address seems incorrect (check @ and .'s)"
	return error
}
var user=matchArray[1]
var domain=matchArray[2]

if (user.match(userPat)==null) {
    error = "The username for the email address doesn't seem to be valid."
    return error
}

var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	       error = "Destination IP address is invalid."
		  return error
	    }
    }
    return error
}

var domainArray=domain.match(domainPat)
if (domainArray==null) {
	error = "The domain name for the email address doesn't seem to be valid."
    return error
}

var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   error = "The email address must end in a three-letter domain, or two letter country."
   return error
}

if (len<2) {
   var errStr="This email address is missing a hostname."
   error = errStr
   return error 
 }

return error
}
