var thisbrowser
   var Cards = new makeArray(8);
        Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
        var MasterCard = Cards[0];
        Cards[1] = new CardType("VisaCard", "4", "13,16");
        var VisaCard = Cards[1];
        Cards[2] = new CardType("AmExCard", "34,37", "15");
        var AmExCard = Cards[2];
        Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
        var DinersClubCard = Cards[3];
        Cards[4] = new CardType("DiscoverCard", "6011", "16");
        var DiscoverCard = Cards[4];
        Cards[5] = new CardType("enRouteCard", "2014,2149", "15");
        var enRouteCard = Cards[5];
        Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
        var JCBCard = Cards[6];
        var LuhnCheckSum = Cards[7] = new CardType();
        
        /*************************************************************************\
        CheckCardNumber(form)
        function called when users click the "check" button.
        \*************************************************************************/
     function validate(){

    var message = "";
    var validCardType = false;
    var cardTypeName = "";	 
    var radioObj = document.forms['myFormProcessDonation'].elements['cardType'];
    var credCardNum = document.getElementById("CardNumber").value;
	
	for(var n = 0; n < radioObj.length; n++) {
            if (radioObj[n].selected) {
              validCardType = true;
              break;
            }
          }
	 
	 if(validCardType == false){
      message = "error";
    }
	if(document.getElementById("CardHolder").value.length == 0){
	message = "error";
    }
		  
    if(document.getElementById("CardNumber").value.length == 0){
		message = "error";
    }
    if(document.getElementById("CardExpiry").value.length == 0){
	message = "error";
    }  
    
	
    if(message =="")     
    {  
        if ("20" + document.getElementById("CardExpiry").value.substring(5, 3) > 2006)
          tmpyear =  "20" + document.getElementById("CardExpiry").value.substring(5, 3);
          else if ("20" + document.getElementById("CardExpiry").value.substring(5, 3) < 2021)
          tmpyear =  "20" + document.getElementById("CardExpiry").value.substring(5, 3);
          else {
          document.getElementById("cardValidation").value ="The Expiration Year is not valid.";  
		  return false;    
          }            
          tmpmonth = document.getElementById("CardExpiry").value.substring(0, 2);
          if(tmpmonth > 12)
          {
          document.getElementById("cardValidation").value = "This not a valid month.";  
		  return false;  
          }
          if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {         
          document.getElementById("cardValidation").value = "This card has already expired."; 
		  return false;        
          }       
        
         for(var n = 0; n < radioObj.length; n++) {
            if (radioObj[n].selected) {
              card = radioObj[n].value;
              break;
            }
          }	   
        var retval = eval(card + ".checkCardNumber(\"" + document.getElementById("CardNumber").value +   "\", " + tmpyear + ", " + tmpmonth + ");");
       
	  
        cardname = "";
       
        if (retval)
         {    
          return true; 
         //document.frmMain.submit();
        // comment this out if used on an order form
        //alert("This card number appears to be valid.");        
       }
        else 
        {
        // The cardnumber has the valid luhn checksum, but we want to know which
        // cardtype it belongs to.
              for (var n = 0; n < Cards.size; n++) 
              {
                if (Cards[n].checkCardNumber(document.getElementById("CardNumber").value, tmpyear, tmpmonth)) 
                {
                  cardname = Cards[n].getCardType();
                  break;
                 }
              }
              if (cardname.length > 0) 
              {
              document.getElementById("cardValidation").value ="This looks like a " + cardname + " number, not a " + card + " number.";              
              return false;
			  }
              else 
              {
              document.getElementById("cardValidation").value ="This card number is not valid.";              
              }
       }
	 }
  } 
		
		
		function CardType() {
        var n;
        var argv = CardType.arguments;
        var argc = CardType.arguments.length;
        
        this.objname = "object CardType";
        
        var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
        var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
        var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";
        
        this.setCardNumber = setCardNumber;  // set CardNumber method.
        this.setCardType = setCardType;  // setCardType method.
        this.setLen = setLen;  // setLen method.
        this.setRules = setRules;  // setRules method.
        this.setExpiryDate = setExpiryDate;  // setExpiryDate method.
        
        this.setCardType(tmpcardtype);
        this.setLen(tmplen);
        this.setRules(tmprules);
        if (argc > 4)
        this.setExpiryDate(argv[3], argv[4]);
        
        this.checkCardNumber = checkCardNumber;  // checkCardNumber method.
        this.getExpiryDate = getExpiryDate;  // getExpiryDate method.
        this.getCardType = getCardType;  // getCardType method.
        this.isCardNumber = isCardNumber;  // isCardNumber method.
        this.isExpiryDate = isExpiryDate;  // isExpiryDate method.
        this.luhnCheck = luhnCheck;// luhnCheck method.
        return this;
        }
        
        /*************************************************************************\
        boolean checkCardNumber([String cardnumber, int year, int month])
        return true if cardnumber pass the luhncheck and the expiry date is
        valid, else return false.
        \*************************************************************************/
        function checkCardNumber() {
        var argv = checkCardNumber.arguments;
        var argc = checkCardNumber.arguments.length;
        var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
        var year = (argc > 1) ? argv[1] : this.year;
        var month = (argc > 2) ? argv[2] : this.month;
        
        this.setCardNumber(cardnumber);
        this.setExpiryDate(year, month);
        
        if (!this.isCardNumber())
        return false;
        if (!this.isExpiryDate())
        return false;
        
        return true;
        }
        /*************************************************************************\
        String getCardType()
        return the cardtype.
        \*************************************************************************/
        function getCardType() {
        return this.cardtype;
        }
        /*************************************************************************\
        String getExpiryDate()
        return the expiry date.
        \*************************************************************************/
        function getExpiryDate() {
        return this.month + "/" + this.year;
        }
        /*************************************************************************\
        boolean isCardNumber([String cardnumber])
        return true if cardnumber pass the luhncheck and the rules, else return
        false.
        \*************************************************************************/
        function isCardNumber() {
        var argv = isCardNumber.arguments;
        var argc = isCardNumber.arguments.length;
        var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
        if (!this.luhnCheck())
        return false;
        
        for (var n = 0; n < this.len.size; n++)
        if (cardnumber.toString().length == this.len[n]) {
        for (var m = 0; m < this.rules.size; m++) {
        var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
        if (headdigit == this.rules[m])
        return true;
        }
        return false;
        }
        return false;
        }
        
        /*************************************************************************\
        boolean isExpiryDate([int year, int month])
        return true if the date is a valid expiry date,
        else return false.
        \*************************************************************************/
        function isExpiryDate() {
        var argv = isExpiryDate.arguments;
        var argc = isExpiryDate.arguments.length;
        
        year = argc > 0 ? argv[0] : this.year;
        month = argc > 1 ? argv[1] : this.month;
        
        if (!isNum(year+""))
        return false;
        if (!isNum(month+""))
        return false;
        today = new Date();
        expiry = new Date(year, month);
        if (today.getTime() > expiry.getTime())
        return false;
        else
        return true;
        }
        
        /*************************************************************************\
        boolean isNum(String argvalue)
        return true if argvalue contains only numeric characters,
        else return false.
        \*************************************************************************/
        function isNum(argvalue) {
        argvalue = argvalue.toString();
        
        if (argvalue.length == 0)
        return false;
        
        for (var n = 0; n < argvalue.length; n++)
        if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
        return false;
        
        return true;
        }
        
        /*************************************************************************\
        boolean luhnCheck([String CardNumber])
        return true if CardNumber pass the luhn check else return false.
        Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
        \*************************************************************************/
        function luhnCheck() {
        var argv = luhnCheck.arguments;
        var argc = luhnCheck.arguments.length;
        
        var CardNumber = argc > 0 ? argv[0] : this.cardnumber;
        
        if (! isNum(CardNumber)) {
        return false;
          }
        
        var no_digit = CardNumber.length;
        var oddoeven = no_digit & 1;
        var sum = 0;
        
        for (var count = 0; count < no_digit; count++) {
        var digit = parseInt(CardNumber.charAt(count));
        if (!((count & 1) ^ oddoeven)) {
        digit *= 2;
        if (digit > 9)
        digit -= 9;
        }
        sum += digit;
        }
        if (sum % 10 == 0)
        return true;
        else
        return false;
        }
        
        /*************************************************************************\
        ArrayObject makeArray(int size)
        return the array object in the size specified.
        \*************************************************************************/
        function makeArray(size) {
        this.size = size;
        return this;
        }
        
        /*************************************************************************\
        CardType setCardNumber(cardnumber)
        return the CardType object.
        \*************************************************************************/
        function setCardNumber(cardnumber) {
        this.cardnumber = cardnumber;
        return this;
        }
        
        /*************************************************************************\
        CardType setCardType(cardtype)
        return the CardType object.
        \*************************************************************************/
        function setCardType(cardtype) {
        this.cardtype = cardtype;
        return this;
        }
        
        /*************************************************************************\
        CardType setExpiryDate(year, month)
        return the CardType object.
        \*************************************************************************/
        function setExpiryDate(year, month) {
        this.year = year;
        this.month = month;
        return this;
        }
        
        /*************************************************************************\
        CardType setLen(len)
        return the CardType object.
        \*************************************************************************/
        function setLen(len) {
        // Create the len array.
        if (len.length == 0 || len == null)
        len = "13,14,15,16,19";
        
        var tmplen = len;
        n = 1;
        while (tmplen.indexOf(",") != -1) {
        tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
        n++;
        }
        this.len = new makeArray(n);
        n = 0;
        while (len.indexOf(",") != -1) {
        var tmpstr = len.substring(0, len.indexOf(","));
        this.len[n] = tmpstr;
        len = len.substring(len.indexOf(",") + 1, len.length);
        n++;
        }
        this.len[n] = len;
        return this;
        }
        
        /*************************************************************************\
        CardType setRules()
        return the CardType object.
        \*************************************************************************/
        function setRules(rules) {
        // Create the rules array.
        if (rules.length == 0 || rules == null)
        rules = "0,1,2,3,4,5,6,7,8,9";
          
        var tmprules = rules;
        n = 1;
        while (tmprules.indexOf(",") != -1) {
        tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
        n++;
        }
        this.rules = new makeArray(n);
        n = 0;
        while (rules.indexOf(",") != -1) {
        var tmpstr = rules.substring(0, rules.indexOf(","));
        this.rules[n] = tmpstr;
        rules = rules.substring(rules.indexOf(",") + 1, rules.length);
        n++;
        }
        this.rules[n] = rules;
        return this;
        }
		

