// EMK VALIDATOR v2.05

// EMK VALIDATOR now uses more up-to-date and efficent methods to validate forms - Craig

// DO NOT EDIT -- All validation routines go into validation.js

// for forms that do not require validating
function EMKnocheck(n){
	return true
}

// Remove single and double quotes from a string
function cleanString(formnum,fieldname){
	var val 	= eval("document.forms[formnum]."+fieldname+".value");
	var newVal	= val.replace(/[\n]+/g,'\\n');				// The eval() was crashing because it was taking LITERAL new-lines. This replaces newlines with an escaped char, this can then be parsed by the eval().
	newVal		= newVal.replace(/[\r]+/g,'\\r');
	newVal		= newVal.replace(/\'/g,"");
	newVal 		= newVal.replace(/\"/g,'');
	val		= eval("document.forms[formnum]."+fieldname+".value='" + newVal +"'");
}

// Remove all blanks from a string
function blankout(strname){
  var regEx = new RegExp(/\s/g);
  strname = strname.replace(regEx,'');
  return strname ;
}

// Process telephone number for checking
function formatTel(text){
	var regEx = new RegExp(/\(/g);
  	text = text.replace(regEx,'');
	var regEx = new RegExp(/\)/g);
  	text = text.replace(regEx,'');
	var regEx = new RegExp(/\-/g);
  	text = text.replace(regEx,'');
	text = blankout(text);
	return text;
}

// Validate telephone/fax number
function vt(formnum,fieldname,needed,inputtext) {
  var vble = eval("document.forms[formnum]."+fieldname+".value");
  if (needed.toUpperCase() == "N" && vble == ""){ ; // Allow blank telephone/fax number
  	t_or_f = true;
  }else{
	  var regEx = new RegExp(/^((\+)|0)+([0-9]{10,15})+$/);
	  var t_or_f = true;
	  vble = formatTel(vble);
	  if(!regEx.exec(vble)){
	  	t_or_f = false;
		alert(inputtext + ' is not a valid phone number.');
	  }
  }
  return t_or_f ;
}

// Validate e-mail address
function ve(formnum,fieldname,needed) {
  var t_or_f = true;
  var val    = eval("document.forms[formnum]."+fieldname+".value");
  var regEx  = new RegExp(/,/g);
  var newVal = val.replace(regEx,'.');
  var val    = eval("document.forms[formnum]."+fieldname+'.value="' + newVal +'"');
  var email  = eval("document.forms[formnum]."+fieldname+".value");
  
  email = blankout(email);
  email = email.toLowerCase();
  
  if(needed.toUpperCase() == 'N' && email == ''){
  	t_or_f = true;
  }else{
  	 var regEx  = new RegExp(/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+\.[a-z\.]{2,6}$/);
	 if(!regEx.exec(email)){
	  	t_or_f = false;
		alert(email + ' is and invalid email address.');
	 }
  }
  return t_or_f;
}

// Ensure string has minimum length
function vl(formnum,fieldname,minlength,inputtext) {
  var valid = true;
  var vble = eval("document.forms[formnum]."+fieldname+".value");
//window.alert("Value is >"+vble+"<   Length is >"+vble.length+"<");
  
  cleanString(formnum,fieldname);
  
  if(vble.length < minlength) {
    valid=false;
    var char1 = (minlength == 1) ? " character" : " characters";
    window.alert(inputtext+" must be at least "+minlength+char1+" long");
  }
  if(!valid) val = eval("document.forms[formnum]."+fieldname+".focus()");
  return valid;
}

// Ensure string does not exceed maximum length
function vm(formnum,fieldname,maxlength,inputtext) {
  var t_or_f = true ;
  var vble = eval("document.forms[formnum]."+fieldname+".value");

  cleanString(formnum,fieldname);
  
  if(vble.length > maxlength){
    t_or_f=false;
    var char1 = (maxlength == 1) ? " character" : " characters";
    window.alert(inputtext+" must be at no more than "+maxlength+char1+" long");
  }
  if(!t_or_f) val = eval("document.forms[formnum]."+fieldname+".focus()");
  return t_or_f ;
}

// Ensure variable has minimum value
function vv(formnum,fieldname,minvalue,inputtext){
  var t_or_f = true;
  var vble  = eval("document.forms[formnum]."+fieldname+".value");

  if(vble < minvalue){
    t_or_f=false;
    window.alert(inputtext+" must be at least "+minvalue);
  }
  if(!t_or_f) val = eval("document.forms[formnum]."+fieldname+".focus()");
  return t_or_f;
}


// Validate drop-down list
function vd(formnum,fieldname,defaultval,inputtext){
  var t_or_f = true;
  var vble  = eval("document.forms[formnum]."+fieldname+".value");

  if(vble == defaultval){
    t_or_f=false;
    window.alert("Please choose an option from the "+inputtext+" list");
  }
  return t_or_f;
}
  
// Validate radio buttons
function vr(formnum,fieldname,buttons,inputtext){
  var t_or_f = false ;

  for(var i=0 ; i<buttons ; i++){
    var vble  = eval("document.forms[formnum]."+fieldname+"["+i+"].checked");
    if(vble) t_or_f = true;
  }
  
  if(!t_or_f) window.alert("Please check one of the "+inputtext+" buttons");
  
  return t_or_f;
}

// Validate checkboxes
function vc(formnum,fieldname,totboxes,minboxes,maxboxes,inputtext){
  var check = 0;

  for(var i=0;i<totboxes;i++){
    var vble  = eval("document.forms[formnum]."+fieldname+"["+i+"].checked");
    if(vble) check++;
//window.alert("Value is >"+vble+"<") ;
  }
  if(check<minboxes) window.alert("Please check at least "+minboxes+" of the "+inputtext+" boxes");
  if(check>maxboxes) window.alert("Please check no more than "+maxboxes+" of the "+inputtext+" boxes");
  valid = (check<minboxes || check>maxboxes) ? false : true;
  return valid ;
}

// Confirm Web Site address begins with 'www.' or 'http://www.'
function vx(formnum,fieldname,needed,inputtext) {
  var valid = true;

  var vble = eval("document.forms[formnum]."+fieldname+".value");
  vble = blankout(vble);
  vble = vble.toLowerCase();
  if(needed.toUpperCase() == "N" && vble == "") return true;  // Allow blank web site address

  var valid = (vble.substring(0,4)  == "www.") ? true : false;
  var valid = (vble.substring(0,11) == "http://www.") ? true : valid;
  if(!valid){
    window.alert("please enter a valid "+inputtext);
    val = eval("document.forms[formnum]."+fieldname+".focus()");
  }
  return valid;
}

// Validate and format postcode

// 22/01/10 - We needed to add the option of entering a non-uk postcode.
// 	      To do this we are adding a checkbox to all postcode fields.
//	      Stick the name of the checkbox element in the last variable.

function vp(formnum,fieldname,needed,inputtext,checkEmelent) {
  var t_or_f = true;
  var frm1 = eval("document.forms[formnum]."+fieldname);
  var frm2 = eval("document.forms[formnum]."+fieldname);
  var check = eval('document.forms[formnum].' + checkEmelent + '.checked');
  frm1.value = blankout(eval("document.forms[formnum]."+fieldname+".value"));
  frm2.value = eval("document.forms[formnum]."+fieldname+".value").toUpperCase();
  var pcode = eval("document.forms[formnum]."+fieldname+".value");
  if (needed.toUpperCase() == "N" && pcode == "") return true;  // Allow blank postcode
  // Shall we check for a UK postcode or just length?
  if(check){
	  var regEx  = new RegExp(/^[A-Za-z]{1,2}[0-9A-Za-z]{1,2}[ ]?[0-9]{0,1}[A-Za-z]{2}$/);
	  if(!regEx.exec(pcode)){
	  	t_or_f = false;
		alert('You have not entered a valid UK postcode.');
	  }
  }else{
  	  if(pcode.length < 5){
	  	t_or_f = false;
		alert('Please enter your area code.');
	  }
  }
  return t_or_f;
}

