/* Floating Message v1.0.1
 * http://sideroad.secret.jp/
 * Copyright (c) 2009 sideroad
 * Dual licensed under the MIT licenses.
 * Date: 2009-08-18 */
(function ($) {
    function $divClass(myclass) {
            return $('<div class="float-' + myclass + '"/>');
        }
    var range = {
        top: {left: 10,right: 10},
        bottom: {left: 10,right: 10}
    };
    var right = 10;
    var fContainer = [];
    var scrollTop = 0;

    $(document).ready(function () {
        scrollTop = $(window).scrollTop();
        $(window).scroll(function () {
            scrollTop = $(window).scrollTop();
            for (i = 0; i < fContainer.length; i++) {
                var animate = {};
                var e = fContainer[i];
                animate[e.verticalAlign] = e.range;
                if (e.verticalAlign == "top") animate[e.verticalAlign] += scrollTop;
                else animate[e.verticalAlign] -= scrollTop;
                e.f.animate(animate, {
                    duration: e.moveEaseTime,
                    easing: e.moveEasing,
                    queue: false
                });
            }
        });
    });

    $.floatingMessage = function(message,options,titre) {
        options = options || {};
        //default setting
        options = $.extend({
            verticalAlign: "top",
            align: "right",
            width: 304,
            height: 64,
            time: false,
            show: "",
            hide: "",
            padding: 10,
            margin: 10,
            stuffEaseTime: 0,
            stuffEasing: "",
            moveEaseTime: 500,
            moveEasing: "easeInOutCubic",
            element: $("<div></div>"),
            onClose: false
        },
        options);

        var f = $("<div></div>").attr({id: "jqueryFloatingMessage" + new Date().getTime()}).addClass("floating-message");

        f.append(
            $divClass("head").append
            (
                $titre = $divClass("head-top").append
                (
                    $('<img class=\"spacer-1x20 float-left\" src=\"/template_r/ui/spacer.gif\" width=\"1\" height=\"20\"/>'),
                    $h3titre = $('<h3/>').css({'float': 'left'})
                )
            ),
            $divClass("head-bot"),
            $content = $divClass("content"),
            $divClass("foot")
            ).children().children().css({
            'float': 'left'
        });

        var o = $.extend(true, {},options);
        $.extend(o, {f: f,range: range[o.verticalAlign][o.align]});

        if (message) $content.html(message.replace(/\n/g,"<br />"));
        if (titre) $h3titre.html(titre.replace(/\n/g,"<br />"));

        var css = {
/* height : o.height+"px",*/
            width: o.width + "px",
            position: "absolute",
            padding: o.padding + "px"
        };

        css[o.verticalAlign] = range[o.verticalAlign][o.align];
        css[o.align] = right;
        if (o.verticalAlign == "top") {
            css[o.verticalAlign] += scrollTop;
        } else {
            css[o.verticalAlign] -= scrollTop;
        }
        f.css(css).append(o.element);

        var timerId = false;
        var remove = function () {
            
            if (timerId) clearTimeout(timerId);
            var e;
            var animate = {};
            var deleteIndex;
            var orange = (o.height + o.margin + (o.padding * 2));
            /* retrait de l'animation */
            /*for (i = 0; i < fContainer.length; i++) {
                e = fContainer[i];
                if (o === e) deleteIndex = i;
                if (e.range > o.range && e.align == o.align && e.verticalAlign == o.verticalAlign) {
                    e.range -= orange;
                    if (e.range < 0) e.range = 0;
                    animate[e.verticalAlign] = e.range;
                    if (e.verticalAlign == "top") animate[e.verticalAlign] += scrollTop;
                    else animate[e.verticalAlign] -= scrollTop;
                    e.f.animate(animate, {
                        duration: o.stuffEaseTime,
                        easing: o.stuffEasing,
                        queue: false
                    });
                }
            }*/
            fContainer.splice(deleteIndex, 1);
            range[o.verticalAlign][o.align] -= (o.height + o.margin + (o.padding * 2));
            if (range[o.verticalAlign][o.align] < 0) range[o.verticalAlign][o.align] = 10;
            f.hide(o.hide, function () {
                $(this).remove;
                if (o.onClose) o.onClose();
            });
        };
        if (o.time) {
            timerId = setTimeout(remove, o.time);
        }
        f.bind("click", remove);
        $(document.body).append(f);
        f.show(o.show);
        fContainer.push(o);
        range[o.verticalAlign][o.align] += (o.height + o.margin + (o.padding * 2));
    }

    $.fn.floatingMessage = function (options) {
        options = options || {};
        options.element = this;
        $.floatingMessage(false, options);
    }
})(jQuery);
