﻿// ---------------------------------------------------------------------
// Description:	EventDetail Client Script file
// 
// Autor:			Hans Hawe
// Date:			02.06.2009
// 
// (c) by team ModulAcht. All rights reserved
// ---------------------------------------------------------------------

// ---------------------------------------------------------------------
// Required script files:                   Common/prototype.js
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------

var EventDetail = Class.create();
EventDetail.prototype =
{
    // ------------------------------------------------------------
    // Class Member
    // ------------------------------------------------------------
    detailContainer: null,      // outer container of the eventdetail
    sliderId: null,             // id of the element to be slided
    currentMediaKey: null,            // the current loaded media's key. null if no media is loaded
    
    // ------------------------------------------------------------
    /// initialize class
    // ------------------------------------------------------------
    initialize: function(idOfDetailContainer, sliderid) {
        // member init
        this.detailContainer = $(idOfDetailContainer);
        this.sliderId = sliderid;
        // mozilla
        Event.observe(idOfDetailContainer, 'DOMMouseScroll', this._onMouseWheelChanged.bind(this));
        // IE/Opera
        Event.observe(idOfDetailContainer, 'mousewheel', this._onMouseWheelChanged.bind(this));
    },       

    // ------------------------------------------------------------
    // mouse wheel code from http://adomas.org/javascript-mouse-wheel/
    // ------------------------------------------------------------
    handle: function(delta) {
        eval("slider" + this.sliderId + ".setValueBy(" + -delta * 50 + ");");
    },

    // ------------------------------------------------------------
    /** Event handler for mouse wheel event. */
    // ------------------------------------------------------------
    _onMouseWheelChanged: function(event) {
        var delta = 0;
        if (!event) {
            /* For IE. */
            event = window.event;
        }
        if (event.wheelDelta) { /* IE/Opera. */
            delta = event.wheelDelta / 120;
            /** In Opera 9, delta differs in sign as compared to IE. */
            if (window.opera) {
                delta = -delta;
            }
        }
        else if (event.detail) {
            /** Mozilla case. */
            /** In Mozilla, sign of delta is different than in IE.
            * Also, delta is multiple of 3.
            */
            delta = -event.detail / 3;
        }

        /** If delta is nonzero, handle it.
        * Basically, delta is now positive if wheel was scrolled up,
        * and negative, if wheel was scrolled down.
        */
        if (delta) {
            this.handle(delta);
        }

        /** Prevent default actions caused by mouse wheel.
        * That might be ugly, but we handle scrolls somehow
        * anyway, so don't bother here..
        */
        if (event.preventDefault) {
            event.preventDefault();
        }
        event.returnValue = false;
    }
};

var EventDetailStatic =
{
    LoadMedia: function(eventCaption, type, mediaCaption) {
        // convert umlaut
        eventCaption = Misc.ConvertUmlaut(eventCaption);
        mediaCaption = Misc.ConvertUmlaut(mediaCaption);
        var mediaKey = eventCaption + "|" + mediaCaption;
        // check whether to load the media
        if (EventDetail.currentMediaKey == mediaKey) {
            return false;
        }
        else {
        // set new key
            EventDetail.currentMediaKey = mediaKey;
        }
        // show loader icon
        EventList.showAjaxIcon();
        // convert umlaut
        eventCaption = Misc.ConvertUmlaut(eventCaption);
        // create request
        var ajaxRequest = new SmartAjax();
        ajaxRequest.serviceId = "EventService";
        ajaxRequest.url = EventList.ajaxLoaderUrl;
        ajaxRequest.appendRequest("command", "LoadMedia");
        ajaxRequest.appendRequest("type", type);
        ajaxRequest.appendRequest("eventName", eventCaption);
        ajaxRequest.appendRequest("mediaName", mediaCaption);
        ajaxRequest.onResponse = this._onGetMediaResponse.bind(this);
        ajaxRequest.sendRequest();

        // update "locationbar"
        $('locationbar').update(eventCaption + " > " + mediaCaption);
        return false;
    },

    _onGetMediaResponse: function(ajaxObj) {
        if (ajaxObj.error == null) {
            $('media_container').update(ajaxObj.response);
            // show loader icon
            EventList.hideAjaxIcon();
        }
        else {
            alert(ajaxObj.error);
        }
    }
};
