
/***************************************************************
	File: 						myValidate.js
  Author:           Quoi Nguyen
  Creation Date:    April 22, 2005
  Last Modified:    Oct 5, 2005
  Description:			library of validation functions using javascript regular expressions.
***************************************************************/

function isDigit( strValue ) { 
	//return true if empty
	//if(isEmpty(strValue)==false) return true;
	//var objRegExp = /\d{1,}/;
	//var objRegExp = /[\D]/g
	//return objRegExp.test(strValue);	
	var objRegExp = /(^-?\d*$)/;
  //check for numeric characters
  return objRegExp.test(strValue);
  
}

function isLetter( strValue ) { 
	//return true if empty
	//if(isEmpty(strValue)==false) return true;
	//var objRegExp = /[a-zA-Z]{1,}/;
	//var objRegExp = /[^a-zA-Z]/g
	var objRegExp = /(^[a-zA-Z]*$)/;
	return objRegExp.test(strValue);
}

//Validates that a string is not all blank (whitespace) characters.

function isEmpty(str){
	str = str.replace(/^\s*|\s*$/g,"");
  return (str == null) || (str.length == 0);
}

function isAlpha(str){
  var re = /[^a-zA-Z]/g
    if (re.test(str)) return false;
  return true;
}

function isNumeric(str){
  var re = /[\D]/g
    if (re.test(str)) return false;
  return true;
}

//Remove whitespace
function RemoveSpace( strValue ) { 
  return strValue.replace(" ", "");
}

//Validates that a string contains a valid email pattern.
//firstname.lastname@shelby-sheriff.org, username@gmail.com, etc.
function validateEmail ( strValue ) {
 	//var objRegExp = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/;	
 	//var objRegExp = ^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$;
 	var objRegExp = /^([a-zA-Z0-9.\.|\-|_])*@([a-zA-Z0-9.\.|\-|_])+(\.[a-zA-Z0-9_-]{2,4})+$/;
 	return objRegExp.test(strValue); 	
}

//Validates that a string contains valid US phone pattern.
//Ex. (999) 999-9999 or (999)999-9999 or 999-9999
function validateUSPhone( strValue ) {
  var objRegExp  = /^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/;
  return objRegExp.test(strValue);
}

//Validates that a string contains only valid numbers.
function  validateNumeric( strValue ) {
  var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
  //check for numeric characters
  return objRegExp.test(strValue);
}

//Validates that a string contains only countring numbers.
function  validateCoutingNumber( strValue ) {
  var objRegExp  =  /(^-?\d*$)/;
  //check for numeric characters
  return objRegExp.test(strValue);
}

//Validates time 
function validateTime( strValue ) {
	strValue = strValue.replace(" ", "");
  var objRegExp = /^\d{1,2}[0-9]*:(\d{1,2}[0-9])+([a-zA-Z]{2})$/;

 	if(!objRegExp.test(strValue))
    return false;
  //Hour <= 12
  //Min <= 59
  var H = strValue.substring(0,2) //find HH
  var M = strValue.substring(3,5) //find MM
  if(H > 12 || M > 60) return false;   
  
  return true;
}

function USDateFormat( strValue ) {
	//var obj = /^(0[1-9]{1}|1[0-2]{1})\/((0[1-9]{1})|(1\d{1})|(2\d{1})|(3[0-1]{1}))\/(((19)[1-9]\d{1})|2\d{3})$/;
	var obj = /^(\d{1}|\d{2})\-(\d{1}|\d{2})\-\d{4}$/;
	return obj.test(strValue);
}

function validateUSDate( str ) {
	
	var obj = /^(0[1-9]{1}|1[0-2]{1})\/((0[1-9]{1})|(1\d{1})|(2\d{1})|(3[0-1]{1}))\/(((19)[1-9]\d{1})|2\d{3})$/;
	
	if(obj.test(str)) {
		
		var aDate = str.split("/"); //split date into month, day, year    
    var M = parseFloat(aDate[0]);
    var D = parseFloat(aDate[1]);
    var Y = parseFloat(aDate[2]);
    
    var aLookup = {'01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,'08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31};

    if(M == 2) {
			if( ((Y % 4 == 0 && D <= 29) || (Y % 4 != 0 && D <=28)) && D !=0) {
          return true;
      }
		}
    else if(aLookup[aDate[0]] != null) {    	
      if(D <= aLookup[aDate[0]] && D != 0) {      	
        return true; //found in lookup table, good date
      }
    }
  }
  return false;
} //end function


