/* ------------------------------ --------------------------- *\
		Author: Idevign [Zack Cannady] @ Aura-Interactive.com 
		November 2010
\* ------------------------------ --------------------------- */


/* ------------------------------ --------------------------- *\
		Facebook User Info
\* ------------------------------ --------------------------- */

var user_id = '562006024'; // my userid
var pageID = '164165463607763'; // jet twenty
// token for offline access to jet twenty	
var accessToken = '169397033072651|9d028c4b81e7e9a983da79f9-562006024|164165463607763|kL1W1Bz8Sko1eZGTv_NrPcCAWQ0' 

/* ------------------------------ --------------------------- *\
		Facebook Vars
\* ------------------------------ --------------------------- */

var fbGrapAPIURL = "http://graph.facebook.com/";

var currentUserID;
var currentUserName;
var currentUserPicture;
var currentUserEventsList = [];
var currentUserFriendsList = [];
var currentUserPageEventsInvited = [];

var iscurrentUserLoggedIn = false;
var isPage_Events = false;

var pictureTypeSmall = "/picture?type=small";
var pictureTypeSquare = "/picture?type=square";
var pictureTypeLarge = "/picture?type=large";

var pageCheckinsList = [];
var eventidArray = [];
var pageEventsIDList = [];
var pageEventsObjects;
var pageEventsAttendingList = [];
var pageEventsMaybeList = [];
var pageEventsDeclinedList = [];



/*
$("#eventTemplate").tmpl(pageEventsIDList).appendTo("#facebookEventsContainer");
*/

/* ------------------------------ --------------------------- *\
		Facebook Login / Logout and User Methods
\* ------------------------------ --------------------------- */

function fbGetLoginStatus(){
	if(isPage_Events){getPageEventsList();};
	FB.getLoginStatus(function(response) {
		if (response.session) {
			$("#fbloginbutton").addClass("facebookloggedin");
			iscurrentUserLoggedIn = true;
			initFBUser();
		} else {
			$("#fbloginbutton").addClass("facebookloggedout");
		}
	});
	
}

function fbLogInOut() {
	if(!iscurrentUserLoggedIn) {
		fblogin();
	} else {
		fblogout();
	}
}

function fblogin() {
	FB.login(function(response) {
		if(response.session) {
			userLoggedIn();
		} else {
			// user cancelled login
		}
	}, {perms:'user_events, rsvp_event'});
}

function fblogout() {
	FB.logout(function(response) {
		$("#fbloginbutton").addClass("facebookloggedout");
		$("#fbloginbutton").removeClass("facebookloggedin");
		
		$(".fbLoginName").empty();
		$("#fbAB_message").empty();
		$("#fbAB_image").empty();

		currentUserName = "";
		currentUserID = "";

		hideFBActivityBox();	
		iscurrentUserLoggedIn = false;
	});
}

function initFBUser() {
	FB.api('/me', function(response) {
		currentUserName = response.name;
		currentUserID = response.id;

		$(".fbLoginName").empty();
		$("#fbAB_message").empty();
		$("#fbAB_image").empty();

		$(".fbLoginName").append(currentUserName);

		displayUserPicture();
		if(isPage_Events){getuserEvents(currentUserID)};
	});
}

function displayUserPicture() {
	var currentUserPicture = fbGrapAPIURL + currentUserID + pictureTypeLarge;
	$("#fbAB_message").append('<p>Thank you for logging into The Jet Hotel!</p><p>Check out our Events page and RSVP to our events directly from there!</p>');
	$("#fbAB_image").prepend('<img src=" ' + currentUserPicture + '" class="fbActCenter" border="0"/>');
}


function userLoggedIn() {
	$("#fbloginbutton").removeClass("facebookloggedout");
	$("#fbloginbutton").addClass("facebookloggedin");
	initFBUser();
	iscurrentUserLoggedIn = true;
}

function getuserFriends( userID ) {
	//check friends ids for match to Fan Page friends ids, return matchs - max 5 random
	FB.api('/' + userID + '/friends', function(response) {
		for(var i=0; i< response.data.length; i++) {
			var userFriends = new Object;
			userFriends.name = response.data[i].name;
			userFriends.id = response.data[i].id;
			currentUserFriendsList.push(userFriends);
		}	
	});
}

