Keyboard.Sequence

A key sequence scanner for building things like Credit card swipe, check scanner or barcode scanner input.

HTML

Swipe a card in your<a href="http://www.amazon.com/New-MagTek-Magnetic-Reader-J79080/dp/B004KO7W2G/">USB Credit Swipe</a>!<br/>
(a sane person should review the code before doing this)

CSS

l

JavaScript

Keyboard.Sequence = new Class({
    pattern : null,
    callback : null,
    id : null,
    initialize : function(regex, callback){
        this.pattern = regex;
        this.id = this.uuid();
        this.callback = callback;
        Keyboard.Sequence.register(this);
    },
    containedIn : function(str){
        if(this.pattern instanceof Array){
            var result = [];
            var temp;
            this.pattern.each(function(pattern){
                temp = str.match(pattern);
                if(temp) result.combine(temp);
            });
            return result;
        } else return str.match(this.pattern);
    },
    processResults : function(results){
        return results;
    },
    uuid : function(){
        var s = [];
        var hexDigits = "0123456789ABCDEF";
        for (var i = 0; i < 32; i++)  s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
        s[12] = "4";
        s[16] = hexDigits.substr((s[16] & 0x3) | 0x8, 1);
        return s.join("");
    }
});
Keyboard.Sequence.CreditSwipe = new Class({
    Extends : Keyboard.Sequence,
    initialize : function(callback){
        this.parent([
            /%B[0-9 ]{13,18}\^[\/A-Z ]+\^[0-9]{13,}\?/mi,
            /;[0-9]{13,16}=[0-9]{13,}\?/mi
        ], callback);
    },
    processResults : function(incoming){
        var results = {};
        var something = false;
        incoming.each(function(result){
            if(result.substring(0,1) == '%'){
                var parts = result.substring(2,result.length-2).split('^');
                results.account = parts[0];
                if(parts[1].indexOf('/') != -1){
                    var last = parts[1].substring(0, parts[1].indexOf('/'));
                    last = last.substring(0,1).toUpperCase()+last.substring(1, last.length).toLowerCase();
                    results.last_name = last;
                    var first = parts[1].substring(parts[1].indexOf('/')+1, parts[1].length);
                    if(first.indexOf(' ')...