﻿/*
*/
var simpliciKey = {
    selectedObj : null,
    trackedObjs : [],
    trackedDefaults : [],
    trackedResults : [],
    
    // CONSTANTS
    SPACE : 32,
    ENTER : 13,
    ESCAPE : 27,
    TAB : 9,
    SHIFT : 16,
    ALT : 18,
    CTRL : 17,
    UP : 38,
    RIGHT : 39,
    DOWN : 40,
    LEFT : 37,
    ARROWS : [38,39,40,37],
    SPECIAL : [27, 9, 38, 39, 40, 37, 16, 18, 17],
    
	
	init : function (){
		simpliciKey.addEvent(document, "keydown", simpliciKey.preventDefault);
		simpliciKey.addEvent(document, "keypress", simpliciKey.preventDefault);
	    simpliciKey.addEvent(document, "keyup", simpliciKey.processKey);
	},
    track: function (keynum, func, result){
        if (typeof keynum != "object")
        {
            keynum = [keynum];
            if (result != null) {
                result = [result];
            }
        }
        for (i=0; i<keynum.length; i++)
        {
            // add key to tracking array
            simpliciKey.trackedObjs[keynum[i]] = func;
            if (result != null) {
                simpliciKey.trackedResults[keynum[i]] = result[i];
            }
            else {
                simpliciKey.trackedResults[keynum[i]] = keynum[i];
            }
            // add default
            simpliciKey.trackedDefaults[keynum[i]] = true;
        }
    },

	processKey : function (evt){
        if(simpliciKey.trackedObjs[evt.keyCode])
        {
            simpliciKey.trackedObjs[evt.keyCode](simpliciKey.trackedResults[evt.keyCode]);
        }
	},
	preventDefault : function (evt){
        if(simpliciKey.trackedObjs[evt.keyCode]) // && !(simpliciKey.trackedDefaults[evt.keyCode]))
        {
            if(evt.preventDefault){
	            evt.preventDefault();
            }
            else{
	            evt.returnValue = false;
            }
            if(evt.stopPropagation){
	            evt.stopPropagation();
            }
            else{
	            evt.cancelBubble = true;
            }
        }
        else
        {
            evt.returnValue = true;
        }
	},
	
	checkKey : function (key, key_array){
	    for (i=0; i < key_array.length; i++) {
	        if (key_array[i] == key) {
	            return true;
	        }
	    }
	    return false;
	},
	
	closeSession : function() {
	
	},

	addEvent : function (elm, evt, func){
		if(elm){
			if(elm.addEventListener){
				elm.addEventListener(evt, func, false);
			}
			else if(window.attachEvent){
				elm.attachEvent(("on" + evt), func)
			}
		}
	}
};

function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

simpliciKey.addEvent(window, "load", function(){simpliciKey.init();});
simpliciKey.addEvent(window, "unload", function(){simpliciKey.closeSession();});
