﻿/// <reference path="~/Static/Shared/Javascript/scriptaculous/1.8.0/slider.js"/>

var NavigationMenu = Class.create();

NavigationMenu.prototype =
{
    m_slider: null,
    m_ignoreEvent: false,
    initialize: function() {
        this._wireEvents();
        this._initSlider();

        g_kartController.addMapElementEventListener(
            "map:zoomed",
            this._mapZoomed.bind(this));
    },

    show3DButtons: function() {
        $("buttonRow3D").className = "visible";
        $("navigationMenu").setStyle({ height: '414px' });
    },

    hide3DButtons: function() {
        $("buttonRow3D").className = "collapsed";
        $("navigationMenu").setStyle({ height: '246px' });
    },

    _mapZoomed: function() {
        if (!this.m_ignoreEvent) {
            this.m_ignoreEvent = true;
            this.m_slider.setValue(g_kartController.getMap().getZoomLevel());
            this.m_ignoreEvent = false;
        }
        else this.m_ignoreEvent = false;
    },

    _initSlider: function() {
        var t_initValues = g_kartController.getInitValues();
        var t_valueRange = $R(0, t_initValues.upperZoom);
        this.m_slider = new Control.Slider("zoomSlider", "zoomSliderContainer",
            {
                axis: "vertical",
                range: t_valueRange,
                values: t_valueRange,
                sliderValue: g_kartController.getMap().getZoomLevel(),
                onChange: this._sliderChanged.bind(this)
            }
        );
    },

    _sliderChanged: function(t_value) {
        if (!this.m_ignoreEvent) {
            g_kartController.getMap().zoom(t_value);
        }
    },

    _wireEvents: function() {
        var t_move = function(t_move) {
            g_kartController.getMap().move(t_move);
        };
        Event.observe(
            $("btnNorthAnchor"),
            "click",
           t_move.curry(new Move(0, 300)));

        Event.observe(
            $("btnWestAnchor"),
            "click",
            t_move.curry(new Move(300, 0)));

        Event.observe(
            $("btnEastAnchor"),
            "click",
            t_move.curry(new Move(-300, 0)));

        Event.observe(
            $("btnSouthAnchor"),
            "click",
            t_move.curry(new Move(0, -300)));

        var t_zoom = function(t_level) {
            if (t_level < 0)
                g_kartController.getMap().zoomOut();
            else
                g_kartController.getMap().zoomIn();
        };
        Event.observe(
            $("btnZoomIn"),
            "click",
            t_zoom.curry(1));

        Event.observe(
            $("btnZoomOut"),
            "click",
            t_zoom.curry(-1));

        // 3D events
        var t_ignore3DStopEvent = true;
        var t_stopGlobe = function() {
            if (!t_ignore3DStopEvent) {
                g_kartController.stopGlobeUpdate();
                t_ignore3DStopEvent = true;
            }
        };

        var t_rotate = function(t_anglex, t_angley) {
            t_ignore3DStopEvent = false;
            g_kartController.updateGlobeRotate(t_anglex, t_angley);
        };
        Event.observe(
            $("btnRotateCWAnchor"),
            "mousedown",
            t_rotate.curry(-1, 0));
        Event.observe(
            $("btnRotateCCWAnchor"),
            "mousedown",
            t_rotate.curry(1, 0));
        Event.observe(
            $("btnRotateCWAnchor"),
            "mouseup",
            t_stopGlobe.curry());
        Event.observe(
            $("btnRotateCCWAnchor"),
            "mouseup",
            t_stopGlobe.curry());
        Event.observe(
            $("btnRotateCWAnchor"),
            "mouseout",
            t_stopGlobe.curry());
        Event.observe(
            $("btnRotateCCWAnchor"),
            "mouseout",
            t_stopGlobe.curry());

        Event.observe(
            $("btnIncreaseAngleAnchor"),
            "mousedown",
            t_rotate.curry(0, 0.5));
        Event.observe(
            $("btnDecreaseAngleAnchor"),
            "mousedown",
            t_rotate.curry(0, -0.5));
        Event.observe(
            $("btnIncreaseAngleAnchor"),
            "mouseup",
            t_stopGlobe.curry());
        Event.observe(
            $("btnDecreaseAngleAnchor"),
            "mouseup",
            t_stopGlobe.curry());
        Event.observe(
            $("btnIncreaseAngleAnchor"),
            "mouseout",
            t_stopGlobe.curry());
        Event.observe(
            $("btnDecreaseAngleAnchor"),
            "mouseout",
            t_stopGlobe.curry());

        var t_hover = function(t_speed) {
            t_ignore3DStopEvent = false;
            g_kartController.updateGlobeUpDown(t_speed);
        };
        Event.observe(
            $("btnIncreaseHeightAnchor"),
            "mousedown",
            t_hover.curry(0.25));
        Event.observe(
            $("btnDecreaseHeightAnchor"),
            "mousedown",
            t_hover.curry(-0.25));
        Event.observe(
            $("btnIncreaseHeightAnchor"),
            "mouseup",
            t_stopGlobe.curry());
        Event.observe(
            $("btnDecreaseHeightAnchor"),
            "mouseup",
            t_stopGlobe.curry());
        Event.observe(
            $("btnIncreaseHeightAnchor"),
            "mouseout",
            t_stopGlobe.curry());
        Event.observe(
            $("btnDecreaseHeightAnchor"),
            "mouseout",
            t_stopGlobe.curry());
    }
}