// if(typeof console === "undefined") {
//     console = { log: function() { } };
// }


var combinedArray = [];

var LOADING_FACEBOOK = "Loading ideapark Facebook feeds...";
var LOADING_TWITTER = "Loading ideapark Twitter feeds...";
var LOADING_TUMBLR = "Loading ideapark Tumblr feeds...";

// var FACEBOOK_ACCESS_TOKEN = "AAACMsJseTg0BAH5z3JKvKRUpWm8YYZBnXTxIXbMBYIz5L0h1wDwcO0mJnPWfyXmpxsDPZADZAjPUnEdFrSSZA7ZAZC6p1JkI6HKkjySW8Q5wZDZD";
var FACEBOOK_ACCESS_TOKEN = "AAACMsJseTg0BAHNLhZCEinAcXuVW3LqZCWrqH3t6L9JGtkLFQEaYOcgfZCN4YBGanMwrTCRBvIxw1GlGQPiLFVKLSnwZCdtVX2EA5CZCZCvgZDZD";
var TUMBLR_ACCESS_TOKEN = "hjx7vrhgO9GumygnnsrXfeky5WoSXjLghVpDjQMRXcyNlkTs75";



function FeedObject(service, type, value, link, profileImage, date) {
	this.service = service;
	this.type = type;
	this.value = value;
	this.link = link;
	this.profileImage = profileImage;
	this.date = date; 
}

 String.prototype.parseURL = function() {
	return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&~\?\/.=]+/g, function(url) {
		return url.link(url);
	});
};

String.prototype.parseUsername = function() {
	return this.replace(/[@]+[A-Za-z0-9-_]+/g, function(u) {
		var username = u.replace("@","")
		return u.link("http://twitter.com/"+username);
	});
};

String.prototype.parseHashtag = function() {
	return this.replace(/[#]+[A-Za-z0-9-_]+/g, function(t) {
		var tag = t.replace("#","%23")
		return t.link("http://search.twitter.com/search?q="+tag);
	});
};

function formatFacebookTime(facebookDate) {
	var dateTime = facebookDate.split("T");
	var timeCode = dateTime[1].substring(0, dateTime[1].indexOf("+"));
	var validDate = new Date(dateTime[0]);
	var timeCodeArray = timeCode.split(":");
	validDate.setHours(timeCodeArray[0]);
	validDate.setMinutes(timeCodeArray[1]);
	validDate.setSeconds(timeCodeArray[2]);
	return validDate;
}

function loadFacebookFeeds() {
	$("#newsFeed").html(LOADING_FACEBOOK);
	$.each(facebookAccounts, function(j){
		$.getJSON("https://graph.facebook.com/"+facebookAccounts[j]+"/statuses?limit=5&access_token="+FACEBOOK_ACCESS_TOKEN+"&callback=?", function(json) {
			$.each(json.data, function(i) {
				var date = parseFacebookDate(this.updated_time);
				// console.log("Facebook date: " + date); 			
				var service = "Facebook";
				var link = 'http://facebook.com/' + this.from.id;
				var message = this.message.parseURL();
				var profileImage = '<img class="idpkfeed_avatar" src="http://graph.facebook.com/' + this.from.id + '/picture">';
				var type = "status";
				var facebookObject = new FeedObject(service, type, message, link, profileImage, date);
       	combinedArray.push(facebookObject);
			});
			facebookAccounts.pop();
			// if (facebookAccounts.length <= 0) {
			// 	loadTwitterFeeds();
			// }
		});
	})
}

function loadTwitterFeeds() {
	$("#newsFeed").html(LOADING_TWITTER);
		$.getJSON("http://api.twitter.com/1/" + twitterList +"/statuses.json?callback=?", function(json){
			$.each(json, function(i) {  
 			var date = parseDate(this.created_at); 
 			// console.log("Twitter date: " + date);
      var message = this.text.parseURL().parseUsername().parseHashtag(); 
      var type = "status";  
      var service = "Twitter";  
      var link = 'http://twitter.com/' + this.user.screen_name + '/status/' + this.id_str;  
      var profileImage = '<img class="idpkfeed_avatar" src="'+ this.user.profile_image_url +'">';  
      var twitterObject = new FeedObject(service, type, message, link, profileImage, date);  
    	combinedArray.push(twitterObject); 
    });
		sortFeedsByDate();
	});
}

