package net.flashpunk.utils 
{
    /**
     * Contains static key constants to be used by Input.
     */
    public class Key 
    {
        public static const ANY:int = -1;
        
        public static const LEFT:int = 37;
        public static const UP:int = 38;
        public static const RIGHT:int = 39;
        public static const DOWN:int = 40;
        
        public static const ENTER:int = 13;
        public static const CONTROL:int = 17;
        public static const SPACE:int = 32;
        public static const SHIFT:int = 16;
        public static const BACKSPACE:int = 8;
        public static const CAPS_LOCK:int = 20;
        public static const DELETE:int = 46;
        public static const END:int = 35;
        public static const ESCAPE:int = 27;
        public static const HOME:int = 36;
        public static const INSERT:int = 45;
        public static const TAB:int = 9;
        public static const PAGE_DOWN:int = 34;
        public static const PAGE_UP:int = 33;
        public static const LEFT_SQUARE_BRACKET:int = 219;
        public static const RIGHT_SQUARE_BRACKET:int = 221;
        
        public static const A:int = 65;
        public static const B:int = 66;
        public static const C:int = 67;
        public static const D:int = 68;
        public static const E:int = 69;
        public static const F:int = 70;
        public static const G:int = 71;
        public static const H:int = 72;
        public static const I:int = 73;
        public static const J:int = 74;
        public static const K:int = 75;
        public static const L:int = 76;
        public static const M:int = 77;
        public static const N:int = 78;
        public static const O:int = 79;
        public static const P:int = 80;
        public static const Q:int = 81;
        public static const R:int = 82;
        public static const S:int = 83;
        public static const T:int = 84;
        public static const U:int = 85;
        public static const V:int = 86;
        public static const W:int = 87;
        public static const X:int = 88;
        public static const Y:int = 89;
        public static const Z:int = 90;
        
        public static const F1:int = 112;
        public static const F2:int = 113;
        public static const F3:int = 114;
        public static const F4:int = 115;
        public static const F5:int = 116;
        public static const F6:int = 117;
        public static const F7:int = 118;
        public static const F8:int = 119;
        public static const F9:int = 120;
        public static const F10:int = 121;
        public static const F11:int = 122;
        public static const F12:int = 123;
        public static const F13:int = 124;
        public static const F14:int = 125;
        public static const F15:int = 126;
        
        public static const DIGIT_0:int = 48;
        public static const DIGIT_1:int = 49;
        public static const DIGIT_2:int = 50;
        public static const DIGIT_3:int = 51;
        public static const DIGIT_4:int = 52;
        public static const DIGIT_5:int = 53;
        public static const DIGIT_6:int = 54;
        public static const DIGIT_7:int = 55;
        public static const DIGIT_8:int = 56;
        public static const DIGIT_9:int = 57;
        
        public static const NUMPAD_0:int = 96;
        public static const NUMPAD_1:int = 97;
        public static const NUMPAD_2:int = 98;
        public static const NUMPAD_3:int = 99;
        public static const NUMPAD_4:int = 100;
        public static const NUMPAD_5:int = 101;
        public static const NUMPAD_6:int = 102;
        public static const NUMPAD_7:int = 103;
        public static const NUMPAD_8:int = 104;
        public static const NUMPAD_9:int = 105;
        public static const NUMPAD_ADD:int = 107;
        public static const NUMPAD_DECIMAL:int = 110;
        public static const NUMPAD_DIVIDE:int = 111;
        public static const NUMPAD_ENTER:int = 108;
        public static const NUMPAD_MULTIPLY:int = 106;
        public static const NUMPAD_SUBTRACT:int = 109;
        
        /**
         * Returns the name of the key.
         * @param    char        The key to name.
         * @return    The name.
         */
        public static function name(char:int):String
        {
            if (char >= A && char <= Z) return String.fromCharCode(char);
            if (char >= F1 && char <= F15) return "F" + String(char - 111);
            if (char >= 96 && char <= 105) return "NUMPAD " + String(char - 96);
            switch (char)
            {
                case LEFT:
                return "LEFT";
                
                case UP:
                return "UP";
                
                case RIGHT:
                return "RIGHT";
                
                case DOWN:
                return "DOWN";
                
                case ENTER:
                return "ENTER";
                
                case CONTROL:
                return "CONTROL";
                
                case SPACE:
                return "SPACE";
                
                case SHIFT:
                return "SHIFT";
                
                case BACKSPACE:
                return "BACKSPACE";
                
                case CAPS_LOCK:
                return "CAPS LOCK";
                
                case DELETE:
                return "DELETE";
                
                case END:
                return "END";
                
                case ESCAPE:     
                return "ESCAPE";
                
                case HOME:         
                return "HOME";
                
                case INSERT:     
                return "INSERT";
                
                case TAB:         
                return "TAB";
                
                case PAGE_DOWN:
                return "PAGE DOWN";
                
                case PAGE_UP:     
                return "PAGE UP";
                
                case NUMPAD_ADD:        
                return "NUMPAD ADD";
                
                case NUMPAD_DECIMAL:    
                return "NUMPAD DECIMAL";
                
                case NUMPAD_DIVIDE:        
                return "NUMPAD DIVIDE";
                
                case NUMPAD_ENTER:        
                return "NUMPAD ENTER";
                
                case NUMPAD_MULTIPLY:    
                return "NUMPAD MULTIPLY";
                
                case NUMPAD_SUBTRACT:    
                return "NUMPAD SUBTRACT";
                
                default:
                return String.fromCharCode(char);
            }
            return String.fromCharCode(char);
        }
    }
}