var MSRInitialized = 0;
function errorHandler(msg, url) {
  var el = document.createElement("img");
  el.setAttribute("height", 1);
  el.setAttribute("width", 1);
  var now = new Date();
  var eSrc = "/images/error.gif?onerr=true&ts="+now.getTime()+"&file="+escape(url)+"&msg="+escape(msg);
  el.setAttribute("src", eSrc);
  if (document.body) {
    document.body.appendChild(el);
  }
  return true;
}
function msrDataEvent()
{
  var creditCardNumber = document.getElementById('cardNumberId');
  var creditCardType = document.getElementById('cardTypeId');
  var expireMonth = document.getElementById('expireMonthId');
  var expireYear = document.getElementById('expireYearId');
  if (creditCardNumber != null) {
    creditCardNumber.value = MSRCommon.AccountNumber;
    var expirationDate = MSRCommon.ExpirationDate;
    var month = expirationDate.substr(2,2);
    var year = new String("20") + expirationDate.substr(0,2);
    expireMonth.value=month;
    expireYear.value=year;
    creditCardType.value=getCreditCardType(creditCardNumber.value);
  }
  closeMSR();
  openMSR();
}
function getCreditCardType(creditCardNumber)
{
  var tempStr = String(parseInt(creditCardNumber));
  if (tempStr.length != creditCardNumber.length) {
    return 0;
  }
  var f2 = parseInt(creditCardNumber.substr(0,2));
  if ( (creditCardNumber.length == 15) && ((f2 >= 37) && (f2 <= 39)) || ((f2 >= 30) && (f2 <= 35)) ) {
    return 1;
  }
  if ( (creditCardNumber.length == 16) && ((f2 == 60) || (f2 == 64) || (f2 == 65)) ) {
    return 2;
  }
  if ( (creditCardNumber.length == 14) && (f2 == 36) ) {
    return 3;
  }
  if ( (creditCardNumber.length == 16) && ((f2 >= 51) && (f2 <= 55)) ) {
    return 3;
  }
  if ( (creditCardNumber.length == 16) && ((f2 >= 40) && (f2 <= 49)) ) {
    return 4;
  }
  return 5;
}
function msrErrorEvent(ResultCode, ResultCodeExtended, ErrorLocus, pErrorResponse)
{
  var errorMsg = "ResultCode: " + ResultCode;
  errorMsg += " ResultCodeExtended: " + ResultCodeExtended;
  errorMsg += " ErrorLocus: " + ErrorLocus;
  errorMsg += " pErrorResponse: " + pErrorResponse;
  errorHandler(errorMsg, "msrErrorEvent()");
}
function initializeMSR()
{
  var msr = document.getElementById('MSRCommon');
  if ((msr == null) ||(MSRCommon.ControlObjectVersion == null))
  {
    MSRInitialized = 0;
    return;
  }
  try {
    MSRCommon.attachEvent('DataEvent', msrDataEvent);
    MSRCommon.attachEvent('ErrorEvent', msrErrorEvent);
    openMSR();
    MSRInitialized = 1;
  }
  catch (E)
  {
    MSRInitialized = 0;
    errorHandler(E.message, "initializeMSR()");
  }
}
function openMSR()
{
  try {
    var rtnOpen = MSRCommon.Open("MSR");
    if (rtnOpen == 0) {
        var rtnClaim = MSRCommon.ClaimDevice(1000);
    }
    if (MSRCommon.Claimed) {
      MSRCommon.DeviceEnabled = 1;
    }
    if (MSRCommon.DeviceEnabled) {
      MSRCommon.DataEventEnabled = 1;
    }
  }
  catch (E)
  {
    errorHandler(E.message, "openMSR()");
  }
}
function closeMSR()
{
  if (MSRInitialized == 0) {
    return;
  }
  try {
    if (MSRCommon.DeviceEnabled) {
      var rtnClear = MSRCommon.ClearInput();
    }
    var rtnClose = MSRCommon.Close();
  }
  catch (E)
  {
    errorHandler(E.message, "closeMSR()");
  }
}