function loadTumblrFeeds() {
	$("#newsFeed").html(LOADING_TUMBLR);
	$.getJSON("http://api.tumblr.com/v2/blog/ideapark.tumblr.com/posts?api_key="+TUMBLR_ACCESS_TOKEN+"&jsonp=?", function(json) {
		$.each(json.response.posts, function(i) { 
			// console.log(this);
			var type = "status";  
			var service = "Tumblr";  
			// console.log("raw date = " + this.date);
			var date = parseTumblrDate(this.date); 
			// console.log("parsed date = " + date);
			// var date = this.date; 
			// var profileImage = '<img class="idpkfeed_avatar" src="http://placehold.it/48&text=tumblr">';  
			var profileImage = '<img class="idpkfeed_avatar" src="images/tumblr_icon_' + this.type + '.png">';  
			var link = this.post_url;
			var linkText = '[' + this.type + ']';

			var message = '';
			
			switch(this.type) {
				case "text":
					// console.log("text");
					// console.log(this.body.replace(/<(?:.|\n)*?>/gm, ''));
					var message = this.title + "<br>" + this.body.strip_html().trunc(200, link, linkText);
					break;
				case "photo":
					// console.log("photo");
					var message = this.caption.strip_html().trunc(200, link, linkText);
					break;
				case "video":
					// console.log("video");
					var message = this.caption.strip_html().trunc(200, link, linkText);
					break;
				case "link":
					// console.log("link");
					var message = '<a href="' + this.url + '">' + this.title + '</a><br>' + this.description.strip_html().trunc(200, link, linkText);
					break;
				// case "chat":
				// 	console.log("chat");
				// 	var message = this.title;
				// 	break;
				case "quote":
					// console.log("quote");
					var quote = this.text.strip_html() + '<br>&nbsp;&nbsp;&#151;' + this.source.strip_html();
					var message = quote.trunc(200, link, linkText);
					break;
				case "audio":
					// console.log("audio");
					var message = this.caption.strip_html() + '<br>' + '<embed type="application/x-shockwave-flash" src="http://assets.tumblr.com/swf/audio_player.swf?audio_file=' + this.audio_url + '&color=FFFCE9" height="27" width="207" quality="best" wmode="opaque"></embed><br>';
					break;
				default:
  				// console.log("default");

			}

			// message += '<br><a href="' + link + '">[' + this.type + ']</a>';
			message += ' <a href="' + link + '">' + linkText + '</a>';


			// var message = this.caption.parseUsername().parseHashtag(); 
			
			// var link = 'http://twitter.com/' + this.user.screen_name + '/status/' + this.id_str;  
			// var link = '';  
			// var profileImage = '<img class="idpkfeed_avatar" src="'+ this.user.profile_image_url +'">';  
			
			// var profileImage = '';
			
			
			  
			var tumblrObject = new FeedObject(service, type, message, link, profileImage, date);  
			combinedArray.push(tumblrObject); 
		});
		sortFeedsByDate();
	});
}

function parseDate(date) {
	// console.log("date = " + date);
	return Date.parse(date.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3'));
}

function sortFeedsByDate() {
	combinedArray.sort(function(a, b){  
        var dateA = new Date(a.date), dateB=new Date(b.date)  
    	return dateB - dateA //sort by date descending  
    });
    displayFeeds();
}

function displayFeeds() {
	$("#newsFeed").html("");
	$("#newsFeed").append('<ul class="idpkfeed_list"></ul>')
	for (var i in combinedArray) {
		var post = combinedArray[i];
		var date = new Date(post.date);
		var day = date.getDate();;
		var month = monthName(date.getMonth());
		var year = date.getYear() + 1900;
		var postedOn = "Posted on " + month + ", " + day + " " + year + " from " + post.service;
		$("#newsFeed ul").append('<li><a href="'+ post.link +'">' + post.profileImage + '</a>' + post.value + '<br /><span class="idpkfeed_time">' + '<a href="'+ post.link +'">' + postedOn + '</span></a>');
	}
}

function parseFacebookDate(facebookDate) {
	//yyyy-mm-ddTHH:MM:SS+0000
	var dateArray = facebookDate.split('-');
	var year = dateArray[0];
	var month = dateArray[1] - 1;
	var partialDate = dateArray[2];
	//ddThh:mm:ss+0000
	dateArray = partialDate.split('T');
	var day = dateArray[0];
	var time = dateArray[1].slice(1);
	//hh:mm:ss+0000
	var timeArray = time.split(':');
	var hours = timeArray[0];
	var minutes = timeArray[1];
	//ss+0000
	var seconds = timeArray[2].split('+',1);
	var dateString = monthName(month) + " " + day + ", " + year + " " + hours + ":" + minutes + ":" + seconds;
	var date = Date.parse(dateString);
	return date;
}

function parseTumblrDate(tumblrDate) {
	//yyyy-mm-dd HH:MM:SS GMT
	var dateArray = tumblrDate.split('-');
	var year = dateArray[0];
	var month = dateArray[1] - 1;
	var partialDate = dateArray[2];
	//dd hh:mm:ss+0000
	dateArray = partialDate.split(' ');
	var day = dateArray[0];
	var time = dateArray[1].slice(1);
	//hh:mm:ss+0000
	var timeArray = time.split(':');
	var hours = timeArray[0];
	var minutes = timeArray[1];
	//ss+0000
	var seconds = timeArray[2].split('+',1);
	var dateString = monthName(month) + " " + day + ", " + year + " " + hours + ":" + minutes + ":" + seconds;
	var date = Date.parse(dateString);
	return date;
}

function monthName(i) {
	var month = new Array(11);
	month[0]="Jan";
	month[1]="Feb";
	month[2]="Mar";
	month[3]="Apr";
	month[4]="May";
	month[5]="Jun";
	month[6]="Jul";
	month[7]="Aug";
	month[8]="Sep";
	month[9]="Oct";
	month[10]="Nov";
	month[11]="Dec";
	return month[i];
}

String.prototype.strip_html = function() {
	return this.replace(/<(?:.|\n)*?>/gm, '');
};

String.prototype.trunc = function(limit, moreLink, moreText) {
	moreText = (typeof moreText == "undefined")?'[more]':moreText
	limit -= (moreText.length + 1);

	// console.log(typeof this);
	var bits, i;
	// if ('string' !== typeof this) {
	// 	return '';
	// }
	bits = this.split('');
	if (bits.length > limit) {
		for (i = bits.length - 1; i > -1; --i) {
			if (i > limit) {
				bits.length = i;
			}
			else if (' ' === bits[i]) {
				bits.length = i;
				break;
			}
		}
		bits.push('...');

		// if(typeof moreLink != 'undefined'){
		// 	bits.push(' <a href="' + moreLink + '">' + moreText + '</a>');
		// }


	}
	return bits.join('');
};






