var SEARCH				= 1;
var FAV					= 2;
var MY_RETWEETS			= 3;
var FRIENDS_RETWEETS	= 4;
var RETWEETED			= 5;

var TIME_LINE			= 6;

var TWEET_COUNT = 80;

var UPDATE_PERIOD = 2; //minutes. comsumed at ajax.js
var AUTO_UPDATER  = 10; //seconds

var ATOM	= 1;
var XML		= 2;
var JSON	= 3;

var loadTweets = new loadTweets();
function loadTweets () {

	this.t				= 0;
	this.callback		= null;
	this.type			= null;
	this.key			= null;

	this.feed_type		= null;
	this.lastId			= 0;

	this.auto_update	= false;

	this.load = function (type, key, callback) {
		
		this.type		= type;
		this.key		= key;
		this.callback	= callback;

		//this.ajax_req();
		this.update();

	}
	
	this.update = function () {

		this.ajax_req('');
		if (this.auto_update) {
			window.clearTimeout(this.t);
			this.t = window.setTimeout("loadTweets.update()", UPDATE_PERIOD*60*1000);
		}
	}

	this.ajax_req = function () {

		switch (true) {

			case this.type==FAV:
				var url = "http://twitter.com/favorites.xml?user=jzhang88888&password=proton";
				this.feed_type	= XML;
				break;

			case this.type==TIME_LINE:
				var url = "http://twitter.com/statuses/user_timeline.xml?user_id=jzhang88888&password=proton";
				this.feed_type	= XML;
				break;
		
	
			case this.type==MY_RETWEETS:
				var url = "http://twitter.com/statuses/retweeted_by_me.xml?user=jzhang88888&password=proton";
				this.feed_type	= XML;
				break;
		
			case this.type==SEARCH:
				var url = "http://search.twitter.com/search.atom?rpp="+TWEET_COUNT+"&q="+escape(this.key);
				this.feed_type	= ATOM;
				break;
		
		}
		//alert(url);
		url = escape(url);

		var req = newXMLHttpRequest();
		req.onreadystatechange = getReadyStateHandler(req, this.ajax_rcv);
		req.open('GET', '/proxy.php?link='+url, true);
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		
		req.send('nothing=1');
	}

	this.ajax_rcv = function (xml_str) {
//alert(xml_str);
		switch (true) {
			case loadTweets.feed_type == ATOM: var items = atom_parser(xml_str); break;
			case loadTweets.feed_type == XML:  var items = xml_parser_twitter (xml_str);  break;
		}
		
		loadTweets.callback(items, loadTweets.type);
	}
}

