/*
 * flashMessage jquery plugin 
 */
(function($){
    var template;
    var counter = 0;
	
    $.notifications = function(msg, options) {
        counter++;
        
        var settings = $.extend({}, $.notifications.defaults, options);
        
		if (!template) {
        	template = $('<div id="flashMessage_notification"></div>').appendTo(document.body);
		}

		var n = $( '<div class="' + settings.msgType + '" id="flashMessage-' + counter + '">' + msg + '</div>').hide().appendTo("#flashMessage_notification");	
		
		if( settings.effect == "fade" ) {
			n.fadeIn( settings.fadeSpeed );
		} else {
			n.slideDown( settings.fadeSpeed );
		}

		if (settings.stick) {
			var close = $('<a href="javascript:void(0);">' + settings.close + '</a>').click(function() {
				if (settings.effect == "fade") {
					$(this.parentNode).fadeOut( settings.fadeSpeed, function() {
						$(this).remove();
					});
				}
				else {					
					$(this.parentNode).slideUp( settings.fadeSpeed, function() {
						$(this).remove();
					});					
				}
			});
			close.appendTo(n);
		}		
    	
		if (!settings.stick) {
			var notificationsDelayer = delayTimer(settings.timeout);
			notificationsDelayer(update, { counter: counter, effect: settings.effect, fadeSpeed : settings.fadeSpeed } );
		}
	};
	
	$.notifications.success = function( msg, options ){		
        return $.notifications( msg, $.extend( {}, options, { msgType : "success"}) );
    };
	
    $.notifications.error = function( msg, options ){
        return $.notifications( msg, $.extend( { stick: true }, options, { msgType : "error" }) );
    };
	
    $.notifications.warning = function( msg, options ){
        return $.notifications( msg, $.extend( {}, options, { msgType : "warning" }) );
    };	
    
	function update(params) {				
		if (params.effect == "fade") {
			$("#flashMessage-" + params.counter).fadeOut( params.fadeSpeed, function(){
				$(this).remove();
			});
		} else {
			$("#flashMessage-" + params.counter).slideUp( params.fadeSpeed, function(){
				$(this).remove();
			});			
		}
	}
	
	function delayTimer(delay) {
	    var timer;
	    return function(fn, params) {
	        timer = clearTimeout(timer);
	        if (fn)
	            timer = setTimeout(function() {
	                fn(params);
	            }, delay);
	        return timer;
	    };
	}	

	$.notifications.defaults = {
            msgType: "notice",
			displayType: 'notification',
			timeout: 10000,
			stick: true,
			fadeSpeed : 800,
			close : "x",
			effect : "fade"
        };
			

	
	function flashMessageDialog(msg, options){	
		var defaults = {
				autoOpen: true,
				dialogClass: 'bbinary_dialog' ,
				width: 502,
				height: 200,
				modal:true,
				closeOnEscape: true,
				close: function(){ //cleanup
					$(this).dialog('destroy'); 
					$('#flashMessage').remove()},
				buttons: {
					OK: function() {
						$(this).dialog('close');
					}
				
				}
		};
		var settings = $.extend({}, defaults, options);
		var msgDiv = $( '<div class="' + settings.msgType + '" id="flashMessage"><p class="textContent">' + msg + '</p></div>').appendTo(document.body);
		$('#flashMessage').dialog(settings);
	}

    
	$.flashMessage = function(msg, options){
		switch(options.displayType)
		{
		case 'dialog':
		  flashMessageDialog(msg, options);
		  break;
		case 'notification':
		//default:
		  $.notifications(msg, options);
		}
		
	}	
	
})(jQuery);

var FlashMessage = {
	init: function(){
		if(AppData.flashMessage != undefined)
		var len = AppData.flashMessage.length;
		for (i=0; i <len ;i++)
			$.flashMessage(AppData.flashMessage[i].message, AppData.flashMessage[i].options);
	}
}

$(document).ready(function() {
	FlashMessage.init();
});