/*
Title: Validation Functions
Author: Damian J Trabel
Company: Luciq, Inc.
Prerequisites: CommonFunctions.js
Created: 2005.12.18
Modified: 2005.12.18
Notes: 
*/

//----------------------------------------------------------Variables---------------------------------------------------------
 


//----------------------------------------------------------Functions---------------------------------------------------------

function isValidEmailFormat(inString){

  var retVal = false;
  
  try{
  
    inString = new String("" + inString);
  
    if(!isValidString(inString, 6)){
      // do nothing
    }
    else if(inString.indexOf('@') < 2 ){
      // do nothing
    }
    else if(inString.indexOf('@') >  (inString.length-3)){
      // do nothing
    }
    else if(getOccurenceCount(inString, "@") > 1){
      // do nothing
    }
    else if(inString.indexOf('.') == (inString.length-1) || inString.indexOf('.') < 1){
      // do nothing
    }
    else if(inString.indexOf(' ') > -1){
      // do nothing
    }
    else{
      retVal = true;
    }// end if/else
    
  }
  catch(e){alert("An exception has occurred: " + e.description);
    retVal = false;
  }// end try/catch
  
  return retVal;
  
}// end isValidEmailFormat

function getOccurenceCount(inString, inString2){
  
  var myOC = 0;
  var myString = inString;
  var keepGoing = true;
  try{
    while(myString.length > 0 && keepGoing){
      if(myString.indexOf(inString2) > -1){
        myString = myString.substring((myString.indexOf(inString2) + inString2.length));
        myOC++;
      }
      else{
        keepGoing = false;
      }// end if/else
    }// end while
  }
  catch(e){
    // do nothing
  }// end try/catch
  
  return myOC;
  
}// end getOccurenceCount

function isValidZipFormat(inString){
  return isValidInteger(inString, "", "", 5, 9);
}// end isValidZipFormat

function checkCCmod10(inString){
  
  inString = new String("" + inString);
  
  var retVal = false;
  var myArray = new Array();
  var tSum;
  
  try{
  
    if(isValidInteger(inString)){
  
      for(var i=0; i<inString.length; i++){
        myArray[i] = parseInt(inString.charAt(i));
      }// end for i
  
      for(var i=myArray.length-2; i>=0; i-=2){
        myArray[i] *= 2;
        if(myArray[i] > 9){
          myArray[myArray.length] = parseInt(("" + myArray[i]).charAt(1));
          myArray[i] = parseInt(("" + myArray[i]).charAt(0));
        }// end if
      }// end for
      
      tSum = 0;
      for(var i=0; i<myArray.length; i++){
        tSum += myArray[i];
      }// end for
      
      if((tSum%10) == 0){
        retVal = true;
      }// end if
      
    }// end if
  }
  catch(e){
    alert("An exception occurred in checkCCmod10: " + e.description);
  }// end try/catch
  
  return retVal;
  
}// end function

function isValidCreditCardNumberFormat(inString){
  
  var myArguments;
  var retVal = false;
  var inString;
  var ccType;
  
  try{
  
    myArguments = isValidCreditCardNumberFormat.arguments;
    inString    = new String("" + myArguments[0]);
  
    if(isValidInteger(inString, "", "", 13, 16) && checkCCmod10(inString)){
      if(myArguments.length > 1 && myArguments[1] != ""){
      
        ccType = new String("" + myArguments[1]);
        ccType = ccType.toLowerCase();
        
        if(ccType == "mastercard" || ccType == "mc"){
          if(isValidInteger(("" + inString.charAt(0) + inString.charAt(1)), 51, 55)
          && isValidInteger(inString, "", "", 16, 16)){
            retVal = true;
          }// end if
        }
        else if(ccType == "visa"){
          if(isValidInteger(("" + inString.charAt(0)), 4, 4) 
          && (isValidInteger(inString, "", "", 13, 13) || isValidInteger(inString, "", "", 16, 16))){
            retVal = true;
          }// end if
        }
        else if(ccType == "americanexpress" || ccType == "amex"){
          if((isValidInteger(("" + inString.charAt(0) + inString.charAt(1)), 34, 34) 
          || isValidInteger(("" + inString.charAt(0) + inString.charAt(1)), 37, 37))
          && isValidInteger(inString, "", "", 15, 15)){
            retVal = true;
          }// end if
        }
        else if(ccType == "diners club" || ccType == "diner's club" || ccType == "carte blanche"){
          if((isValidInteger(("" + inString.charAt(0) + inString.charAt(1) + inString.charAt(2)), 300, 305) 
          || isValidInteger(("" + inString.charAt(0) + inString.charAt(1)), 36, 36) 
          || isValidInteger(("" + inString.charAt(0) + inString.charAt(1)), 38, 38))
          && isValidInteger(inString, "", "", 14, 14)){
            retVal = true;
          }// end if
        }
        else if(ccType == "discover" || ccType == "disc" || ccType == "dis"){
          if(isValidInteger(("" + inString.charAt(0) + inString.charAt(1) + inString.charAt(2) + inString.charAt(3)), 6011, 6011)
          && isValidInteger(inString, "", "", 16, 16)){
            retVal = true;
          }// end if
        }
        else if(ccType == "enroute"){
          if((isValidInteger(("" + inString.charAt(0) + inString.charAt(1) + inString.charAt(2) + inString.charAt(3)), 2014, 2014)
          || isValidInteger(("" + inString.charAt(0) + inString.charAt(1) + inString.charAt(2) + inString.charAt(3)), 2149, 2149))
          && isValidInteger(inString, "", "", 15, 15)){
            retVal = true;
          }// end if
        }
        else if(ccType == "jcb"){
          if(isValidInteger(inString, "", "", 16, 16)){
            if(isValidInteger(("" + inString.charAt(0)), 3, 3)){
              retVal = true;
            }// end if
          }
          else if(isValidInteger(inString, "", "", 15, 15)){
            if(isValidInteger(("" + inString.charAt(0) + inString.charAt(1) + inString.charAt(2) + inString.charAt(3)), 2131, 2131)
            || isValidInteger(("" + inString.charAt(0) + inString.charAt(1) + inString.charAt(2) + inString.charAt(3)), 1800, 1800)){
              retVal = true;
            }// end if
          }// end if
        }
        else{
          // do nothing
        }// end if/else
        
      }// end if
    }
    else{
      // do nothing
    }// end if/else
  
  }
  catch(e){
    alert("An error occured in isvalidccnumberformat: " + e.description);
    retVal = false;
  }// end try/catch
  
  
  
  return retVal;
  
}// end isValidCreditCardNumberFormat

