/*global jQuery document window*/
;(function($) {

$.flash = {};
var timeout = undefined;

// find the dialog element on the page
var element;

$(document).ready(function() {
    element = $('#jsflash').hide();
});

function hide() {
    if ( timeout ) {
        window.clearTimeout(timeout);
        timeout = undefined;
    }
    element.fadeOut(1000).removeClass('expired').removeClass('over');
}

function onTimeout() {
    element.addClass('expired');
    if ( ! element.hasClass('over') ) {
        hide();
    }
}

function show() {
    element.fadeIn(1000);
    //if ( ! element.hasClass('error') ) {
        timeout = window.setTimeout(function(){ onTimeout(); }, 7000);
    //}
}

// on hover styles
function onOver() {
    element.addClass('over');
}
function onLeave() {
    element.removeClass('over');
    if ( element.hasClass('expired') ) {
        hide();
    }
}



function buildFlash() {
    $('div.flash_msg_container').remove();
    var content = [
        '<div class="flash_msg_container">',
        '<p></p>',
        '<div class="clear"></div></div>'
    ];
    element.hide()
        .click(function(){ hide(); })
        .hover(onOver, onLeave)
        .append(content.join(""));
}


$.flash.open = function(klass, message) {
    if ( element.is(":visible") ) {
        if ( timeout ) {
            window.clearTimeout(timeout);
            timeout = undefined;
        }
        element.fadeOut(1000, function(){ $.flash.open(klass, message); });
        return;
    }
    buildFlash(); 
    element.attr('class', klass);
    $('.flash_msg_container p', element).text(message);
    show();
};

$.flash.error = function(message) { 
    $.flash.open('error', message); 
};
$.flash.failure = function(message) { 
    $.flash.open('failure', message); 
};
$.flash.fail = function(message) { 
    $.flash.open('failure', message); 
};
$.flash.warning = function(message) { 
    $.flash.open('warning', message); 
};
$.flash.warn = function(message) { 
    $.flash.open('warning', message); 
};
$.flash.information = function(message) { 
    $.flash.open('information', message); 
};
$.flash.info = function(message) { 
    $.flash.open('information', message); 
};
$.flash.success = function(message) { 
    $.flash.open('success', message); 
};

})(jQuery);
