/**
*	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: 	600,				// in effect duration in miliseconds
				stayTime: 			3000,				// time in miliseconds before the item has to disappear
				text: 				'',					// content of the item
				stay: 				false,				// should the notice item stay or not?
				type: 				'notice' 			// could also be error, succes
			}
			
			// declare varaibles
			var options, noticeWrapAll, noticeItemOuter, noticeItemInner, noticeItemClose;
								
			options 		= jQuery.extend({}, defaults, options);
			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('<p><span class="icon">&nbsp;</span>'+options.text+'</p>').animate(options.inEffect, options.inEffectDuration).wrap(noticeItemOuter);
			noticeItemClose	= jQuery('<div></div>').addClass('notice-item-close').prependTo(noticeItemInner).html('x').click(function() { jQuery.noticeRemove(noticeItemInner) });
			
        noticeItemInner.backgroundCanvas();

        $(window).resize(function() { noticeItemInner.backgroundCanvasPaint(drawBgAndBordertFkt); });

    	setTimeout( function( ) {
    			noticeItemInner.backgroundCanvasPaint(drawBgAndBordertFkt);
    		}, 100 );
  
			// 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);

function drawBgAndBordertFkt(context, width, height, canvas, $canvas, $canvasDiv, $content, $element )   
{  
    var options = {x:0, height: height, width: width, radius:20,  border: 0 };  
    
    if ($element.hasClass( 'error' ) || $element.hasClass( 'warning' )) {
    	context.fillStyle = "EE9999";
    } else {
    	context.fillStyle = "9999DD";
    }  
    $.canvasPaint.roundedRect(context,options);  
    
    // Draw the gradient filled inner rectangle  
    var backgroundGradient = context.createLinearGradient(0, 0, 0, height - 10);
    if ($element.hasClass( 'error' )) {
        backgroundGradient.addColorStop(0 ,'#FF6000');
        backgroundGradient.addColorStop(1, '#FFFAFA');
    } else if ($element.hasClass( 'warning' )) {
        backgroundGradient.addColorStop(0 ,'#FFb000');
        backgroundGradient.addColorStop(1, '#FFFAFA');
    } else {
        backgroundGradient.addColorStop(0 ,'#9999FF');  
        backgroundGradient.addColorStop(1, '#FFFFFF');
    }  

    options.border = 1;
    context.fillStyle = backgroundGradient;   
    $.canvasPaint.roundedRect(context,options);
}