﻿/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace("IglooSite");

IglooSite.TogglePanelExtenderBehavior = function(element) {
    IglooSite.TogglePanelExtenderBehavior.initializeBase(this, [element]);
}

IglooSite.TogglePanelExtenderBehavior.prototype = {

    _triggerElementId: null,
    _containerElementId: null,
    _bShown: false,
    _timer: -1,

    onclick$handler: null,
    onmouse$handler: null,


    initialize: function() {
        IglooSite.TogglePanelExtenderBehavior.callBaseMethod(this, 'initialize');

        var element = this.get_element();
        Sys.UI.DomElement.setVisibilityMode(element, Sys.UI.VisibilityMode.collapse);
        Sys.UI.DomElement.setVisible(element, false);

        this.onclick$handler = Function.createDelegate(this, this.onclick);
        this.onmouse$handler = Function.createDelegate(this, this.onmouse);

        var elTrigger = $get(this._triggerElementId);
        var elContainer = $get(this._containerElementId);

        Sys.UI.DomEvent.addHandler(elTrigger, "mouseover", this.onclick$handler);
        Sys.UI.DomEvent.addHandler(elContainer, "mouseout", this.onmouse$handler);
        Sys.UI.DomEvent.addHandler(elContainer, "mouseover", this.onmouse$handler);
    },

    onclick: function(e) {
        if(!this._bShown) {
            var element = this.get_element();
            Sys.UI.DomElement.setVisible(element, true);
            this._bShown = true;

            var elTrigger = $get(this._triggerElementId);
            Sys.UI.DomElement.addCssClass(elTrigger, "flyout_shown");
        }
    },

    onmouse: function(e) {
        switch(e.type) {
            case "mouseout":
                if(this._bShown) {
                    if(this._timer >= 0) {
                        window.clearTimeout(this._timer);
                    }
                    this._timer = window.setTimeout(Function.createDelegate(this, this.ontimer), 300);
                }
                break;

            case "mouseover":
                if(this._timer >= 0) {
                    window.clearTimeout(this._timer);
                    this._timer = -1;
                }
                break;
        }
    },

    ontimer: function() {
        this._timer = -1;

        var element = this.get_element();
        Sys.UI.DomElement.setVisible(element, false);
        this._bShown = false;
        
        var elTrigger = $get(this._triggerElementId);
        Sys.UI.DomElement.removeCssClass(elTrigger, "flyout_shown");
    },

    dispose: function() {

        if(this._timer >= 0) {
            window.clearTimeout(this._timer);
            this._timer = -1;
        }

        var elTrigger = $get(this._triggerElementId);
        var elContainer = $get(this._containerElementId);

        Sys.UI.DomEvent.removeHandler(elTrigger, "mouseover", this.onclick$handler);
        Sys.UI.DomEvent.removeHandler(elContainer, "mouseout", this.onmouse$handler);
        Sys.UI.DomEvent.removeHandler(elContainer, "mouseover", this.onmouse$handler);

        IglooSite.TogglePanelExtenderBehavior.callBaseMethod(this, 'dispose');
    }
}
IglooSite.TogglePanelExtenderBehavior.registerClass('IglooSite.TogglePanelExtenderBehavior', Sys.UI.Behavior);

if(typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

