
(function ($) {
	$.widget("ui.messages", {
		container: null,
		init: function() {
			$uimessagesInitialized = true;
			$.ui.messages = this;
			
			$.ui.messages.list = [];

			this.container = $('<div id="mensagens" />');
			this.element.prepend(this.container);

			for (var i = 0; i < this.options.cache.length; i++) {
				$.addMessage(this.options.cache[i].obj, this.options.cache[i].type, this.options.cache[i].message, this.options.cache[i].callback);
			}
		},
		hideAll: function () {
			if ($.ui.messages.list.length > 0) {
				$.ui.messages.container.queue(function () {
					$.ui.messages.list[0]
					.animate({
						opacity: 0.01
					}, 'fast', function () {
						$.ui.messages.container.dequeue();
						$.ui.messages.hideAll();
						$.ui.messages.list[0].slideUp('fast', function () {
							$.ui.messages.list[0].remove();
							$.ui.messages.list.splice(0, 1);
						});
					});
				});
			}
		}
	});
	$.focusMessage = function () {
		$(window).focus();
		$(document.body).parent()[0].scrollTop = $.ui.messages.container.offset().top;
	},
	$.addMessage = function (obj, type, message, callback) {
		if (obj && type && !message && !callback) {
			message = type;
			type = obj;
			obj = false;
		} else if (obj && type && message && (typeof message != 'string') && !callback) {
			callback = message;
			message = type;
			type = obj;
			obj = false;
		}
		if ($uimessagesInitialized) {
			var $o = $('<div class="mensagem mensagem-'+type+'"><div class="mensagem-corpo"><span class="mensagem-cima"><img src="/img/pixel.gif" alt="" /></span><span class="mensagem-conteudo"><a href="javascript:;" class="mensagem-fechar"><img src="/img/pixel.gif" alt="" /></a><span class="mensagem-icone">&nbsp;</span><span class="mensagem-texto">' + message + '</span></span><span class="mensagem-baixo"><img src="/img/pixel.gif" alt="" /></span></div></div>');
			$.ui.messages.container.append($o);
			$o
			.css({
				opacity: 0,
				display: 'none'
			})
			.hover(function (e) {
				$(e.target).parents('.mensagem').addClass('mensagem-hover');
			}, function (e) {
				$(e.target).parents('.mensagem').removeClass('mensagem-hover');
			})
			.click(function (e) {
				$(obj).each(function () {
					this.focus();
				}).addClass('error');
			})
			.find('.mensagem-fechar').click(function (e) {
				e.stopPropagation();
				$o.animate({
					opacity: 0.01
				}, 'fast', function () {
					$o.slideUp('fast', function () {
						$o.remove();
						var i = $.inArray($o, $.ui.messages.list);
						if (i > -1) {
							$.ui.messages.list.splice(i, 1);
						}						
					});
				});
			});
			$.ui.messages.container.queue(function () {
				$o
				.animate({
					height: 'show'
				})
				.fadeTo('fast', 1, (function () {
					$.ui.messages.container.dequeue();
					if (callback) {
						callback(this);
					}
				}));
			});
			$.ui.messages.list.push($o);
			return this;
		} else {
			$.ui.messages.defaults.cache.push({
				obj: obj,
				type: type, 
				message: message,
				callback: callback
			});
		}
	}
})(jQuery);

$.ui.messages.defaults = {
	cache: []
};
var $uimessagesInitialized = false;

$(function () {
	$('#conteudo').messages();
});
