var TSP = {};

TSP.webcam = {
	"http": false,
	"image_container": null,
	"last_picture": null,
	"create_image_container": function() {
		TSP.webcam.image_container = document.createElement('div');
		TSP.webcam.image_container.appendChild(document.createElement('ul'));
		TSP.webcam.image_container.id = "webcam_images";
		document.getElementById('all').appendChild(TSP.webcam.image_container);
	},
	"current_frame": 0,
	"current_li": 0,
	"slide": function() {
		if( TSP.webcam.current_frame == 94 ) {
			TSP.webcam.current_frame = 0;
			TSP.webcam.current_li = null;
			return;
		}

		TSP.webcam.current_frame += 2;
		TSP.webcam.current_li.style.height = TSP.webcam.current_frame+'px';
		setTimeout(TSP.webcam.slide,20);
	},
	"add_picture": function(src, animate) {
		var url = TSP.is_member ? "/captions/captionize?image="+src : 'http://media.thescruffypirate.org/webcam/'+src+'.jpg';
		TSP.webcam.current_li = document.createElement('li');

		if( animate ) {
			TSP.webcam.current_li.style.height = "0";
		}
		var img_parts = src.split('/')
		TSP.webcam.current_li.innerHTML = "<a href='"+url+"'><img src='http://media.thescruffypirate.org/webcam/"+img_parts[0]+"/_thumbnails/"+img_parts[1]+".jpg' /></a>";

    var height = Math.max(window.innerHeight, document.getElementById('all').offsetHeight);

    while( TSP.webcam.image_container.offsetHeight > height ) {
			TSP.webcam.image_container.firstChild.removeChild(TSP.webcam.image_container.firstChild.lastChild);
		}

		if( TSP.webcam.image_container.firstChild.childNodes.length > 0 ) {
			TSP.webcam.image_container.firstChild.insertBefore(TSP.webcam.current_li, TSP.webcam.image_container.firstChild.firstChild);
		}
		else {
			TSP.webcam.image_container.firstChild.appendChild(TSP.webcam.current_li);
		}

		if( animate ) {
			TSP.webcam.slide(TSP.webcam.current_li);
		}

		TSP.webcam.last_picture = src;
	},
	"load_picture": function(src) {
		if( TSP.webcam.last_picture != src )
		{
			TSP.webcam.add_picture(src, true);
		}
		setTimeout(TSP.webcam.get_last_picture, 15000);
	},
	"get_last_picture": function() {
		TSP.webcam.http.open("GET", "/last_picture.json?"+(new Date()).getTime());
		TSP.webcam.http.onreadystatechange=function() {
			if(TSP.webcam.http.readyState == 4) {
				data = eval("("+TSP.webcam.http.responseText+")");
				TSP.webcam.load_picture(data['last_picture']);
			}
		}
		TSP.webcam.http.send(null);

	},
	"start_webcam_stuff": function() {
		var greeting = document.getElementById('greeting');
		if( !greeting )
		{
			return;
		}

		var greeting_h3 = greeting.getElementsByTagName('h3')[0];
		TSP.is_member = !!(document.getElementById('member_bar'));
		
		if(navigator.appName == "Microsoft Internet Explorer") {
			  TSP.webcam.http = new ActiveXObject("Microsoft.XMLHTTP");
		} else {
			  TSP.webcam.http = new XMLHttpRequest();
		} 

		TSP.webcam.http.open("GET", "/recent_images.json?"+(new Date()).getTime());
		TSP.webcam.http.onreadystatechange=function() {
			if(TSP.webcam.http.readyState == 4) {
				TSP.webcam.create_image_container();

				data = eval("("+TSP.webcam.http.responseText+")");
				num_recent = data.length;

				for( var i = 0; i < num_recent; i++ )
				{
					TSP.webcam.add_picture(data[i], false);
				}

				setTimeout(TSP.webcam.get_last_picture, 10000);
			}
		}

		TSP.webcam.http.send(null);
	}
};

TSP.datetime = {};
TSP.datetime.months = ['January','February','March','April','May','June','July','August','September','October','November','December'];

TSP.datetime.convertDates = function() 
{
	var possibleDates = document.getElementsByTagName('abbr');

	for( var i = 0; i < possibleDates.length; i++ )
	{
		if( possibleDates[i].className.indexOf('date') >= 0 ) { TSP.datetime.formatDate(possibleDates[i]); }
	}

	setTimeout(TSP.datetime.updateRelativeDates,5000);
}

TSP.datetime.relativeDates = []
TSP.datetime.updateRelativeDates = function()
{
	var dateElement;
	for(var i = 0; i < TSP.datetime.relativeDates.length; i++)
	{
		dateElement = TSP.datetime.relativeDates[i];

		var dateString = TSP.datetime.getHumanReadableString(new Date(dateElement.title));
		if( dateString.match(/^[0-9]{1,2} [JFMASOND][a-z]{2,8}$/) )
		{
			TSP.datetime.relativeDates.splice(i,1);
			i--;
		}
		dateElement.innerHTML = dateString;
	}

	if( TSP.datetime.relativeDates.length > 0 )
	{
		setTimeout(TSP.datetime.updateRelativeDates,5000);
	}
}

