var oldEvt = window.onload;
window.onload = function() {
	setTimeout('checkServices()', 4000);
}


/*
 * GENERIC
 */

function $(id) { return document.getElementById(id); }

// ==================================

String.prototype.capitalize = function() {
	return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } );
};

// ==================================

function relative_time(time_value) {
	// DATE FORMAT "Sat Jun 12 10:19:40 +0000 2010"
	var values = time_value.split(" ");
	time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
	var parsed_date = Date.parse(time_value);
	var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
	var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
	delta = delta + (relative_to.getTimezoneOffset() * 60);
	if (delta < 60) {
		return 'gerade eben';
	} else if(delta < 120) {
		return 'vor etwa einer Minute';
	} else if(delta < (60*60)) {
		return 'vor ' + (parseInt(delta / 60)).toString() + ' Minuten';
	} else if(delta < (120*60)) {
		return 'vor etwa einer Stunde';
	} else if(delta < (24*60*60)) {
		return 'vor etwa ' + (parseInt(delta / 3600)).toString() + ' Stunden';
	} else if(delta < (48*60*60)) {
		return 'vor 1 Tag';
	} else {
		if (isNaN(delta)) return 'gerade jetzt';
		else return 'vor ' + (parseInt(delta / 86400)).toString() + ' Tagen';
	}
}


/*
 * INTERFACE
 */

function checkServices() {
	if (!SERVICES.lastfm.server_status) {
		$('LastFm').style.display = 'none';
		$('LastFmApp').style.display = 'none';
	}
	if (!SERVICES.readernaut.server_status) {
		$('Readernaut').style.display = 'none';
		$('ReadernautApp').style.display = 'none';
	}
	if (!SERVICES.twitter.server_status) {
		$('Twitter').style.display = 'none';
		$('TwitterApp').style.display = 'none';
	}
	if (!SERVICES.vimeo.server_status) {
		$('Vimeo').style.display = 'none';
		$('VimeoApp').style.display = 'none';
	}
	if (!SERVICES.deviantart.server_status) {
		$('DeviantArt').style.display = 'none';
		$('DeviantArtApp').style.display = 'none';
	}
	if (!SERVICES.tumblr.server_status) {
		$('Tumblr').style.display = 'none';
		$('TumblrApp').style.display = 'none';
	}
	if (!SERVICES.instagram.server_status) {
		$('Instagram').style.display = 'none';
		$('InstagramApp').style.display = 'none';
	}
}

// ==================================

var lastInfoElement = '';
function toggleInfo (id) {
	$(id).className = ($(id).className.indexOf('show') > -1) ? 'hide' : 'show';

	if (lastInfoElement.length > 0 ) {
		if (lastInfoElement != id && $(id).className.indexOf('show') > -1) $(lastInfoElement).className = 'hide';
	}
	lastInfoElement = id;
}

// ==================================


/*
 * SERVICE CALLBACK FUNCTIONS
 */

