/**
 * twitter.js for Namasté Reizen
 * 
 * Displays tweets in a container box
 * It's called from an embedded piece of code
 * It places itself at the place the call to putTweets() is made
 * 
 * load: head
 * 
 * Depends
 * 	jQuery (1.4.2)
 * 
 * @author JP | Peppered
 * @author AK | Peppered
 */

var twitter = {};

twitter.options = {
	url: 'http://search.twitter.com/search.json?rpp=10&callback=?&q=from:NamasteReizen',
	twitter_link: 'http://twitter.com/NamasteReizen',
	autoSwitchPage: true,
	autoSwitchPageDelay: 10000,
	tweetsPerPage: 1,
	boxResize: false,
	ani_T_tweetFade: 1000	
};

twitter.$container = {};
twitter.$tweets_container = {};
twitter.$tweets = {};
twitter.$tweetsShown = {};
twitter.$nav = {};
twitter.ready = false;
twitter.page = 1;
twitter.pages = null; // to be set by paginate function
twitter.autoSwitchIntervalId = null;
twitter.hovered = false;

/**
 * public createContainer
 * 
 */
twitter.createContainer = function(){
	if (this.$container === undefined || !this.$container.length) {
		this.$container = $('\
			<div id="twitter" class="loading">\
				<h2>Twitter</h2>\
				<div class="dynContent tweets"></div>\
				<div class="bg"></div>\
				<p class="sep"><a href="' + this.options.twitter_link + '" target="_blank" title="Volg ons op Twitter">Volg ons op Twitter</a><span class="bgimg"></span></p>\
			</div>\
		');
		var $tmp = $('<div/>').append(this.$container);
		document.write($tmp.html());
		this.$container = $('#twitter');
		this.$tweets_container = $('#twitter .tweets').hover(function(){
			twitter.hovered = true;
			window.clearInterval(twitter.autoSwitchIntervalId);
		}, function(){
			twitter.hovered = false;
			// half the time to make it disappear
			window.clearInterval(twitter.autoSwitchIntervalId);
			window.setTimeout(function(){
				twitter.switchPage();
				twitter.activateAutoPageSwitch(twitter.options.autoSwitchPageDelay);
			}, twitter.options.autoSwitchPageDelay/2);
		});
	}
};

twitter.putTweets = function(){
	var options = this.options;
	//twitter.createContainer();
	$.getJSON(options.url, function(json){
		var $ul = $('<ul/>');
		twitter.$container.removeClass('loading');
		
		if (json.results !== undefined) {
			var $results = $.each(json.results, function(i,tweet){
				var $li = $('<li class="tweet"/>');
				if(i == 0 && !isEmpty(options.channel_header)){
					// @todo: each channel own list (& custom header bit)
				}
				//console.log(tweet)
				$li.append('<h3><a href="http://twitter.com/' + tweet.from_user + '" target="_blank" title="'+tweet.from_user+'"><img width="48" height="48" src="'+tweet.profile_image_url+'" />  <span class="author">' + tweet.from_user + '</span></a></h3>\
					<p class="msg">' + twitter.tweet.parse(tweet.text) + '<br /><i class="published"><a href="http://twitter.com/' + tweet.from_user + '/status/' + tweet.id_str + '" target="_blank">' + twitter.tweet.time(tweet.created_at) + '</a></i></p>'
				);
				$li.appendTo($ul);
			});
			
			if ($results.length) {
				twitter.$container.show();
				
				twitter.$tweets_container
					.append($ul)
					.find('li:first')
						.addClass('tweet-first').end()
					.find('li:last')
						.addClass('tweet-last').end()
					.parent()
						.show()
				;
				twitter.$tweets = twitter.$tweets_container.find('li');
				
				twitter.paginate();
				
				if (options.autoSwitchPage == true) {
					twitter.activateAutoPageSwitch();
				}
			}
			else {
				twitter.$tweets_container.append('<p class="tweet noTweets"><a href="http://twitter.com/NamasteReizen" target="_blank"><img src="http://si0.twimg.com/profile_images/468098831/Be_our_guest_normal.jpg" width="40" height="40" /> bezoek onze Twitter pagina voor de meest recente tweets!</a></p>');
			}
		}
		else {  // this seem to happen sometimes (when search query is valid, but (too) long (jQuery bug?))
			twitter.$tweets_container.append('<p>Geen Tweets kunnen ophalen.</p>');
		}		
		twitter.ready = true;
		
	});
};

twitter.tweet = {};

