var userID;
var userInfo;
var friendInfo;
var albumLength;

var curBulkAlbumCount;
var totalBulkAlbumCount;
var bulkAlbumArr;

//STAGING OR PROD FB
if (document.location.href.indexOf("dev") == -1){
	var api_key = "0f5649085df2e82fb93582067f773597"; //LIVE
}else{
	var api_key = "65b1fff6fe8c3abf9f758c6440ca6965"; //DEV
}

function loginConnect(){
	statusMsg("Login FB Connect...");
	FB.Connect.requireSession();
	checkConnect();
}
function logoutConnect(){
	FB.Connect.logout(sendLogoutStatus);
}

function checkConnect(){
	//FACEBOOK WILL WAIT UNTIL THERE IS A CONNECTION BEFORE RUNNING FUNCTION
	statusMsg("Check FB Connect...");
	
	FB_RequireFeatures(["XFBML"], function()
	{
		
		FB.Facebook.init(api_key, "xd_receiver.htm", { cookie: false, permsToRequestOnConnect : "publish_stream" });
		
		// Get the current user's login status as a Waitable object
		FB.Connect.get_status().waitUntilReady(function(status) {
			
			statusMsg("FB.ConnectState get_status..."+status);
			/*
			* 1 = FB.ConnectState.connected
			* 2 = FB.ConnectState.userNotLoggedIn
			* 3 = FB.ConnectState.appNotAuthorized
			*/
			
			switch(status) {
				case FB.ConnectState.connected:
					statusMsg("FB.ConnectState.connected");
					break;
			
				case FB.ConnectState.userNotLoggedIn:
					statusMsg("FB.ConnectState.userNotLoggedIn");
					break;
				
				case FB.ConnectState.appNotAuthorized:
					statusMsg("FB.ConnectState.appNotAuthorized");
					break;

			}
		 });

 
		//FB.Facebook.get_sessionState().waitUntilReady(function(){
		FB.Facebook.get_sessionWaitable().waitUntilReady(function(){
			statusMsg("get_sessionWaitable()...");
			userID = FB.Facebook.apiClient.get_session().uid;		
			if (!userID) {
				statusMsg("USER NOT VALID!");
			}else{
				getProfile();
			}
	  });
	});
}


function requestPermissions() 
{
	FB.Facebook.apiClient.users_hasAppPermission('publish_stream', function (result){ 
			
			if(!result){
				FB.Connect.showPermissionDialog(
					"publish_stream",   // permission name(s)
					permissionHandler,  // response callback
					true, // enable profile selector (only for "publish_stream")
					[userID] // only ask about user's own page...
				);
			}
		}
	)
}

function hasAppPermission() 
{
	FB.Facebook.apiClient.users_hasAppPermission('publish_stream', function (result){ 
			// result: 1 or 0
			var hasPermission;
			if ( result == 1 || result == "1" ) hasPermission = true;
			else hasPermission = false;
			sendPermissionResult(hasPermission); 
		}
	)
}

// this function should really check permissions and do something, but for now, it doesn't.
function permissionHandler(result) 
{
	//result: publish_stream(allow) false(not allow) or cancel:null(cancel)
	
	var hasPermission;
	if( result == false || result == null ) hasPermission = false;
	else hasPermission = true;
	
	sendPermissionResult(hasPermission); // 1 or 0
}

function getProfile(){
	//Get the user's info	
	statusMsg("Loading profile..." + userID);

	FB.Facebook.apiClient.users_getInfo(userID,'first_name,last_name,name,pic,pic_big,pic_square,is_app_user,sex',function(result, ex) {
		userInfo = result.slice();
		sendProfile();
		getFriends();
	});     	
}

function getFriends(){
	statusMsg("Loading friends...");
	
	//Get the friend's and their info        
	FB.Facebook.apiClient.friends_get(null, function(result, ex) {
		
		var ids = result.slice();
		FB.Facebook.apiClient.users_getInfo(ids,'name,first_name,pic_square,is_app_user',function(result, ex) {
			friendInfo = result.slice();
			sendFriends();
		});
	});    	
}

// ****************************************************************
// FEED
// ****************************************************************

var postType;

