var SUMMARY_CELL_WIDTH = 499;
var VIDEO_WIDTH = 700;
var VIDEO_HEIGHT = 500;

var digi_clock = new digi_clock();
function digi_clock () {//update_period) {

	this.t				 = 0;
	this.update_period   = 10000;
	
	this.disp = function() {

		var cal = '';
		var date_obj = new Date();
		cal = date_obj.toLocaleString();
		cal=cal.replace(/(.+):\d\d(.+)/,'$1$2');

		if(document.getElementById('digi_clock'))
			document.getElementById('digi_clock').innerHTML =cal

		window.clearTimeout(this.t);
		this.t = window.setTimeout('digi_clock.disp()', this.update_period);
	}

  	this.disp();
}




var rss_cell = new rss_cell ();
function rss_cell () {

	this.type				= 0;
	this.rssObj;
	this.callbalck;
	
	this.load = function(rssObj, callback) {

		this.rssObj		= rssObj;
		this.callback	= callback;

		return this.build();
	}

	this.build = function () {
		
		//alert(rss_cell.rssObj.title);

		var str = "";
		str += "<div class='summary_cell' style='' onClick='rss_cell.callback("+this.rssObj.index+");'>";

		/*
		str += "<div class='summary_subtitle_tr'>";
		str += "RSS Feed";
		//str += this.rssObj.timestamp;
		str += "</div>";
		*/

		//str += "<div class='summary_subtitle_tr'>";
		//str += this.rssObj.timestamp;
		//str += "</div>";
		
		str += "<div style=clear:both;margin-bottom:0px;></div>";

		str += "<div class='summary_title' style='text-align:right;'>";
		str += unescape(this.rssObj.title);
		str += "</div>";

		str += "<div style='clear:both'></div>";
		str += "</div>";


		return str;
	}
}

