﻿var media_shade =
{
    // Variables
    mId: "media_shade",
    mAdId: "media_shade_ad",
    closeAdId: "close_ad",
    mHeight: 300,
    mWidth: 1000,
    mMinHeight: 40,
    mTimeout: 20,
    mStep: 10,
    blindRate: 20,
    currTimeout: undefined,
    delayTimeout: undefined,

    // Methods
    delayBlind: function (dir, obj, mStep, targetHeight) {
        this.delayTimeout = setTimeout(function () { media_shade.blind(dir, obj, mStep, targetHeight) }, 1200);
        Event.observe(obj, "mouseout", function () { media_shade.cancelDelay() });
    },

    cancelDelay: function () {
        clearTimeout(this.delayTimeout);
    },

    blind: function (dir, obj, mStep, targetHeight) {
        // Clear handlers
        Event.stopObserving(obj, "mouseover");
        Event.stopObserving(obj, "mouseout");

        var tHeight = obj.getHeight();
        if (dir == "up") {
            var nHeight = parseInt(tHeight) - parseInt(mStep);
            if (nHeight >= targetHeight) {
                $(obj).style.height = nHeight + "px";
                if (this.currTimeout != undefined)
                    clearTimeout(this.currTimeout);
                this.currTimeout = setTimeout(function () { media_shade.blind("up", obj, mStep, targetHeight) }, this.blindRate);
            } else {
                // Remove close button
                Event.stopObserving($(this.closeAdId), "click");
                $(this.closeAdId).hide();

                Event.observe(obj, "mouseover", function () { media_shade.delayBlind("down", obj, mStep, media_shade.mHeight) });
            }
        } else if (dir == "down") {
            var tHeight = obj.getHeight();
            var nHeight = parseInt(tHeight) + parseInt(mStep);
            if (nHeight <= targetHeight) {
                $(obj).style.height = nHeight + "px";
                if (this.currTimeout != undefined)
                    clearTimeout(this.currTimeout);
                this.currTimeout = setTimeout(function () { media_shade.blind("down", obj, mStep, targetHeight) }, this.blindRate);
            } else {
                // Attach Events               
                Event.observe(obj, "mouseover", function () { if (media_shade.currTimeout != undefined) clearTimeout(media_shade.currTimeout) });

                Event.observe(obj, "mouseout", function () {
                    if (media_shade.currTimeout != undefined)
                        clearTimeout(media_shade.currTimeout);
                    media_shade.currTimeout = setTimeout(function () { media_shade.blind("up", obj, media_shade.mStep, media_shade.mMinHeight) }, media_shade.mTimeout * 1000);
                });


                // Add close button
                Event.observe($(this.closeAdId), "click", function () {
                    media_shade.blind("up", obj, media_shade.mStep, media_shade.mMinHeight);
                });
                $(this.closeAdId).show();

                // roll up after mTimeout seconds
                this.currTimeout = setTimeout(function () { media_shade.blind("up", obj, media_shade.mStep, media_shade.mMinHeight) }, this.mTimeout * 1000);
            }
        }
    }

}



