﻿

//access to swf client

var swfclientname;
var facebookLibLoaded = false;

  function movie() {
  
		/*
		if(navigator.appName.indexOf("Microsoft") != -1){
			return window[swfclientname];
		}else{
		*/
			if(document.embeds[swfclientname])
				return document.embeds[swfclientname];
			if(window.document[swfclientname])
				return window.document[swfclientname];
			if(window[swfclientname])
				return window[swfclientname];
			if(document[swfclientname])
				return document[swfclientname];
		//}
		
	}

	
//handle pop-up blockers

function handlePopups(){
	/*window.open_facebook = window.open;
	window.open = function(url,name,specs,replace) {
		
			login_handler = window.open_facebook(url,name,specs,replace);
			if( !login_handler ) {
				  handle_popup_blocked();
			}
		
	}*/
}


function resetPopUps(){
	//window.open = window.open_facebook;
	
}

function handle_popup_blocked() {
    alert('Active as janelas pop-up no seu browser, obrigado.');
}

//dynamic js facebook source insertion (auto executable)

	(function() {
		var e = document.createElement('script'); e.async = true;
		e.src = document.location.protocol +
		  '//connect.facebook.net/pt_PT/all.js';
		document.getElementById('fb-root').appendChild(e);
	  }());
	  
	  
//functions on window ready

	  window.fbAsyncInit = function() {
			console.log("Facebook Library loaded");
			facebookLibLoaded = true;
		
	  };
	  

