// Taweet Widget
// by James Dunham
var Taweet = function()
{
	function jsonp(url, callback)
	{
		if (url.indexOf("?") > -1) url += "&";
		else url += "?";
		url += "jsonp=jsonpcallback";
		window.jsonpcallback = callback;

		var script = document.createElement("script");
		script.type = 'text/javascript';
		script.src = url;
		document.getElementsByTagName('head')[0].appendChild(script);
	};
	function removeElement(id)
	{
		var elm = document.getElementById(id);
		if (elm) elm.parentNode.removeChild(elm);
	}
	function loadStyleSheet(url)
	{
		var cssNode = document.createElement('link');
		cssNode.type = 'text/css';
		cssNode.rel = 'stylesheet';
		cssNode.href = url;
		cssNode.media = 'screen';
		document.getElementsByTagName('head')[0].appendChild(cssNode);
    }
	function createCSSRule(selector, properties)
	{
		var rule = selector + ' { ';
		for (var prop in properties)
		{
			if (properties[prop] != undefined)
				rule += prop + ': ' + properties[prop] + '; ';
		}
		rule += '}';
		return rule;
	}
	function setCSS(rules, id)
	{
		var styleElement = document.createElement('style');
		styleElement.type = 'text/css';
		if (id != undefined) styleElement.id = id;
		if (browser.ie)
		{
			styleElement.styleSheet.cssText = rules;
		}
		else
		{
			var frag = document.createDocumentFragment();
			frag.appendChild(document.createTextNode(rules));
			styleElement.appendChild(frag);
		}
		function append()
		{
			document.getElementsByTagName('head')[0].appendChild(styleElement);
		}
		if (!browser.ie || isLoaded)
		{
			append();
		}
		else
		{
			window.attachEvent('onload', function() {
				isLoaded = true;
				append();
			});
		}
	}
	var browser = function()
	{
		return {
			ie: navigator.userAgent.match(/MSIE\s([^;]*)/)
		};
	}();
	var baseURL = 'http://taweet.com';
	var isLoaded = false;
	var months = new Array("January", "February", "March", "April", "May", "June",
	"July", "August", "September", "October", "November", "December");
	return {
		reloadWidget : function(acctname, settings)
		{
			var title = 'Events';
			var num = '';
			// modify the CSS as needed from the specified settings
			removeElement('widget-css');
			if (settings != undefined)
			{
				var css = "";
				if (settings.width != undefined)
				{
					css += createCSSRule('#tawidget01', { 
						'width': settings.width
					});
				}
				if (settings.scroll)
				{
					if (settings.height == undefined) settings.height = '300px';
					css += createCSSRule('#tawidget02', { 
						'height': settings.height,
						'overflow': 'auto'
					});
				}
				if (settings.colors != undefined)
				{
					if ((settings.colors.widgetbg != undefined) ||
						(settings.colors.widgettext != undefined))
					{
						css += createCSSRule('#tawidget01', { 
							'background-color': settings.colors.widgetbg, 
							'color': settings.colors.widgettext
						});
						css += createCSSRule('#tawidget01 A', { 
							'color': settings.colors.widgettext
						});
					}
					if ((settings.colors.eventbg != undefined) ||
						(settings.colors.eventtext != undefined))
					{
						css += createCSSRule('#tawidget02', { 
							'background-color': settings.colors.eventbg, 
							'color': settings.colors.eventtext
						});
					}
					if (settings.colors.eventdate != undefined)
					{
						css += createCSSRule('.tawidget-event-date', { 
							'color': settings.colors.eventdate
						});
					}
					if (settings.colors.linkcolor != undefined)
					{
						css += createCSSRule('#tawidget02 A', { 
							'color': settings.colors.linkcolor
						});
					}
				}
				setCSS(css, 'widget-css');
				if (settings.events != undefined)
				{
					num = '&num=' + settings.events;
				}
				if (settings.title != undefined)
				{
					title = settings.title;
				}
			}
			// get the events and generate html
			jsonp(baseURL+'/api/events.php?user='+acctname+num, function(response) {
				var content = "";
				if (response.error == undefined)
				{
					content = '<a target="_blank" href="http://taweet.com/' + acctname + '"><img src="' + response.image + '" id="tawidget-avatar"></a> ';
					content += '<div id="tawidget-username"><a target="_blank" href="http://taweet.com/' + acctname + '">' + acctname + '</a></div>';
					content += '<span id="tawidget-header-title">'+title+'</span>';
					content += '<div id="tawidget02">';
					if (response.events != undefined)
					{
						var url_match = /(https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\-\.]*(\?\S+)?)?)?)/;
						for (var i in response.events)
						{
							content += '<div class="tawidget-event"><div class="tawidget-event-date">';
							date = new Date(1000*response.events[i].ts);
							hour = date.getHours();
							ampm = "am";
							if (hour >= 12) { hour -= 12; ampm = "pm"; }
							if (hour == 0) hour = 12;
							minutes = date.getMinutes();
							if (minutes < 10) minutes = "0"+minutes;
							content += months[date.getMonth()]+" "+date.getDate()+", "+
								   date.getFullYear()+" at "+hour+":"+minutes+ampm;
							content += '</div><div class="tawidget-event-content">';
							text = response.events[i].content;
							text = text.replace(url_match, function(match) {
								var linktext = match;
								if (linktext.length > 26) linktext = linktext.substr(0, 23) + '...';
								return '<a href="'+match+'">'+linktext+'</a>';
							});
							content += text;
							content += '</div><div class="tawidget-view-event"><a href="http://taweet.com/t/';
							content += parseInt(response.events[i].id, 10).toString(36);
							content += '">View event</a></div></div>';
						}
					}
					else
					{
						content += '<div id="no-events">No events to display.</div>';
					}
					content += '</div>';
				}
				else
				{
					content += "ERROR: " + response.error + '<br>';	// ***TEMP***
				}
				content += '<div id="tawidget-logo"><a target="_blank" href="http://tawidget.com"><img src="http://tawidget.com/images/tawidget01.png"></a>';
				content += '<span id="tawidget-footer-link"><a target="_blank" href="http://taweet.com/';
				content += acctname+'">View all events</a></span></div>';
				// add the html to the created div
				var container = document.getElementById('tawidget01');
				if (container) container.innerHTML = content;
			});
		},
		showWidget : function(acctname, settings)
		{
			loadStyleSheet('http://tawidget.com/css/tawidget.css');
			document.write('<div id="tawidget01"></div>');
			this.reloadWidget(acctname, settings);
		}
	};
}();
