// ==UserScript==
// @name          PayPal Virutal Terminal Credit Card Swipe
// @description   Adds a button for swiping credit cards in the PayPal virtual terminal
// @author        Mark Bajema
// @include       https://paypalmanager.paypal.com/*
// ==/UserScript==

var cardNumberField = document.getElementById('cardNumberField');
var cardTypeField = document.getElementById('cardType');
var creditCardMonthField = document.getElementById('creditCardMonth');
var creditCardYearField = document.getElementById('creditCardYear');
var billingFirstNameField = document.getElementById('billingFirstNameField');
var billingLastNameField = document.getElementById('billingLastNameField');

var swipeButton = document.createElement('input');
swipeButton.type = 'button';
swipeButton.value = 'Swipe';
swipeButton.className = 'button primary';
swipeButton.style.marginLeft = '12px';

swipeButton.addEventListener('click', function(event) {
    var raw = prompt("Swipe Data:", "");

    try {
        var head = raw.indexOf("%B");
        var middle = raw.indexOf("^");
        var tail = raw.lastIndexOf("^");

        var cardNumber = raw.substring(head + 2, middle);
        var custName = raw.substring(middle + 1, tail);
        var split = custName.indexOf("/");
        var lastName = custName.substring(0, split);
        var firstName = custName.substring(split + 1, custName.length - 1);
        var creditCardYear = '20' + raw.substring(tail + 1, tail + 3);
        var creditCardMonth = raw.substring(tail + 3, tail + 5);

        cardNumberField.value = cardNumber;
        creditCardYearField.value = creditCardYear;
        creditCardMonthField.value = creditCardMonth;
        billingLastNameField.value = lastName;
        billingFirstNameField.value = firstName;

        var cardType;
        if (cardNumber.substring(0, 1) == 4)
            cardType = 'Visa';
        else if (cardNumber.substring(0, 2) >= 51 && cardNumber.substring(0, 2) <= 55)
            cardType = 'MasterCard';
        else if (cardNumber.substring(0, 4) == 6011)
            cardType = 'Discover';
        else if (cardNumber.substring(0, 2) == 34 || cardNumber.substring(0, 2) == 37)
            cardType = 'American Express';
        cardTypeField.value = cardType;
    }
    catch (ex) {
        alert(ext);
    }

}, false);

var keepAlive = function() {
    var xmlHttp;
    xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function()
    {
        if (xmlHttp.readyState == 4)
            if (xmlHttp.responseText.indexOf("vtReviewTransaction.do") == -1)
                if (confirm("Your session may have expired.\n\nClick \"OK\" to attempt to refresh the Virtual Terminal."))
                    window.location.reload();
    };
    xmlHttp.open("GET", location.href, true);
    xmlHttp.send(null);
}

if (cardNumberField) {
    cardNumberField.parentNode.insertBefore(swipeButton, cardNumberField.nextSibling);
    window.setInterval(keepAlive, 10000);
}