twitter.tweet.time = function(input){
	// Calculate how many hours ago was the tweet posted
	var date_tweet = new Date(input);
	var date_now = new Date();
	var date_diff = date_now - date_tweet;
	var days = Math.round(date_diff/(1000*60*60*24));
	var hours = Math.round(date_diff/(1000*60*60));
	var minutes = Math.round(date_diff/(1000*60));
	var seconds = Math.round(date_diff/(1000));
	if(seconds < 60){
		var time_output = seconds + ' seconden geleden'
	} else if (minutes < 60 && minutes > 1){
		var time_output = minutes + ' minuten geleden'
	} else if (minutes < 60 && minutes < 2){
		var time_output = minutes + ' minuut geleden'	
	} else if (hours < 24){
		var time_output = hours + ' uur geleden'
	} else if (days == 1){
		var time_output = days + ' dag geleden'
	} else {
		var time_output = days + ' dagen geleden'
	}
		
	return time_output;
};

twitter.tweet.parse = function(text){
	var txt = text.replace(
		/\b(((https*\:\/\/)|www\.)[^\"\']+?)(([!?,.\)]+)?(\s|$))/g, function(link, m1, m2, m3, m4) {
			var http = m2.match(/w/) ? 'http://' : '';
			return '<a target="_blank" href="' + http + m1 + '">' + ((m1.length > 25) ? m1.substr(0, 24) + '...' : m1) + '</a>' + m4;
		}
	).replace(
 		/@+([_A-Za-z0-9-]+)/ig, 
		'<a target="_blank" href="http://twitter.com/$1">@$1</a>'
	).replace(
		/#+([_A-Za-z0-9-]+)/ig,
		'<a target="_blank" href="http://search.twitter.com/search?q=$1">#$1</a>'
	);
	return txt;
};

/**
 * private paginate
 */
twitter.paginate = function(){
	//var twitter = this;	
	var numPages = Math.ceil(this.$tweets.length / this.options.tweetsPerPage);
	
	twitter.numPages = numPages;
	
	twitter.$tweets.slice(twitter.options.tweetsPerPage).addClass('invis');
	twitter.$tweetsShown = twitter.$tweets.slice(0, this.options.tweetsPerPage);
	
	var $ul = $('<ul class="p'+numPages+'"/>');	
	for (var i=1; i<=numPages; i++) {
		$('<li/>')
			.append(
				$('<a href="#" title="toon '+i+'e pagina">'+i+'</a>').click(function(e){
					var $this = $(this);
					if (twitter.ready !== false) {						
						$this.parent().addClass('active').siblings().removeClass('active');
						twitter.switchPage($this.text());
						e.preventDefault();
					}
					else {
						return false;
					}
				})
			)
			.appendTo($ul)
		;
	}	
	var $nav = $('<div class="nav"><h3 class="noscr">Navigatie</h3></div>');
	$ul.children(':first').addClass('first active').end().children(':last').addClass('last').end().appendTo($nav);
	$nav.appendTo(twitter.$container);
	
	twitter.$nav = $nav;
};

twitter.switchPage = function(page){
	if (!twitter.ready) { return false; }
	
	var $tweets_container = twitter.$tweets_container;
	
	twitter.setReady(false);
	
	// when page arg. not given, assume we want to go to next page
	if (arguments.length == 0) {
		var page = twitter.page + 1;
		if (page > twitter.numPages) {
			page = 1;
			twitter.page = 1;
		}
		else {
			twitter.page = page;
		}
	}
	
	var start = twitter.options.tweetsPerPage * (page - 1);
	var end = start + twitter.options.tweetsPerPage;
	
	var $tweetsShown = twitter.$tweetsShown;
	var $tweetsToShow = twitter.$tweets
		.slice(start, end)
		.first()
			.addClass('tweet-first').end()
		//.show()
	;
	
	// calculate new height
	var newH = 0;
	$tweetsToShow.each(function(){
		newH += $(this).outerHeight(true);
	});
	
	
	/**
	 * Animation sequence
	 */	
	// fadeOut $tweets_container
	//$tweetsShown.addClass('fading');
	$tweets_container.fadeTo(twitter.options.ani_T_tweetFade, 0, function(){
		
		// resize $tweets_container
		// $tweets_container.animate({height: newH}, twitter.options.ani_T_boxResize, function(){
		 	
		 	// (un)hide tweets
			$tweetsShown.addClass('invis');
			$tweetsToShow.removeClass('invis');
			
		 	// fadeIn $tweets_container
			$tweets_container.fadeTo(twitter.options.ani_T_tweetFade, 1, function(){
				// done
				twitter.$tweetsShown = $tweetsToShow;
				twitter.setReady(true);
			});
		// });
	});
		
};

twitter.setReady = function(ready){
	if (ready) {
		twitter.ready = true;
		twitter.$container.removeClass('busy');
		
		if (twitter.hovered == true) {
			// pause auto-switch
			window.clearInterval(twitter.autoSwitchIntervalId);
		}
	}
	else{
		twitter.ready = false;
		twitter.$container.addClass('busy');
	}
};

twitter.activateAutoPageSwitch = function(delay){
	twitter.autoSwitchIntervalId = window.setInterval(function(){
		twitter.switchPage()
	}, delay || twitter.options.autoSwitchPageDelay);
};