TSP.datetime.formatDate = function(_dateElement)
{
	var dateTime = new Date(_dateElement.title);
	_dateElement.title = dateTime;
	if( _dateElement.className.indexOf('human') >= 0 )
	{
		var dateString = TSP.datetime.getHumanReadableString(dateTime);

		if( !dateString.match(/^[0-9]{1,2} [JFMASOND][a-z]{2,8}$/) )
		{
			TSP.datetime.relativeDates.push(_dateElement);
		}

		_dateElement.innerHTML = dateString;
	}
	else
		for(var i = 0; i < _dateElement.childNodes.length; i++)
			if( _dateElement.childNodes[i].nodeName == 'SPAN' )
				switch(_dateElement.childNodes[i].className)
				{
					case "day":
						_dateElement.childNodes[i].innerHTML = dateTime.getDate();
						break;
					case "month":
						_dateElement.childNodes[i].innerHTML = TSP.datetime.months[dateTime.getMonth()];
						break;
					case "year":
						_dateElement.childNodes[i].innerHTML = dateTime.getFullYear();
						break;
					case "time":
						_dateElement.childNodes[i].innerHTML = TSP.datetime.getTimeString(dateTime);
						break;
					case "timezone":
						var dateString = dateTime.toString();
						_dateElement.childNodes[i].innerHTML = dateString.substring(dateString.indexOf('(')+1,dateString.indexOf(')'));
				}
}

TSP.datetime.getHumanReadableString = function(_date)
{
	var now = (new Date()).getTime()/1000;
	var time = _date.getTime()/1000;

	var difference_in_seconds = Math.floor(now - time);

	if( difference_in_seconds <= 7800 )
	{
		var dis = difference_in_seconds;
		if( dis < 3 ) { return 'Just now'; }
		else if( dis <= 15 ) { return dis + ' seconds ago'; }
		else if( dis <= 45 )
		{
			var d = Math.round(dis/5)*5;
			return 'About ' + d + ' seconds ago';
		}
		else if( dis < 58 ) { return 'Less than a minute ago'; }
		else
		{
			var dim = Math.floor(dis/60);
			if( dim <= 1 ) { return '1 minute ago'; }
			else if( dim <= 50 ) { return dim + ' minutes ago'; }
			else if( dim <= 75 ) { return 'About 1 hour ago'; }
			else if( dim <= 105 ) { return 'About 1½ hours ago'; }
			else { return 'About 2 hours ago'; }
		}
	}
	else
	{
		var today = new Date();
		today.setHours(0);
		today.setMinutes(0);
		today.setSeconds(0);
		today.setMilliseconds(0);

		var day = new Date(_date.getTime());
		day.setHours(0);
		day.setMinutes(0);
		day.setSeconds(0);
		day.setMilliseconds(0);
		
		difference_in_days = Math.round((today.getTime() - day.getTime())/86400000)

		if( difference_in_days < 1 ) return 'Today at ' + TSP.datetime.getTimeString(_date);
		else if( difference_in_days < 2 ) return 'Yesterday at ' + TSP.datetime.getTimeString(_date);
		else if( difference_in_days < 8 ) return difference_in_days + ' days ago';
		else return TSP.datetime.getShortDateString(_date);
	}
}
TSP.datetime.getTimeString = function(_date)
{
	hours = _date.getHours();
	if( hours == 0 ) {  hours = 12; }
	else if ( hours > 12 ) { hours = hours%12; }

	return hours+":"+(_date.getMinutes() < 10 ? '0' : '')+_date.getMinutes()+(_date.getHours() < 12 ? 'am' : 'pm')
}

TSP.datetime.getShortDateString = function(_date)
{
	return _date.getDate()+" "+TSP.datetime.months[_date.getMonth()];
}

//obtained from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}

function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}

/*TSP.do_analytics = function()
{
	function createCookie(name,value,days)
	{
		if (days)
		{
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else
		{
			var expires = "";
		}
		document.cookie = name+"="+value+expires+"; path=/";
	}
	function readCookie(name)
	{
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++)
		{
			var c = ca[i];
			while (c.charAt(0)==' ')
			{
				c = c.substring(1,c.length);
			}
			if (c.indexOf(nameEQ) == 0)
			{
				return c.substring(nameEQ.length,c.length);
			}
		}
		return null;
	}
	function sendlog(info)
	{
		var querystring = "";
		for( var key in info )
		{
			querystring += '&'+key+'='+escape(info[key]);
		}

		var i = new Image();
		i.src = 'http://analytics.benjaminthomas.org/log.php?time='+(new Date()).getTime()+querystring;
	}

	var trackingid = readCookie('__tracking');
	if( !trackingid )
	{
		trackingid = Math.floor(Math.random()*1000000);
	}
	createCookie('__tracking',trackingid,1000);

	var loginfo = {
		'page': window.location.href,
		'referrer': document.referrer,
		'useragent': navigator.userAgent,
		'trackingid': trackingid
	};

	sendlog(loginfo);
};*/

//addEvent(window,'load',TSP.do_analytics);
addEvent(window,'load',TSP.datetime.convertDates);
addEvent(window,'load',TSP.webcam.start_webcam_stuff);