function cbFeedPostFinished(post_id,exception){
	statusMsg("Post closed." + post_id + ", postType:"+ postType );
	if( ( postType == "mySpicy" || postType == "friendsSpicy") && post_id ){
		var flash = (navigator.appName.indexOf ("Microsoft") !=-1)?window["container"]:document["container"];
		flash.jscbFeedPostFinished(post_id,postType); 
	}
}

function postToFB(target_id,type,link,imgURL,who)
{
	statusMsg("Prompt feed post... ");
	
	postType = type;
	
	var img_url;
	var url;
	var subject_text;
	var caption;
	var auto_publish = false;
	var actionLink = "http://www.spicyside.com/";
	var sender_name = userInfo[0].name;
	var whose = userInfo[0].sex == "female" ? "her" : "his";
	
	switch (type)
	{
		case "mySpicy":
			subject_text = "My Spicy Side is showing.";
			caption = sender_name + " just created "+whose+" Spicy Side. Want to create your own?";
			img_url = imgURL;
			break;
			
		case "friendsSpicy":
			subject_text = sender_name + " released your Spicy Side. Check it out!";
			caption = "";
			img_url = imgURL;
			url = link;
			break;
			
		case "won":
			var beat_who = who;
			if( beat_who == null ) beat_who = "Spicy Guest";
			subject_text = sender_name + " just beat " + beat_who + " in the Rumble Arena!";
			caption = "Wanna test your skills too?";
			auto_publish = true;
			break;
			
		case "eprizes":
			subject_text = sender_name + " really went to town in Spicy Town and earned a chance at some spicy prizes.";
			caption = "Think you have what it takes to win one too?";
			auto_publish = true;
			break;
			
		default:
			subject_text = "Check out SpicySide.com!";
			caption = "";
	}
	
	if( img_url == null )img_url = "http://www.spicyside.com/fbImages/spicyside.jpg";
	if( url == null ) 	 url = "http://www.spicyside.com/";
	
	
	var attachment ={	'name':subject_text,
						'href':url,
						'caption':caption,
						'description':'',
						'media':[ { 'type':'image',
									'src':img_url,
									'href':url
									}
						]
					}
	var actionLinks = [
						{	text:"Meet Your Spicy Side!", //a maximum length of 25 characters
							href:actionLink
						}
					]
	
	//Must have setTimeout for IE Browser bug
	setTimeout(function(){
		FB.Connect.streamPublish(
				//String user_message,  
				'',
				//Object attachment,  
				attachment,
				//Object action_links,  
				actionLinks,
				//String target_id,  
				target_id,
				//String user_message_prompt,  
				'Your Message: ',
				//Function callback, 
				cbFeedPostFinished,
				//Boolean auto_publish,  
				auto_publish
				//String actor_id
			);
		}, 
		500
	);
}

function autoPublish (target_id,subject_text)
{

	var url = "http://www.spicyside.com/";
	var img_url = "http://dev-spicyside.15letters.com/fb_test/fbImages/spicyside.jpg";
	var actionLink = "http://www.spicyside.com/";
	
	var attachment ={	'name':subject_text,
						'href':url,
						'caption':'{*actor*} has want to share... FPO',
						'description':'extra description goes here FPO',
						'media':[ { 'type':'image',
									'src':img_url,
									'href':url
									}
						]
					}
	var actionLinks = [
						{	text:"Meet Your Spicy Side!", //a maximum length of 25 characters
							href:actionLink
						}
					]
	
	//Must have setTimeout for IE Browser bug
	setTimeout(function(){
		FB.Connect.streamPublish(
				//String user_message,  
				'',
				//Object attachment,  
				attachment,
				//Object action_links,  
				actionLinks,
				//String target_id,  
				target_id,
				//String user_message_prompt,  
				'Your Message: ',
				//Function callback, 
				cbFeedPostFinished,
				//Boolean auto_publish,  
				true
				//String actor_id
			);
		}, 
		500
	);
}


function sendNotification(uids,msg)
{
	//If uids is blank it will send to current user
	//alert(uids);
	//FB.Facebook.apiClient.notifications_send(uids,msg,'user_to_user');
}



// ****************************************************************
// PHOTOS
// ****************************************************************

