// JavaScript Document 
function stripCharsNotInBag (s, bag){ 
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is in bag, append to returnString.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }
    return returnString;
}
 
//-------------------------------
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

//-------------------------------
function trim(TXT)
    {
    	return TXT.replace(/(^\s+)|(\s+$)/g,"");
}
//-----------------------------------
function validate_email(email) {
 re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
 return re.test(email) ;

} 
//---------------------------------------
function isPositiveInteger(val){

	var txt=trim(val);
	
	var reg=/^\d*$/;
	return( !isEmpty(txt) &&  reg.test(txt)  );
}
//---------------------------------------
function checkCC(cc_type, cc_date, cc_year, cc_num)
{
	if(cc_type.value == "0")
	{
		cc_type.focus();
		return "You need to select your Credit Card Type";
	}

	if(cc_num.value == "")
	{
		cc_num.focus();
		return "You need to enter in your Credit Card Number";
	}
	else
	{
		if((cc_type.value == 1 && (cc_num.value.length != "13" && cc_num.value.length != "16")) ||
			(cc_type.value == 2 && cc_num.value.length != "16") ||
			(cc_type.value == 3 && cc_num.value.length != "15") ||
			(cc_type.value == 4 && cc_num.value.length != "16"))
		{
			cc_num.focus();
			return "Your Credit Card Number is not the proper length";
		}
		if (!checkCreditCard (cc_num.value, cc_type.value))
		{
			return "Your Credit Card Number is Invalid";
		}
	}
	
	var d = new Date()
	var the_month = (d.getMonth() + 1);
	var the_year = d.getFullYear();
	if((cc_date.value < the_month) && (cc_year.value == the_year))
	{
		cc_date.focus();
		return "Your Credit Card has Expired";
	}
return '';
}

function isValidEmail(str_to_test) 
{
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(str_to_test))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function checkCreditCard (cardnumber, cardType)
{
	//alert('num='+cardnumber+'  '+'cardtype='+cardType);
	var ccErrorNo = 0;
	var ccErrors = new Array ()
	
	ccErrors [0] = "Unknown card type";
	ccErrors [1] = "No card number provided";
	ccErrors [2] = "Credit card number is in invalid format";
	ccErrors [3] = "Credit card number is invalid";
	ccErrors [4] = "Credit card number has an inappropriate number of digits";
     
  var cards = new Array();
  
  cards [0] = {name: "1", 
               length: "13,16", 
               prefixes: "4",
               checkdigit: true};
  cards [1] = {name: "2", 
               length: "16", 
               prefixes: "51,52,53,54,55",
               checkdigit: true};
  cards [2] = {name: "3", 
               length: "15", 
               prefixes: "34,37",
               checkdigit: true};
  cards [3] = {name: "4", 
               length: "16", 
               prefixes: "6011",
               checkdigit: true};
               
  
 
  if (cardType == 0) {
     ccErrorNo = 0;
     return "Unknown card type"; 
  }
   
  if (cardnumber.length == 0)  {
     ccErrorNo = 1;
     return "No card number provided"; 
  }
  
  var cardNo = cardnumber
  var cardexp = /^([0-9]{4})\s?([0-9]{4})\s?([0-9]{4})\s?([0-9]{1,4})$/;
  if (!cardexp.exec(cardNo))  {
     ccErrorNo = 2;
     return "Credit card number is in invalid format"; 
  }
    
  cardexp.exec(cardNo);
  cardNo = RegExp.$1 + RegExp.$2 + RegExp.$3 + RegExp.$4;
       
  if (cards[cardType-1].checkdigit) {
    var checksum = 0;                                 
    var mychar = "";                                   
    var j = 1;                                         
  
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
    
      calc = Number(cardNo.charAt(i)) * j;
    
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
    
      checksum = checksum + calc;
    
      if (j ==1) {j = 2} else {j = 1};
    } 
  
    if (checksum % 10 != 0)  {
     ccErrorNo = 3;
	 
     return "Credit card number is invalid"; 
    }
  }  
  
  var LengthValid = false;
  var PrefixValid = false; 
  var undefined; 

  var prefix = new Array ();
  var lengths = new Array ();
    
  prefix = cards[cardType-1].prefixes.split(",");
      
  for (i=0; i<prefix.length; i++) {
    var exp = new RegExp ("^" + prefix[i]);
    if (exp.test (cardNo)) PrefixValid = true;
  }
      
  if (!PrefixValid) {
     ccErrorNo = 3;
	
     return "Credit card number is invalid"; 
  }
    
  lengths = cards[cardType-1].length.split(",");
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }

  if (!LengthValid) {
     ccErrorNo = 4;
     return "Credit card number has an inappropriate number of digits"; 
  };   
  
  return '';
}
//------------------
function StripNonDigits(n) {
var s = String(n);
var n2 = String();
for(var i = 0; i < s.length; i++) {
   var ss = s.substr(i,1);
   if(ss >= '0' && ss <= '9') { n2 = n2 + ss; }
   }
return n2;
}
