/*
 * Originally inspired from Daniel Benkenstein's fbWall
 * (http://www.neosmart.de/social-media/facebook-wall)
 *
 * Thanks Daniel!
 * mino
 */

(function($) {
	$.fn.fb = function() {

		var meta = this;
		
		return meta.each(function() {
			$this = $(this);
			var output = '';
			var avatarBaseURL;
			var graphURL = "https://graph.facebook.com/";
						 
			$.ajax({
				//url: graphURL+o.id+"/posts?limit="+o.max+'&access_token='+o.accessToken,
				url: "http://www.eolo.it/fb.php",
				dataType: "jsonp",
				success:function (data, textStatus, XMLHttpRequest) {
					initWall(data);
				}
			});
	
			var initWall = function(data){
				
				if(!data || !data.data) {
					output += '<div class="blog">';
					output += '<h3>Ops :)</h3>';
					output += 'Si &egrave; verificato un errore nel collegamento con Facebook.<br/><br/>';
					output += 'Riprovare pi&ugrave; tardi...';
					output += '</div>';
					meta.hide().html(output).fadeIn(300);
					return false;
				}

				data = data.data;
				var max = data.length;
				var thisDesc;
				
				for(var k=0;k<max;k++){
					output += '<div class="blog">';
					output += '<h3>'+formatDate(data[k].created_time)+'</h3>';
				
					// Text
					if(exists(data[k].message)) {
						if(data[k].message.length < 200) {
							output += '<p>'+modText(data[k].message)+'</p>';
						} else {
							output += '<p>'+modText(data[k].message.substring(0, 200))+'... '
								+ '<a href="'+data[k].link+'" target="_blank">[continua]</a></p>';
						}
					}
					
					// Media 
					if(exists(data[k].picture) || exists(data[k].link) || exists(data[k].caption) || exists(data[k].description)){
						
						if(exists(data[k].picture)){
							if(exists(data[k].link)) output += '<a href="'+data[k].link+'" target="_blank">';
							output += '<img src="'+data[k].picture+'" />';
							if(exists(data[k].link)) output += '</a><br />';
						}
						
						if(exists(data[k].name) && data[k].name != 'Wall Photos') output += '<a href="'+data[k].link+'" target="_blank">'+data[k].name+'</a><br />';
						//if(exists(data[k].caption)) output += '<a href="http://'+data[k].caption+'" target="_blank">'+data[k].caption+'</a><br />';
								
						if(exists(data[k].description)){
							thisDesc = modText(data[k].description);
							if(thisDesc.length>299)thisDesc=thisDesc.substr(0,thisDesc.lastIndexOf(' '))+' ...';
							output += '<span>'+thisDesc+'</span>';
						}
					}

					// Commenti e likes
					comments = (exists(data[k].comments)) ? data[k].comments.count : 0;
					likes = (exists(data[k].likes)) ? data[k].likes.count : 0;

					output += '<div class="blog-likes" onClick="window.open(\''+data[k].actions[0].link+'\')">';
					
					output += '<div><img src="/media/ngi/images/fb.comments.gif"> <span>'+comments+'</span> ';
					if(comments == 1)
						output += 'commento</div>';
					else
						output += 'commenti</div>';

					output += '<div><img src="/media/ngi/images/fb.likes.gif"> <span>'+likes+'</span> like</div>';						
					output += '</div>';
					
					// Fine:
					output += '</div>';				
				}

				meta.hide().html(output).fadeIn(300);
			}
			
			function formatDate(dateStr){
				var year, month, day, hour, minute, dateUTC, date, ampm, d, time;
				var iso = (dateStr.indexOf(' ')==-1&&dateStr.substr(4,1)=='-'&&dateStr.substr(7,1)=='-'&&dateStr.substr(10,1)=='T') ? true : false;

				if(iso){
					year = dateStr.substr(0,4);
					month = parseInt((dateStr.substr(5,1)=='0') ? dateStr.substr(6,1) : dateStr.substr(5,2))-1;
					day = dateStr.substr(8,2);
					hour = dateStr.substr(11,2);
					minute = dateStr.substr(14,2);
					dateUTC = Date.UTC(year, month, day, hour, minute);
					date = new Date(dateUTC);
				}else{
					d = dateStr.split(' ');
					if(d.length!=6||d[4]!='at')
						return dateStr;
					time = d[5].split(':');
					ampm = time[1].substr(2);
					minute = time[1].substr(0,2);
					hour = parseInt(time[0]);
					if(ampm=='pm')hour+=12;
					date = new Date(d[1]+' '+d[2]+' '+d[3] +' '+ hour+':'+minute);
					date.setTime(date.getTime()-(1000*60*60*7));
				}
				day = (date.getDate()<10)?'0'+date.getDate():date.getDate();
				month = date.getMonth()+1;
				month = (month<10)?'0'+month:month;
				hour = date.getHours();
				minute = (date.getMinutes()<10)?'0'+date.getMinutes():date.getMinutes();
				return day+'.'+month+'.'+date.getFullYear();
			}
			
			function exists(data){
				if(!data || data==null || data=='undefined' || typeof(data)=='undefined') return false;
				else return true;
			}
			
			function modText(text){
				return nl2br(autoLink(escapeTags(text)));
			}
			
			function escapeTags(str){
				return str.replace(/</g,'&lt;').replace(/>/g,'&gt;');
			}
			
			function nl2br(str){
				return str.replace(/(\r\n)|(\n\r)|\r|\n/g,"<br>");
			}
			
			function autoLink(str){
				return str.replace(/((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/g, '<a href="$1" target="_blank">$1</a>');
			}
		});
	};
})(jQuery);

$(function(){
	$('#fbwall').fb();
});

