// JavaScript Document
jQuery.Flash = function(element){

	this.element = $(element);
    this.timeout = undefined;
    
    var content = $('<div class="yui-t1 doc4"></div>');
    
    content.append('<div class="yui-main"><div class="yui-b"><div></div></div></div>');
    content.append('<div class="yui-b"></div>');
    content.append('<div style="clear: both;"><!-- IE --></div>');
    
    this.element.hide()
        .click(function(){ jQuery.flash.hide(); })
        .hover(function(){ jQuery.flash.onOver(); }, function(){ jQuery.flash.onLeave(); })
        .append(content);
};

jQuery.Flash.version = 1.1;

jQuery.Flash.prototype.onOver = function() {
    this.element.addClass('over');
}

jQuery.Flash.prototype.onLeave = function() {
    this.element.removeClass('over');
    
    if ( this.element.hasClass('expired') ) this.hide();
}

jQuery.Flash.prototype.onTimeout = function() {
    this.element.addClass('expired');
    if ( ! this.element.hasClass('over') ) this.hide();
}

jQuery.Flash.prototype.show = function() {
    this.element.fadeIn(1000);
    
    if ( ! this.element.hasClass('error') )
        this.timeout = window.setTimeout(function(){ jQuery.flash.onTimeout() }, 4000);
}

jQuery.Flash.prototype.hide = function() {
    if ( this.timeout ) {
        clearTimeout(this.timeout);
        this.timeout = undefined;
    }
    
    this.element.fadeOut(1000).removeClass('expired').removeClass('over');
}

jQuery.Flash.prototype.message = function(klass, label, message) {
    this.element.removeClass('expired');
    
    if ( this.element.is(":visible") ) {
        if ( this.timeout ) {
            clearTimeout(this.timeout);
            this.timeout = undefined;
        }
        
        this.element.fadeOut(1000, function(){ jQuery.flash.message(klass, label, message); });
        return;
    }
    
    this.element.attr('class', klass);
    this.element.find('.yui-b div').text(message);
    this.element.find('.yui-b label').text(label);
    
    this.show();
}

jQuery.Flash.prototype.subtle = function(label, message) { this.message('subtle', '', message); }
jQuery.Flash.prototype.error = function(label, message) { this.message('error_flash', '', message); }
jQuery.Flash.prototype.failure = function(label, message) { this.message('failure', '', message); }
jQuery.Flash.prototype.fail = function(label, message) { this.message('failure', '', message); }
jQuery.Flash.prototype.warning = function(label, message) { this.message('warning', '', message); }
jQuery.Flash.prototype.warn = function(label, message) { this.message('warning', '', message); }
jQuery.Flash.prototype.information = function(label, message) { this.message('information', '', message); }
jQuery.Flash.prototype.info = function(label, message) { this.message('information', '', message); }
jQuery.Flash.prototype.success = function(label, message) { this.message('success', '', message); }

$(function(){ jQuery.flash = new jQuery.Flash('#flash'); });
    
