

var RodocsMessages = function( linkId, baseTitle )
{
	var that = this,
		link = document.getElementById( linkId ),
		originalTitle = document.title,
		flasher = null,
		messages = [];
	
	function titleFlash( init )
	{
		if( init && flasher )
		{
			try
			{
				window.clearTimeout( flasher );
			}
			catch( e )
			{
				//console.log( "flasher not active" )
			}
		}
		
		if( !messages.length )
		{
			document.title = originalTitle;
			return;
		}
		
		if( document.title == originalTitle )
		{
			document.title =  messages.length + ' Nachrichten';
			flasher = window.setTimeout( titleFlash, 2000 );
			return;
		}

		document.title = originalTitle;
		flasher = window.setTimeout( titleFlash, 5000 );
	}
	
	function redraw( newMessages )
	{
		//console.log( 'redrawing RodocsMessages' );

		var diff = [], 
			mstate = {};

		if( newMessages )
		{
			if( messages && messages.length )
			{
				for( var i=0, message; message = messages[i]; i++ )
					mstate[ message.id ] = 1;
			}
			
			messages = newMessages;
			storage.set( 'messages', messages );
			storage.set( 'messagesUpdate', (new Date()).getTime() );
		}

		
		for( var i=0, message; message = messages[i]; i++ )
		{
			//console.log( 'adding RodocsMessages', message.id );
			
			if( !mstate[ message.id ] )
				diff.push( message );
		}

		// update link...
		while( link.hasChildNodes() )
			link.removeChild( link.childNodes[0] );
		
		var m = baseTitle;
		if( messages.length )
		{
			m += ' ('+ messages.length +')';
			titleFlash( true );
		}
		
		link.appendChild( document.createTextNode( m ) )

		// throw bubbles												<--------
		//console.dir( diff );
		if( diff.length > 4 )
		{
			if( typeof(RodocsBubble) != 'undefined'  )
				new RodocsBubble( '<p><a href="/nachrichten">Zum Nachrichtencenter</a></p>', diff.length + ' Neue Nachrichten', 'message', '/styles/default/img/bubbles/messages.png' );
		}
		else if( diff.length > 0 )
		{
			for( var i=0, message; message = diff[i]; i++ )
			{
				var p = document.createElement( 'p' ),
					a = document.createElement( 'a' );
				p.appendChild( a );
				a.appendChild( document.createTextNode( message.subject ) );
				a.href = '/nachrichten/' + message.id;
				
				if( typeof(RodocsBubble) != 'undefined'  )
				{
					if( message.type == "INFO" )
						new RodocsBubble( p, 'Nachricht vom System', 'message' );
					else
						new RodocsBubble( p, 'Nachricht von ' + message.sender.name, 'message', message.sender.avatar.small );
				}
			}
		}

		//console.log( 'redrawing RodocsMessages - DONE' );
	}
	
	this.refresh = function()
	{
		//console.log( 'refreshing RodocsMessages' );
		
		if( typeof( RS ) == 'undefined' || typeof( RS.user ) == 'undefined' || typeof( RS.user.name ) == 'undefined' )
		{
			//console.log( 'RodocsMessages aborted since handling guest here' );
			return;
		}
		
		if( typeof( RS ) == 'undefined' || typeof( RS.primary ) == 'undefined' || !RS.primary )
		{
			//console.log( 'RodocsMessages aborted since handling secondary window here' );
			return;
		}
		
		var xhr;
		xhr = jQuery.getJSON(
			'/nachrichten/?format=json&ident=' + storage.get('ident'),
			function( data )
			{
				// show error Bubble
				// terminate interval if session transparently died
				if( xhr.status != 200 )
				{
					if( typeof(RodocsBubble) != 'undefined'  )
						RodocsBubbles.ajaxError( xhr );
					
					return;
				}
				
				redraw( data );
				window.setTimeout( function(){ that.refresh(); }, 60000 );
			} 
		);
	};
	
	this.initialize = function()
	{
		//console.log( 'initializing RodocsMessages' );

		if( typeof( RS ) == 'undefined' || typeof( RS.primary ) == 'undefined' || !RS.primary )
		{
			//console.log( 'RodocsMessages aborted since handling secondary window here' );
			return;
		}
		
		if( typeof( RS ) == 'undefined' || typeof( RS.user ) == 'undefined' || typeof( RS.user.name ) == 'undefined' )
		{
			//console.log( 'RodocsMessages aborted since handling guest here' );
			return;
		}
		
		// abort if there's no 
		if( !link )
			return;

		messages = storage.get( 'messages' );		
		var lastUpdate = storage.get( 'messagesUpdate' ),
			nextUpdate;

		if( typeof( RS.messages ) != 'undefined' )
		{
			redraw( RS.messages );
			window.setTimeout( function(){ that.refresh(); }, 60000 );
			//console.log( 'RodocsMessages scheduled to run in ', 60, 'seconds' );
			return;
		}

		that.refresh();
		//console.log( 'initializing RodocsMessages - DONE' );
	};
}

// load when DOM ready
jQuery( function(){ RodocsMessages = new RodocsMessages( 'messageLink', 'Postfach' ); RodocsMessages.initialize() } );