var SERVICES = {
	'twitter' : {
		'server_status' : false,
		'twitter_profile' : '',
		'twitter_avatar' : '',
		'twitter_update_list' : '',
		'tweet_info' : ''
	},
	twitter : function () {
		var twitterAvatar = document.createElement('img');
		twitterAvatar.onload = function () {
			$('twitter_avatar').src = twitterAvatar.src;
			$('TwitterApp').style.opacity = '1';
		}
		twitterAvatar.src = this.twitter.twitter_avatar;

		$('twitter_update_list').innerHTML = this.twitter.twitter_update_list;
		$('twitter_profile').href = this.twitter.twitter_profile;
		$('tweet_info').innerHTML = $('tweet_info').innerHTML + this.twitter.tweet_info;
	},
	
	'lastfm' : {
		'server_status' : false,
		'lastfm_artist_image' : '',
		'lastfm_artist_url' : '',
		'lastfm_recent_tracks' : ''
	},
	lastfm : function () {
		var coverImg = document.createElement('img');
		coverImg.src = cover;
		coverImg.onload = function () {
			$('lastfm_artist_image').src = coverImg.src;
			$('LastFmApp').style.opacity = '1';
		};
		coverImg.src = this.lastfm.lastfm_artist_image;
		
		$('lastfm_artist_url').href = this.lastfm.lastfm_artist_url;
		$('lastfm_recent_tracks').innerHTML = $('lastfm_recent_tracks').innerHTML + this.lastfm.lastfm_recent_tracks;
	},
	
	'readernaut' : {
		'readernaut_book_title' : 'Ein Buch',
		'readernaut_book_cover' : '',
		'readernaut_book_url' : ''
	},
	readernaut : function () {
		var readernautCoverImg = document.createElement('img');
		readernautCoverImg.onload = function () {
			$('readernaut_book_cover').src = readernautCoverImg.src;
			$('ReadernautApp').style.opacity = '1';
		}
		readernautCoverImg.src = this.readernaut.readernaut_book_cover;

		$('readernaut_book_url').href = this.readernaut.readernaut_book_url;
		$('readernaut_book_title').innerHTML = $('readernaut_book_title').innerHTML + this.readernaut.readernaut_book_title;
	},
	
	'deviantart' : {
		'server_status' : false,
		'da_deviation' : '',
		'da_url' : '',
		'da_info' : ''
	},
	deviantart : function () {
		var deviationPreview = document.createElement('img');
		deviationPreview.onload = function () {
			$('da_deviation').src = deviationPreview.src;
			$('DeviantArtApp').style.opacity = '1';
		}
		deviationPreview.src = this.deviantart.da_deviation;
		$('da_url').href = this.deviantart.da_url;
		$('da_info').innerHTML = $('da_info').innerHTML + this.deviantart.da_info;
	},
	
	'vimeo' : {
		'server_status' : false,
		'vimeo_video_id' : '',
		'vimeo_video_preview' : '',
		'vimeo_video_info' : '',
		'vimeo_video_url' : ''
	},
	vimeo : function () {
		var videoThumbnail = document.createElement('img');
		videoThumbnail.onload = function () {
			$('vimeo_video_preview').src = videoThumbnail.src;
			$('VimeoApp').style.opacity = '1';
		}
		videoThumbnail.src = this.vimeo.vimeo_video_preview;
		$('vimeo_video_url').href = this.vimeo.vimeo_video_url;
		//$('vimeo_embedded_video').src = 'http://player.vimeo.com/video/'+this.vimeo.vimeo_video_id+'?title=0&amp;byline=0&amp;portrait=0';
		$('vimeo_video_info').innerHTML = $('vimeo_video_info').innerHTML + this.vimeo.vimeo_video_info;
	},
	
	'tumblr' : {
		'server_status' : false,
		'tumblr_blog_title' : '',
		'tumblr_post_title' : '',
		'tumblr_post_date' : '',
		'tumblr_post_url' : '',
		'tumblr_post_type' : ''
	},
	tumblr: function () {
		$('tumblr_post').innerHTML = $('tumblr_post').innerHTML + '<li><a href="'+this.tumblr.tumblr_post_url+'" rel="me"><small>'+this.tumblr.tumblr_blog_title+'</small><br /><strong>'+this.tumblr.tumblr_post_title+'</strong></a></li>'+'<li class="source"><a href="'+this.tumblr.tumblr_post_url+'" rel="me">'+this.tumblr.tumblr_post_type+', '+this.tumblr.tumblr_post_date+'</a></small><a title="" href="http://marc2o.tumblr.net" rel="me"><span class="usericon"></span></a></li>';
		$('TumblrApp').style.opacity = '1';
	},
	
	'instagram' : {
		'server_status' : false,
		'image_url' : '',
		'thumbnail' : '',
		'timestamp' : '',
		'image_title' : '',
		'image_filter' : ''
	},
	instagram : function () {
		var imageThumbnail = document.createElement('img');
		imageThumbnail.onload = function () {
			$('instagram_image').src = imageThumbnail.src;
			$('InstagramApp').style.opacity = '1';
		}
		imageThumbnail.src=this.instagram.thumbnail;
		$('instagram_image_url').href = this.instagram.image_url;
		$('instagram_info').innerHTML += '<li><a href="'+this.instagram.image_url+'"><strong>'+this.instagram.image_title+'</strong><br /><em>Filter: '+this.instagram.image_filter+'</em></a></li><li class="source"><a href="'+this.instagram.image_url+'">'+this.instagram.timestamp+'</a></li>';
	}
};
	