//START : ActionScript <-> JavaScript API methods
	  

		function getFacebookLibStatus(){
			return facebookLibLoaded;
		}
		
		//facebook init (called from swf client)
		function facebookInit(api_key){
			
			console.log(movie());
			console.log("FB.init");
			
			FB.init({appId: api_key, status: true, cookie: true, xfbml: true});
			
			// NOT TRUSTFULL !!
			/*
			FB.Event.subscribe('auth.login', 
				function(response) {
						console.log("Event login");
						if (response.session) {
							//read granted permissions : coma separeted values
							//alert(response.perms);
							
							//search for the permissions you requested to check whether the user can go on within the application
							var sessionResponse = response;
							FB.api('/me', function(response) {
								//read user data (ex)
								//alert(response.name);
								if(sessionResponse.perms != null){
									movie().facebookLoginHandler(true, sessionResponse.perms, response);
								}else{
									movie().facebookLoginHandler(true, "", response);
								}
								
								//... and go on with further actions
								
							});
						  } 
				});

			 FB.Event.subscribe('auth.logout', 
				 function(response) 
				 {
					 console.log("Event logout");
					 movie().facebookLogoutHandler(response);
				 });
			*/
		 }
	  

	  /**
	  permissions : string
	  */
	  function facebookLogin(permissions)
	  {
		console.log("FB.getLoginStatus");
		
		FB.getLoginStatus(
			//handle response
			function(response) 
			{
				console.log("FB.getLoginStatus response");
				//user with facebook session in browser
				if (response.session) {
					console.log("FB.getLoginStatus response session");
					
					var aRequestedPerms = permissions.split(",");
					if(aRequestedPerms.length>0){
						//permissions have been requested by the swf client
						
						//check whether there is permissions info
						// if empty, force a permissions request with the FB.login() call
						if(response.perms == null || response.perms == ""){
							//call login - facebook bypasses the user/password step and shows the extended permissions dialog box. See second argument of the FB.login() call.
							console.log("FB.getLoginStatus response session no perms : login call");
							login(permissions);
						}else{
							
							//onLoginStatus devolve um objecto em string
							try{
								console.log("FB.getLoginStatus response session perms: "+perms);
								
								var perms = eval("("+response.perms+")");
								var userPerms = "";
								if(perms.extended != null){
									
									console.log("FB.getLoginStatus perms extended: "+perms.extended);	
									if(perms.extended.length > 0){
										userPerms = perms.extended[0];
										for(var i = 1; i<perms.extended.length; i++){
											userPerms = userPerms+","+perms.extended[i];
										}
									}
								}
								/*else if(perms.general != null){
								
								}*/
								
								//verify if all the requested permissions exist in the permissions given by the user
								userPerms = userPerms.toLowerCase();
								var allPermissionsGranted = true;
								for(var j= 0; j<aRequestedPerms.length; j++){
									if(userPerms.indexOf(aRequestedPerms[j].toLowerCase()) < 0){
										//pelo menos uma das permissões pedidas não existe -> força o login
										console.log("FB.getLoginStatus requested permission not available: "+aRequestedPerms[j].toLowerCase()+" -> login call");
										allPermissionsGranted = false;
										login(permissions);
										break;
									}
								}
								
								if(allPermissionsGranted == true){
									console.log("FB.getLoginStatus response session perms OK");
									//all requested permissions granted, the user can go on with the application
									getUser(userPerms);
								}
								
							}catch(error){
								console.log("FB.getLoginStatus response session perms error : login call");
								login(permissions);
							}
							
						}
					}else{
						//não foram pedidas permissões pelo flash
						getUser("");
					}
					
				} else {
					console.log("FB.getLoginStatus response no session : login call");
					// no user session available
					login(permissions);

				}
			},
				// second argument of the FB.getLoginStatus() call
			{scope:permissions}
			);
		}
	
	 
	//Alert : keep this function internal to JS. Swf client should use facebookLogin instead.
	function login(permissions)
	{
		console.log("FB.login");
		
		//start popuphandler
		handlePopups();
		
		//call facebook login dialog box and pass requested permissions (see second argumente of the FB.login() call)
		FB.login(
			//handle response
			function(response) 
				{
					//reset popup handler
					resetPopUps();
					
					console.log("FB.login response");
					//user logged in 
					if (response.authResponse) {
						console.log("FB.login response session");
						//read granted permissions : coma separeted values
						//alert(response.perms);
						getUser();
					  } else {
							// user cancelled login, no way further...
							//alert("log: not logged in");
							console.log("Flash facebookLoginHandler no session");
							movie().facebookLoginHandler(false, "", null);
					  }
				},{scope:permissions}
			);
	}
	
	function getUser(){
	
		FB.api('/me', function(response) {
			console.log("FB.api get me response");
			//read user data (ex)
			//alert(response.name);
			console.log(response);
			movie().facebookLoginHandler(true, response);
			
		});
	
	}
	
	function facebookLogout(){
		FB.logout(function(response) {
			movie().logoutHandler(response);
		});
	}

	
	function facebookGetFriendsList()
	{
			FB.api('/me/friends', function(response) {
			if (!response || response.error) {
				 //alert('Error occured');
				  movie().facebookGetFriendsListHandler(false);
			} else {
				 //alert('friends: ' + response.data[0].name);
				 movie().facebookGetFriendsListHandler(true, response.data);
			}
	       });


	}
	
	
	function facebookUIPostFeed(body, attname, attcaption, attdesc, attlink, attpicture, actionlinks, userpromptmsg)
	{
		
		var attachment = { 'href':attlink, 'name':attname, 'description':attdesc,
	  		'caption':attcaption, 'media': [{'type':'image','src':attpicture,'href':attlink}]};
		
		//action links signature...
		//var actionLinks = [{'href':'http://www.website.com','text':'My website'}];
		//var actionlinks = null;
		
		//older API ...
		//FB.Connect.streamPublish(message, attachment, actionLinks, "", "", function(){movie().postComplete();});
		
		//start popuphandler
		handlePopups();
		
		FB.ui(
	                {
						display:'popup',
	                    method: 'stream.publish',
						message: body,
	                    attachment: {
	                        name: attname,
	                        caption: attcaption,
	                        description: (attdesc),
	                        href: attlink,
							media: [{'type':'image','src':attpicture,'href':attlink}]
	                    },
						
						action_links:actionlinks,
						user_prompt_message: userpromptmsg
	                },
					function(response) {
						
						//reset popup handler
						resetPopUps();
					
						if (!response || response.error) {
							//alert('Error occured');
							movie().facebookPostFeedHandler(false);
						} else {
							//alert('Post ID: ' + response.id);
							movie().facebookPostFeedHandler(true, response.id);
						}
					}
				);
		
	}
	
	/**
		Graph API ainda não suporta action links !
	
		actionlinks têm o formato de arrays de objectos com as propriedades text e href.
		Ex:
		[
			{ text: 'My website', href: 'http://www.mysite.com'},
			{ text: 'Your website', href: 'http://www.yoursite.com' }
		] 
	*/
	function facebookPostFeed(body, attname, attcaption, attdesc, attlink, attpicture, actionlinks, id)
	{
			//friend wall
			var postdata = { 
						message: body, 
						name:attname, 
						caption:attcaption, 
						description:attdesc, 
						link:attlink, 
						picture:attpicture,  
						actions: actionlinks
						
					};
					
		   if(id != ""){
				FB.api('/'+id+'/feed', 'post', postdata, postFeedComplete);
		   }else{
				//self wall
				FB.api('/me/feed', 'post', postdata, postFeedComplete);
		   }
		   
		   function postFeedComplete(response)
		   {
			    if (!response || response.error) {
					//alert('Error occured');
					movie().facebookPostFeedHandler(false);
				} else {
					//alert('Post ID: ' + response.id);
					movie().facebookPostFeedHandler(true, response.id);
				}
		   }

	}
	
	/**
	 *@exception : Like is not supported yet by the Graph API
	
	function facebookPostLike(url)
	{
			
			FB.api('/me/likes', 'post', url, postLikeComplete);
		   
		   function postLikeComplete(response)
		   {
			    if (!response || response.error) {
					//alert('Error occured');
					movie().facebookPostLikeHandler(false);
				} else {
					//alert('Post ID: ' + response.id);
					movie().facebookPostLikeHandler(true, response.id);
				}
		   }

	}
	*/
  
	
	//END : ActionScript <-> JavaScript API methods
	
	
	//Debug console:
	// if console is not defined, e.g., Firebug console is not enabled or Non-Firefox browser
		if (typeof console == 'undefined') {
			var console = {};
			console.log = function(msg) {
				return;
			};
		}

  