function getuserEvents( userID ) {
	FB.api('/' + userID + '/events', function(response) {
		for(var i= 0;  i < response.data.length; i++) {
			var userEvent = new Object;
			userEvent.id = response.data[i].id;
			userEvent.rsvpStatus = response.data[i].rsvp_status;
			currentUserEventsList.push(userEvent);
			//console.log(currentUserEventsList);
		}
		findRSVPStatusPageEvents();
	});
	//if(isPage_Events){getPageEventsList();};
}

function displayEventsInvited() {
	for(var i=0; i < currentUserEventsList.length; i++) {
		for(var k=0; k < pageEventsIDList.length; k++) {
			if(currentUserEventsList[i].id == pageEventsIDList[k].id) {
					currentUserPageEventsInvited.push(currentUserEventsList[i]);
			}
		}
	}
	//display
	if(currentUserPageEventsInvited.length > 0) {
		//checkRSVPStatus();
	}
}


/* ------------------------------ --------------------------- *\
		Facebook Authorization
\* ------------------------------ --------------------------- */

function getAccessToken() {
	FB.api('/' + user_id + '/accounts/' , function(response) {
	if(!response || response.error) {
			//error
		} else {
		for (var i=0, l=response.data.length; i<l; i++) {
			var account = response.data[i];
			if (account.id === pageID) {
					accessToken = account.access_token;
			} 
		}
	}
	});
}

/* ------------------------------ --------------------------- *\
		Facebook FanPage (Page) Object
\* ------------------------------ --------------------------- */

function getPageCheckins() {
	FB.api('/' + pageID +'/checkins' + '?access_token=' + accessToken , function(response) {
		if(!response || response.error) {
			// error 
		} else {
			if(response.data.length > 0) {
				for(var i = 0; i < response.data.length; i++) {
					var pageCheckin = new Object;
					pageCheckin.id = response.data[i].id;
					pageCheckin.from = response.data[i].from;
					pageCheckinsList.push(pageCheckin);
				}
			}
		}
	});
}

/* ------------------------------ --------------------------- *\
		Facebook Events Object
\* ------------------------------ --------------------------- */

function getPageEventsList() {
	FB.api('/' + pageID +'/events' + '?access_token=' + accessToken , function(response) {
		if(!response || response.error) {
			// error 
		} else {
			for (var i=0, l=response.data.length; i<l; i++) {
				var pageEvent = new Object;
				pageEvent.id = response.data[i].id;
				pageEventsIDList.push(pageEvent);
			}
		}
	
	buildEventsExtendedData();
	});
}



function buildEventsExtendedData() {
var hackNum = 0;
	for (var i=0, l=pageEventsIDList.length; i<l; i++) {
		var pevent = pageEventsIDList[i];
		var eventid = pageEventsIDList[i].id;
		var eventname = pageEventsIDList[i].name;
		
		var query = FB.Data.query('select name, pic_big, pic_small, pic, description, start_time, end_time, location, venue, tagline, eid from event where eid={0}', eventid);
		query.wait(function(rows) {
			
			var de = getTodayEpoch();
			if (rows[0].start_time > de ){
				rows[0].start_time = toDateTimeConventional(rows[0].start_time);
				pageEventsObjects = rows;
				$("#eventTemplate").tmpl(pageEventsObjects).prependTo("#facebookEventsContainer");
			
				
			}
				if(hackNum == pageEventsIDList.length -1) {
					bindEventContainers();
				} else {
					hackNum += 1;
				}
		});

		if(iscurrentUserLoggedIn) {
			findRSVPStatusPageEvents(eventid);
		}
		/*

		FB.api('/' + eventid + '/attending' + '?access_token=' + accessToken , function(response) {
			if(!response || response.error) {
				// error 
			} 
			else if(response.data.length > 0){
				for(var j=0; j < response.data.length; j++){
					//pageEventsObjects[i].attending = response.data;
				}
			//console.log(userAttending);
			}
		});
	
	
		FB.api('/' + eventid + '/declined' + '?access_token=' + accessToken , function(response) {
			if(!response || response.error) {
				// error 
			} 
			else if(response.data.length > 0){
				for(var j=0; j < response.data.length; j++){
					//pageEventsObjects[i].declined = response.data;
				}
			//console.log(pageEventsObjects);
			}
		});
	*/

	}

	

	if(!iscurrentUserLoggedIn && isPage_Events) {
		$(".warning_login").css("display", "block");
	} 
	
}