var tweets_renderer = new tweets_renderer();
function tweets_renderer () {

	this.tweetObject	= '';
	this.div_id			= '';

	this.tweet_sid		= 1;
	this.tweet_objs		= '';

	this.youtube_emb    = null;

	this.build = function (tweet_objs, div_id, type) {
	
		this.tweetObject	= "";
		for (var i in tweet_objs)  this.add(tweet_objs[i]);

		var label = null;
		switch(type) {

			case SEARCH:			label="Twitter Search"; break;;
			case FAV:				label="Twitter Favories"; break;;
			case MY_RETWEETS:		label="My Retweets"; break;;
			case FRIENDS_RETWEETS:	label="Friends Retweets"; break;;
			case RETWEETED:			label="My Retweeted"; break;;
			case TIME_LINE:			label="My Timeline"; break;;
			
			default: var label="Not labeled";
		}

		var content = "<div style='padding-left:100px;position:relative;'>"+this.tweetObject;
		content += "<div class=twitter_verlabel>"+label+"</div>";
		content += "</div>";

		document.getElementById(div_id).innerHTML = content;

	}

	this.add = function (tweet_obj) {//tableId, tableDataObj) {


		this.tweetObject += "<div style='width:600px'>";
		this.tweetObject += "<a href='http://www.twitter.com/"+tweet_obj.name+"' class='tweet_avatar' target='#'>";//onClick='http://twitter.com/"+tweetObj.name+"'
		var avartar_url = tweet_obj.avatar.replace(/_normal/,"_bigger");;
		this.tweetObject += "<img src='"+avartar_url+"' style='max-width:80px;' border=0>";
		this.tweetObject += "</a>";
		
		if(tweet_obj.youtube_key) {
			var width = 580;
			var height= 400;
			var youtube_url = "http://img.youtube.com/vi/"+ tweet_obj.youtube_key+"/default.jpg";
			this.youtube_emb = "<object width='"+width+"' height='"+height+"'><param name='movie' value='http://www.youtube.com/v/"+tweet_obj.youtube_key+"&hl=en&fs=1'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param>";
			this.youtube_emb += "<embed src='http://www.youtube.com/v/"+tweet_obj.youtube_key+"&hl=en&fs=1&autoplay=1' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='"+width+"' height='"+height+"'></embed></object>";
			this.youtube_emb = escape(this.youtube_emb);

			this.tweetObject += "<a href='javascript:showNoteOverlay(\""+this.youtube_emb+"\");' class='tweet_media' target='#'>";//onClick='http://twitter.com/"+tweetObj.name+"'
			this.tweetObject += "<img src='"+youtube_url+"' style='height:73px;' border=0>";
			this.tweetObject += "</a>";
		}

		this.tweetObject += "<div class=tweet_cell>";
		this.tweetObject += "<div style='float:right;'>" + tweet_obj.published + "</div>";
		this.tweetObject += "<h4>" + tweet_obj.name + "</h4>";
		
		this.tweetObject += "<br>";
		this.tweetObject += tweet_obj.text;
		//this.tweetObject += "</div>";
		this.tweetObject += "</div>";
		this.tweetObject += "</div>";

		this.tweetObject += "<div style='clear:both;margin-bottom:4px'>&nbsp</div> ";
		
/*
	
		if (tweet_obj.photo_id) {
			var photo_url = "http://twitter.xeeku.com/photos/98x98/"+tweet_obj.photo_id+".jpg";
			
			this.tweetObject += "<a href='"+tweet_obj.url+"' target='#'>";
			this.tweetObject += "<img src='"+photo_url+"' class='lead_thumb'  border=0>"; //onClick='show_tweet("+this.tweet_sid+");'	
			this.tweetObject += "</a>";
		}
		
		
		if(tweet_obj.photo_id) {
			
			var thumb_url = "http://twitter.xeeku.com/photos/98x98/"+tweet_obj.photo_id+".jpg";
			this.tweetObject += "<div style='margin-right:62px'>";
			this.tweetObject += "<img src='"+thumb_url+"' class='lead_thumb' onClick='show_tweet("+this.tweet_sid+");'>";

		
		} else {
			this.tweetObject += "<div style='margin-right:0px'>";
		}
		

		this.tweetObject += "<div class=prim_text>" + tweet_obj.text + "</div>";
		
		this.tweetObject += "<div style='clear:both'></div>";
		this.tweetObject += "</div>";
		this.tweetObject += "</div>";
		
		//this.tweetObject += "<div class='bookmark_cell' id='bookmark_"+index+"' onClick='loadContent("+index+");' title='Click to view'>";//javascript:loadContent("+i+");'>";
		*/
		this.tweet_sid++;
	}	
}


function atom_parser(xml_string) { //for xeeku host only (not for RSS feed as fields are prioperitory
		
	var xmlobject = (new DOMParser()).parseFromString(xml_string, "text/xml");
	var root = xmlobject.getElementsByTagName('feed')[0];

	var entries = root.getElementsByTagName("entry");//channels[0]
	var title	= root.getElementsByTagName("title")[0].firstChild.nodeValue;
	
	var rssItems = new Array();
	for (i=0; i<entries.length; i++) {
		
		var item		= new Object;
		
		var title			= entries[i].getElementsByTagName("title");
		var id				= entries[0].getElementsByTagName("id");

		var published		= entries[i].getElementsByTagName("published");
		var author			= entries[i].getElementsByTagName("author");//.getElementsByTagName("name");
		var name			= author[0].getElementsByTagName("name");
		var uri				= author[0].getElementsByTagName("uri");
		
		var source			= entries[i].getElementsByTagName("twitter:source");
		var geo				= entries[i].getElementsByTagName("twitter:geo");
		var link			= entries[i].getElementsByTagName("link");

		//if (i==1) alert(source[0].firstChild.nodeValue);

		if (title[0])		item.text		= title[0].firstChild.nodeValue; 
		if (id[0])			item.id			= id[0].firstChild.nodeValue; 
		item.id = item.id.replace(/.*?(\d+)$/,"$1");
		
		if (source[0])		item.source		= source[0].firstChild.nodeValue; 
		if (geo[0])			item.geo		= geo[0].firstChild.nodeValue; 
		if (published[0])	item.published	= published[0].firstChild.nodeValue; 
		if (name[0])		item.name		= name[0].firstChild.nodeValue; 
		if (link[0])		item.link		= link[0].getAttribute("href"); 
		if (link[1])		item.avatar		= link[1].getAttribute("href"); 
		

		item.screen_name	= item.name.replace(/(\S+).*/, "$1"); 

		var text = item.text;
		if(text.match(/.*http:\/\/bit\.ly.+?(\d{10,})/)) {
			item.photo_id = text.replace(/.*http:\/\/bit\.ly.+?(\d{10,}).*/, "$1");
			//item.photo_url = "http://twitter.xeeku.com/photos/48x48/"+item.photo_id+".jpg";
			item.text = text.replace(/http:\/\/bit\.ly.+?(\d{10,})/, "");
			item.url = text.replace(/.*(http:\/\/[\w\/\.]+).*/, "$1");
		}

		if(text.match(/http:\/\/(www\.)?youtube\.com/)) {
			item.youtube_key = text.replace(/.*http:\/\/(www\.)?youtube\.com\/\S+?v=([\w\d\-_]+).*/, "$2");
		}
		
		if(text.match(/.*http:\/\/youtu\.be.*/)) {
			item.youtube_key = text.replace(/.*http:\/\/youtu\.be\/([\w\d\-]+).*/, "$1");
		}

		item.text = tweetText(text);
		rssItems[i] = item;
	}

	//alert(rssItems[1].name);
	return rssItems;
}

