// ----------------------------------------------------------------------// Javascript form validation routines.// Author: Stephen Poley//// Simple routines to quickly pick up obvious typos.// All validation routines return true if executed by an older browser:// in this case validation must be left to the server.//// Update Jun 2005: discovered that reason IE wasn't setting focus was// due to an IE timing bug. Added 0.1 sec delay to fix.//// Update Oct 2005: minor tidy-up: unused parameter removed//// Update Jun 2006: minor improvements to variable names and layout// ----------------------------------------------------------------------var nbsp = 160;		// non-breaking space charvar node_text = 3;	// DOM text node-typevar emptyString = /^\s*$/ ;var global_valfield;	// retain valfield for timer thread  function validateOnSubmit() {    var elem;	var emailneeded=0;	var passwordneeded=0;    var errs=0;    // execute all element validations in reverse order, so focus gets    // set to the first one in error.    //if (!validateTelnr  (document.forms.demo.telnr, 'inf_telnr', true)) errs += 1;     //if (!validateAge    (document.forms.demo.age,   'inf_age',  false)) errs += 1;     if (!validateEmail  (document.forms.demo.email, 'inf_email', true)) {	errs += 1; 	emailneeded=1;	}myOption = -1;for (i=document.forms.demo.rdoNo.length-1; i > -1; i--) {if (document.forms.demo.rdoNo[i].checked) {myOption = i; i = -1;}}//alert("You selected button number " + myOption+ " which has a value of "+ document.forms.demo.rdoNo[myOption].value);//alert (myOption+" "+errs+" "+passwordneeded+" "+emailneeded);					if (myOption==1){    if (!validatePresent(document.forms.demo.password,  'inf_password')) {	errs += 1; 	passwordneeded=1;}}//alert (myOption+" "+errs+" "+passwordneeded+" "+emailneeded);    if (errs>1)  alert('Correct email and a password needed before submitting');    if (errs==1) {	if (passwordneeded)	 alert('Password needed before submitting');	if (emailneeded)	alert('Correct email needed before submitting');	}    return (errs==0);  };    // --------------------------------------------//                  trim// Trim leading/trailing whitespace off string// --------------------------------------------function trim(str){  return str.replace(/^\s+|\s+$/g, '');}// --------------------------------------------//                  setfocus// Delayed focus setting to get around IE bug// --------------------------------------------function setFocusDelayed(){  global_valfield.focus();}function setfocus(valfield){  // save valfield in global variable so value retained when routine exits  global_valfield = valfield;  setTimeout( 'setFocusDelayed()', 100 );}// --------------------------------------------//                  msg// Display warn/error message in HTML element.// commonCheck routine must have previously been called// --------------------------------------------function msg(fld,     // id of element to display message in             msgtype, // class to give element ("warn" or "error")             message) // string to display{  // setting an empty string can give problems if later set to a   // non-empty string, so ensure a space present. (For Mozilla and Opera one could   // simply use a space, but IE demands something more, like a non-breaking space.)  var dispmessage;  if (emptyString.test(message))     dispmessage = String.fromCharCode(nbsp);      else      dispmessage = message;  var elem = document.getElementById(fld);  elem.firstChild.nodeValue = dispmessage;      elem.className = msgtype;   // set the CSS class to adjust appearance of message}// --------------------------------------------//            commonCheck// Common code for all validation routines to:// (a) check for older / less-equipped browsers// (b) check if empty fields are required// Returns true (validation passed), //         false (validation failed) or //         proceed (don't know yet)// --------------------------------------------var proceed = 2;  function commonCheck    (valfield,   // element to be validated                         infofield,  // id of element to receive info/error msg                         required)   // true if required{  if (!document.getElementById)     return true;  // not available on this browser - leave validation to the server  var elem = document.getElementById(infofield);  if (!elem.firstChild) return true;  // not available on this browser   if (elem.firstChild.nodeType != node_text) return true;  // infofield is wrong type of node    if (emptyString.test(valfield.value)) {    if (required) {      msg (infofield, "error", "ERROR: required");        setfocus(valfield);      return false;    }    else {      msg (infofield, "warn", "");   // OK      return true;      }  }  return proceed;}// --------------------------------------------//            validatePresent// Validate if something has been entered// Returns true if so // --------------------------------------------function validatePresent(valfield,   // element to be validated                         infofield ) // id of element to receive info/error msg{  var stat = commonCheck (valfield, infofield, true);  if (stat != proceed) return stat;  msg (infofield, "warn", "");    return true;}// --------------------------------------------//               validateEmail// Validate if e-mail address// Returns true if so (and also if could not be executed because of old browser)// --------------------------------------------function validateEmail  (valfield,   // element to be validated                         infofield,  // id of element to receive info/error msg                         required)   // true if required{  var stat = commonCheck (valfield, infofield, required);  if (stat != proceed) return stat;  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off  var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/  ;  if (!email.test(tfld)) {    msg (infofield, "error", "ERROR: not a valid e-mail address");    setfocus(valfield);    return false;  }  var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/  ;  if (!email2.test(tfld))     msg (infofield, "warn", "Unusual e-mail address - check if correct");  else    msg (infofield, "warn", "");  return true;}// --------------------------------------------//            validateTelnr// Validate telephone number// Returns true if so (and also if could not be executed because of old browser)// Permits spaces, hyphens, brackets and leading +// --------------------------------------------function validateTelnr  (valfield,   // element to be validated                         infofield,  // id of element to receive info/error msg                         required)   // true if required{  var stat = commonCheck (valfield, infofield, required);  if (stat != proceed) return stat;  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off  var telnr = /^\+?[0-9 ()-]+[0-9]$/  ;  if (!telnr.test(tfld)) {    msg (infofield, "error", "ERROR: not a valid telephone number. Characters permitted are digits, space ()- and leading +");    setfocus(valfield);    return false;  }  var numdigits = 0;  for (var j=0; j<tfld.length; j++)    if (tfld.charAt(j)>='0' && tfld.charAt(j)<='9') numdigits++;  if (numdigits<6) {    msg (infofield, "error", "ERROR: " + numdigits + " digits - too short");    setfocus(valfield);    return false;  }  if (numdigits>14)    msg (infofield, "warn", numdigits + " digits - check if correct");  else {     if (numdigits<10)      msg (infofield, "warn", "Only " + numdigits + " digits - check if correct");    else      msg (infofield, "warn", "");  }  return true;}// --------------------------------------------//             validateAge// Validate person's age// Returns true if OK // --------------------------------------------function validateAge    (valfield,   // element to be validated                         infofield,  // id of element to receive info/error msg                         required)   // true if required{  var stat = commonCheck (valfield, infofield, required);  if (stat != proceed) return stat;  var tfld = trim(valfield.value);  var ageRE = /^[0-9]{1,3}$/  if (!ageRE.test(tfld)) {    msg (infofield, "error", "ERROR: not a valid age");    setfocus(valfield);    return false;  }  if (tfld>=200) {    msg (infofield, "error", "ERROR: not a valid age");    setfocus(valfield);    return false;  }  if (tfld>110) msg (infofield, "warn", "Older than 110: check correct");  else {    if (tfld<7) msg (infofield, "warn", "Bit young for this, aren't you?");    else        msg (infofield, "warn", "");  }  return true;}function hideMe(){  var divEnlarge = document.getElementById('Enlarge');  divEnlarge.style.visibility="hidden";}function showMe(targetPage,sender){  _targetPage = targetPage;    var email = document.getElementById('ctl00_login_txtEmail');  var divEnlarge = document.getElementById('Enlarge');  divEnlarge.style.pixelTop = f_scrollTop() + 50;  divEnlarge.style.pixelLeft = f_scrollLeft() + 50;  divEnlarge.style.visibility="visible";  email.focus();  }function f_clientWidth() {	return f_filterResults (		window.innerWidth ? window.innerWidth : 0,		document.documentElement ? document.documentElement.clientWidth : 0,		document.body ? document.body.clientWidth : 0	);}function f_clientHeight() {	return f_filterResults (		window.innerHeight ? window.innerHeight : 0,		document.documentElement ? document.documentElement.clientHeight : 0,		document.body ? document.body.clientHeight : 0	);}function f_scrollLeft() {	return f_filterResults (		window.pageXOffset ? window.pageXOffset : 0,		document.documentElement ? document.documentElement.scrollLeft : 0,		document.body ? document.body.scrollLeft : 0	);}function f_scrollTop() {	return f_filterResults (		window.pageYOffset ? window.pageYOffset : 0,		document.documentElement ? document.documentElement.scrollTop : 0,		document.body ? document.body.scrollTop : 0	);}function f_filterResults(n_win, n_docel, n_body) {	var n_result = n_win ? n_win : 0;	if (n_docel && (!n_result || (n_result > n_docel)))		n_result = n_docel;	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;}
