/*

Life as Me: Flash Message jQuery Plugin
Copyright (c) 2008 Alice Dawn Bevan-McGregor. All Rights Reserved.

Permission is granted to use and modify this file as long as this original header remains intact.

For additional information on the site design used by Life as Me, please see the following website:

    http://www.lifeasme.com/corporate/site-design/

Changelog:

    1.0     Initial release.
    1.1     Updated to use setTimeout vs. the elem.animate() hack.
*/

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-close"><input type="submit" class="button" value="Zavřít" name="closeAlert" /></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(500);
    
    if ( ! this.element.hasClass('error') )
        this.timeout = window.setTimeout(function(){ jQuery.flash.onTimeout() }, 10000);
}

jQuery.Flash.prototype.hide = function() {
    if ( this.timeout ) {
        clearTimeout(this.timeout);
        this.timeout = undefined;
    }
    
    this.element.fadeOut(500).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').html(message);
    
    this.show();
}

jQuery.Flash.prototype.subtle = function(label, message) { this.message('subtle', label, message); }
jQuery.Flash.prototype.error = function(label, message) { this.message('error', label, message); }
jQuery.Flash.prototype.failure = function(label, message) { this.message('failure', label, message); }
jQuery.Flash.prototype.fail = function(label, message) { this.message('failure', label, message); }
jQuery.Flash.prototype.warning = function(label, message) { this.message('warning', label, message); }
jQuery.Flash.prototype.warn = function(label, message) { this.message('warning', label, message); }
jQuery.Flash.prototype.information = function(label, message) { this.message('information', label, message); }
jQuery.Flash.prototype.info = function(label, message) { this.message('information', label, message); }
jQuery.Flash.prototype.success = function(label, message) { this.message('success', label, message); }

jQuery.Flash.prototype.getWindowHeight = function() {
	var windowHeight = 0;
	if (typeof(window.innerHeight) == 'number') {
		windowHeight = window.innerHeight;
	} else {
		if (document.documentElement && document.documentElement.clientHeight) {
			windowHeight = document.documentElement.clientHeight;
		} else {
			if (document.body && document.body.clientHeight) {
				windowHeight = document.body.clientHeight;
			}
		}
	}
	return windowHeight;
}

jQuery.Flash.prototype.center = function() {
	// Request data for centering  
	var windowWidth = document.documentElement.clientWidth;
	var windowHeight = this.getWindowHeight();
	
	var flashHeight = $("#flash").height();
	var flashWidth = $("#flash").width();

	// Center  
	$("#flash").css({  
		"position": "absolute",  
		"top": (windowHeight / 2) - (flashHeight / 2) + 'px',  
		"left": (windowWidth / 2 - flashWidth / 2) + 'px'  
	});
}

$(function(){ jQuery.flash = new jQuery.Flash('#flash'); });