function tweetText (text) {
		
		text = text.replace(/http:\/\/bit\.ly.*\#xk.*\d{10,}/g, "");

		text = text.replace(/#(\w+)/g, "<a href='XaaaX/#search?q=%23$1' style='color:#335533' target='#'>#$1</a>");
		text = text.replace(/@(\w+)/g, "<a href='XaaaX/$1' style='color:#333355' target='#'>@$1</a>");
		//text = text.replace(/(http:\/\/[\w\/\.]+)/g, "<a href='$1' style='color:#553333;' target='#'>$1</a>");
		text = text.replace(/(http:\/\/\S+)/g, "<a href='javascript:show_content(\"$1\");' title='View page $1' style='color:#553333;' target='#'>$1</a>");
		text = text.replace(/XaaaX/g, "http://twitter.com");
		return text;

}

function show_content (url) {
	
	var content_str = "";
	//content_str += "==============<a href='javascript:show_info()'>show info</a>";
	content_str += "<p/ style='margin-top:16px;clear:both;' >";
	content_str += "<span style='font-weight:bold;color:#555'>Source: </span><a href='"+url+"' target='#'>"+url+"</a>";
	content_str += "<iframe style='width:100%;min-height:700px;border:0px solid white;' src='"+url+"' id='content_iframe'>";
	showOverlay(content_str);
}

/*
function show_info() {
	var iframe_document = document.getElementById("content_iframe").contentDocument;
	alert(iframe_document.title);

}
*/

function xml_parser_twitter (xml_string) { //for xeeku host only (not for RSS feed as fields are prioperitory
		
	var xmlobject = (new DOMParser()).parseFromString(xml_string, "text/xml");

	var root = xmlobject.getElementsByTagName('statuses');
	var statusObjs = root[0].getElementsByTagName("status");

	//alert(statusObjs.length);
	var rssItems = new Array();

	for (i=0; i<statusObjs.length; i++) {
		

		var status		= new Object;
		
		var id			= statusObjs[i].getElementsByTagName("id");
		var text		= statusObjs[i].getElementsByTagName("text");
		var created_at	= statusObjs[i].getElementsByTagName("created_at");
		var source		= statusObjs[i].getElementsByTagName("source");
		
		var user		= statusObjs[i].getElementsByTagName("user");
		var name		= user[0].getElementsByTagName("name");
		var screen_name	= user[0].getElementsByTagName("screen_name");
		var profile_image_url	= user[0].getElementsByTagName("profile_image_url");

		//item.summary	= unescape(item.summary).replace(/\++/g," "); 
		
		var item			= new Object;
		if (text[0])			item.text		= text[0].firstChild.nodeValue; 
		if (id[0])				item.id			= id[0].firstChild.nodeValue; 
		if (created_at[0])		item.published	= created_at[0].firstChild.nodeValue; 
		if (source[0])			item.source		= "source";//source[0].firstChild.nodeValue; 
		if (screen_name[0])		item.name		= screen_name[0].firstChild.nodeValue; 
		if (profile_image_url[0]) item.avatar	= profile_image_url[0].firstChild.nodeValue; 
		
		var text = item.text;
		if(text.match(/.*http:\/\/bit\.ly.+?(\d{10,})/)) {
			item.photo_id = text.replace(/.*http:\/\/bit\.ly.+?(\d{10,}).*/, "$1");
			//item.photo_url = "http://twitter.xeeku.com/photos/48x48/"+item.photo_id+".jpg";
			item.text = text.replace(/http:\/\/bit\.ly.+?(\d{10,})/, "");
		}

		if(text.match(/http:\/\/(www\.)?youtube\.com/)) {
			item.youtube_key = text.replace(/.*http:\/\/(www\.)?youtube\.com\/\S+?v=([\w\d\-_]+).*/, "$2");
		}
		
		if(text.match(/.*http:\/\/youtu\.be.*/)) {
			item.youtube_key = text.replace(/.*http:\/\/youtu\.be\/([\w\d\-]+).*/, "$1");
		}

		item.text = tweetText(text);
		rssItems[i] = item;
	}

	return rssItems;
}
