// -------	CLIENT SIDE FORM VALIDATION ROUTINES

var nbsp = 160;    // non-breaking space char
var node_text = 3; // DOM text node-type
emptyString = /^\s*$/
// -----------------------------------------
//                  trim
// -----------------------------------------
function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '')
};
// -----------------------------------------
// Display warn/error message in HTML element
// -----------------------------------------
function msg(fld,     // id of element to display message in
             msgtype, // class to give element ("warn" or "error")
             message) // string to display
{
  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;
};

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") {
	     vfld.style.backgroundColor = "#FCE0E5";
		vfld.focus();
		return false;
	}
	else if (tfld != "NULL") {
		msg (ifld, "warn", "");
	    vfld.style.backgroundColor = 'white';
		return true;
	}
	return true;
};

// -----------------------------------------
//            commonCheck
// -----------------------------------------
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) {
	  vfld.focus();
      return false;
    }
    else {
     msg (ifld, "warn", "");   // OK
	  return true;  
    }
  }
  return proceed;
}
// -----------------------------------------
//            validateNumeric
// -----------------------------------------
function validateNumeric(vfld,ifld,reqd)
{
	var stat = commonCheck (vfld, ifld, reqd);
	if (stat != proceed && reqd == true)
	{ 
	 	vfld.style.backgroundColor = "#FCE0E5";
		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 = "#FCE0E5";
			vfld.focus();
			return false;
		}
		else
			msg (ifld, "warn", "");
			vfld.style.backgroundColor = "white";
	return true;

};
// -----------------------------------------
//            validateDecimal
// -----------------------------------------
function validateDecimal(vfld,ifld,reqd)
{
	var stat = commonCheck (vfld, ifld, reqd);
	if (stat != proceed && reqd == true)
	{ 
	 	vfld.style.backgroundColor = "#FCE0E5";
		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 = "#FCE0E5";
			vfld.focus();
			return false;
		     }
		}
		else
			msg (ifld, "warn", "");
			vfld.style.backgroundColor = "white";
	return true;

};
// -----------------------------------------
//            validatePrice
// -----------------------------------------
function validatePrice(vfld,ifld,reqd)
{
	var stat = commonCheck (vfld, ifld, reqd);
	if (stat != proceed)
	{ 
		 vfld.style.backgroundColor = "#FCE0E5";
		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 = "#FCE0E5";
			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 = "#FCE0E5";
		vfld.focus();
		return false;
  	}
	if (numdigits>10) 
	{
		msg (ifld, "error", "ERROR: " + numdigits + " digits - too long");
		 vfld.style.backgroundColor = "#FCE0E5";
		vfld.focus();
		return false;
  	}
	msg (ifld, "warn", ""); 
	vfld.style.backgroundColor = "white";
	return true;

};
// -----------------------------------------
//            validatePresent
// -----------------------------------------
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 = '#FCE0E5'; 
 		return stat;
	}
  	else
	{
		vfld.style.backgroundColor = 'white';  
		return true;
	}
};

// -----------------------------------------
//               validateEmail
// -----------------------------------------
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 = "#FCE0E5";
  	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 = "#FCE0E5";
		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
// -----------------------------------------
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 = "#FCE0E5";
		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 = "#FCE0E5";
	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 = "#FCE0E5";
	vfld.focus();
    return false;
  }

  if (numdigits>14)
  {
    msg (ifld, "warn", numdigits + " digits - check if correct");
	vfld.style.backgroundColor = "#FCE0E5";
  }
  else { 
    if (numdigits<10)
	{
      msg (ifld, "warn", "");
  	vfld.style.backgroundColor = "white";
	}
  }
  return true;
};

// -----------------------------------------
//  ver 7.2 : SMS ALERT-1 : validate MOBILE NUMBER
// -----------------------------------------
function validateMobileNumber  (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 = "#FCE0E5";
		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]$/
//var telnr = /^[0-9]{12}$/
//  var telnr = /^\+?[0-9 ()-]+[0-9]$/
  if (!telnr.test(tfld)) {
    msg (ifld, "error", "ERROR: Invalid number. Only digits are allowed.");
   	vfld.style.backgroundColor = "#FCE0E5";
	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<10) {
    msg (ifld, "error", "ERROR: " + numdigits + " digits - too short");
   	vfld.style.backgroundColor = "#FCE0E5";
	vfld.focus();
    return false;
  }

  if (numdigits>11)
  {
    msg (ifld, "warn", numdigits + " digits - check if correct");
	vfld.style.backgroundColor = "#FCE0E5";
  }
  else { 
    if (numdigits<10)
	{
      	msg (ifld, "warn", "");
  		vfld.style.backgroundColor = "white";
	}
	else {
      	msg (ifld, "warn", "");
  		vfld.style.backgroundColor = "white";	
	}
  }
  return true;
  
};

// -----------------------------------------
// Returns true if the string passed in is a valid money

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 = '#FCE0E5';		
		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 = '#FCE0E5';		
			vfld.focus();
			return false; 
		}
  		else
    		vfld.style.backgroundColor = 'white';		
			msg (ifld, "warn", "");
			return true; 
	}
	return true;
};
