/* COMMON VALIDATION FUNCTIONS */

function trimString (str) {
  str = this != window? this : str;
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function validateEmail( strValue) {
/************************************************
DESCRIPTION: Validates that a string contains a
  valid email pattern.

 PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
*************************************************/
var objRegExp  = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
  //check for valid email
  return objRegExp.test(strValue);
}


function  validateNumeric( strValue ) {
/******************************************************************************
DESCRIPTION: Validates that a string contains only valid numbers.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
******************************************************************************/
  var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;

  //check for numeric characters
  return objRegExp.test(strValue);
}

function validateCharactersWithApos( strValue) {
/******************************************************************************
DESCRIPTION: Validates that a string contains only charachters and apostrophe, no white space.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
******************************************************************************/
  var objRegExp  =/^[a-zA-Z\']*$/; 

  //check for characters
  return objRegExp.test(strValue);
}

function validateCharactersWithAposUnicode( strValue) {
/******************************************************************************
DESCRIPTION: Validates that a string contains only charachters and apostrophe, no white space.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
******************************************************************************/
  var objRegExp  =/^[a-zA-Z\']*$/; 

  //check for characters
  return objRegExp.test(strValue);
}

function validateCharacters( strValue) {
/******************************************************************************
DESCRIPTION: Validates that a string contains only charachters, no white space.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
******************************************************************************/
  var objRegExp  =/^[a-zA-Z]*$/; 

  //check for characters
  return objRegExp.test(strValue);
}

function validateAlphaNumericCharacters( strValue) {
/******************************************************************************
DESCRIPTION: Validates that a string contains only alpha numeric charachters, no white space.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
******************************************************************************/
  var objRegExp  =/^[a-zA-Z0-9\ \-]*$/; 

  //check for alpha numeric characters
  return objRegExp.test(strValue);
}

function validateFileName( strValue) {
/******************************************************************************
DESCRIPTION: Validates that a string contains only alpha numeric charachters or some special charachters(excluding \/:*?"<>|'`,).

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
******************************************************************************/
  var objRegExp  =/^[a-zA-Z0-9\~\!\@\#\$\%\^\&\[\]\(\)\;\_\-\ \=\+]*$/; 
  //alert(objRegExp.test(strValue));
  return objRegExp.test(strValue);
}
function validateInteger( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains only
    valid integer number.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
******************************************************************************/
  var objRegExp  = /(^-?\d\d*$)/;

  //check for integer characters
  return objRegExp.test(strValue);
}

function validateNotEmpty( strValue ) {
/************************************************
DESCRIPTION: Validates that a string is not all
  blank (whitespace) characters.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
*************************************************/
   var strTemp = strValue;
   strTemp = trimAll(strTemp);
   if(strTemp.length > 0){
     return true;
   }
   return false;
}


function validateDate( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains only
    valid dates with 2 digit month, 2 digit day,
    4 digit year. Date separator can be ., -, or /.
    Uses combination of regular expressions and
    string parsing to validate date.
    Ex. mm/dd/yyyy or mm-dd-yyyy or mm.dd.yyyy

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
*************************************************/
  var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/

  //check to see if in correct format
  if(!objRegExp.test(strValue))
    return false; //doesn't match pattern, bad date
  else{
    var strSeparator = strValue.substring(2,3) //find date separator
    var arrayDate = strValue.split(strSeparator); //split date into month, day, year
    //create a lookup for months not equal to Feb.
    var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,
                        '08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31}
    var intDay = parseInt(arrayDate[1]);

    //check if month value and day value agree
    if(arrayLookup[arrayDate[0]] != null) {
      if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0)
        return true; //found in lookup table, good date
    }

    //check for February 
    var intMonth = parseInt(arrayDate[0]);
    if (intMonth == 2) { 
       var intYear = parseInt(arrayDate[2]);
       if( ((intYear % 4 == 0 && intDay <= 29) || (intYear % 4 != 0 && intDay <=28)) && intDay !=0)
          return true; //Feb. had valid number of days
       }
  }
  return false; //any other values, bad date
}

function validateValue( strValue, strMatchPattern ) {
/************************************************
DESCRIPTION: Validates that a string a matches
  a valid regular expression value.

PARAMETERS:
   strValue - String to be tested for validity
   strMatchPattern - String containing a valid
      regular expression match pattern.

RETURNS:
   True if valid, otherwise false.
*************************************************/
var objRegExp = new RegExp( strMatchPattern);

 //check if string matches pattern
 return objRegExp.test(strValue);
}

function validateUnicodeCharacter(str){
	for(i=0; i<str.length; i++){
		test = str.charCodeAt(i);
		//alert(str + "-" + test);
		// a-z,A-Z,space,apostrophe,special characters()
		if(test==32 || test==39 || (test >64 && test<91) || (test>96 && test<123) || test==161 || test==191 || test==201 || test==209 || test==225 || test==233 || test==237 || test==241 || test==243 || test==250 || test==252){
		}else{
			return false;
		}
	}
	return true;
}


function validateLoginId(str) {
	for(i=0; i<str.length; i++){
		test = str.charCodeAt(i);
		// a-z,A-Z,0-9,dot,underscore,special characters()
		if(test==95 || test==46 || (test>64 && test<91) || (test>96 && test<123) || (test>47 && test<58) || test==161 || test==191 || test==201 || test==209 || test==225 || test==233 || test==237 || test==241 || test==243 || test==250 || test==252){
		}else{
			return false;
		}
	}
	return true;
}
