FB.init({appId: '228917300471398', status: true, cookie: true, xfbml: true, oauth: true});


var username 			= null;
var friends 			= null;
var friendsAmount		= null;
var facebookId			= null;
var gender 				= null;
var photosAmount		= null;
var commentsReceived	= 0;
var likesReceived 		= 0;
var likesMade 			= null;
var tagsReceived		= null;
var picture				= null;
var wall				= null;
var accessToken			= null;

function login(){
	FB.getLoginStatus(function(response) {
		if (response.authResponse) {
			loginCallback(true);
		}
		else {
			FB.login(function(response) {
				if (response.authResponse) {
					loginCallback(true);
				}
				else{
					loginCallback(false);
				}
			}, {scope:"publish_stream,user_photos,user_activities,user_likes,read_stream,user_notes,friends_activities,friends_likes,friends_notes,user_photo_video_tags"});
		}
	});
}

function logout(){
	FB.logout(function(response) {
	});
}

function findUserStats(){
	FB.getLoginStatus(function(response) {
		if (response.authResponse) {
			facebookId = response.authResponse.userID;
			accessToken = response.authResponse.accessToken;
			statsGetPhotos();
			
		}
		else {
			FB.login(function(response) {
				if (response.authResponse) {
					facebookId = response.authResponse.userID;
					accessToken = response.authResponse.accessToken;
					statsGetPhotos();
				}
			}, {perms:"publish_stream,user_photos,user_activities,user_likes,user_relationships,read_stream,user_notes,friends_activities,friends_likes,friends_notes,user_photo_video_tags"});
		}
	});
}

function statsGetPhotos(){
	var query = FB.Data.query('SELECT pid FROM photo WHERE aid IN ( SELECT aid FROM album WHERE owner={0} ) ORDER BY created DESC', facebookId);
	query.wait(function(rows) {
		photosAmount =  rows.length;
		statsGetCommentsReceived();						
	});
}

function statsGetCommentsReceived(){
	var query = FB.Data.query('SELECT fromid FROM comment WHERE post_id in ( SELECT post_id FROM stream WHERE source_id = {0} and actor_id = source_id limit 300)', facebookId);	
	query.wait(function(rows) {
		commentsReceived = commentsReceived + rows.length;		
		statsGetCommentsReceived2();
	});	
}

function statsGetCommentsReceived2(){	
	var query2 = FB.Data.query('SELECT fromid FROM comment WHERE object_id in ( SELECT object_id FROM album where owner={0} )', facebookId);	
	query2.wait(function(rows) {
		commentsReceived = commentsReceived + rows.length;
		statsGetCommentsReceived3();
	});
}

function statsGetCommentsReceived3(){
	var query3 = FB.Data.query('SELECT fromid FROM comment WHERE object_id in ( SELECT object_id FROM photo WHERE aid IN ( SELECT aid FROM album WHERE owner={0} ))', facebookId);	
	query3.wait(function(rows) {
		commentsReceived = commentsReceived + rows.length;
		statsGetLikesReceived();
	});	
}

function statsGetLikesReceived(){
	var query = FB.Data.query('SELECT user_id FROM like WHERE post_id in ( SELECT post_id FROM stream WHERE source_id = {0} and actor_id = source_id limit 300 )', facebookId);
	query.wait(function(rows) {
		likesReceived = likesReceived + rows.length;
		statsGetLikesReceived2();
	});
}

function statsGetLikesReceived2(){	
	var query2 = FB.Data.query('SELECT user_id FROM like WHERE object_id in ( SELECT object_id FROM album where owner={0} )', facebookId);	
	query2.wait(function(rows) {
		likesReceived = likesReceived + rows.length;
		statsGetLikesReceived3()
	});
}

function statsGetLikesReceived3(){
	var query3 = FB.Data.query('SELECT user_id FROM like WHERE object_id in ( SELECT object_id FROM photo WHERE aid IN ( SELECT aid FROM album WHERE owner={0} ))', facebookId);		
	query3.wait(function(rows) {
	    likesReceived = likesReceived + rows.length;
		statsGetLikesMade();		
	});
}