function isValidCreditCardExpiresDate(){

  var myArguments;
  var retVal = false;
  var inMonth;
  var inYear;
  var tDate = new Date();
  
  try{
  
    myArguments = isValidCreditCardExpiresDate.arguments;
    inMonth = myArguments[0];
    inYear  = myArguments[1];
  
    if(!isValidInteger(inMonth, 1, 12)){
      // do nothing
    }
    else if(!isValidInteger(inYear, tDate.getFullYear())){
      // do nothing
    }
    else if(inYear == myDate.getFullYear() && inMonth <= (myDate.getMonth()+1)){
      // do nothing
    }
    else{
      retVal = true;
    }// end if/else
  
  }
  catch(e){
    retVal = false;
  }// end try/catch
  
  return retVal;
  
}// end isValidCreditCardExpireDate

function isValidNonBlankString(inString){
  
  var retVal = false;
  
  inString = condense(inString);
  
  if(inString != ""){
    retVal = true;
  }// end if
  
  return retVal;
  
}// end isValidNonBlankString

function isValidString(){

  var myArguments;
  var retVal = true;
  var inString;
  
  try{
  
    myArguments = isValidString.arguments;
    inString    = new String("" + myArguments[0]);
  
    // validate minimum length (if provided)
    if(myArguments.length > 1 &&  myArguments[1] != ""){
      if(inString.length < myArguments[1]){
        return false;
      }// end if
    }// end if
  
    // validate maximum length (if provided)
    if(myArguments.length > 2 &&  myArguments[2] != ""){
      if(inString.length > myArguments[2]){
        return false;
      }// end if
    }// end if
  
  }
  catch(e){
    retVal = false;
  }// end try/catch
  
  return retVal;
  
}// end isValidString

function isValidInteger(){

  var myArguments;
  var inString;

  var retVal = true;
  var vca    = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
  
  try{
    myArguments = isValidInteger.arguments;
    inString    = new String("" + myArguments[0]);
  
    // validate each character
    for(var i=0; i<inString.length && retVal; i++){
      retVal = false;
      for(var j=0; j<vca.length; j++){
        if(inString.charAt(i) == vca[j]){
          retVal = true;
        }// end if
      }// end for j
    }// end for i
    
    // validate minimum value (if provided)
    if(myArguments.length > 1 &&  myArguments[1] != ""){
      if(Number(inString) < myArguments[1]){
        return false;
      }// end if
    }// end if
    
    // validate maximum value (if provided)
    if(myArguments.length > 2 &&  myArguments[2] != ""){
      if(Number(inString) > myArguments[2]){
        return false;
      }// end if
    }// end if
    
    // validate minimum length (if provided)
    if(myArguments.length > 3 &&  myArguments[3] != ""){
      if(inString.length < myArguments[3]){
        return false;
      }// end if
    }// end if
    
    // validate maximum length (if provided)
    if(myArguments.length > 4 &&  myArguments[4] != ""){
      if(inString.length > myArguments[4]){
        return false;
      }// end if
    }// end if
    
  }
  catch(e){
    retVal = false;
  }// end try/catch
  
  return retVal;

}// end isValidInteger