/*
 * TWITTER
 */

var myTwitterCallback = function (twitters) {
	var statusHTML = [];
	var tweetsToDisplay = twitters.length;
	for (var i=0; i<tweetsToDisplay; i++){
		var username = twitters[i].user.screen_name;
		//var id = twitters[i].id;
		var id = twitters[i].id_str;
		var created = twitters[i].created_at;
		var avatar = twitters[i].user.profile_image_url;
		var status = twitters[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
			return '<a href="'+url+'">'+url+'</a>';
			}).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
			return  reply.charAt(0)+'<a title= "Link" href="http://www.twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
			}).replace(/\B#([_a-zA-Z0-9äöüÄÖÜ]+)/ig, function(hashtag) {
			return '<a title="Hashtag" href="http://twitter.com/search?q=%23'+hashtag.substring(1)+'">'+hashtag+'</a>';
    		});
		var place = twitters[i].place;
		var geo = twitters[i].geo;
		var source = twitters[i].source;
		if (source.match(/txt/)) source = 'Kurzmitteilung';
		if (source.match(/web/)) source = source.capitalize();
		
		statusHTML.push('<li><span>'+status+'</span></li>');
	}
	if (statusHTML.join('') != '') {
		SERVICES.twitter.server_status = true;
		SERVICES.twitter.twitter_profile = 'http://twitter.com/' + username;
		SERVICES.twitter.twitter_avatar = avatar;
		SERVICES.twitter.twitter_update_list = statusHTML.join('');
		if (place == null) {
			if (geo == null) {
				SERVICES.twitter.tweet_info = '<li class="source"><a href="http://twitter.com/'+username+'/status/'+id+'" rel="me">'+relative_time(created)+'</a></li>';
				//SERVICES.twitter.tweet_info = '<li class="source"><a title="" href="http://twitter.com/'+username+'" rel="me">'+username+':</a> via '+source+', <a href="http://twitter.com/'+username+'/status/'+id+'" rel="me">'+relative_time(created)+'</a></li>';
			}
			else {
				SERVICES.twitter.tweet_info = '<li class="source"><a href="http://twitter.com/'+username+'/status/'+id+'" rel="me">'+relative_time(created)+'</a> von <a title="" href="http://maps.google.de/?q='+geo.coordinates+'">hier</a></li>';
				//SERVICES.twitter.tweet_info = '<li class="source"><a title="" href="http://twitter.com/'+username+'" rel="me">'+username+':</a> via '+source+', <a href="http://twitter.com/'+username+'/status/'+id+'" rel="me">'+relative_time(created)+'</a> von <a title="" href="http://maps.google.de/?q='+geo.coordinates+'">hier</a></li>';
			}
		}
		else {
			SERVICES.twitter.tweet_info = '<li class="source"><a href="http://twitter.com/'+username+'/status/'+id+'" rel="me">'+relative_time(created)+'</a> in <a title="" href="http://maps.google.de/?q='+place.full_name+'">'+place.full_name.substring(0, place.full_name.indexOf(', '))+'</a></li>';
			//SERVICES.twitter.tweet_info = '<li class="source"><a title="" href="http://twitter.com/'+username+'" rel="me">'+username+':</a> via '+source+', <a href="http://twitter.com/'+username+'/status/'+id+'" rel="me">'+relative_time(created)+'</a> in der Nähe von <a title="" href="http://maps.google.de/?q='+place.full_name+'">'+place.full_name+'</a></li>';
		}
		SERVICES.twitter();
	}
	else {
		SERVICES.twitter.server_status = false;
		//$('twitter_profile').removeAttribute('onclick');
	}
}