//mm/dd/yyyy
function NovalidateUSDate( str ) {
	//var obj = /^(0[1-9]{1}|1[0-2]{1})\/((([0-2]{1})\d{1})|(3[0-1]{1}))\/(((19)[1-9]\d{1})|2\d{3})$/;
	var obj = /^(0[1-9]{1}|1[0-2]{1})\/((0[1-9]{1})|(1\d{1})|(2\d{1})|(3[0-1]{1}))\/(((19)[1-9]\d{1})|2\d{3})$/;
	//var obj = /^(\d{2}\/\d{2}\/\d{4})$/;
	if(obj.test(str)) {		
		/*var M = parseFloat(str.substring(0, str.indexOf("/")));
		var D = parseFloat(str.substring(str.indexOf("/") + 1, str.lastIndexOf("/") ));
		var Y = parseFloat(str.substring(str.lastIndexOf("/") + 1, str.length));		
		alert(M);
		alert(D);
		alert(Y); */
		
		var aDate = str.split("/"); //split date into month, day, year    
    var M = parseFloat(aDate[0]);
    var D = parseFloat(aDate[1]);
    var Y = parseFloat(aDate[2]);
    
    var aLookup = {'01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,'08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31};

    if(M == 2) {
			if( ((Y % 4 == 0 && D <= 29) || (Y % 4 != 0 && D <=28)) && D !=0) {
          return true;
      }
		}
    else if(aLookup[aDate[0]] != null) {    	
    	//alert(D);
    	//alert(aLookup[aDate[0]]);    	
      if(D <= aLookup[aDate[0]] && D != 0) {      	
        return true; //found in lookup table, good date
      }
    }
  	//else return false;  	
  	//return true;  	
  }
  return false;
} //end function

//Trims trailing whitespace chars.
function rightTrim( strValue ) {
	var objRegExp = /^([\w\W]*)(\b\s*)$/;

      if(objRegExp.test(strValue)) {
       //remove trailing a whitespace characters
       strValue = strValue.replace(objRegExp, '$1');
    }
  return strValue;
}

//Trims leading whitespace chars.
function leftTrim( strValue ) {
	var objRegExp = /^(\s*)(\b[\w\W]*)$/;
      if(objRegExp.test(strValue)) {
       //remove leading a whitespace characters
       strValue = strValue.replace(objRegExp, '$2');
    }
  return strValue;
}

//Removes currency formatting from source string.
function removeCurrency( strValue ) {
  var objRegExp = /\(/;
  var strMinus = '';

  //check if negative
  if(objRegExp.test(strValue)){
    strMinus = '-';
  }

  objRegExp = /\)|\(|[,]/g;
  strValue = strValue.replace(objRegExp,'');
  if(strValue.indexOf('$') >= 0){
    strValue = strValue.substring(1, strValue.length);
  }
  return strMinus + strValue;
}

//Formats a number as currency.
function addCurrency( strValue ) {
  var objRegExp = /-?[0-9]+\.[0-9]{2}$/;

    if( objRegExp.test(strValue)) {
      objRegExp.compile('^-');
      strValue = addCommas(strValue);
      if (objRegExp.test(strValue)){
        strValue = '(' + strValue.replace(objRegExp,'') + ')';
      }
      return '$' + strValue;
    }
    else
      return strValue;
}

//Removes commas from source string.
function removeCommas( strValue ) {
  var objRegExp = /,/g; //search for commas globally
  //replace all matches with empty strings
  return strValue.replace(objRegExp,'');
}

//Inserts commas into numeric string.
function addCommas( strValue ) {
  var objRegExp  = new RegExp('(-?[0-9]+)([0-9]{3})');
    //check for match to search criteria
    while(objRegExp.test(strValue)) {
       //replace original string with first group match,
       //a comma, then second group match
       strValue = strValue.replace(objRegExp, '$1,$2');
    }
  return strValue;
}

/////////////////////////////////////////////////////////////////////////
//encode and decode SSN /////////////////////////////////////////////////
var decToHex = new Array();

decToHex = ["00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F","10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F","20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F","30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F","40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F","50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F","60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F","70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F","80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F","90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF","D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF","E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF","F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"];

function uncode(str){
	//var text = document.mForm.clear.value;
	x = str.length;
	var e = "";
	for(i=0;i<x;i++)
	{
		e += "%"+decToHex[str.charCodeAt(i)];
	}		
	//document.mForm.encode.value = e;
	return e;
}

function deUncode(str){
	var y = unescape(str)
	return y;
	//document.mForm.clear.value = y;
}
//END encode and decode SSN /////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
