// -------	CLIENT SIDE FORM VALIDATION ROUTINES

var nbsp = 160;    // non-breaking space char
var node_text = 3; // DOM text node-type
emptyString = /^\s*$/
// -----------------------------------------
//                  trim
// Trim leading/trailing whitespace off string
// -----------------------------------------

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '')
};
// -----------------------------------------
//                  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);    
 //   fld.style.background= 'alert.gif';	
  }
  else  
  {  
	dispmessage = message;
//    fld.style.background= 'alert.gif';	
  }
  var elem = document.getElementById(fld);
  elem.firstChild.nodeValue = dispmessage;  
  
  elem.className = msgtype;
};

function combo(vfld,ifld,reqd)
{

  var stat = commonCheck (vfld, ifld, reqd);
  if (stat != proceed) return stat;
  var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
	if (tfld == "NULL") {
		//msg (ifld, "error", "Select a value");
	     vfld.style.backgroundColor = "pink";
		vfld.focus();
		return false;
	}
	else if (tfld != "NULL") {
		msg (ifld, "warn", "");
	    vfld.style.backgroundColor = 'white';
		return true;
	}
	return true;
};

// -----------------------------------------
//            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    (vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
                         reqd)   // true if required
{
  if (!document.getElementById) 
    return true;  // not available on this browser - leave validation to the server
  var elem = document.getElementById(ifld);
  if (!elem.firstChild)
    return true;  // not available on this browser 
  if (elem.firstChild.nodeType != node_text)
    return true;  // ifld is wrong type of node  

  if (emptyString.test(vfld.value)) {
    if (reqd) {
      //msg (ifld, "error", "ERROR: required"); 
	   //ifld.style.backgroundColor = 'blue';
	 // vfld.style.backgroundColor = 'blue';
	  vfld.focus();
      return false;
    }
    else {
     msg (ifld, "warn", "");   // OK
      //vfld.style.backgroundColor = 'green';
	  return true;  
    }
  }
  return proceed;
}
// -----------------------------------------
//            validateNumeric
// Validate if value is numeric no only
// Returns true if so 
// -----------------------------------------
function validateNumeric(vfld,ifld,reqd)
{
	var stat = commonCheck (vfld, ifld, reqd);
	if (stat != proceed && reqd == true)
	{ 
	 	vfld.style.backgroundColor = "pink";
		vfld.focus();
		return stat;
	}
	var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
	var i = 0;

	for (i = 0; i < tfld.length; i++)
		if (tfld.charAt(i) < '0' || tfld.charAt(i) > '9') 
		{
			msg (ifld, "error", "ERROR: not a valid number.");
			 vfld.style.backgroundColor = "pink";
			vfld.focus();
			return false;
		}
		else
			msg (ifld, "warn", "");
			vfld.style.backgroundColor = "white";
	return true;

};
// -----------------------------------------
//            validateDecimal
// Validate if value is decimal no only
// Returns true if so 
// -----------------------------------------
function validateDecimal(vfld,ifld,reqd)
{
	var stat = commonCheck (vfld, ifld, reqd);
	if (stat != proceed && reqd == true)
	{ 
	 	vfld.style.backgroundColor = "pink";
		vfld.focus();
		return stat;
	}
	var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
	var i = 0;

	for (i = 0; i < tfld.length; i++)
		if (tfld.charAt(i) < '0' || tfld.charAt(i) > '9')
		{
      		   if (tfld.charAt(i) != '.') // decimal are ok
		     {
			msg (ifld, "error", "ERROR: not a valid number.");
			 vfld.style.backgroundColor = "pink";
			vfld.focus();
			return false;
		     }
		}
		else
			msg (ifld, "warn", "");
			vfld.style.backgroundColor = "white";
	return true;

};
// -----------------------------------------
//            validatePrice
// Validate if value is numeric no only
// Returns true if so 
// -----------------------------------------
function validatePrice(vfld,ifld,reqd)
{
	var stat = commonCheck (vfld, ifld, reqd);
	if (stat != proceed)
	{ 
		 vfld.style.backgroundColor = "pink";
		return stat;
	}
	var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
	var i = 0;

	for (i = 0; i < tfld.length; i++)
	{
		if (tfld.charAt(i) < '0' || tfld.charAt(i) > '9') 
		{
			msg (ifld, "error", "ERROR: not a valid number.");
			 vfld.style.backgroundColor = "pink";
			vfld.focus();
			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<4) 
	{
		msg (ifld, "error", "ERROR: " + numdigits + " digits - too short");
		 vfld.style.backgroundColor = "pink";
		vfld.focus();
		return false;
  	}
	if (numdigits>10) 
	{
		msg (ifld, "error", "ERROR: " + numdigits + " digits - too long");
		 vfld.style.backgroundColor = "pink";
		vfld.focus();
		return false;
  	}
	msg (ifld, "warn", ""); 
	vfld.style.backgroundColor = "white";
	return true;

};

// -----------------------------------------
//            validatePresent
// Validate if something has been entered
// Returns true if so 
// -----------------------------------------
function validatePresent(vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
						 reqd)
{
  var stat = commonCheck (vfld, ifld, true);
  	if (stat != proceed) 
	{
		vfld.style.backgroundColor = 'pink'; 
		// ifld.style.background = 'alert.gif'; 
 		return stat;
	}
  	else
	{
	//	msg (ifld, "warn", "");
		vfld.style.backgroundColor = 'white';  
		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  (vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
                         reqd)   // true if required
{
  var stat = commonCheck (vfld, ifld, reqd);
  if (stat != proceed) 
  {
	vfld.style.backgroundColor = "pink";
  	return stat;
  }

  var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
  var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/
  if (!email.test(tfld)) {
    	msg (ifld, "error", "ERROR: not a valid e-mail address");
	 	vfld.style.backgroundColor = "pink";
		vfld.focus();
    	return false;
  }

  var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/
  if (!email2.test(tfld)) 
    msg (ifld, "warn", "Unusual e-mail address - check if correct");
  else
    msg (ifld, "warn", "");
	 vfld.style.backgroundColor = "white";
  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  (vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
                         reqd)   // true if required
{
  var stat = commonCheck (vfld, ifld, reqd);
  if (stat != proceed ) 
  {
	  if ( reqd == true)
	  {
	  	vfld.style.backgroundColor = "pink";
		return stat;
	  }
	  else ( reqd == false)
	  {
		vfld.style.backgroundColor = "white";
		return stat;
	  }
  }
	
  var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
  var telnr = /^\+?[0-9 ()-]+[0-9]$/
  if (!telnr.test(tfld)) {
    msg (ifld, "error", "ERROR: Invalid number. digits, space,- and leading + is allowed");
   	vfld.style.backgroundColor = "pink";
	vfld.focus();
    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 (ifld, "error", "ERROR: " + numdigits + " digits - too short");
   	vfld.style.backgroundColor = "pink";
	vfld.focus();
    return false;
  }

  if (numdigits>14)
  {
    msg (ifld, "warn", numdigits + " digits - check if correct");
	vfld.style.backgroundColor = "pink";
  }
  else { 
    if (numdigits<10)
	{
   //   msg (ifld, "warn", "Only " + numdigits + " digits - check if correct");
   // else
      msg (ifld, "warn", "");
  	vfld.style.backgroundColor = "white";
	}
  }
  return true;
};

// -----------------------------------------
// Returns true if the string passed in is a valid money
//  (no alpha characters except a decimal place), 
//   else it displays an error message

function ForceMoney(objField, FieldName)
{
	var strField = new String(objField.value);
	
	if (isWhitespace(strField)) return true;

	var i = 0;

	for (i = 0; i < strField.length; i++)
		if ((strField.charAt(i) < '0' || strField.charAt(i) > '9') && (strField.charAt(i) != '.')) {
			alert(FieldName + " must be a valid numeric entry.  Please do not use commas or dollar signs or any non-numeric symbols.");
			objField.focus();
			return false;
		}
	return true;
};

//	CHECK FILE EXTENSION FOR UPLOADED IMAGES
function fileExtensioncheck(vfld,ifld,reqd)
{
	if (!document.getElementById) 
    	return true;  // not available on this browser - leave validation to the server
	
	var ext = vfld.value;
	if ( reqd == 'true') {
		vfld.style.backgroundColor = 'pink';		
		vfld.focus();
		return false; 
	}
	if ( ext != "")
  	{
		// ver 4.0
		shortName = ext.match(/[^\/\\]+$/);
		splitName = ext.split(".");
		ext = splitName[splitName.length-1];
		ext = ext.toLowerCase();
		
		if( (ext != 'jpg') && (ext != 'jpeg') && (ext != 'gif') && (ext != 'bmp') && (ext != 'png' )  ) 
  		{
    		msg (ifld, "error", "Not an Image file");		
    		vfld.style.backgroundColor = 'pink';		
			vfld.focus();
			return false; 
		}
  		else
    		vfld.style.backgroundColor = 'white';		
			msg (ifld, "warn", "");
			return true; 
	}
	return true;
};