if(document.layers){ thisbrowser='NN4'; }

if(document.all){ thisbrowser='IE'; }

if(!document.all && document.getElementById){ thisbrowser='NN6'; }



function cleanUrl () {

}
function isNumberKey(evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode
	if (charCode > 31 && (charCode < 48 || charCode > 57))
		return false;

	return true;

}

function isInvoiceKey(evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode

	// allow numbers, uppercase letters, lowercase letters, dash key, number key)
	if ((charCode > 47 && charCode < 58) || (charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123) || charCode == 45)
		return true;

	return false;

}

function isNumberDotKey(evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode
	if (charCode > 31 && (charCode < 48 || charCode > 57) && (charCode != 46))
		return false;

	return true;

}

function isNumberDashKey(evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode
	if (charCode > 31 && (charCode < 48 || charCode > 57) && (charCode != 45))
		return false;

	return true;

}


function ValidateQuantity (productid, minqty, maxqty, message)
{

	var FormObject	= document.forms['myQuantity' + productid];
	var quantity	= FormObject.elements['quantity'].value;

	if (quantity > maxqty || quantity < minqty)
	{
		alert (message);
		return false;
	}
	else
	{
		return true;
	}
}


function textCounter(field, countfield, maxlimit)
{
	if (field.value.length > maxlimit)
	{
		field.value = field.value.substring(0, maxlimit);
	}
	else
	{
		countfield.value = maxlimit - field.value.length;
	}
}


function ShowDivOnOff(objChildName, display) {
	var visibility;
	var parentValue;
	var objChild;
	var objParent;


    //if(thisbrowser=='IE') objChild = document.all[objChildName];
	//if(thisbrowser=='NN6' || thisbrowser=='NN4') objChild = document.getElementById(objChildName);

    objChild = document.getElementById(objChildName);

	if ( display == 1 )
	{
	    objChild.style.display = 'block';
	}	
	else
	{
	    objChild.style.display = 'none';
	}
}