function getPhotos() 
{
	var uid = userID;//'770679772';//M;//userID//1387486116me//100000447146747mable
	//photos_get(subj_id,  aid,  pids:Array,  onRequestCompleted)
    FB.Facebook.apiClient.photos_get(uid, null, null, function(result, exception) {
		statusMsg(">photos_get:" + result.length );
		//alert( "photos_get: "+ result.length );
		sendPhotos( result );
    });
}

function getAlbums()
{
	var uid = userID;//'770679772';//'770679772';//userID
	
	//photos_getAlbums(uid, aids:Array,  onRequestCompleted)
	FB.Facebook.apiClient.photos_getAlbums(uid,null,function(result, exception) {
		
		statusMsg(">photos_getAlbums length:"+ result.length);
		//albumLength = result.length;
		//alert( "photos_getAlbums: "+ result.length );
		sendAlbums( result );
		
    });
	/*
	FB.Facebook.apiClient._callMethod$1('photos.getAlbums', {uid: uid}, 
        function(result, exception) {
			if (result.length > 0) {
				var aid = result[0].aid;
				console.log(aid);
			}
        });*/
}


function getPhotosByAlbum(aidArr)
{
	bulkAlbumArr = new Array();
	curBulkAlbumCount = 0;
	totalBulkAlbumCount = aidArr.length;

	statusMsg( "getPhotosByAlbum : " + aidArr.length );
	var api = FB.Facebook.apiClient;
	
	for (var j = 0; j < aidArr.length; j++) 
	{
		var aid = aidArr[j];
		api.photos_get(null, aid, '', function(result, exception) {
			bulkAlbumArr.push( result );
			if( totalBulkAlbumCount == bulkAlbumArr.length ){
				sendPhotoAlbums();
			}
		});
	}
}

function display(text) {
    jQuery('#display').append(text + '<br>');
}

 // ****************************************************************
//SEND BACK TO FLASH
// ****************************************************************
function sendProfile(){   
	//writeProfile();
	statusMsg("sendProfile!");
	var flash = (navigator.appName.indexOf ("Microsoft") !=-1)?window["container"]:document["container"];
	flash.jscbLoggedIn(userInfo);		
	statusMsg("Finished loading profile!" + userInfo.sex);
}

function sendFriends(){
	//writeFriends();
	var flash = (navigator.appName.indexOf ("Microsoft") !=-1)?window["container"]:document["container"];
	flash.jscbFriends(friendInfo,friendInfo.length); 	
	statusMsg("Finished loading friends!");
}

function sendLogoutStatus(){
	var flash = (navigator.appName.indexOf ("Microsoft") !=-1)?window["container"]:document["container"];
	flash.jscbLogoutStatus(true); 	
	statusMsg("Finished logout");	
}

function sendPhotos(photos){
	statusMsg("got Photos call FLASH");
	var flash = (navigator.appName.indexOf ("Microsoft") !=-1)?window["container"]:document["container"];
	flash.jscbPhotos(photos); 	
		
}

function sendAlbums(albums){
	statusMsg("got Albums call FLASH");	
	var flash = (navigator.appName.indexOf ("Microsoft") !=-1)?window["container"]:document["container"];
	flash.jscbAlbums(albums); 	
	
}


function sendPhotoAlbums(){
	statusMsg("got PhotoAlbums call FLASH " + bulkAlbumArr.length);
	var flash = (navigator.appName.indexOf ("Microsoft") !=-1)?window["container"]:document["container"];
	flash.jscbPhotosByAlbum(bulkAlbumArr); 	
}

function sendPermissionResult(result){
	var flash = (navigator.appName.indexOf ("Microsoft") !=-1)?window["container"]:document["container"];
	flash.jscbPermissionResult(result); 	
}

// ****************************************************************
// STATUS MSG
// ****************************************************************
function statusMsg(msgIn){
	var fb_status = document.getElementById('fb_status');  	
	if (fb_status){
		fb_status.innerHTML += "<br />" + msgIn;
	}
}

  
/*

{
"video":{ "video_src":"http://www.youtube.com/v/NP3lltOrGM0", "preview_img":"http://s3.ytimg.com/vi/NP3lltOrGM0/default.jpg" }
}
*/