
// VALIDATION -------------------------------------------------------------------------

// run a regular expression against a string, check for match
function regExpExecute(Pattern, StringToSearch) {
  var ret = false;

  if (StringToSearch) {
    var RegExpObj = new RegExp(Pattern,"ig");
    var match = RegExpObj.exec(StringToSearch);
    RegExpObj = null;

    if (match) {
      if (match.length > 0) {
          ret = true;
      }
    } else {
      ret = false;
    }
    match = null;
  }
  return ret;
}

// run a regular expression against a string, replace with other string
function regExpReplace(StringToSearch, findString, replacewith) {
  var ret = StringToSearch;

  if (StringToSearch) {
    var RegExpObj = new RegExp(findString,"ig");
    ret = ret.replace(RegExpObj, replacewith);
    RegExpObj = null;
  }
  return ret;
}

// check if a variable is null or empty
function isBlank(object) {
  
  if (object == null) {
    return true;
  } else if (typeof object == 'undefined') {
    return true;
  } else if (object.length == 0) {
    return true;
  } else if (object == "") {
    return true;
  } else {
    return false;
  }
}

// check if a variable is empty (not defined)
function isEmpty(object) {
  return (typeof object == 'undefined');
}

// check if a variable is null (defined as null)
function isNull(object) {
  return (object == null && (typeof object != 'undefined'));
}

function isDate(str) {
  // 01234567890
  // M/D/YYYY
  // 11/22/2006
  // 11/2/2006
  // 1/2/2006
  if (regExpExecute('^[1]?[0-9]\\/[1-3]?[0-9]\\/[0-9]{4}$', str) == false) {
    return false;
  }
  
  // split the str
  var array = str.split("/")

  // get values of passed date
  var month = parseInt(array[0]) - 1;
  var day = parseInt(array[1]);
  var year = parseInt(array[2]);

  // create date with those values
  var d = new Date();
  d.setFullYear(year, month, day);

  // now get values from created date
  var year2 = d.getFullYear();
  var month2 = d.getMonth();
  var day2 = d.getDate();
  
  //alert("date1: " + (month + 1) + "/"  + day + "/" + year + "\ndate2: " + (month2 + 1) + "/" + day2 + "/" + year2);
  
  // check that they are the same
  if (year != year2 || month != month2 || day != day2) {
    return false;
  }

  // then string date should be an actual date
  return true;
}

function Month(str) {
  // 01234567890
  // M/D/YYYY
  if (isDate(str) == false) {
    return null;
  }
  var array = str.split("/")
  return parseInt(array[0]);
}

function Day(str) {
  // 01234567890
  // M/D/YYYY
  if (isDate(str) == false) {
    return null;
  }
  var array = str.split("/")
  return parseInt(array[1]);
}

function Year(str) {
  // 01234567890
  // M/D/YYYY
  if (isDate(str) == false) {
    return null;
  }
  var array = str.split("/")
  return parseInt(array[2]);
}

// return true if dates are in chronological order
// returns if dates are the same
function areDatesChrono(startDate, endDate) {
  ret = false;
  if (isDate(startDate) && isDate(endDate)) {
    var startYear = Year(startDate);
    var startMonth = Month(startDate);
    var startDay = Day(startDate);
    
    var endYear = Year(endDate);
    var endMonth = Month(endDate);
    var endDay = Day(endDate);

    if ((startYear > endYear) ||
      (startYear == endYear && startMonth > endMonth) ||
      (startYear == endYear && startMonth == endMonth && startDay > endDay)) {
      
      ret = false;
    } else {    
      ret = true;
    }
  }
  return ret;
}

function isDigits(element) {
  return regExpExecute('^[0-9]+$', element);
}

function isLetters(element) {
  return regExpExecute('^[A-z\\s]+$', element);
}

function isAlphaNumeric(element) {
  return regExpExecute('^[A-z0-9\\s]+$', element);
}

function isLength(element, min, max) {
  var length = element.length;
  if ((length < min) || (length > max)) {
    return false;
  } else {
    return true;
  }
}

function isPostalCode(element) {
  // lnl nln, LNL NLN
  return regExpExecute('^[A-Za-z]\\d[A-Za-z]\\s\\d[A-Za-z]\\d$', element);
  //return checkLength(element, 1, 20);
}

function isNumeric(element) {
  // dollar sign and commas NOT allowed
  return regExpExecute('^[0-9]{1,9}(\\.[0-9]{2})?$', element);
}

function isPrice(element) {
  // dollar sign and commas allowed
  return regExpExecute('^[$]?([0-9]+|[0-9]{1,3}([,]?[0-9]{3})*)(\.[0-9]{0,2})?$', element);
}

function isPhone(element) {
  // (123) 123-1234 ext 1234
  // extension optional
  return regExpExecute('^\\([0-9]{3}\\)\\s[0-9]{3}\\-[0-9]{4}(\\sext\\s[0-9]{4})?$', element);
}

function isEmail(element) {
  var pattern = '^[A-z0-9\\._-]+@[A-z0-9][A-z0-9-]*(\\.[A-z0-9_-]+)*\\.([A-z]{2,6})$';
  return regExpExecute(pattern, element);
}

function isDomain(element) {
  // optional: http:// and trailing /
  return regExpExecute("^(http:\\/\\/)?([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}(\\/)?$", element);
}

function isSpamLink(element) {
  if (regExpExecute("www", element) ||
      regExpExecute("http", element) ||
      regExpExecute("<img", element) ||
      regExpExecute("url", element) ||
      regExpExecute("href", element)) {
    return true; 
  } else {
    return false;
  }
}

function isBrowser(strName) {
  var useragent = navigator.userAgent;
  useragent = useragent.toLowerCase();
  strName = strName.toLowerCase();

  if (useragent.indexOf(strName) >= 0) {
    isBrowser = true;
  } else {
    isBrowser = false;
  }
}
