    <script type="text/javascript">
        //Using this function to avoid changing all the code associated with Expiration Date which
        //was original written with a 4 digit textbox and now switched to two drop downs.
        function fnUpdateExpiration()
        {
          var objExpiration = document.getElementById("txtCCCardExp");
          var objExpirationMonth = document.getElementById("lstExpirationMonth");
          var objExpirationYear = document.getElementById("lstExpirationYear");
          
          var strExpirationMonth = objExpirationMonth.options[objExpirationMonth.selectedIndex].value;
          var strExpirationYear = objExpirationYear.options[objExpirationYear.selectedIndex].value;//.substr(2,2);
          
          objExpiration.value = strExpirationMonth + strExpirationYear;
        }
        
        try
        {
            document.getElementById("trBillingProvince").style.display = "none";

            var fontFamily;

            if (window.getComputedStyle)
            {
                fontFamily = window.getComputedStyle(document.getElementById("tblCCDonation"), '').fontFamily;
            }
            else
            {
                fontFamily = document.getElementById("tblCCDonation").currentStyle.fontFamily;
            }

            document.getElementById("txtCCDonationAmount").style.fontFamily = fontFamily;
            document.getElementById("lstGiftAmounts").style.fontFamily = fontFamily;
            document.getElementById("lstMembership").style.fontFamily = fontFamily;
            document.getElementById("txtCCChFirstName").style.fontFamily = fontFamily;
            document.getElementById("txtCCChLastName").style.fontFamily = fontFamily;
            document.getElementById("txtCCChAddress").style.fontFamily = fontFamily;
            document.getElementById("txtCCCity").style.fontFamily = fontFamily;
            document.getElementById("lstCCCountry").style.fontFamily = fontFamily;
            document.getElementById("lstCCState").style.fontFamily = fontFamily;
            document.getElementById("txtCCProvince").style.fontFamily = fontFamily;
            document.getElementById("txtCCZip").style.fontFamily = fontFamily;
            document.getElementById("txtCCEmailAddress").style.fontFamily = fontFamily;
            document.getElementById("txtCCEmailAddress2").style.fontFamily = fontFamily;
            document.getElementById("txtCCPhone").style.fontFamily = fontFamily;
            document.getElementById("lstCCType").style.fontFamily = fontFamily;
            document.getElementById("txtCCCardNumber").style.fontFamily = fontFamily;
            document.getElementById("txtCCCardExp").style.fontFamily = fontFamily;
            document.getElementById("lstExpirationMonth").style.fontFamily = fontFamily;
            document.getElementById("lstExpirationYear").style.fontFamily = fontFamily;
            document.getElementById("txtCCCardCVV").style.fontFamily = fontFamily;
            document.getElementById("btnSubmit").style.fontFamily = fontFamily;
            document.getElementById("btnReset").style.fontFamily = fontFamily;
        }
        catch (e)
        {
        }
    
    function fnQbaseBillingCountryChange(obj)
    {
        if (obj.value == "US")
        {
            document.getElementById("trBillingProvince").style.display = "none";
            document.getElementById("trBillingState").style.display = "";
            document.getElementById("txtCCProvince").value = "";
        }
        else
        {
            document.getElementById("trBillingProvince").style.display = "";
            document.getElementById("trBillingState").style.display = "none";
            document.getElementById("lstCCState").value = "";
        }
    }

function fnCharacterCheck(evt, objTarget, strSource, regCharSet)
{
    var isLocNetscape = (navigator.appName == "Netscape");
    var isLocIE = (isLocNetscape == false);

    var objEvent = evt ? evt : window.event;     

    if (strSource.toUpperCase() == 'KEY') 
    {
        iKeyCode = objEvent.charCode ? objEvent.charCode : objEvent.keyCode;
        if ((iKeyCode < 32) || (iKeyCode > 126))
            return;
            
        if ((iKeyCode == 35) || (iKeyCode == 36) || (iKeyCode == 37) || (iKeyCode == 39))
            return;

        //A paste in Firefox
        if ((iKeyCode == 45) && (isLocNetscape))
        {
          fnCharacterCheck(evt, objTarget, 'PASTE', regCharSet);
          return;
        }
        
        var strTarget = String.fromCharCode(iKeyCode);

        var bAllowed = strTarget.match(regCharSet);
        if (bAllowed == null) 
        {
            objEvent.cancelBubble = true;
            objEvent.returnValue = false;

            if (isLocNetscape) 
                objEvent.preventDefault();
        }
    }
    else //if (strSource.toUpperCase() == 'PASTE')
    {
        if (isLocNetscape)
        {
          setTimeout('fnCleanText("' + objTarget.id + '","' + regCharSet + '")',10);
          return;
        }
        objEvent.cancelBubble = true;
        objEvent.returnValue = false;
        
        if (isLocNetscape) 
          objEvent.preventDefault();
        
        //Check each char.
        var strData = window.clipboardData.getData("text");
        var strOutput = '';

        for (i=0; i < strData.length; i++)
        {
            var strTarget = strData.charAt(i);
	        var iKeyCode = strData.charCodeAt(i);
            var bAllowed = strTarget.match(regCharSet);

            //If not allowed character then don't allow 
            //paste (except where the character is a Carriage Return)
            if ((bAllowed != null) && (iKeyCode != 13) && (iKeyCode != 10)) 
            {
                strOutput += strTarget;
            }
        }

        if (strOutput.length > 0)
        {
          //****************************************************************************
            if( document.selection )
            {
	            // The current selection
	            var range = document.selection.createRange();
	            // We'll use this as a 'dummy'
	            var stored_range = range.duplicate();
	            // Select all text
	            stored_range.expand('textedit');
	            // Now move 'dummy' end point to end point of original range
	            stored_range.setEndPoint( 'EndToEnd', range );
	            // Now we can calculate start and end points
	            objTarget.selectionStart = stored_range.text.length - range.text.length;
	            objTarget.selectionEnd = objTarget.selectionStart + range.text.length;
            }
          //****************************************************************************
          
          //Something highlighted
          if (objTarget.selectionStart != objTarget.selectionEnd)
          {
            var strBefore = objTarget.value.substr(0,objTarget.selectionStart);
            var strAfter = objTarget.value.substr(objTarget.selectionEnd);
          
            objTarget.value = strBefore + strOutput + strAfter;
            
            var strCursorPos = strBefore.length + strOutput.length;
            setTimeout("setCaretPosition('" + objTarget.id + "'," + strCursorPos + ")", 50);
          }
          else
          {
            var iPos = getCaretPosition(objTarget);
          
            var strBefore = objTarget.value.substr(0,iPos);
            var strAfter = objTarget.value.substr(iPos);
          
            objTarget.value = strBefore + strOutput + strAfter;
            var strCursorPos = strBefore.length + strOutput.length;
            setTimeout("setCaretPosition('" + objTarget.id + "'," + strCursorPos + ")", 50);
          }
        }
    }
}

