<!--

// validates that the field string value has one or more characters in it
function isNotEmpty(elem) {

  var str = elem.value;
  var label;
  var errtxt;

  if (str == null || str.length == 0) {
    label = elem.title;
    if (label == null || label.length == 0) {
      errtxt = "Please fill in the required field.";
    }
    else {
      errtxt = label + " is a required field.";
    }
    alert(errtxt);
    return false;
  }
  else {
    return true;
  }

}

// validates that the entry is a non-negative integer
function isNaturalNumber(elem) {

  var str = elem.value;
  var re = /^\d+$/;
  var label;
  var errtxt;

  str = str.toString();
  if (!str.match(re)) {
    label = elem.title;
    if (label == null || label.length == 0) {
      errtxt = "Enter only non-negative integers into the field.";
    }
    else {
      errtxt = "Enter only non-negative integers into " + label + ".";
    }
    alert(errtxt);
    return false;
  }
  return true;

}

// validates that the entry is a positive or negative number
function isNumber(elem) {

  var str = elem.value;
  var re = /^[-]?\d*\.?\d*$/;
  var label;
  var errtxt;

  // make sure value hasn't cast to a number data type
  str = str.toString();
  if (!str.match(re)) {
    label = elem.title;
    if (label == null || label.length == 0) {
      errtxt = "Enter only numbers into the field.";
    }
    else {
      errtxt = "Enter only numbers into " + label + ".";
    }
    alert(errtxt);
    return false;
  }
  return true;

}

// validates that the entry is a positive or negative number
function isDecimal(elem, maxPlaces, allowNegative) {

  var str = elem.value;
  var re = /^([-])?(\d*)\.?(\d*)$/;
  var label;
  var errtxt;

  // make sure value hasn't cast to a number data type
  str = str.toString();
  var m = re.exec(str);
  label = elem.title;
  if (m == null) {
    if (label == null || label.length == 0) {
      errtxt = "Enter only numbers into the field.";
    }
    else {
      errtxt = "Enter only numbers into " + label + ".";
    }
    alert(errtxt);
    return false;
  }
  if (m[1] == "-" && !allowNegative) {
    if (label == null || label.length == 0) {
      errtxt = "Field cannot be negative.";
    }
    else {
      errtxt = label + " cannot be negative.";
    }
    alert(errtxt);
    return false;
  }
  if (m.length > 3 && m[3].length > maxPlaces) {
    alert("Too many places after decimal in " + get_label(elem) + ".");
    return false;
  }
  return true;

}

// validates that the entry is formatted as an email address
function isEMailAddr(elem) {

  var str = elem.value;
  var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;

  if (!str.match(re)) {
    var label = elem.title;
    if (label == null || label.length == 0) {
      label = "field";
    }
    alert("Check format of " + label + ".");
    return false;
  }
  return true;

}

/**
 * DHTML date validation script for dd/mm/yyyy. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */

function isInteger(s){
  var i;
  for (i = 0; i < s.length; i++){   
    // Check that current character is number.
    var c = s.charAt(i);
    if (((c < "0") || (c > "9"))) return false;
  }
  // All characters are numbers.
  return true;
}

function stripCharsInBag(s, bag){
  var i;
  var returnString = "";
  // Search through string's characters one by one.
  // If character is not in bag, append to returnString.
  for (i = 0; i < s.length; i++){   
    var c = s.charAt(i);
    if (bag.indexOf(c) == -1) returnString += c;
  }
  return returnString;
}

function daysInFebruary (year){
  // February has 29 days in any year evenly divisible by four,
  // EXCEPT for centurial years which are not also divisible by 400.
  return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function DaysArray(n) {
  for (var i = 1; i <= n; i++) {
    this[i] = 31;
    if (i==4 || i==6 || i==9 || i==11) { this[i] = 30; }
    if (i==2) { this[i] = 29; }
  } 
  return this;
}

function isDate(elem, dispAlert){

  var str = elem.value;

  // Declaring valid date character, minimum year and maximum year
  var dtSep = '/';
  var minYear=1900;
  var maxYear=2100;

  var daysInMonth = DaysArray(12);
  var pos1 = str.indexOf(dtSep);
  var pos2 = str.indexOf(dtSep,pos1+1);
  var strDay = str.substring(0,pos1);
  var strMonth = str.substring(pos1+1,pos2);
  var strYear = str.substring(pos2+1);
  strYr=strYear;
  if (strDay.charAt(0)=="0" && strDay.length>1) strDay = strDay.substring(1);
  if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth = strMonth.substring(1);
  for (var i = 1; i <= 3; i++) {
    if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1);
  }
  month=parseInt(strMonth);
  day=parseInt(strDay);
  year=parseInt(strYr);
  if (pos1==-1 || pos2==-1) {
    if (dispAlert) alert("The date format should be : dd/mm/yyyy");
    return false;
  }
  if (strMonth.length<1 || month<1 || month>12) {
    if (dispAlert) alert("Please enter a valid month");
    return false;
  }
  if (strDay.length<1 || day<1 || day>31 ||
      (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]) {
    if (dispAlert) alert("Please enter a valid day");
    return false;
  }
  if (strYear.length != 4 || year==0 || year<minYear || year>maxYear) {
    if (dispAlert) alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear);
    return false;
  }
  if (str.indexOf(dtSep,pos2+1)!=-1 ||
      isInteger(stripCharsInBag(str, dtSep))==false) {
    if (dispAlert) alert("Please enter a valid date");
    return false;
  }
  return true;
}

function get_label(elem) {
  var label = elem.title;
  if (label == null || label.length == 0) {
    label = "field";
  }
  return label;
}

function isEmpty(elem) {

  var str = elem.value;

  return (str == null || str.length == 0);

}

// -->
