

var tw =
{


  USE_TWITTER:		// preferred
	{
		api: { twitter: { com: 'http://api.twitter.com' } }
	, twitter: { com: 'http://twitter.com' }
	}	// opts

, USE_PROXY:		// for those suffering behind an overly-stringent firewall (assuming data.lnal.com is accessible)
	{
		api: { twitter: { com: 'http://data.lnal.com/!/Twitter-PTP/api' } }
	, twitter: { com: 'http://data.lnal.com/!/Twitter-PTP/tw' }
	}	// opts




, init: function ()
		{
//  build indices...
		metaTwitter.statuses.indices = { byID: new Array() };

		for ( var i = 1;  i < metaTwitter.statuses.db.length;  i++ )	// yes,  var i = 1 don't index the first NULL element
			metaTwitter.statuses.indices.byID[ metaTwitter.statuses.db[i].twStsID ] = metaTwitter.statuses.db[i];


		this.cookie = new core.cookie( '8a1621dae39bf1d91d372c77f441e80b8f68b9b6', { domain: 'lnal.com', path: '/' } );
		this.cookie.settings = this.cookie.value();	// extract and decode 'twitter' cookie, but use the cookie object itself to hold the settings
		this.cookie.settings = ( (typeof this.cookie.settings) != undefined && this.cookie.seetings != this.cookie.EMPTY_JAR   ?  this.cookie.settings
			: { useProxy: false } );

		this.http = ( this.cookie.settings.useProxy  ?  this.USE_PROXY  :  this.USE_TWITTER );
		}	// End method; init







, loadFieldTweets: function ()
		{
		core.json( this.http.api.twitter.com + '/1/LNALcom/lists/field-updates/statuses.json?callback=tw.LNALfieldsCallback' );
		}	// End method; loadFieldTweets




, loadHeaderTweets: function ()
		{
		core.json( this.http.twitter.com + '/statuses/user_timeline/LNALadvisory.json?callback=tw.LNALadvisoryCallback' );
		core.json( this.http.twitter.com + '/statuses/user_timeline/LNALcom.json?callback=tw.LNALcomCallback' );
		}	// End method; loadHeaderTweets




, listItems: function 
(
  tweets
, metaDefaults
)
		{
		var twLI = '';
		var tweet;
		var meta;


		for ( var sts = 0;  sts < tweets.length;  sts++ )
			{
			tweet = tweets[sts];
			if ( (typeof tweet.posted) == undefined ) 	tweet.posted = new Date( metaTwitter.ieDate( tweet.created_at ) );

			if ( tweet.posted.getTime() > document.mxRev.getTime() )	document.mxRev = new Date( tweet.posted.getTime() );


			meta = metaTwitter.statuses.indices.byID[ tweet.id ];
			meta = ( (typeof meta) != undefined  ?  meta  :  metaDefaults );

			if ( (typeof meta.isExpired) != undefined  &&  meta.isExpired( tweet, meta ) )		continue;	 //skip this expired tweet


			twLI += '<li title="posted: ' + dtUtil.CONST.Ddd[tweet.posted.getDay()] + ' ' + dtUtil.hmMD( tweet.posted ) + '" >'
						+ '<div class="rtDate" style="margin: 0 20px 0 10px;" onclick="window.prompt( \'Twitter status ID:\', \'' + tweet.id + '\' );">' + dtUtil.hmMD( tweet.posted ) + '</div>'
						+ ( (typeof meta.uri) != undefined  ?  '<a href="' + meta.uri + '">'  :  '' )
						+ tweet.text.replace( /\</g, '&lt;' ).replace( /\>/g, '&gt;' ).replace( /\&/g, '&amp;' ).replace( /\n/g, '<br/>' )
						+ ( (typeof meta.uri) != undefined  ?  '</a></li>'  :  '</li>' )
						;
			}	// End for; span of tweets

		return	twLI;
		}	// End method; listItems




// Twitter callbacks
, LNALadvisoryCallback: function
(
  tweets
)
		{
		if ( (typeof tweets) == undefined  ||  tweets.length < 1 )		return;

		var html = this.listItems( tweets, { isExpired: function ( t, m ) { return t.posted.getTime() < dtUtil.CONST.today.getTime() }  } );
		if ( html.length > 0 )
			{
			document.getElementById( 'twLNALadvisory-tweets' ).innerHTML = html;
			document.getElementById( 'twLNALadvisoryDIV' ).style.display = 'block';
			}
		}	// End method; LNALadvisoryCallback




, LNALcomCallback: function
(
  tweets
)
		{
		if ( (typeof tweets) == undefined  ||  tweets.length < 1 )		return;

		var html = this.listItems( tweets, {} );
		if ( html.length > 0 )
			{
			document.getElementById( 'twLNALcom-tweets' ).innerHTML = html
			document.getElementById( 'twLNALcomDIV' ).style.display = 'block';
			document.getElementById( 'twLNALcomDIVtwid' ).style.display = 'none';
			}
		}	// End method; LNALComCallback




, LNALfieldsCallback: function
(
  tweets
)
		{
		if ( (typeof tweets) == undefined  ||  tweets.length < 1 )		return;

		var twDiv;
		var twUID = '';
		var tweet;

		for ( var s = 0;  s < tweets.length;  s++ )
			tweets[s].posted = new Date( metaTwitter.ieDate( tweets[s].created_at ) );

		tweets.sort( this.sortbyUIDbyPosted );


		for ( var s = 0;  s < tweets.length;  s++ )
			{
			tweet = tweets[s];
			if ( tweet.user.id == twUID )	continue;	// post only the latest tweet
			twUID = tweet.user.id;

			var meta = metaTwitter.statuses.indices.byID[ tweet.id ];
			if ( (typeof meta) != undefined )
				{
				if ( meta.isExpired( tweet, meta ) )		continue;
				}
			else
				if ( tweet.posted.getTime() < dtUtil.CONST.today.getTime() )		continue;	// skip yesterday's (or older) tweets (by default )


			twDiv = document.getElementById( tweet.user.screen_name );
			if ( (typeof twDiv) == undefined  ||  twDiv == null )		continue;	// not a recognized field

			twDiv.innerHTML = tweet.text.replace( /\n/g, '<br/>' );
			twDiv.style.display = 'block';
			twDiv.title = 'posted: ' + tweet.posted.toString();

			}	// End for; span of tweets -- from list of all fields


		}	// End method; LNALfieldsCallback




, sortbyUIDbyPosted: function
(
  t1
, t2
)
		{
		// sort by UID (asc), posted (desc)
		return	( t1.user.id > t2.user.id  ?  1  :  ( t1.user.id < t2.user.id  ?  -1  :  t2.posted.getTime() - t1.posted.getTime()  ) );
		}	// End method; sortbyUIDbyPosted




, useTwitterProxy: function()
		{
		var inp = document.getElementById( 'siteOptsUseTWProxy' );	// because the entire row/div might be clicked.
		inp.checked = !inp.checked;

		this.http = ( inp.checked  ?  this.USE_PROXY  :  this.USE_TWITTER );

		this.cookie.settings.useProxy = inp.checked;
		this.cookie.store( this.cookie.settings );

		}	// End method; 


}	// End object; tw








tw.init();



