/* microblogg renderer */

if( typeof(MB_Class) == "undefined" )
{
	MB_Class = function( arg ) {
		var tmp = {					
			
			element: null,
			listelement: null,
			username: '',
			history: [],
			
			initialize: function( arg )
			{
				// console.log( "i init, arg=", arg );
				this.element = arg;
				this.username = '';
				this.renderFramework();
				this.renderList();
				this.beginUpdate();
				setInterval( this.beginUpdate.bindAsEventListener(this), 120000 );
			},
			
			beginUpdate: function()
			{
				var url = "http://microblogg.sourze.se/api/statuses/public_timeline.atom";
				url = "/proxy.asp?u="+escape(url);
				new Ajax.Request( url, {
					method: 'get',
					onSuccess: this.onUpdate.bindAsEventListener(this), 
					onFailure: this.onFail.bindAsEventListener(this)
				} );
			},
						
			onFail: function(r)
			{
				// console.log( "i onFail, r=", r, ", target=", this.target );
				// console.log( r.responseText );x
			},
			
			onUpdate: function(r)
			{	
				var el1 = new XMLDoc( r.responseText );
				el1 = el1.docNode;		
				// console.log(el1);
				var entries = el1.getElements('entry');
				var newlist = [];			
				for( var j=0; j<entries.length; j++ )
				{
					var entry = entries[j];
					var author = entry.getElements('author')[0];
					var item = { id: '', authorname: '', authorlink: '', bodyhtml: '', link: '', time: '' };
					item.id = entry.getElements('id')[0].getText();
					item.authorname = author.getElements('name')[0].getText();
					item.authorlink = author.getElements('uri')[0].getText();
					item.time = entry.getElements('published')[0].getText();
					item.link = entry.getElements('link')[0].getAttribute('href');
					var ht = entry.getElements('content')[0].getText();
					ht = this.fixLinks( ht );
					item.bodyhtml = ht;
					newlist[ newlist.length ] = item;	
				}
				// alert( newlist ); 
				this.history = newlist;				
				// this.listelement.innerHTML = 'saving '+this.history.length+" posts";
				// console.log( this.history );				
				this.renderList();
			},
			
			renderFramework: function()
			{
				var pel = document.getElementById( this.element );
				pel.style.display = 'none';
				
				var el1 = document.createElement('div');
				el1.className = 'microblogg';
				// el1.style.overflow = 'hidden';
				pel.appendChild( el1 );
				{
					var el2 = document.createElement('div');
					el2.className = 'inner';
					el1.appendChild( el2 );	
					{					
						var el4 = document.createElement('div');				
						el4.className = 'top';
						el2.appendChild( el4 );
						
						var el5 = document.createElement('a');
						el5.innerHTML = 'sourze<strong>microblogg</strong> vip';
						el5.href = 'http://microblogg.sourze.se';
						el5.target = '_blank';
						el4.appendChild( el5 );
						
						el4.appendChild( document.createElement( 'br' ) );

						el5 = document.createElement('span');
						el5.innerHTML = 'Inbjudna microbloggare';
						el4.appendChild( el5 );
						
						el4.appendChild( document.createElement( 'br' ) );
					}
					
					var el3 = document.createElement('div');
					el3.className = 'notices';
					this.listelement = el3;
					
					el2.appendChild( el3 );
				}
			},
			
			fixLinks: function(input)
			{
				return input.replace(/\b((https?:\/\/|ftp:\/\/|file:\/\/|www.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,"[l&auml;nk]"); 
			},
			
			stripHTML: function(oldString)
			{
				var exp = /\<.+\/?\>/ig;
				newString = oldString.replace(exp," "); 
				return newString;
			},
			
			parseDate : function(dString)
			{
				var ret = new Date();
				var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/;				
				if (dString.toString().match(new RegExp(regexp))) 
				{
					var d = dString.match(new RegExp(regexp));
					var offset = 0;
					ret.setUTCDate(1);
					ret.setUTCFullYear(parseInt(d[1],10));
					ret.setUTCMonth(parseInt(d[3],10) - 1);
					ret.setUTCDate(parseInt(d[5],10));
					ret.setUTCHours(parseInt(d[7],10));
					ret.setUTCMinutes(parseInt(d[9],10));
					ret.setUTCSeconds(parseInt(d[11],10));
					if (d[12])
						ret.setUTCMilliseconds(parseFloat(d[12]) * 1000);
					else
						ret.setUTCMilliseconds(0);
					
					if (d[13] != 'Z') 
					{
						offset = (d[15] * 60) + parseInt(d[17],10);
						offset *= ((d[14] == '-') ? -1 : 1);
						ret.setTime(ret.getTime() - offset * 60 * 1000);
					}
				}
				else
				{
					ret.setTime(Date.parse(dString));
				}
				
				return ret;
			},
			
			renderList: function()
			{
				// console.log( this.history );							
				var ulel = document.createElement('ul');
				// el1.appendChild( ulel );				
				var l = this.history.length;				
				if( l > 5 ) l = 5;				
				// this.listelement.innerHTML = 'tmp'+l;				
				for( var j=0; j<l; j++ )
				{
					var item = this.history[j];
					
					var liel = document.createElement('li');
					if( j % 2 == 1 )
						liel.className = 'odd';
					
					var d = this.parseDate( item.time );
					
					var textel2 = document.createElement('a');
					textel2.className = 'author';
					textel2.href = item.authorlink;					
					
					textel2.appendChild( document.createTextNode( item.authorname ) );
					textel2.appendChild( document.createElement( 'br' ) );
					// textel2.appendChild( document.createTextNode( ' (' ) );
					try					
					{
						textel2.appendChild( document.createTextNode( d.toLocaleTimeString() ) );
					}
					catch( e )
					{
						textel2.appendChild( document.createTextNode( e ) );
					}
					// textel2.appendChild( document.createTextNode( ')' ) );
					
					liel.appendChild( textel2 );
					
					var textel1 = document.createElement('a');
					textel1.className = 'quote';
				//	textel1.innerHTML = this.stripHTML( item.bodyhtml );
					try
					{
						textel1.innerHTML = item.bodyhtml;
					}
					catch(e)
					{
					}
					textel1.href = item.link;					
					liel.appendChild( textel1 );
					
					ulel.appendChild( liel );
				}
				
				this.listelement.innerHTML = '';
				this.listelement.appendChild( ulel );
				
				var pel = document.getElementById( this.element );
				pel.style.display = 'block';
			}
		}
		tmp.initialize( arg );		
		return tmp;
	}
}

setTimeout( function() {
	var copy = MB_Element; 
	new MB_Class(copy);
}, 10 );