function findRSVPStatusPageEvents(evID) {
	var query = FB.Data.query('select rsvp_status from event_member where eid={0}', evID);
	query.wait(function(rows) {
		if(rows[0]){
		var evntStatus = rows[0].rsvp_status;
		displayUserRSVP(evID, evntStatus);
		}
	});						
}


/* ------------------------------ --------------------------- *\
		Facebook Events API Calls
\* ------------------------------ --------------------------- */


function attendEvent(eventID) {
	if(iscurrentUserLoggedIn) {
	$("#btnevntAttend" + eventID).css("background-position", "46px 0px");
	$("#btnevntMaybe" + eventID).css("background-position", "92px -22px");
	$("#btnevntNo" + eventID).css("background-position", "92px -44px");
	FB.api(eventID + 'attending', 'post', {  }, function(response) {
		if (!response || response.error) {
				//alert('Error occured');
		} else {
			$("#btnevntAttend" + eventID).css("background-position", "46px 0px");
		}																																													
	});
	}
}


function maybeEvent(eventID) {
	if(iscurrentUserLoggedIn) {
	$("#btnevntMaybe" + eventID).css("background-position", "46px -22px");
	$("#btnevntAttend" + eventID).css("background-position", "92px 0px");
	$("#btnevntNo" + eventID).css("background-position", "92px -44px");
	FB.api(eventID + '/maybe' , 'post', {  }, function(response) {
		if (!response || response.error) {
					//alert('Error occured');
		} else {
			$("#btnevntMaybe" + eventID).css("background-position", "46px -22px");
		}																																																		
	});
	}
}

function declineEvent(eventID) {
	if(iscurrentUserLoggedIn) {
	$("#btnevntNo" + eventID).css("background-position", "46px -44px");
	$("#btnevntAttend" + eventID).css("background-position", "92px 0px");
	$("#btnevntMaybe" + eventID).css("background-position", "92px -22px");
	
	FB.api(eventID + '/declined'  , 'post', {  }, function(response) {
		if (!response || response.error) {
				//alert('Error occured');
		} else {
			$("#btnevntNo" + eventID).css("background-position", "46px -44px");
		}																																																		
	});
	}
}


/* ------------------------------ --------------------------- *\
		Facebook View Methods
\* ------------------------------ --------------------------- */

function updateStatus(){
	var status  =   document.getElementById('status').value;
	FB.api('/me/feed', 'post', { message: status }, function(response) {
		if (!response || response.error) {
						alert('Error occured');
		} else {
						alert('Status updated Successfully');
		}
	});
}

/* ------------------------------ --------------------------- *\
		Facebook Project Custom Methods
		@Client : Jet Hotel
		@Project: Jet Hotel Website	
\* ------------------------------ --------------------------- */

function displayUserRSVP( evntID, usrStatus ) {
		//console.log(usrStatus + " " + evntID);
		if(usrStatus == "attending") {
			$("#btnevntAttend" + evntID).css("background-position", "46px 0px");
		}
		else if(usrStatus == "unsure") {
			$("#btnevntMaybe" + evntID).css("background-position", "46px -22px");
		}
		else if(usrStatus == "declined"){
			$("#btnevntNo" + evntID).css("background-position", "46px -44px");
		}
		else if(usrStatus == "not_replied") {
			$("#noRSVP" + evntID).css("display", "block");
		}
}

function displayFBActivityBox() {
	if(iscurrentUserLoggedIn){
		//console.log('displaybox');
		$("#fbActivityWrapper").fadeIn();
	}
}

function hideFBActivityBox() {
	//console.log('hidebox');
	$("#fbActivityWrapper").fadeOut();
}