/*
 * LAST.FM
 */

var lastfmServerStatus = false;

var song;
var artist;
var album;
var date;
var url;
var cover;

var myLastFmCallback = function (data) {
	var userActionWording = '';
	if (data.recenttracks.track.length != null) {
		//playing now - no date is submitted
		var trackinfo = data.recenttracks.track[0];
		date = '';
	} else {
		//recently played
		var trackinfo = data.recenttracks.track;
		date = data.recenttracks.track.date['#text'];
	}

	song   = trackinfo.name;
	artist = trackinfo.artist['#text'];
	album  = trackinfo.album['#text'];
	url    = trackinfo.url;
	cover  = trackinfo.image[2]['#text'];
	
	var datePlayed = 'NOP '+date.substring(0, date.indexOf(',')-4)+date.substring(date.length-5, date.length)+':00 +0000'+date.substring(date.indexOf(',')-5, date.indexOf(','));

	SERVICES.lastfm.lastfm_recent_tracks = '<li><a title="" href="' + url + '"><strong>' + song + '</strong></a><br /><a title="" href="http://www.lastfm.de/music/' + artist + '">' + artist + '</a></li><li class="source"><a title="" href="http://www.last.fm/user/marc2o" rel="me">' + relative_time(datePlayed) + '</a></li>';

	if (cover == '') {
		loadJSON('http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist='+artist+'&format=json&limit=1&api_key=22847261307e3124aebff417a4a79da0&callback=getArtistImage');
	}
	else {
		SERVICES.lastfm.lastfm_artist_url = url;
		SERVICES.lastfm.lastfm_artist_image = cover;
		SERVICES.lastfm.server_status = true;
		SERVICES.lastfm();
	}
}

var loadJSON = function (url) {
	var headID = document.getElementsByTagName("head")[0];         
	var newScript = document.createElement('script');
	newScript.type = 'text/javascript';
	newScript.src = url;
	headID.appendChild(newScript);
}

var getArtistImage = function (data) {
	SERVICES.lastfm.lastfm_artist_image = data.images.image.sizes.size[2]['#text'];
	SERVICES.lastfm.lastfm_artist_url = url;
	SERVICES.lastfm.server_status = true;
	SERVICES.lastfm();
}



/*
 * READERNAUT
 */

var myReadernautCallback = function (data) {
	var bookshelf = $('readernaut_bookshelf');
	var booktitle = $('readernaut_currently_reading');

	if (data.reader_books.length!=0)
	{
		var i=0;
		var cover = data.reader_books[i].book_edition.covers.cover_medium;
		var title = data.reader_books[i].book_edition.title;
		var subtitle = data.reader_books[i].book_edition.subtitle;
		var author = data.reader_books[i].book_edition.authors.author;
		var created = data.reader_books[i].created;
		var permalink = data.reader_books[i].permalink; 

		//date conversion
		created = created.replace(/-/gi, '/');
		var creationDate = new Date(created);
		created = creationDate.toGMTString();
		var creationDate = created.split(' ');
		created = relative_time(creationDate[0].substring(0, 3)+' '+creationDate[2]+' '+creationDate[1]+' '+creationDate[4]+' +0000 '+creationDate[3]);
		created = created.replace(/vor/, 'seit');

		var htmlcode = '<li><a title="" href="'+permalink+'"><strong>'+title+'</strong><br />';
		if (subtitle!='') htmlcode += '<em>'+subtitle+'</em><br />';
		htmlcode += author+'</a></li>';
		htmlcode += '<li class="source"><a title="" href="http://readernaut.com/marc2o" rel="me">'+created+'<span class="usericon"></span></a></li>';
	}
	else {
		var cover  = 'rsrc/imgs/nobook.png';
		var permalink = 'http://www.amazon.de/wishlist/SMLU93D1YYAN';
		var htmlcode = '<li><a href="http://www.amazon.de/wishlist/SMLU93D1YYAN"><strong>Literarisch unterversorgt. Kauf’ mir ein Buch.</strong></a></li><li class="source"><a href="http://www.amazon.de/wishlist/SMLU93D1YYAN">Amazon.de Wunschliste</a></li>';
	}
	
	SERVICES.readernaut.server_status = true;
	SERVICES.readernaut.readernaut_book_title = htmlcode;
	SERVICES.readernaut.readernaut_book_cover = cover;
	SERVICES.readernaut.readernaut_book_url = permalink;
	SERVICES.readernaut();
}


