﻿OpenLayers.Control.ModifiedKeyboard = OpenLayers.Class(OpenLayers.Control.KeyboardDefaults, {

    /*
    Property: tabindex
    {int} index of currenttab
    */
    select_layer_index: 0,

    initialize: function() {
        OpenLayers.Control.prototype.initialize.apply(this, arguments);
    },

    defaultKeyPress: function(e) {
        e = e || window.event;
        if (e.keyCode)
            code = e.keyCode;
        else if (e.which)
            code = e.which;

        var element;
        if (e.target) {
            element = e.target;
        }
        else if (e.srcElement) {
            element = e.srcElement;
        }
        if (element.nodeType == 3) {
            element = element.parentNode;
        }
        if (element.tagName == 'INPUT' || element.tagName == 'TEXTAREA' || element.tagName == 'OPTION') {
            return;
        }

        switch (code) {
            case OpenLayers.Event.KEY_LEFT:
                this.map.pan(-this.slideFactor, 0);
                break;
            case OpenLayers.Event.KEY_RIGHT:
                this.map.pan(this.slideFactor, 0);
                break;
            case OpenLayers.Event.KEY_UP:
                this.map.pan(0, -this.slideFactor);
                break;
            case OpenLayers.Event.KEY_DOWN:
                this.map.pan(0, this.slideFactor);
                break;
            case 33: // Page Up. Same in all browsers.
                var size = this.map.getSize();
                this.map.pan(0, -0.75 * size.h);
                break;
            case 34: // Page Down. Same in all browsers.
                var size = this.map.getSize();
                this.map.pan(0, 0.75 * size.h);
                break;
            case 35: // End. Same in all browsers.
                var size = this.map.getSize();
                this.map.pan(0.75 * size.w, 0);
                break;
            case 36: // Home. Same in all browsers.
                var size = this.map.getSize();
                this.map.pan(-0.75 * size.w, 0);
                break;
            case 43:  // +/= (ASCII), keypad + (ASCII, Opera)
            case 61:  // +/= (Mozilla, Opera, some ASCII)
            case 187: // +/= (IE)
            case 107: // keypad + (IE, Mozilla)
                this.map.zoomIn();
                break;
            case 45:  // -/_ (ASCII, Opera), keypad - (ASCII, Opera)
            case 109: // -/_ (Mozilla), keypad - (Mozilla, IE)
            case 189: // -/_ (IE)
            case 95:  // -/_ (some ASCII)
                this.map.zoomOut();
                break;
            case 65: // a
                ChangeTab(clientId_AddressTabPanel);
                AddressClick();
                break;
            case 83: //82 r
                ChangeTab(clientId_RouteTabPanel);
                RouteClick();
                break;
            case 75: // k
                ChangeTab(clientId_MunicipalityTabPanel);
                MunicipalityClick();
                break;
            case 68: // d
                ChangeTab(clientId_DigitizeTabPanel);
                DigitizeClick();
                break;
            case 74: // j
                changeTab(clientId_JurisdictionTabPanel);
                JurisdictionClick();
                break;
            case 83: // s
                changeTab(clientId_SearchResultTabPanel);
                SearchResultClick();
                break;
            case 80: // p
                changeTab(clientId_ParishTabPanel);
                ParishClick();
                break;
            case 78: // n
                var container = $find(tabcontainer);
                if (container) {
                    var length = container._tabs.length;
                    var index = container.get_activeTabIndex();

                    if (index >= length - 1) {
                        container.set_activeTabIndex(0);
                    }
                    else {
                        container.set_activeTabIndex(index + 1);
                        if (container._tabs.length == container.get_activeTabIndex() + 1) {
                            //this.tabindex = 0;
                        }
                    }
                }
                break;
            case 32: // Space
                //var doc = document.getElementById("OpenLayers.Control.StyledLayerSwitcher_12");
                var closedLayerswitcher = document.getElementById("OpenLayers_Control_MaximizeDiv");
                if (closedLayerswitcher.currentStyle.display != "none") {
                    closedLayerswitcher.click();
                    this.select_layer_index = 0;
                }
                else {
                    var openlayerswitcher = document.getElementById("OpenLayers_Control_MinimizeDiv");
                    openlayerswitcher.click();
                }
                break;
            case 82:
                var layer_div = document.getElementById("layersDiv");
                if (layer_div) {
                    var fields = layer_div.getElementsByTagName("input");
                    if (fields) {
                        this.select_layer_index++;
                        if (this.select_layer_index >= fields.length) {
                            this.select_layer_index = 0;
                        }
                        for (var i = 0; i < fields.length; i++) {
                            fields[i].style.borderStyle = "none";
                        }
                        fields[this.select_layer_index].style.borderStyle = "dotted";

                    }
                }
                break;
            case 17: // Ctrl
                var closedLayerswitcher = document.getElementById("OpenLayers_Control_MaximizeDiv");
                if (closedLayerswitcher.currentStyle.display == "none") {
                    var layer_div = document.getElementById("layersDiv");
                    if (layer_div) {
                        var fields = layer_div.getElementsByTagName("input");
                        if (fields) {
                            fields[this.select_layer_index].checked = true;
                            fields[this.select_layer_index].click();

                        }
                    }
                }
                break;
            default:
                break;
        }
    },

    CLASS_NAME: "OpenLayers.Control.ModifiedKeyboard"
});