var rss_module = new rss_module (); //given a feed with its parsed articles array, build the layout
function rss_module () {

	this.type				= 0;
	this.feedObjs;
	this.star_dbid;
	
	this.load = function (feedObjs) {

		if (feedObjs.length==0) return;
		this.feedObjs			= feedObjs;
		//this.rssObj.owner		= user_id;

		//var indexSel = Math.floor(Math.random()*(Math.min(photoObjs.length, 19)-1));

		var feed_str = "<div class=content_title_box_paper>";//rss_site_title>";
		
		feed_str += "<div class='content_subtitle_tl'>";
		feed_str += "RSS Feed";
		feed_str += "</div>";

		feed_str += "<div class='content_subtitle_tr'>";
		feed_str += feedObjs[0].pubDate;
		feed_str += "</div>";
		
		var siteTitle = feedObjs[0].siteTitle;
		//siteTitle = siteTitle.length>30?siteTitle.substr(0,29)+"...":siteTitle;
		siteTitle = siteTitle.replace(/([\,|\.|\"|\']\s*)/g,"$1 ");
		feed_str += "<div class=content_title>" + siteTitle + "</div>"
		
		if(feedObjs[0].siteDesc) feed_str += "<div class=content_desc>" + feedObjs[0].siteDesc + "</div>"

		feed_str += "<p><div id=\"feed_container\" style='margin-bottom:24px'>";
			feed_str += "<ul id=\"feed_list\">";
			if(signed_in>0) {
				feed_str += "<li><a onClick=\"javascript:rss_module.toggleStar();\" id=\"rss_star\">Add Star</a></li>";
				feed_str += "<li><a onClick=\"javascript:rss_module.subscribePanel();\" id=\"rss_subscribe\">Subscribe/Unsubscribe</a></li>";
			}
			feed_str += "<li><a href=\"./users.php?link="+feedObjs[0].siteLink+"\" title='Other subscribers to this feed.'>Other Subscribers</a></li>";
			feed_str += "</ul>";
		feed_str += "</div>";
		feed_str += "</div>";


		//var all_urls = "";
		for (var i = 0; i < feedObjs.length; i++) {//
			feedObjs[i].index = i;
			feed_str += feed_cell.load (feedObjs[i]);
			
			//all_urls += feedObjs[i].link;
			//all_urls += i==feedObjs.length-1?"":",";
		}

		return feed_str;
	}

	this.setStar = function (star_on) {

		if (signed_in>0) {
			if(star_on) {
				document.getElementById("rss_star").innerHTML			= "Remove Star";
				document.getElementById("rss_star").style.border		= "1px solid green";
				document.getElementById("rss_star").style.color			= "green";
			
			} else {
				document.getElementById("rss_star").innerHTML			= "Add Star";
				document.getElementById("rss_star").style.border		= "0px solid white";
				document.getElementById("rss_star").style.color			= "#333333";
			} 
		}
	}

	this.toggleStar = function () {

		//alert(this.feedObjs[0].siteLink);
		//return;
		
		var star_on = document.getElementById("rss_star").innerHTML=="Remove Star"?1:0;
		if(star_on) {
			document.getElementById("rss_star").innerHTML			= "Add Star";
			document.getElementById("rss_star").style.border		= "0px solid white";
			document.getElementById("rss_star").style.color			= "#333333";
			deleteSubscribe.load(rss_module.delete_subscribe_callback, STAR, this.feedObjs[0].siteLink);
		
		} else {
			
			document.getElementById("rss_star").innerHTML			= "Remove Star";
			document.getElementById("rss_star").style.border		= "1px solid green";
			document.getElementById("rss_star").style.color			= "green";

			var feedObj		= new Object();
			feedObj.title	= this.feedObjs[0].siteTitle;
			feedObj.link	= this.feedObjs[0].siteLink;
			feedObj.desc	= this.feedObjs[0].siteDesc;
			feedObj.owner	= user_id;
			feedObj.tag		= STAR; //star defined at root
			
			addSubscribe.load(rss_module.add_subscribe_callback, feedObj); //feedObjects is global defined at rss.php
		}
		
		this.setStar(!star_on);
	}

	this.setSubscribe = function (subscribe_on) {

		if (signed_in>0) {
			if(subscribe_on>0) {
				document.getElementById("rss_subscribe").innerHTML			= "Unsubscribe";
				document.getElementById("rss_subscribe").style.border		= "1px solid #3333aa";
				document.getElementById("rss_subscribe").style.color		= "#3333aa";
			
			} else {
				document.getElementById("rss_subscribe").innerHTML			= "Subscribe";
				document.getElementById("rss_subscribe").style.border		= "0px solid white";
				document.getElementById("rss_subscribe").style.color		= "#333333";
			} 
		}
	}

	this.subscribePanel = function () {

		var subscribe_on = document.getElementById("rss_subscribe").innerHTML=="Unsubscribe"?1:0;
		
		if(subscribe_on) {
			document.getElementById("rss_subscribe").innerHTML			= "Subscribe";
			document.getElementById("rss_subscribe").style.border		= "0px solid white";
			document.getElementById("rss_subscribe").style.color		= "#333333";
			deleteSubscribe.load(rss_module.delete_subscribe_callback, "", this.feedObjs[0].siteLink);
		
		} else {
			
			document.getElementById("rss_subscribe").innerHTML			= "Unsubscribe";
			document.getElementById("rss_subscribe").style.border		= "1px solid blue";
			document.getElementById("rss_subscribe").style.color		= "blue";
			
			//addSubscribe.load(rss_module.add_subscribe_callback, feedObj); //feedObjects is global defined at rss.php
		
			loadRssTags.load(rss_module.bookmarkTagsCallback);
						
			var subscribe_str = "";
			subscribe_str += "<div style='margin-bottom:24px;font-size:11px;color:#335533;font-style:italic'>RSS Subscribe Panel</div>";
			
			subscribe_str += "<div style='margin-bottom:16px;'>";
			
			subscribe_str += "<div class='feed_subtitle_t'>";
			//subscribe_str += feedObj.siteTitle;
			subscribe_str += this.feedObjs[0].siteLink;
			subscribe_str += "</div>";

			subscribe_str += "<div class='feed_title'>";
			subscribe_str += this.feedObjs[0].siteTitle;
			subscribe_str += "</div>";
			
			//subscribe_str += "<div class='feed_subtitle_b'>";
			//subscribe_str += this.feedObjs[0].siteDesc;//feedObj.pubDate;
			//subscribe_str += "</div>";

			subscribe_str += "<form name='tag_form' style='margin:0; margin-bottom:32'>";
			subscribe_str += "<input type='text' style='padding:4px;float:left;margin-top:8px;width:333px;' name='tag_input'/>";
			subscribe_str += "<img src='./graphics/done.png' class='feed_done' title='bookmark' onClick='rss_module.save_subscribe();'>";
			subscribe_str += "<div class='feed_subtitle_t' style='margin-top:-3'>Select a tag from the tag cloud below or enter a new tag.</div>";
			subscribe_str += "</form>"

			subscribe_str += "</div>";

			subscribe_str += "<div id=tag_cloud></div>";
			subscribe_str += "<p><a style='float:right;font-style:italic;color:#333333;font-size:12;' ";
			subscribe_str += "href='http://www.roytanck.com' target='#'>Tag Cloud created by Roy Tanck at roytanck.com</a>";

			document.getElementById("overlay_entry_box").style.visibility = "visible";
			document.getElementById("overlay_entry_box").style.top = window.pageYOffset+20;
			document.getElementById("overlay_entry_mask").style.visibility = "visible";
			document.getElementById("overlay_entry").innerHTML = unescape(subscribe_str);

			//this.setSubscribe(!subscribe_on);
		}
	}

	this.save_subscribe = function() {
		
		var feedObj		= new Object();
		
		feedObj.title	= this.feedObjs[0].siteTitle;
		feedObj.link	= this.feedObjs[0].siteLink;
		feedObj.desc	= this.feedObjs[0].siteDesc;
		feedObj.tag		= document.tag_form.tag_input.value;
		//feedObj.owner	= user_id;
		
		document.getElementById("overlay_entry_box").style.visibility = "hidden";
		document.getElementById("overlay_entry_mask").style.visibility = "hidden";
		document.getElementById("overlay_entry").innerHTML = "";

		if (feedObj.tag.length>0)
			addSubscribe.load(rss_module.add_subscribe_callback, feedObj); //feedObjects is global defined at rss.php
		//alert(this.feedObjs[0].siteTitle);

	}

	this.setTag = function (tag_index) {
		document.tag_form.tag_input.value = feed_cell.tags[tag_index];
	}

	/*
	this.add_subscribe = function (tag) { //star==>add_subscribe("star")

		var feedObj = new Object()
		feedObj.tag		= tag;
		feedObj.link	= this.feedObjs[0].siteLink;
		feedObj.title	= this.feedObjs[0].siteTitle;
		feedObj.desc	= this.feedObjs[0].siteDesc;

		rss_module.load(rss_module.add_subscribe_callback, feedObj);
		
		hideEntry();
		alert("Success! Article has been bookmarked under \""+bookmarkObj.tag+"\".");

	}
	*/

	this.tags = new Array();
	this.bookmarkTagsCallback = function (tags) {
		
		var tags_str = "<tags>";
		for (var i = 0; i < tags.length; i++) {
			
			var size = Math.floor(Math.random()*4)+10;
			var title = tags[i].title;
			feed_cell.tags[i] = title;

			tags_str	+= "<a href='javascript:feed_cell.setTag("+i+")' ";//"+title+"javascript:feed_cell.setTag('')
			tags_str	+= "style='"+size+"' color='"+randomColor()+"' hicolor='0x00cc00'>";
			tags_str	+= title+"</a>";
		}
		tags_str += "</tags>";

		tagCloud.addVariable("tagcloud", tags_str);
		tagCloud.write("tag_cloud");
	}

	this.add_subscribe_callback = function (result) {
		//alert(result);
	}

	this.delete_subscribe_callback = function (result) {
		//alert(result);
	}

	this.showSummary = function (desc, link) {
		//alert(desc);
		document.getElementById("overlay_content_box").style.visibility = "visible";
		document.getElementById("overlay_content_box").style.top = window.pageYOffset+20;
		document.getElementById("overlay_content").innerHTML = unescape(desc);

		//this.setStar(0);

	}

	this.checkStarCallback = function (star_on) {
		//alert(star_on);
		rss_module.setStar(star_on);
	}

	this.checkSubscribeCallback = function (subscribe_tag) {
		//alert(subscribe_tag);
		rss_module.setSubscribe(subscribe_tag);
	}
}


















var feed_cell = new feed_cell (); //each individual cell in RSS
function feed_cell () {

	this.type				= 0;
	this.feedObj;

	this.star_dbid;
	
	this.load = function (feedObj) {
//alert(feedObj.summary);

		this.feedObj			= feedObj;
		this.feedObj.owner		= user_id;

/*
		var desc="";
		var content ="";
		var description;
		
		try
		{
			if (feedObj.content.length>0) content = feedObj.content;
		}
		catch (err)
		{
		}

		try
		{
			if (feedObj.description.length>0) desc=unescape(feedObj.description);			
		}
		catch (err)
		{
		}
			
		description = desc.length>content.length?desc:content;
*/
		//description = feedObj.content;

		//var photo = description.replace(/.+?(http.+?\.\w{2,4}).+$/gi, "$1");.+?\.(jpg|png)
		//var r = new RegExp(".+?(http\S+?\.(jpg|png)).+$", "im");
		//var photo = description.replace(/.+?(http\S+?\.(jpg|png)).+$/, "$1");

		//if (description.match(/http\S+\.(jpg|png)/)) {
			//alert(photo);
		//}
		
		
		//var desc = description.replace(/<.+?>/ig, "");		
		//this.feedObj.summary = desc;

		//desc = desc.length>SUMMARY_LIMIT? desc.substr(0, SUMMARY_LIMIT)+"...":desc;
		//this.feedObj.summary = desc;


		var str = "<div class='feed_cell'>";
			
			str += "<div class='feed_subtitle_t'>";
			//str += feedObj.siteTitle;
			str += feedObj.siteTitle;
			str += "</div>";

			str += "<div class='feed_title'>";
			str += feedObj.title;
			str += "</div>";
			
			str += "<div class='feed_subtitle_b'>";
			//str += feedObj.siteTitle;
			str += feedObj.pubDate;
			str += "</div>";

/*
			var descRaw;
			try {
				
				 if (feedObj.content.length>0)
				 {
					 descRaw = feedObj.content;//feedObj.description.length?feedObj.content:feedObj.description
				 };
				
			}
			catch (err)
			{
				var descRaw = feedObj.description;
			}
			
			if (descRaw) descRaw = descRaw.replace(/<img\ /gi, "<img border=0 style='float:left;margin:0 8 4 0;clear:both;' ");
					
			try{

				var photoPattern = /http\:\/\/\S+?\.(jpg|png)/ig;
				var resultArray = photoPattern.exec(unescape(descRaw));
				var thumbLink = resultArray[0];

			} catch(err) {
			}

			try{
				var photoPattern = /http\:\/\/www.youtube.com\/v\/([\w\-\d]{10,})/ig;
				var resultArray = photoPattern.exec(unescape(descRaw));
				var yt_key = resultArray[1];


			} catch(err) {
			}
*/

			//else alert(descRaw);
			var titleBlock = str;
			
			titleBlock += "<div id=\"feed_container\" style='margin-bottom:24px;border:0'>";
				titleBlock += "<ul id=\"feed_list\">";

				if (signed_in>0) {
					titleBlock += "<li><a href=\"javascript:feed_cell.toggleStar("+feedObj.index+");\" id=\"feed_star\">Add Star</a></li>";
					titleBlock += "<li><a href=\"javascript:feed_cell.bookmarkPanel("+feedObj.index+");\" id=\"feed_bookmark\">Bookmark</a></li>";
				}
				//titleBlock += "<li><a href=\"#\">Bookmark</a></li>";
				titleBlock += "<li><a href=\"#\">Email</a></li>";
				titleBlock += "<li><a href=\"#\">Twitter</a></li>";
				//titleBlock += "<li><a href=\"#\">Other Readers</a></li>";
				titleBlock += "</ul>";
			
			titleBlock += "</div>";
			//titleBlock += "<div style='font-size:14px;line-height:140%;'>"+descRaw+"</div>";
			
			if (feedObj.summary) summaryRaw = feedObj.summary.replace(/<img\ /gi, "<img border=0 style='float:left;margin:4 8 4 0;' ");
			titleBlock += "<div style='font-size:14px;line-height:140%;'>"+summaryRaw+"</div>";

			//str += "<div class='feed_subtitle_b'>";
			//str += feedObj.creator;
			//str += "</div>";

			str += "<div class='feed_description'>";

				try
				{
					//if(thumbLink.length>0) {
					if(feedObj.thumbLink.length>0) {
						//str += "<img class=summary_thumb src=./proxy.php?link="+thumbLink+">";
						str += "<a onClick='feed_cell.showSummary(\""+escape(titleBlock)+"\",\""+feedObj.link+"\");' title='Read, bookmark, or share current article'>";
						str += "<img class=feed_thumb src="+feedObj.thumbLink+">";
						str += "</a>";
					}
					
				}
				catch (err)
				{
				}
				
				try
				{
					//if(yt_key.length>0) {
					if(feedObj.yt_key.length>0) {
						
						var videoContent = "";
						var videoKey = feedObj.yt_key;
						/*if (videoKey.match(/^\d+$/)) {

							videoContent += "<object width='"+width+"' height='"+height+"'><param name='allowfullscreen' value='true' /><param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id="+keys[i]+"&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1'></param><param name='allowscriptaccess' value='always'></param>";				
							videoContent += "<embed src='http://vimeo.com/moogaloop.swf?clip_id="+videoKey+"&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='"+width+"' height='"+height+"'></embed></object>";

						} else if (videoKey.length>20) {
							
							videoContent += "<object width='"+width+"' height='"+height+"'><param name='movie' value='http://www.hulu.com/embed/"+videoKey+"/0'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param>";				
							content_str += "<embed src='http://www.hulu.com/embed/"+videoKey+"/0' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='"+width+"' height='"+height+"'></embed></object>";

						} else {*/
							videoContent = "<object width='"+VIDEO_WIDTH+"' height='"+VIDEO_HEIGHT+"'><param name='movie' value='http://www.youtube.com/v/"+videoKey+"&hl=en&fs=1'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param>";
							videoContent += "<embed src='http://www.youtube.com/v/"+videoKey+"&hl=en&fs=1' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='"+VIDEO_WIDTH+"' height='"+VIDEO_HEIGHT+"'></embed></object>";
						//}
						//alert(videoContent);

						videoContent = "<div class=rss_video style='width:"+VIDEO_WIDTH+"'>" + videoContent + "</div>";
						str += "<a onClick='feed_cell.showVideo(\""+escape(videoContent)+"\");' title='Watch video.'>";
						var vlink = "http://img.youtube.com/vi/"+feedObj.yt_key+"/2.jpg";//0.jpg=full size
						str += "<img class=summary_thumb_left src="+vlink+">";
						str += "</a>";
					}
					
				}
				catch (err)
				{
					//alert("no video"+err);
				}

				var summary = this.feedObj.summary.replace(/<.+?>/ig, "");		
				summary = summary.length>SUMMARY_LIMIT? summary.substr(0, SUMMARY_LIMIT)+"...":summary;
				str += summary;

				//str += " <a href='"+feedObj.link+"' target='#' title='Read article'>[Read]</a>";
				//str += " <a onClick='feed_cell.showSummary(\""+escape(titleBlock)+"\");' title='Read summary'> [Summary]</a>";
				//str += unescape(feedObj.description);
			str += "</div>";

			str += "<div id=\"feed_container\" style='margin-top:16px;clear:both;'>";
				str += "<ul id=\"feed_list\">";
				str += "<li><a onClick='feed_cell.showSummary(\""+escape(titleBlock)+"\",\""+feedObj.link+"\");' title='Read, bookmark, or share current article'>Read</a></li>";
				str += "<li><a href='"+feedObj.link+"' target='#' title='Open new window'>Visit Website</a></li>";
				if (signed_in>0) {
					str += "<li><a onClick=\"javascript:feed_cell.bookmarkPanel("+feedObj.index+");\" id=\"feed_bookmark\">Bookmark</a></li>";
				}
				//str += "<li><a href='' target='#' title='Other readers who have bookmarked this article.'>Other Readers</a></li>";
				str += "</ul>";
			str += "</div>";
			/*
			str += "<div id=\"feed_container\">";
				str += "<ul id=\"feed_list\">";
				str += "<li><a href=\"javascript:feed_cell.toggleStar("+feedObj.db_id+");\" id=\"feed_star"+feedObj.index+"\">Add Starr"+feedObj.index+"</a></li>";
				str += "<li><a href=\"#\">Bookmark</a></li>";
				str += "<li><a href=\"#\">Email</a></li>";
				str += "<li><a href=\"#\">Twitter</a></li>";
				str += "<li><a href=\"#\">Other Readers</a></li>";
				str += "</ul>";
			
			str += "</div>";
			*/
		str += "</div>";
		return str;
	}

	this.setStar = function (star_on) {

		if (signed_in>0) {
			if(star_on) {
				document.getElementById("feed_star").innerHTML			= "Remove Star";
				document.getElementById("feed_star").style.border		= "1px solid green";
				document.getElementById("feed_star").style.color		= "green";
			
			} else {
				document.getElementById("feed_star").innerHTML			= "Add Star";
				document.getElementById("feed_star").style.border		= "0px solid white";
				document.getElementById("feed_star").style.color		= "#333333";
			} 
		}
	}

	this.toggleStar = function (index) {

		var star_on = document.getElementById("feed_star").innerHTML=="Remove Star"?1:0;

		if(star_on) {
			document.getElementById("feed_star").innerHTML			= "Add Star";
			document.getElementById("feed_star").style.border		= "0px solid white";
			document.getElementById("feed_star").style.color		= "#333333";
			deleteBookmark.load(feed_cell.delete_bookmark_callback, "star", feedObjects[index].link);
		
		} else {
			
			document.getElementById("feed_star").innerHTML			= "Remove Star";
			
			document.getElementById("feed_star").style.border		= "1px solid green";
			document.getElementById("feed_star").style.color		= "green";

			var bookmarkObj = feedObjects[index];
			bookmarkObj.tag = "star";
			addBookmark.load(feed_cell.add_bookmark_callback, bookmarkObj); //feedObjects is global defined at rss.php
		}
	}

	this.bookmarkPanel = function (index) {

		loadTags.load(feed_cell.bookmarkTagsCallback);
		
		var feedObj = feedObjects[index];
		
		var bookmark_str = "";
		bookmark_str += "<div style='margin-bottom:24px;font-size:24px;color:#335533;font-style:italic'>Bookmark Panel</div>";
		
		bookmark_str += "<div class=info_panel_paper style='margin-bottom:16px;padding:8px;'>";
		
		bookmark_str += "<div class='feed_subtitle_t'>";
		//bookmark_str += feedObj.siteTitle;
		bookmark_str += feedObj.siteTitle;
		bookmark_str += "</div>";

		bookmark_str += "<div class='feed_title'>";
		bookmark_str += feedObj.title;
		bookmark_str += "</div>";
		
		bookmark_str += "<div class='feed_subtitle_b'>";
		//bookmark_str += feedObj.siteTitle;
		bookmark_str += feedObj.pubDate;
		bookmark_str += "</div>";

		bookmark_str += "<form name='tag_form' style='margin:0; margin-bottom:32'>";
		bookmark_str += "<input type='text' style='padding:4px;float:left;margin-top:8px;width:333px;' name='tag_input'/>";
		bookmark_str += "<img src='./graphics/done.png' class='feed_done' title='Add bookmark' onClick='feed_cell.save_bookmark("+index+");'>";
		bookmark_str += "<div class='feed_subtitle_t' style='margin-top:-3'>Select a tag from the tag cloud below or enter a new tag.</div>";
		bookmark_str += "</form>"

		bookmark_str += "</div>";

		bookmark_str += "<div id=tag_cloud></div>";
		bookmark_str += "<p><a style='float:right;font-style:italic;color:#333333;font-size:12;' ";
		bookmark_str += "href='http://www.roytanck.com' target='#'>Tag Cloud created by Roy Tanck at roytanck.com</a>";

		document.getElementById("overlay_entry_box").style.visibility = "visible";
		document.getElementById("overlay_entry_box").style.top = window.pageYOffset+20;
		document.getElementById("overlay_entry_mask").style.visibility = "visible";
		document.getElementById("overlay_entry").innerHTML = unescape(bookmark_str);
	}

	this.setTag = function (tag_index) {
		document.tag_form.tag_input.value = feed_cell.tags[tag_index];
	}

	this.save_bookmark = function (article_index) {

		var bookmarkObj = feedObjects[article_index];  //feedObjects is global defined at rss.php
		bookmarkObj.tag = document.tag_form.tag_input.value;

		addBookmark.load(feed_cell.add_bookmark_callback, bookmarkObj);
		
		hideEntry();
		//alert("Success! Article has been bookmarked under \""+bookmarkObj.tag+"\".");
	}

	this.tags = new Array();
	this.bookmarkTagsCallback = function (tags) {
		
		var tags_str = "<tags>";
		for (var i = 0; i < tags.length; i++) {
			
			var size = Math.floor(Math.random()*4)+10;
			var title = tags[i].title;
			feed_cell.tags[i] = title;

			tags_str	+= "<a href='javascript:feed_cell.setTag("+i+")' ";//"+title+"javascript:feed_cell.setTag('')
			tags_str	+= "style='"+size+"' color='"+randomColor()+"' hicolor='0x00cc00'>";
			tags_str	+= title+"</a>";
		}
		tags_str += "</tags>";

		tagCloud.addVariable("tagcloud", tags_str);
		tagCloud.write("tag_cloud");
	}

	this.add_bookmark_callback = function (result) {
		alert(result);
	}

	this.delete_bookmark_callback = function (result) {
		//alert(result);
	}

	this.showVideo = function (desc) {
		//alert(desc);
		document.getElementById("overlay_content_box").style.visibility = "visible";
		document.getElementById("overlay_content_box").style.top = window.pageYOffset+20;
		document.getElementById("overlay_content").innerHTML = unescape(desc);
	}

	this.showSummary = function (desc, link) {
		//alert(desc);
		document.getElementById("overlay_content_box").style.visibility = "visible";
		document.getElementById("overlay_content_box").style.top = window.pageYOffset+20;
		document.getElementById("overlay_content").innerHTML = unescape(desc);

		//this.setStar(0);
		checkStar.load(this.checkStarCallback, link);

	}

	this.checkStarCallback = function (star_on) {
		feed_cell.setStar(star_on);
	}
}

var summary_cell = new summary_cell ();
function summary_cell () {

	this.type				= 0;
	this.photoObj;
	this.callbalck;
	
	this.load = function(photoObj, callback) {

		this.photoObj = photoObj;
		this.callback = callback;

		//alert(photoObj);

		return this.build();
	}

	this.showVideo = function (desc) {
		//alert(desc);
		//document.getElementById("overlay_content_box").style.visibility = "visible";
		//document.getElementById("overlay_content_box").style.top = window.pageYOffset+20;

		showOverlay();
		document.getElementById("overlay_content").innerHTML = unescape(desc);
	}

	this.build = function () {
		
		//alert(summary_cell.photoObj.title);
		var filenames = this.photoObj.filenames.split(",");
		var filename = filenames[0];
		
		var video_keys = this.photoObj.video_keys.split(",");
		var video_key = video_keys[0];

		var str = "<div style=clear:both></div>";
		str += "<div class='summary_cell'>";
		
		if (this.photoObj.host_title && !this.photoObj.host_title.match(/undefined/)) {
			str += "<div class='summary_subtitle_tl'>";
			str += this.photoObj.host_title;
			str += "</div>";
		}

		str += "<div class='summary_subtitle_tr'>";
		str += this.photoObj.timestamp;
		str += "</div>";


		str += "<div style='clear:both;border-top:1px solid #aaaaaa;'></div>";

		if(this.photoObj.tag!="untagged") {
			str += "<div class='summary_tags'>";
			str += this.photoObj.tag;
			str += "</div>";
		}

		str += "<p/>";
	
		if (video_key.length>5) {
			//str += "<img class=summary_youtube  src=http://img.youtube.com/vi/"+video_key+"/default.jpg>";

			try
				{


					//if(yt_key.length>0) {
					if(video_key.length>0) {
						
						var videoContent = "";
						var videoKey = video_key;
					
						videoContent = "<object width='"+VIDEO_WIDTH+"' height='"+VIDEO_HEIGHT+"'><param name='movie' value='http://www.youtube.com/v/"+videoKey+"&hl=en&fs=1'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param>";
						videoContent += "<embed src='http://www.youtube.com/v/"+videoKey+"&hl=en&fs=1' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='"+VIDEO_WIDTH+"' height='"+VIDEO_HEIGHT+"'></embed></object>";
						videoContent = "<div class=summary_video style='width:"+VIDEO_WIDTH+"'>" + videoContent + "</div>";
										
						str += "<a onClick='summary_cell.showVideo(\""+escape(videoContent)+"\");' title='Watch video.'>";
						var vlink = "http://img.youtube.com/vi/"+video_key+"/2.jpg";//0.jpg=full size
						str += "<img class=summary_thumb_left src="+vlink+">";
						str += "</a>";
					}
					
				}
				catch (err)
				{
					//alert("no video"+err);
				}

		} else if (filename.match("^http")) {
			//str += "<div class=crop><img class=crop style='float:right' src="+filename+" onClick='summary_cell.callback("+this.photoObj.index+");' title='Read summary'></div>";
			str += "<img class=summary_image src="+filename+" onClick='summary_cell.callback("+this.photoObj.index+");' title='Read summary'>";

		} //<div class=summary_image_frame></div>


		str += "<div class='summary_title' onClick='summary_cell.callback("+this.photoObj.index+");' title='Read summary'>";
		str += unescape(this.photoObj.title);// + " ...more";
		str += "</div>";
		
		//str += "<div style=clear:both;></div>";
		if(this.photoObj.summary.length>1) {
			str += "<div class='summary_summary'>";
			str += text_proc(this.photoObj.summary);
			str += "</div>";

			str += "<div style='clear:both'></div>";
		}


		str += "<ul id=\"hor_list\" style='margin-top:16px;'>";			
			str += "<li style='border-left:1px solid gray'><a  onClick='summary_cell.callback("+this.photoObj.index+");' title='Read summary 88'>Read Summary</a></li>";
			str += "<li><a href=\""+this.photoObj.link+"\" target='#' title='Go to the website.'>Visit Website</a></li>";
			//try
			//{
				str += "<li><a target='#' href=\"http://booklet.xeeku.com/?db_id="+escape(this.photoObj.db_id)+"&keyword="+this.photoObj.tag.replace(/\s+/g,"")+"&user_id="+user_id+"\" title='Launch Xeeku Booklet'>Booklet</a></li>";
			//}
			//catch (err) {}
			
			//str += "<li><a href=\"./other_readers.php?link="+escape(this.photoObj.link)+"\" title='View other readers who have bookmarked the article'>Other Readers</a></li>";
			
			//this.article_title = this.photoObj.title;
			//loadBitly.load(this.bitlyCallback, "http://reader.xeeku.com?db_id="+this.photoObj.db_id+"&user_id="+loggin_user_id+"&dummy=0");//dummy=0 to remove trailing "/"
			//str += "<li><span id='twitter_anchor'>Twitter</span></li>";
		
		str += "</ul>";
		str += "<p/>";
		str += "</div>";


		return str;

		//document.getElementById("map_thumb").style.background = static_map;  

	}
}

function text_proc(text) {

	var text =  unescape(text).replace(/\+/g," ");
	text = text.replace(/<P>/ig,"\n\n");
	text = text.replace(/<.+?>/g,"");
	text = text.replace(/^\s+/,"");
	text = text.substr(0, 600);
	
	text = text.replace(/\n{2,}/g,"<p>");
	text = text.replace(/\n/g,"<br>");


	return text;
}

var content_cell = new content_cell ();//checkStar.load(this.checkStarCallback, link);
function content_cell () {

	this.type				= 0;
	this.photoObj;

	this.photoContent		= ""; //stores innerHTML of content_media as photo is being swapped out by video.
	
	this.load = function(photoObj) {

		this.photoObj = photoObj;
		this.photoObj.summary = unescape(unescape(this.photoObj.summary));//description;
		this.photoObj.summary = this.photoObj.summary.replace(/\+/g," ");

		this.photoContent = "";

		checkStar.load(content_cell.checkStarCallback, photoObj.link);//**CAUSION: this may cut in front of output loading...
		checkBookmark.load(content_cell.checkBookmarkCallback, photoObj.link);

		return this.build();
	}


	this.switchImage = function(index) {

		if (this.photoContent.length>1) document.getElementById("content_media").innerHTML = this.photoContent;  
		this.photoContent = "";

		eval("var currentImage = document.image_0.src");
		eval("var activeImage  = document.image_"+index+".src");
		document.image_0.src = activeImage;
		eval("document.image_"+index+".src = currentImage");
	}

	this.getVideo = function(videoKey) {

		var content_str="";
		var width	= 420; //512
		var height	= 296*420/512; //296

		if (videoKey.match(/^\d+$/)) {

			content_str += "<object width='"+width+"' height='"+height+"'><param name='allowfullscreen' value='true' /><param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id="+keys[i]+"&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1'></param><param name='allowscriptaccess' value='always'></param>";				
			content_str += "<embed src='http://vimeo.com/moogaloop.swf?clip_id="+videoKey+"&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='"+width+"' height='"+height+"'></embed></object>";

		} else if (videoKey.length>20) {
			
			content_str += "<object width='"+width+"' height='"+height+"'><param name='movie' value='http://www.hulu.com/embed/"+videoKey+"/0'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param>";				
			content_str += "<embed src='http://www.hulu.com/embed/"+videoKey+"/0' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='"+width+"' height='"+height+"'></embed></object>";

		} else {
			content_str += "<object width='"+width+"' height='"+height+"'><param name='movie' value='http://www.youtube.com/v/"+videoKey+"&hl=en&fs=1'></param><param name='allowFullScreen' value='true'></param><param name='wmode' value='transparent'></param><param name='allowscriptaccess' value='always'></param>";
			content_str += "<embed src='http://www.youtube.com/v/"+videoKey+"&hl=en&fs=1' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='"+width+"' height='"+height+"' wmode='transparent'></embed></object>";
		}

		return content_str;
	}

	this.loadVideo = function(videoKey) {
		document.getElementById("content_video").innerHTML = this.getVideo(videoKey);  
	}

	this.build = function () {
				
		var filenames = this.photoObj.filenames.split(",");
		var filename = filenames[0];
		var video_keys = this.photoObj.video_keys.split(",");
		var video_key = video_keys[0];

		var titleBlock = "";
		if (this.photoObj.host_title && !this.photoObj.host_title.match("undefined")) {
			titleBlock += "<div class='summary_subtitle_tl'>";
			titleBlock += this.photoObj.host_title;
			titleBlock += "</div>";
		}

		titleBlock += "<div class='summary_subtitle_tr'>";
		titleBlock += this.photoObj.timestamp;
		titleBlock += "</div>";

		titleBlock += "<div style='clear:both;border-top:1px solid #aaaaaa;'></div>";

		titleBlock += "<div class='summary_title'>";
		titleBlock += this.photoObj.title;
		titleBlock += "</div>";


		var descRaw = this.photoObj.summary;

		if (descRaw) descRaw = descRaw.replace(/<img\ /gi, "<img border=0 style='float:left;margin:4 8 0 0;' ");
		//else alert(descRaw);
		titleBlock += "<div id=\"hlist\" style='margin-bottom:24px;border:0'>";
			titleBlock += "<ul id=\"hor_list\">";

			//if (signed_in>0) {
				//titleBlock += "<li><a onClick=\"javascript:content_cell.toggleStar();\" id=\"bookmark_star\">Add Star</a></li>";
				//titleBlock += "<li><a onClick=\"javascript:content_cell.bookmarkPanel();\" id=\"bookmark_bookmark\">Bookmark</a></li>";
			//}

			titleBlock += "<li style='border-left:1px solid gray'><a href=\""+this.photoObj.link+"\" target='#'>Visit Website</a></li>";

			titleBlock += "<li><a href=\"#\">Email</a></li>";
			titleBlock += "<li><a href=\"#\">Twitter</a></li>";
			titleBlock += "<li><a href=\"#\">Other Readers</a></li>";
			titleBlock += "</ul>";
		
		titleBlock += "</div>";

		/*
		if (this.photoObj.filenames) {
			var files = this.photoObj.filenames.split(",");
			titleBlock += "<img src='"+files[0]+"' style='float:left;margin-right:8px'>";
		}
		*/

		titleBlock += "<div style='margin-top:16px;font-size:14px;line-height:140%;'>"+unescape(descRaw)+"</div>";

		var str = "";
		str += "<div class=content_title_box_paper>";// title='Click to read article' onClick='newWindow(\""+this.photoObj.link+"\")'>";
		//str += "<div class=content_title_box title='Click to read article' oClick='"+this.photoObj.link+"'>";
		
		if (!this.photoObj.host_title.match("undefined")) {
			str += "<div class='summary_subtitle_tl'>";
			str += this.photoObj.host_title;
			str += "</div>";
		}

		str += "<div class='summary_subtitle_tr'>";
		str += this.photoObj.timestamp;
		str += "</div>";

		str += "<div style='clear:both;border-top:1px solid #aaaaaa;'></div>";

		str += "<div class='summary_title'>";
		str += unescape(this.photoObj.title);
		str += "</div>";

		str += "<div style='color:#888833;font-style:italic;margin-bottom:12px;'>";
		str += this.photoObj.tag;
		str += "</div>";
		
		str += "<div style='clear:both;'></div>";
		
		if(signed_in>0) {
			//str += "<div id=\"hlist\" style='margin-bottom:16px;'>";
				str += "<ul id=\"hor_list\">";			
					str += "<li><a onClick=\"javascript:content_cell.toggleStar();\"    style=\"padding:0 4 0 4;\" id=\"bookmark_star\">Add Star</a></li>";
					str += "<li><a onClick=\"javascript:content_cell.bookmarkPanel();\" style=\"padding:0 4 0 4;\" id=\"bookmark_add\">Add Bookmark</a></li>";
				str += "</ul>";
			//str += "</div>";
		}

		//str += "<div style='clear:both'></div>";

		if (video_key.length>5) {
			str += "<div id='content_video' class='content_photo'>";
				str += this.getVideo(video_key);
			str += "</div>";
		}

		
		if (video_keys.length>1) for (var i = 0; i < video_keys.length; i++) {
			if (video_keys[i].length<5) continue;
			str += "<img class=content_thumb style='width:136px;' src='http://img.youtube.com/vi/"+video_keys[i]+"/default.jpg' onClick='content_cell.loadVideo(\""+video_keys[i]+"\");'>";		
		}

		str += "<div id='content_media' class='content_photo'>";
		//var currentPhoto = document.getElementsByName("image_0").src;

		if (filename.match("^http")) {
			str += "<a href='javascript:newWindow(document.image_0.src);' target='#' title='View Image "+filename+"'>";
			//str += "<a href="+filename+" target='#' title='View Image "+filename+"'>";
			str += "<img class=content_photo src="+filename+"  name='image_0'>";
			str += "</a>";

		}// else if (video_key.length>5) {
			//this.loadVideo(video_key);
		//} 
		
		str += "</div>";

		for (var i = 1; i < filenames.length; i++) {
			str += "<img class=content_thumb src="+filenames[i]+" name='image_"+i+"' onClick='content_cell.switchImage("+i+");'>";		
		}

		str += "<p/>";
		
		var summary = text_proc(this.photoObj.summary);// this.photoObj.summary.replace(/\<.+?\>/g, "");
		if (summary.length>SUMMARY_LIMIT)
		{
			summary = summary.substr(0, SUMMARY_LIMIT-1);
			summary += " ...<a style='text-weight:bold;color:red;' onClick='content_cell.showSummary(\""+escape(titleBlock)+"\",\""+this.photoObj.link+"\");' title='Read summary of current article'>[Read]</a>";

		}		

		str += "<div class='content_summary'>";
		str += summary;//unescape(this.photoObj.summary);
		str += "</div>";
		
		
		//str += "<div id=\"hlist\">";
		str += "<ul id=\"hor_list\" style='margin-top:16px'>";			
			str += "<li style='border-left:1px solid gray'><a href=\""+this.photoObj.link+"\" target='#' title='Go to the website.'>Visit Website</a></li>";
			str += "<li><a onClick='content_cell.showSummary(\""+escape(titleBlock)+"\",\""+this.photoObj.link+"\");' title='Read summary of current article'>Read</a></li>";
			//try
			//{
				str += "<li><a target='#' href=\"http://booklet.xeeku.com/?db_id="+escape(this.photoObj.db_id)+"&keyword="+this.photoObj.tag.replace(/\s+/g,"")+"&user_id="+user_id+"\" title='Launch Xeeku Booklet'>Booklet</a></li>";
			//}
			//catch (err) {}
			
			str += "<li><a href=\"./other_readers.php?link="+escape(this.photoObj.link)+"\" title='View other readers who have bookmarked the article'>Other Readers</a></li>";
			
			this.article_title = this.photoObj.title;
			loadBitly.load(this.bitlyCallback, "http://reader.xeeku.com?db_id="+this.photoObj.db_id+"&user_id="+loggin_user_id+"&dummy=0");//dummy=0 to remove trailing "/"
			str += "<li><span id='twitter_anchor'></span></li>";
		
		str += "</ul>";
		//str += "</div>";

	str += "</div>";

		return str;

		//document.getElementById("map_thumb").style.background = static_map;  
	}

	this.setStar = function (star_on) {

		if (signed_in>0) {
			if(star_on) {
				document.getElementById("bookmark_star").innerHTML			= "Remove Star";
				document.getElementById("bookmark_star").style.border		= "1px solid green";
				document.getElementById("bookmark_star").style.color			= "green";
			
			} else {
				document.getElementById("bookmark_star").innerHTML			= "Add Star";
				document.getElementById("bookmark_star").style.border		= "0px solid white";
				document.getElementById("bookmark_star").style.color			= "#333333";
			} 
		}
	}

	this.setBookmark = function (bookmark_on) {

		if (signed_in>0) {
			if(bookmark_on) {
				document.getElementById("bookmark_add").innerHTML			= "Remove Bookmark";
				document.getElementById("bookmark_add").style.border		= "1px solid blue";
				document.getElementById("bookmark_add").style.color			= "blue";
			
			} else {
				document.getElementById("bookmark_add").innerHTML			= "Add Bookmark";
				document.getElementById("bookmark_add").style.border		= "0px solid white";
				document.getElementById("bookmark_add").style.color			= "#333333";
			} 
		}
	}

	this.bitlyCallback = function (bitly_url) {

		var twitter_url = "http://twitter.com/timeline/home?source=XeekU&status=";
		//twitter_url += this.photoObj.title+"\" ";//+this.dataObj.shortUrl);
		twitter_url += escape(content_cell.article_title + " " + bitly_url);

		var anchor = "<a href='"+twitter_url+"' target='#'>Twitter</a>";
		document.getElementById("twitter_anchor").innerHTML	= anchor;
	}

	this.checkStarCallback = function (star_on) {
		//alert(star_on);
		content_cell.setStar(star_on);
	}

	this.checkBookmarkCallback = function (bookmark_on) {
		//alert(bookmark_on);
		content_cell.setBookmark(bookmark_on);
	}


	this.toggleStar = function () {

		//alert(this.feedObjs[0].siteLink);
		//return;
		
		var star_on = document.getElementById("bookmark_star").innerHTML=="Remove Star"?1:0;
		this.setStar(star_on);

		if(star_on) {
			//document.getElementById("bookmark_star").innerHTML			= "Add Star";
			//document.getElementById("bookmark_star").style.border		= "0px solid white";
			//document.getElementById("bookmark_star").style.color			= "#333333";
			deleteBookmark.load(content_cell.delete_bookmark_callback, STAR, this.photoObj.link);
		
		} else {
			
			//document.getElementById("bookmark_star").innerHTML			= "Remove Star";
			//document.getElementById("bookmark_star").style.border		= "1px solid green";
			//document.getElementById("bookmark_star").style.color			= "green";
		
			this.photoObj.tag		= STAR; //star defined at root
			addBookmark.load(content_cell.add_bookmark_callback, this.photoObj); //feedObjects is global defined at rss.php
		}
		
		this.setStar(!star_on);
	}

	this.bookmarkPanel = function () {


		var bookmark_on = document.getElementById("bookmark_add").innerHTML=="Remove Bookmark"?1:0;
		
		if(bookmark_on) {

			document.getElementById("bookmark_add").innerHTML			= "Add Bookmark";
			document.getElementById("bookmark_add").style.border		= "0px solid white";
			document.getElementById("bookmark_add").style.color			= "#333333";
			deleteBookmark.load(content_cell.delete_bookmark_callback, "", this.photoObj.link);
		
		} else {
			
			//Moved under content_cell.save_bookmark();
			//document.getElementById("bookmark_add").innerHTML			= "Remove Bookmark";
			//document.getElementById("bookmark_add").style.border		= "1px solid blue";
			//document.getElementById("bookmark_add").style.color			= "blue";

			loadTags.load(content_cell.bookmarkTagsCallback);
					
			var bookmark_str = "";
			bookmark_str += "<div style='margin-bottom:24px;font-size:11px;color:#335533;font-style:italic'>Bookmark Panel</div>";
			
			bookmark_str += "<div style='margin-bottom:16px;'>";
			
			bookmark_str += "<div class='feed_subtitle_t'>";
			//bookmark_str += feedObj.siteTitle;
			bookmark_str += this.photoObj.siteTitle;
			bookmark_str += "</div>";

			bookmark_str += "<div class='feed_title'>";
			bookmark_str += this.photoObj.title;
			bookmark_str += "</div>";
			
			bookmark_str += "<div class='feed_subtitle_b'>";
			//bookmark_str += feedObj.siteTitle;
			bookmark_str += this.photoObj.timestamp;
			bookmark_str += "</div>";

			bookmark_str += "<form name='tag_form' style='margin:0; margin-bottom:32'>";
			bookmark_str += "<input type='text' style='padding:4px;float:left;margin-top:8px;width:333px;' name='tag_input'/>";
			bookmark_str += "<img src='./graphics/done.png' class='feed_done' title='bookmark' onClick='content_cell.save_bookmark();'>";
			bookmark_str += "<div class='feed_subtitle_t' style='margin-top:-3'>Select a tag from the tag cloud below or enter a new tag.</div>";
			bookmark_str += "</form>"

			bookmark_str += "</div>";

			bookmark_str += "<div id=tag_cloud></div>";
			bookmark_str += "<p><a style='float:right;font-style:italic;color:#333333;font-size:12;' ";
			bookmark_str += "href='http://www.roytanck.com' target='#'>Tag Cloud created by Roy Tanck at roytanck.com</a>";

			document.getElementById("overlay_entry_box").style.visibility = "visible";
			document.getElementById("overlay_entry_box").style.top = window.pageYOffset+20;
			document.getElementById("overlay_entry_mask").style.visibility = "visible";
			document.getElementById("overlay_entry").innerHTML = unescape(bookmark_str);
		}
	}

	this.setTag = function (tag_index) {
		document.tag_form.tag_input.value = content_cell.tags[tag_index];
	}

	this.save_bookmark = function () {

		this.photoObj.tag = document.tag_form.tag_input.value;
		addBookmark.load(content_cell.add_bookmark_callback, this.photoObj);
		
		hideEntry();

		document.getElementById("bookmark_add").innerHTML			= "Remove Bookmark";
		document.getElementById("bookmark_add").style.border		= "1px solid blue";
		document.getElementById("bookmark_add").style.color			= "blue";

		//alert("Success! \""+this.photoObj.title+"\" has been bookmarked under \""+this.photoObj.tag+"\".");

	}

	this.tags = new Array();
	this.bookmarkTagsCallback = function (tags) {
		
		var tags_str = "<tags>";
		for (var i = 0; i < tags.length; i++) {
			
			var size = Math.floor(Math.random()*4)+10;
			var title = tags[i].title;
			content_cell.tags[i] = title;

			tags_str	+= "<a href='javascript:content_cell.setTag("+i+")' ";//"+title+"javascript:content_cell.setTag('')
			tags_str	+= "style='"+size+"' color='"+randomColor()+"' hicolor='0x00cc00'>";
			tags_str	+= title+"</a>";
		}
		tags_str += "</tags>";

		tagCloud.addVariable("tagcloud", tags_str);
		tagCloud.write("tag_cloud");
	}

	this.add_bookmark_callback = function (bm_adder_result) {
		//alert("add bookmark:"+bm_adder_result);
	}

	this.delete_bookmark_callback = function (result) {
		//alert("delete bookmark: "+result);
	}

	this.showSummary = function (desc, link) {
		//alert(desc);
		document.getElementById("overlay_content_box").style.visibility = "visible";
		document.getElementById("overlay_content_box").style.top = window.pageYOffset+20;
		document.getElementById("overlay_content").innerHTML = unescape(desc);

		//this.setStar(0);
		checkStar.load(this.checkStarCallback, link);

	}

	this.checkStarCallback = function (star_on) {
		content_cell.setStar(star_on);
	}








}


var photo_editor = new photo_editor();
function photo_editor () {//update_period) {

	this.title_org = '';	
	this.summary_org = '';	
	this.db_id	= '';

	this.init = function(title, summary, db_id) {//loading none-editable
		
		var desc_cont = "";
		if (auth>0) desc_cont = "<a href='#' class=photo_edit onClick='photo_editor.go(\""+escape(title)+"\",\""+escape(summary)+"\","+db_id+");'>"+"Edit"+"</a>";
		desc_cont += "<div class=photo_title>"+unescape(unescape(title))+"</div>";
		desc_cont += "<pre>"+unescape(unescape(summary))+"</pre>";
		
		document.getElementById("photo_desc").innerHTML = desc_cont;
	}

	this.go = function(title, summary, db_id) {//start editable

		this.title_org		= unescape(unescape(title));
		this.summary_org	= unescape(unescape(summary));
		this.db_id			= db_id;

		var desc_cont = "<form name='input_form'>"
		
		desc_cont += "<div style='margin-bottom:8px'>";
		desc_cont += "<div style='float:right'>";
		desc_cont += "<input type='radio' name='permission' style='margin:12 4 0 0'  value='public'  >Public";
		desc_cont += "<input type='radio' name='permission' style='margin:12 4 0 16' value='nonpublic' checked>Non-Public";
		desc_cont += "</div>";
		desc_cont += "<input type='checkbox' name='intro' style='margin:12 4 0 0' value='intro'>Introduction";
		desc_cont += "</div>";
		
		desc_cont += "<input  id='title_edit'  class='photo_editor photo_title' value='"+unescape(unescape(title))+"'>";//
		desc_cont += "<textarea id='summary_edit' class='photo_editor' style='height:60%;margin-bottom:4px' >"+unescape(unescape(summary))+"</textarea>";

		desc_cont += "<button style='float:right;margin-left:4px;' onClick='photo_editor.load();'>Submit</button>";
		desc_cont += "<button style='float:right;margin-left:4px;' onClick='photo_editor.cancel();'>Cancel</button>";
		desc_cont += "</form>";

		document.getElementById("photo_desc").innerHTML = desc_cont;
	}


	this.cancel = function() {//after cancel button pressed. Restore original

		var funcArg = "photo_editor.go(\""+escape(photo_editor.title_org)+"\",\""+escape(photo_editor.summary_org)+"\",\""+photo_editor.db_id+"\");";
		var desc_cont = "<a href='#' class=photo_edit onClick='"+funcArg+"'>"+"Edit"+"</a>";
		desc_cont += "<div class=photo_title>"+photo_editor.title_org+"</div>";
		desc_cont += "<pre class=''>"+photo_editor.summary_org+"</pre>";
		document.getElementById("photo_desc").innerHTML = desc_cont;
	}

	this.load = function() { //after Submit pressed: 1) load new data into none-editable, 2)request server update

		var title		= document.getElementById('title_edit').value;
		var summary		= document.getElementById('summary_edit').value;
		var permission	= document.input_form.permission[0].checked?"public":"private";
		var intro		= document.input_form.intro.checked?"1":"0";

		editPhoto.go(title, summary, permission, intro, this.db_id);//server DB update reqeust (ajax.js)

		//var funcArg = "photo_editor.go(\""+escape(photo_editor.title_org)+"\",\""+escape(photo_editor.summary_org)+"\",\""+photo_editor.db_id+"\");";
		var funcArg = "photo_editor.go(\""+escape(title)+"\",\""+escape(summary)+"\",\""+photo_editor.db_id+"\");";
		var desc_cont = "<a href='#' class=photo_edit onClick='"+funcArg+"'>"+"Edit"+"</a>";
		desc_cont += "<div class=photo_title>"+title+"</div>";
		desc_cont += "<pre>"+summary+"</pre>";
		document.getElementById("photo_desc").innerHTML = desc_cont;
	}

}

function newWindow(url) {

	var content = "<html lang=\"en\">\
					<head>\
						<title>XeekU Photos</title>\
						<link rel=\"stylesheet\" type=\"text/css\" href=\"javascripts/style.css\"/>\
					</header>\
					<body>\
					";
	content += "<img src='"+url+"'>";
	content += "</body></html>";

	mywindow = window.open (url, "mywindow", "location=0,status=0,scrollbars=1,width=780,height=656");
	//mywindow.moveTo(100,100);
}















var add_entry = new add_entry (); //adding new RSS feed or bookmark - consolidated.
function add_entry () {

	this.type;
	this.feedObjects;
	//this.feed_link;
	
	this.load = function (type_in) {	//type = "rss"|"bookmark"

		this.type = type_in;

		switch (true)
		{
			case type_in=="rss": this.showSubscribePanel(); break;
			case type_in=="bookmark": this.showBookmarkPanel(); break;
		
		}
	}

	this.showBookmarkPanel = function () {

		document.getElementById("overlay_entry_mask").style.visibility = "visible";
		//addSubscribe.load(rss_module.add_subscribe_callback, feedObj); //feedObjects is global defined at rss.php
	
		loadTags.load(add_entry.bookmarkTagsCallback);
					
		var bookmark_str = "";
		bookmark_str += "<div style='margin-bottom:24px;font-size:24px;color:#888888;font-style:italic'>Add New Article</div>";
				
		bookmark_str += "<form name='tag_form' style='margin:0; margin-bottom:32;'>";

		bookmark_str += "<div id='overlay_entry_core' style='margin-bottom:16px;float:left;'>";
		bookmark_str += "<div style='width:80px;float:left;text-align:right;margin:6 4 0 0;'>Article URL: </div>";
		
		bookmark_str += "<div style='float:right;'>";
		bookmark_str += "<img src='./graphics/preview.png' class='feed_done' style='float:right;' title='Article preview' onClick='add_entry.bookmarkPreview();'>";
		bookmark_str += "<div style='color:#333333'>Preview</div>";
		bookmark_str += "</div>";
		
		bookmark_str += "<input type='text' style='padding:4px;float:left;width:320px;' name='bookmark_link'/>";
		
		bookmark_str += "<div style='clear:both;margin-top:24px;'></div>";

		bookmark_str += "<div id='rss_preview'>";
		
		//bookmark_str += "<form name='bookmarker_form' style='margin-top:24px; margin-bottom:32;border:1px solid red;'>";
		bookmark_str += "<div style='margin-bottom:16px;float:left;'>";
			bookmark_str += "<div style='width:80px;float:left;text-align:right;margin: 4 4 0 0;color:#888888;font-size:12px;''>Title: </div>";
			bookmark_str += "<input type='hidden' name='bookmark_link_hidden'/>";
			bookmark_str += "<input type='text' style='padding:4px;float:left;width:320px;' name='bookmark_title'/>";
			
			bookmark_str += "<div style='clear:both;'></div>";
			
			bookmark_str += "<div style='width:80px;float:left;text-align:right;margin: 4 4 0 0;color:#888888;font-size:12px;'>Desc: </div>";
			bookmark_str += "<textarea type='text' style='padding:8 4 8 4;overflow:hidden;float:left;width:320px;height:200px;' name='bookmark_desc'>";
			bookmark_str += "</textarea>";
			
			bookmark_str += "<div id='bookmark_url_linker' style='text-align:right;'></div>";
			bookmark_str += "<div style='clear:both;margin-top:24px;'></div>";

		bookmark_str += "</div>";
		//bookmark_str += "</form>";
		
		bookmark_str += "</div>"; //end of rss_preview

		bookmark_str += "</div>";//end of overlay_entry_core
		
		bookmark_str += "<button class='feed_done' style='float:right;' title='Submit' onClick='add_entry.save_bookmark();'>";
		bookmark_str += "<img src='./graphics/done.png' class='feed_done' style='float:right;' title='Submit'>";
		bookmark_str += "Submit</button>";
		
		bookmark_str += "<div style='clear:both;'></div>";

		bookmark_str += "<div class='feed_subtitle_t' style='margin-bottom:-3'>Select a tag from the tag cloud below or enter a new tag.</div>";
		bookmark_str += "<input type='text' style='padding:4px;float:left;width:400px;' name='tag_input'/>";
		
		bookmark_str += "</form>"
		bookmark_str += "<div id=tag_cloud></div>";

		bookmark_str += "<p><a style='float:right;font-style:italic;color:#333333;font-size:12;' ";
		bookmark_str += "href='http://www.roytanck.com' target='#'>Tag Cloud created by Roy Tanck at roytanck.com</a>";

		document.getElementById("overlay_entry_box").style.visibility = "visible";
		document.getElementById("overlay_entry_box").style.top = window.pageYOffset+20;
		//document.getElementById("overlay_entry_mask").style.visibility = "visible";
		document.getElementById("overlay_entry").innerHTML = unescape(bookmark_str);
	}

	this.bookmarkPreview	= function () {
		
		var feed_url = document.tag_form.bookmark_link.value;
		
		if (feed_url.length<1) {
			alert("Must enter a valid URL to preview.");
			return;
		}
		
		this.feed_link = feed_url;
		loadYahooSearch.load(add_entry.searchCallback, feed_url);

		//document.getElementById("rss_preview").innerHTML = "Loading article summary. Please wait...";
		//loadRssFeed.load(add_entry.rssFeedCallback, feed_url);
	}

	this.searchCallback	= function (searchObjs) {
		/*
		var preview_str = "";
		//preview_str		+= "<div class=feed_subtitle_t>"+searchObjs[0].pubDate+"</div>";

		preview_str += "<form name='tag_form' style='margin-top:24px; margin-bottom:32;'>";
		preview_str += "<div style='margin-bottom:16px;float:left;'>";
			preview_str += "<div style='width:80px;float:left;text-align:right;margin-right:4px;'>Title: </div>";
			preview_str += "<input type='text' style='padding:4px;float:left;width:320px;' name='bookmark_title' value='";
			preview_str	+= searchObjs[0].title;
			preview_str += "'/>";
			
			preview_str += "<div style='clear:both;'></div>";
			
			preview_str += "<div style='width:80px;float:left;text-align:right;margin-right:4;'>Desc: </div>";
			preview_str += "<textarea type='text' style='padding:8 4 8 4;overflow:hidden;float:left;width:320px;height:100%;' name='bookmark_desc'>";
			preview_str	+= searchObjs[0].description;
			preview_str += "</textarea>";
			preview_str += "<div style='clear:both;margin-top:24px;'></div>";

		preview_str += "</div>";
		preview_str += "</form>";


		//preview_str	+= "<div class=feed_title>"+searchObjs[0].title+"</div>";
		//preview_str		+= "<div class=feed_description>"+searchObjs[0].description;
		//preview_str		+= " <a href='"+searchObjs[0].link+"' target='#' title='open new page'>[link]</a>";
		//preview_str		+= "</div>";

		//document.getElementById("rss_preview").innerHTML = preview_str;*/
		
		document.getElementById("bookmark_url_linker").innerHTML = "<a href='"+searchObjs[0].link+"' target='#'>"+searchObjs[0].link+"</a>";
		document.tag_form.bookmark_title.value			= searchObjs[0].title;
		document.tag_form.bookmark_desc.value			= searchObjs[0].description;
		document.tag_form.bookmark_link_hidden.value	= searchObjs[0].link;
	}

	this.save_bookmark = function() {
		
		var feedObj		= new Object();

		var tag			= document.tag_form.tag_input.value;
		if (tag.length<=0) tag = "untagged";
		feedObj.tag		= tag;
		feedObj.link	= document.tag_form.bookmark_link.value;
		if (!feedObj.link.match(/http\:\/\//)) feedObj.link = document.tag_form.bookmark_link_hidden.value;
				
		feedObj.title	= document.tag_form.bookmark_title.value;
		feedObj.summary	= document.tag_form.bookmark_desc.value;
		//feedObj.owner	= user_id;
		
		document.getElementById("overlay_entry_box").style.visibility = "hidden";
		document.getElementById("overlay_entry_mask").style.visibility = "hidden";
		document.getElementById("overlay_entry").innerHTML = "";

		//if (feedObj.tag.length>0)
		addBookmark.load(add_entry.add_bookmark_callback, feedObj); //feedObjects is global defined at rss.php
		//else alert(this.feedObjs[0].siteTitle);

		return true;
	}

	this.showSubscribePanel = function () {

		//addSubscribe.load(rss_module.add_subscribe_callback, feedObj); //feedObjects is global defined at rss.php
	
		loadRssTags.load(add_entry.bookmarkTagsCallback);
					
		var subscribe_str = "";
		subscribe_str += "<div style='margin-bottom:24px;font-size:24px;color:#888888;font-style:italic'>Add New RSS Feed</div>";
				
		subscribe_str += "<form name='tag_form' style='margin:0; margin-bottom:32;'>";

		subscribe_str += "<div id='overlay_entry_core' style='margin-bottom:16px;float:left;'>";
		subscribe_str += "<div style='width:80px;float:left;text-align:right;margin:6 4 0 0;'>RSS Feed:</div>";
		subscribe_str += "<img src='./graphics/preview.png' class='feed_done' style='float:right;' title='Feed preview' onClick='add_entry.preview();'>";
		subscribe_str += "<input type='text' style='padding:4px;float:left;width:320px;' name='feed_input'/>";
		
		subscribe_str += "<div style='clear:both;margin-top:24px;'></div>";

		subscribe_str += "<div id='rss_preview'></div>";
		subscribe_str += "</div>";//end of overlay_entry_core
		
		subscribe_str += "<button class='feed_done' style='float:right;' title='Submit' onClick='add_entry.save_subscribe();'>";
		subscribe_str += "<img src='./graphics/done.png' class='feed_done' style='float:right;' title='Submit'>";
		subscribe_str += "Submit</button>";
		
		subscribe_str += "<div style='clear:both;'></div>";

		subscribe_str += "<div class='feed_subtitle_t' style='margin-bottom:-3'>Select a tag from the tag cloud below or enter a new tag.</div>";
		subscribe_str += "<input type='text' style='padding:4px;float:left;width:400px;' name='tag_input'/>";
		
		subscribe_str += "</form>"
		subscribe_str += "<div id=tag_cloud></div>";

		subscribe_str += "<p><a style='float:right;font-style:italic;color:#333333;font-size:12;' ";
		subscribe_str += "href='http://www.roytanck.com' target='#'>Tag Cloud created by Roy Tanck at roytanck.com</a>";

		document.getElementById("overlay_entry_box").style.visibility = "visible";
		document.getElementById("overlay_entry_box").style.top = window.pageYOffset+20;
		//document.getElementById("overlay_entry_mask").style.visibility = "visible";
		document.getElementById("overlay_entry").innerHTML = unescape(subscribe_str);

		//this.setSubscribe(!subscribe_on);
	}


	this.preview	= function () {
		
		var feed_url = document.tag_form.feed_input.value;
		
		if (feed_url.length<5) {
			alert("Must enter a valid RSS Feed link to preview.");
			return;
		}
		this.feed_link = feed_url;

		document.getElementById("rss_preview").innerHTML = "Loading RSS feed. Please wait...";
		loadRssFeed.load(add_entry.rssFeedCallback, feed_url);
	}

	this.rssFeedCallback	= function (feedObjs) {

		if (feedObjs.length==0) {
			document.getElementById("rss_preview").innerHTML = "No feed data found. Check your feed link and try again.";
			return;
		}

		add_entry.feedObjects = feedObjs;
		
		var feed_str = "<div class=content_title_box_paper>";//rss_site_title>";
		
		feed_str += "<div class='content_subtitle_tl'>";
		feed_str += "RSS Feed";
		feed_str += "</div>";

		feed_str += "<div class='content_subtitle_tr'>";
		feed_str += feedObjs[0].pubDate;
		feed_str += "</div>";
		
		var siteTitle = feedObjs[0].siteTitle;
		//siteTitle = siteTitle.length>30?siteTitle.substr(0,29)+"...":siteTitle;
		siteTitle = siteTitle.replace(/([\,|\.|\"|\']\s*)/g,"$1 ");
		feed_str += "<div class=content_title style='margin-bottom:16px'>" + siteTitle + "</div>"

		feed_str += "<div class=content_subtitle_tl style='color:red;margin-bottom:16px'>Total: " + feedObjs.length + " articles found.</div>"


		for (var i = 0; i < Math.min(1, feedObjs.length); i++) {//
			feedObjs[i].index = i;
			feed_str += escape(feed_cell.load (feedObjs[i]));
		}

		feed_str += "</div>";

		document.getElementById("rss_preview").innerHTML = unescape(feed_str);
	}

	this.tags = new Array();
	this.bookmarkTagsCallback = function (tags) {
		
		var tags_str = "<tags>";
		for (var i = 0; i < tags.length; i++) {
			
			var size = Math.floor(Math.random()*4)+10;
			var title = tags[i].title;
			//feed_cell.tags[i] = title;
			add_entry.tags[i] = title;

			tags_str	+= "<a href='javascript:add_entry.setTag("+i+")' ";//"+title+"javascript:feed_cell.setTag('')
			tags_str	+= "style='"+size+"' color='"+randomColor()+"' hicolor='0x00cc00'>";
			tags_str	+= title+"</a>";
		}
		tags_str += "</tags>";

		tagCloud.addVariable("tagcloud", tags_str);
		tagCloud.write("tag_cloud");
	}

	this.setTag = function (tag_index) {
		document.tag_form.tag_input.value = this.tags[tag_index];
	}


	this.save_subscribe = function() {
		
		var tag = document.tag_form.tag_input.value;
		if (tag.length<=0) tag = "untagged";

		/*
		if (tag.length<= 0)
		{
			alert("Must enter a valid tag. ");
			return false;
		}
		alert(this.feedObjects[0].siteTitle);
		//alert(this.feed_link);
		*/

		var feedObj		= new Object();

		feedObj.title	= this.feedObjects[0].siteTitle;
		feedObj.link	= this.feed_link;//this.feedObjects[0].siteLink;
		feedObj.desc	= this.feedObjects[0].siteDesc;
		feedObj.tag		= tag;//document.tag_form.tag_input.value;
		//feedObj.owner	= user_id;
		
		document.getElementById("overlay_entry_box").style.visibility = "hidden";
		document.getElementById("overlay_entry_mask").style.visibility = "hidden";
		document.getElementById("overlay_entry").innerHTML = "";

		//if (feedObj.tag.length>0)
		addSubscribe.load(add_entry.add_subscribe_callback, feedObj); //feedObjects is global defined at rss.php
		//else alert(this.feedObjs[0].siteTitle);

		return true;
	}

	this.add_subscribe_callback = function (result) {
		alert(result);
	}

	this.add_bookmark_callback = function (result) {
		alert(result);
	}


}

function loadHeader(header, sub_header) {

	var header_str = "";
	//header_str += "<div class=header_title>";
	//header_str += "<div style='font: normal 10px helvetica,sans-serif;line-height:10px;'><i>"+sub_header+"</i></div>";		
	//header_str += header;
	//header_str += "<div style='font: italic 11px helvetica,sans-serif;line-height:16px;color:#555555;' id='digi_clock'></div>";		
	//header_str +="</div>";
	
	header_str += "<img  style='position:absolute;top:4;left:0px' src='./graphics/xeeku_logo.png'>";

	header_str += "<img style='margin-left:48px' class='rss_label' src='gd_text.php?text="+header+"&width=600&rotate=0&font=4&size=18&color=black'>";
	header_str += "<div style='font-size:14px;margin-left:48px; margin-top:-4px;'>";
	header_str += sub_header;
	header_str += "</div>"


	var header_bar = document.getElementById("header_box");
	header_bar.innerHTML = header_str;
	}