/*
 * DEVIANTART
 */

var myDaCallback = function (data) {
	var json = eval("(" + data + ')');
	var daPubDate = json.deviantArt[0].pubDate.split(' ');
	var daTitle   = json.deviantArt[0].title;
	var daImage   = json.deviantArt[0].image;
	var daLink	  = json.deviantArt[0].link;
	
	var daCorrectedTime = daPubDate[4].substring(0, 2)*1+10;
	if(daCorrectedTime > 24) daCorrectedTime -= 24;
	daCorrectedTime += daPubDate[4].substring(2, 8);

	var deltaPubDate = relative_time(daPubDate[0].substring(0, 3) + ' ' + daPubDate[2] + ' ' + daPubDate[1] + ' ' + daCorrectedTime + ' +0000 ' + daPubDate[3]);

	SERVICES.deviantart.server_status = true;
	SERVICES.deviantart.da_deviation = daImage;
	SERVICES.deviantart.da_url = daLink;
	SERVICES.deviantart.da_info = '<li><a href="'+daLink+'" title=""><strong>'+daTitle+'</strong></a><br /><a href="http://marc2o.deviantart.com/gallery/" rel="me" title=""><small>'+deltaPubDate+'</small><span class="usericon"></span></a></a></li>';
	SERVICES.deviantart();
}


/*
 * VIMEO
 */

var myVimeoCallback = function (data) {
	var vimeoId = data[0].id;
	var vimeoTitle = data[0].title;
	var vimeoLikeDate = data[0].liked_on;
	var vimeoThumbnail = data[0].thumbnail_medium;
	var vimeoVideoUrl = data[0].url;
	var vimeoCreatorName = data[0].user_name;

	vimeoLikeDate = vimeoLikeDate.replace(/-/gi, '/');
	var likeDate = new Date(vimeoLikeDate);
	vimeoLikeDate = likeDate.toGMTString();
	var likeDate = vimeoLikeDate.split(' ');
	vimeoLikeDate = relative_time(likeDate[0].substring(0, 3)+' '+likeDate[2]+' '+likeDate[1]+' '+likeDate[4]+' +0000 '+likeDate[3]);
	
	SERVICES.vimeo.server_status = true;
	SERVICES.vimeo.vimeo_video_id = vimeoId;
	SERVICES.vimeo.vimeo_video_preview = vimeoThumbnail;
	SERVICES.vimeo.vimeo_video_url = vimeoVideoUrl;
	SERVICES.vimeo.vimeo_video_info = '<li><a href="' + vimeoVideoUrl + '"><strong>' + vimeoTitle + '</strong></a></li><li class="source"><a title="" href="http://vimeo.com/marc2o" rel="me">'+vimeoLikeDate+'</a></li>';
	//SERVICES.vimeo.vimeo_video_info = '<li><a href="' + vimeoVideoUrl + '"><strong>' + vimeoTitle + '</strong><br />' + vimeoCreatorName + '</a><br /><small><a title="" href="http://vimeo.com/marc2o" rel="me">'+vimeoLikeDate+'<span class="usericon"></span></a></li>';
	SERVICES.vimeo();
}