function statsGetLikesMade(){
	FB.api('/me/likes?fields=id', function(result) {
		likesMade = result.data.length;
		// get likes made by the user in the users wall
		var query = FB.Data.query('SELECT user_id FROM like WHERE post_id in ( SELECT post_id FROM stream WHERE source_id = {0} limit 300 )',facebookId);
		query.wait(function(rows) {
			for (i = 0; i < rows.length; i++) {
				if (rows[i].user_id != undefined && rows[i].user_id == facebookId) {
				likesMade = likesMade+1;
				}
			}
			statsGetTagsReceived();
		});
		
	});
}

function statsGetTagsReceived(){
	FB.api('/me/photos?fields=id&limit=300', function(result) {
		tagsReceived = result.data.length;
		statsGetFriends();
	});
}

function statsGetFriends(){
	FB.api('/me/friends?fields=id', function(result) {
		friends = result.data;
		friendsAmount = result.data.length;
		statsGetUserFeed();
	});
}

function statsGetUserFeed(){
	var query = FB.Data.query('SELECT post_id FROM stream WHERE source_id = {0} and actor_id = source_id LIMIT 300', facebookId);
	query.wait(function(rows) {
		wall = rows.length;
		statsGetUserInfo();
	});
}

function statsGetUserInfo(){
	FB.api('/me', function(response) {
		username 	= response.name;
		gender 		= response.gender;
		findUserStatsCallback();
	});
}


/*************************
	CallBack Functions
**************************/

function findUserStatsCallback(){
	comments = 0;
	picture = "../getImage.do?imageId=" + facebookId;
	gender == "male" ? gender = "M" : gender = "F";
	
	document.getElementById("flashContent").findUserStatsCallback(facebookId, friendsAmount, wall, photosAmount, likesReceived, commentsReceived, tagsReceived, likesMade, username, picture, gender);
}

function galleryCallback (result) {
	document.getElementById("flashContent").galleryCallback(result);
}
function friendsResultsCallback (result) {
	document.getElementById("flashContent").friendsResultsCallback(result);
}
function loginCallback (success) {
	document.getElementById("flashContent").loginCallback(success);
}

/**********
Services
**********/
function friendsResults() {
	
	var queryString = "";
	$(friends).each(function(i, item) {
		queryString  += ((i > 0) ? "&" : "") + "fbIds=" + item.id;
	});
	
	$.ajax({
		type: "POST",
		url: "/friendsResults.do",
		data: queryString,
		success: function(data){
			friendsResultsCallback(data);
		}
	});
}

function gallery (pageNumber, idFacebook) {

	var queryString = "pageNumber="+pageNumber;
	if ( idFacebook != null ){
		$(friends).each(function(i, item) {
			queryString  += "&fbIds=" + item.id;
		});
	}
	
	$.ajax({
		type: "POST",
		url: "/gallery.do",
		data: queryString,
		success: function(data){
			galleryCallback(data);
		}
	});

}

/**
* Function that returns the access token of the user's session used to upload photos.
*
* @param callback callback function of flash
*/
function getAccessToken(callback) {

	var flashAccessToken;
	if (accessToken) {
		flashAccessToken = accessToken;
	} else {
		var errors = [USER_NOT_LOGGED_IN_ERROR];
		_sendCallBack(null, errors, callback);
		return;
	}

	var object = new Object();
	object.accessToken = flashAccessToken;
	_sendCallBack(object, null, callback);
}

/**
* Send callback to flash
*
* @param cont content
* @param errorsArr Errors array
* @param callback callback function of flash
*/
function _sendCallBack(cont, errorsArr, callback) {
	var ret = {};

	// if errors exist
	if (errorsArr && errorsArr.length > 0) {
		ret = {
		errors: errorsArr,
		content: null,
		success: false
		}
	} else {
		ret = {
		errors: [],
		content: cont,
		success: true
		}
	}
	if (callback) {
		var flash = document.getElementById("flashContent");
		if (flash) {
			flash[callback](ret);
		}
	} else {
		document.getElementById("result").innerHTML = JSON.stringify(ret);
		}
}


/** 
 *  Facebook Share
 *  
 */
function postWall(title, message, img, permalink){

	var ua = $.browser;
	var DISPLAY;
	if(ua.msie) {
		DISPLAY = 'popup';
	}else if(ua.safari){
		DISPLAY = 'popup';
	}else{
		DISPLAY = '';
	}
	
	FB.ui({
		 method: 'feed',
		 display: DISPLAY,
	     name: title,
	     link: permalink,
	     picture: img,
	     caption: '',
	     description: message,
	     message: ''
		},
 
		function(response) {
			
		}
	);
}
