﻿/// <reference name="MicrosoftAjax.js"/>
Type.registerNamespace('Pacem.UI');

Pacem.UI.RollOverBehavior = function(element) {
    Pacem.UI.RollOverBehavior.initializeBase(this, [element]);

    this._rollOverImage = null;
    this._rollOutImage = null;

    this._imgRollOverHandle = null;
    this._imgRollOutHandle = null;
    this._triggers = null;
    this._enabled = true;

    this._rollOverDelegate = null;
    this._rollOutDelegate = null;
}
Pacem.UI.RollOverBehavior.prototype = {
    initialize: function() {
        Pacem.UI.RollOverBehavior.callBaseMethod(this, 'initialize');
        this._imgRollOverHandle = new Image();
        this._imgRollOutHandle = new Image();
        this._imgRollOverHandle.src = this._rollOverImage;
        if (this._rollOutImage) {
            this._imgRollOutHandle.src = this._rollOutImage;
        } else {
            this._imgRollOutHandle.src = this._getImage().src; // same image as default
        }
        if (!this._triggers)
            this._triggers = [{ TriggerID: this.get_element().id}];
        //
        this._rollOverDelegate = Function.createDelegate(this, this._onRollOver);
        this._rollOutDelegate = Function.createDelegate(this, this._onRollOut);
        for (var j = 0; j < this._triggers.length; j++) {
            var trigger = $get(this._triggers[j].TriggerID);
            $addHandler(trigger, "mouseover", this._rollOverDelegate);
            $addHandler(trigger, "mouseout", this._rollOutDelegate);
        }
    },
    _getImage: function() {
        if (this.get_element().tagName == 'A') {
            var images = this.get_element().getElementsByTagName('IMG');
            if (images.length > 0) return images[0];
            return null;
        } else
            return this.get_element();
    },
    dispose: function() {
        for (var j = 0; j < this._triggers.length; j++) {
            var trigger = $get(this._triggers[j].TriggerID);
            $removeHandler(trigger, "mouseover", this._rollOverDelegate);
            $removeHandler(trigger, "mouseout", this._rollOutDelegate);
        }
        Pacem.UI.RollOverBehavior.callBaseMethod(this, 'dispose');
    },
    _onRollOver: function(evt) {
        if (this._enabled) {
            this._getImage().src = this._imgRollOverHandle.src;
            this.raiseRollOver(new Pacem.UI.RoutedEventArgs(evt.target));
        }
    },
    _onRollOut: function(evt) {
        if (this._enabled) {
            this._getImage().src = this._imgRollOutHandle.src;
            this.raiseRollOut(new Pacem.UI.RoutedEventArgs(evt.target));
        }
    },

    get_triggers: function() {
        return this._triggers;
    },
    set_triggers: function(value) {
        this._triggers = value;
    },
    get_enabled: function() {
        return this._enabled;
    },
    set_enabled: function(value) {
        this._enabled = value;
    },
    get_rollOverImage: function() {
        return this._rollOverImage;
    },
    set_rollOverImage: function(value) {
        this._rollOverImage = value;
    },
    get_rollOutImage: function() {
        return this._rollOutImage;
    },
    set_rollOutImage: function(value) {
        this._rollOutImage = value;
    },
    add_rollOver: function(handler) {
        /// <summary>
        /// Add an event handler for the rollOver event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// RoutedEvent handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('rollOver', handler);
    },
    remove_rollOver: function(handler) {
        /// <summary>
        /// Remove an event handler from the rollOver event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// RoutedEvent handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('rollOver', handler);
    },
    raiseRollOver: function(eventArgs) {
        /// <summary>
        /// Raise the rollOver event
        /// </summary>
        /// <param name="eventArgs" type="Pacem.UI.RoutedEventArgs" mayBeNull="false">
        /// Event arguments for the rollOver event
        /// </param>
        /// <returns />
        var handler = this.get_events().getHandler('rollOver');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    add_rollOut: function(handler) {
        /// <summary>
        /// Add an event handler for the rollOut event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// RoutedEvent handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('rollOut', handler);
    },
    remove_rollOut: function(handler) {
        /// <summary>
        /// Remove an event handler from the rollOut event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// RoutedEvent handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('rollOut', handler);
    },
    raiseRollOut: function(eventArgs) {
        /// <summary>
        /// Raise the rollOut event
        /// </summary>
        /// <param name="eventArgs" type="Pacem.UI.RoutedEventArgs" mayBeNull="false">
        /// Event arguments for the rollOut event
        /// </param>
        /// <returns />
        var handler = this.get_events().getHandler('rollOut');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}
Pacem.UI.RollOverBehavior.registerClass('Pacem.UI.RollOverBehavior', AjaxControlToolkit.BehaviorBase);

// RoutedEventArgs
Pacem.UI.RoutedEventArgs = function(source) {
    Pacem.UI.RoutedEventArgs.initializeBase(this);
    this._source = source;
}
Pacem.UI.RoutedEventArgs.prototype = {
    get_source: function() {
        return this._source;
    }
}
Pacem.UI.RoutedEventArgs.registerClass('Pacem.UI.RoutedEventArgs', Sys.EventArgs);
if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();