/*
 * TUMBLR
 */

var myTumblrCallback = function (data) {
	/*
	var blogTitle = data.tumblelog.title;
	var userName = data.tumblelog.name;
	var postUrl = data.posts[0]['url-with-slug'];
	var postDate = data.posts[0].date;
	var postTitle = data.posts[0]['regular-title'];
	var postHTML = data.posts[0]['regular-body'];
	*/

	// DATE FORMAT "Sat Jun 12 10:19:40 +0000 2010"
	// DATE "Tue, 10 Aug 2010 15:59:00"
	var date_published = data.posts[0].date;
	date_published = date_published.substring(0, date_published.length-13) + date_published.substring(date_published.length-8, date_published.length) + ' +0000 ' + date_published.substring(date_published.length-13, date_published.length-9);
	date_published = date_published.replace(/,/, '');
	SERVICES.tumblr.server_status = true;
	SERVICES.tumblr.tumblr_blog_title = data.tumblelog.title;
	SERVICES.tumblr.tumblr_post_url = data.posts[0]['url-with-slug'];
	SERVICES.tumblr.tumblr_post_date = relative_time(date_published);
	SERVICES.tumblr.tumblr_post_title = data.posts[0]['regular-title'];
	SERVICES.tumblr.tumblr_post_type = data.posts[0].type;
	switch (data.posts[0].type) {
		case 'quote':
			SERVICES.tumblr.tumblr_post_title = data.posts[0]['quote-text'].substring(0, 47)+'…';
			SERVICES.tumblr.tumblr_post_type = 'zitat';
			break;
		case 'regular':
			SERVICES.tumblr.tumblr_post_type = 'artikel';
			break;
		case 'link':
			SERVICES.tumblr.tumblr_post_title = data.posts[0]['link-text'];
			SERVICES.tumblr.tumblr_post_type = 'link';
			break;
	}
	SERVICES.tumblr();
}

/*
 * INSTAGRAM
 */

var myInstagramCallback = function (data) {
	/*
	client_id=5ba4c53b7d6b473ca07edd0404e60429
	access_token=3542710.5ba4c53.81174727e6f947e49ee50e8e857699e2
	
	authorize:
	https://instagram.com/oauth/authorize/?display=touch&client_id=5ba4c53b7d6b473ca07edd0404e60429&redirect_uri=http://marc2o.net/&response_type=token
	
	recent media:
	https://api.instagram.com/v1/users/self/media/recent/?count=1&access_token=3542710.5ba4c53.81174727e6f947e49ee50e8e857699e2&callback=myInstagramCallback
	*/
	var instagramLatestImage = data.data[0].images.standard_resolution.url;
	var instagramImageLink = data.data[0].link;
	var instagramFilter = data.data[0].filter;
	var instagramThumbnail = data.data[0].images.thumbnail.url;
	var instagramImageTitle = data.data[0].caption.text;
	var instagramCreatedTime = data.data[0].caption.created_time; // unix timestamp format
	
	var instagramDate = new Date(instagramCreatedTime*1000);
	instagramDate = instagramDate.toGMTString();
	var creationDate = instagramDate.split(' ');
	instagramDate = relative_time(creationDate[0].substring(0, 3)+' '+creationDate[2]+' '+creationDate[1]+' '+creationDate[4]+' +0000 '+creationDate[3]);

	SERVICES.instagram.server_status = true;
	SERVICES.instagram.image_url = instagramImageLink;
	SERVICES.instagram.thumbnail = instagramThumbnail;
	SERVICES.instagram.timestamp = instagramDate;
	SERVICES.instagram.image_title = instagramImageTitle;
	SERVICES.instagram.image_filter = instagramFilter;
	
	SERVICES.instagram();
	
}