function fnCleanText(objID, regCharSet)
{
  var objTarget = document.getElementById(objID);
  var strText = objTarget.value;
  
  var strNewText = '';
  for (var i=0; i < strText.length; i++)
  {
    
    var strChar = strText.substr(i,1);
    if ((strChar >= '0') && (strChar <= '9'))
      strNewText += strText.substr(i,1);
  }  

  if (objTarget.value.length != strNewText.length)
     objTarget.value = strNewText;
}

function setCaretPosition(objID, caretPos) {

  var objTarget = document.getElementById(objID);
        if(objTarget.createTextRange) {
            var range = objTarget.createTextRange();
            range.move('character', caretPos);
            range.select();
        }
        else {
            if(objTarget.selectionStart) {
                objTarget.focus();
                objTarget.setSelectionRange(caretPos, caretPos);
            }
            else
                objTarget.focus();
        }
}

function getCaretPosition(objTextBox)
{
  var objTextBox = window.event.srcElement;
  var i = objTextBox.value.length;

  if (objTextBox.createTextRange)
  {
    objCaret = document.selection.createRange().duplicate();
      while (objCaret.parentElement()==objTextBox && objCaret.move("character",1)==1) --i;
  }
  return i;
}

/* ************************************************************************ */
function fnBrowserCheck()
{
  var strBrowserName = fnGetBrowserName();
  var iBrowserVersion = parseInt(fnGetBrowserVersion());
  var bShowMessage = false;

  //if ((strBrowserName.toUpperCase() != "MICROSOFT INTERNET EXPLORER") && (strBrowserName.toUpperCase() != "FIREFOX"))
  //{
    //bShowMessage = true;
  //}
  //else 
  if ((strBrowserName.toUpperCase() == "MICROSOFT INTERNET EXPLORER") && (iBrowserVersion < 7))
  {
    bShowMessage = true;
  }
  else if ((strBrowserName.toUpperCase() == "FIREFOX") && (iBrowserVersion < 2))
  {
    bShowMessage = true;
  }
  else
    bShowMessage = false;

  if (bShowMessage)
  {
    //alert('[' + strBrowserName + '][' + iBrowserVersion + ']');
    alert('You are using an unsupported browser which may impede your ability to donate.  Please update your browser, or use a different browser to make your donation.');    
  }  
}

function fnGetFullBrowserVersion(strNumber)
{
  var iPos1 = strNumber.indexOf('.');
  if (iPos1 >= 0)
    iPos1 = strNumber.indexOf('.',iPos1 + 1);

  var iPos2 = strNumber.indexOf(';');

  var iPos3 = 0;

  if (iPos1 < 0)
    iPos3 = iPos2;    
  else if (iPos2 < 0)
    iPos3 = iPos1;
  else 
    iPos3 = Math.min(iPos1, iPos2);

    return strNumber.substring(0,iPos3);
}

function fnGetBrowserName()
{
  var nVer = navigator.appVersion;
  var nAgt = navigator.userAgent;
  var verOffset = 0;
  
  if ((verOffset=nAgt.indexOf("MSIE"))!=-1) 
     return "Microsoft Internet Explorer";

  else if ((verOffset=nAgt.indexOf("Opera"))!=-1) 
    return "Opera";

  else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) 
    return "Firefox";
    
  else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) 
  {
    return nAgt.substring(nameOffset,verOffset).toUpperCase();
  }
  
  return "";
}

function fnGetBrowserVersion()
{
  var nVer = navigator.appVersion;
  var nAgt = navigator.userAgent;
  var verOffset = 0;
  
  if ((verOffset=nAgt.indexOf("MSIE"))!=-1) 
  {
    return fnGetFullBrowserVersion(nAgt.substring(verOffset+5));
  }

  else if ((verOffset=nAgt.indexOf("Opera"))!=-1) 
    return fnGetFullBrowserVersion(nAgt.substring(verOffset+6));

  else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) 
    return fnGetFullBrowserVersion(nAgt.substring(verOffset+8));

  else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) 
  {
    var fullVersion  = fnGetFullBrowserVersion(nAgt.substring(verOffset+1));
    if (!isNaN(fullVersion)) 
      return fullVersion;
    else 
      return 0;
  }
    
  return "0";
}

function fnBrowserAttachEvent(obj, sEvent, fnPointer)
{
    if ( !document.uniqueID )
    {
        obj.addEventListener(sEvent.substr(2, sEvent.length-2), fnPointer, false);
    }
    else
    {
        obj.attachEvent(sEvent, fnPointer);
    }
}


window.onload = fnBrowserCheck;

</script>