/**
*	jQuery.noticeAdd() and jQuery.noticeRemove()
*	These functions create and remove growl-like notices
*		
*   Copyright (c) 2009 Tim Benniks
*
*	Permission is hereby granted, free of charge, to any person obtaining a copy
*	of this software and associated documentation files (the "Software"), to deal
*	in the Software without restriction, including without limitation the rights
*	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
*	copies of the Software, and to permit persons to whom the Software is
*	furnished to do so, subject to the following conditions:
*
*	The above copyright notice and this permission notice shall be included in
*	all copies or substantial portions of the Software.
*
*	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
*	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
*	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
*	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
*	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
*	OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
*	THE SOFTWARE.
*	
*	@author 	Tim Benniks <tim@timbenniks.com>
* 	@copyright  2009 timbenniks.com
*	@version    $Id: jquery.notice.js 1 2009-01-24 12:24:18Z timbenniks $
**/
(function(jQuery) {
    jQuery.extend({
        noticeAdd: function(options) {
            var defaults = {
                inEffect: { opacity: 'show' }, // in effect
                inEffectDuration: 500, 			// in effect duration in miliseconds
                stayTime: 6000, 			// time in miliseconds before the item has to disappear
                text: '', 				// content of the item
                css: 'pass',
                title: '',
                stay: false, 			// should the notice item stay or not?
                type: 'notice' 			// could also be error, succes
            }

            // declare varaibles
            var text, options, noticeWrapAll, noticeItemOuter, noticeItemInner, noticeItemClose;
            options = jQuery.extend({}, defaults, options);
            text = options.text;
            if (options.title != '') {
                text = $.format('<div class="{css}"><div>{title}</div>{text}</div>', { title: options.title, text: options.text, css: options.css });
            }
            noticeWrapAll = (!jQuery('.notice-wrap').length) ? jQuery('<div></div>').addClass('notice-wrap').appendTo('body') : jQuery('.notice-wrap');
            noticeItemOuter = jQuery('<div></div>').addClass('notice-item-wrapper');
            noticeItemInner = jQuery('<div></div>').hide().addClass('notice-item ' + options.type).appendTo(noticeWrapAll).html(text).animate(options.inEffect, options.inEffectDuration).wrap(noticeItemOuter);
            noticeItemClose = jQuery('<div></div>').addClass('notice-item-close').prependTo(noticeItemInner).html('x').click(function() { jQuery.noticeRemove(noticeItemInner) });

            // hmmmz, zucht
            if (navigator.userAgent.match(/MSIE 6/i)) {
                noticeWrapAll.css({ top: document.documentElement.scrollTop });
            }

            if (!options.stay) {
                setTimeout(function() {
                    jQuery.noticeRemove(noticeItemInner);
                },
				options.stayTime);
            }
        },

        noticeRemove: function(obj) {
            obj.animate({ opacity: '0' }, 600, function() {
                obj.parent().animate({ height: '0px' }, 300, function() {
                    obj.parent().remove();
                });
            });
        }
    });
})(jQuery);