/*
* fbFlashBridge - Facebook Connect Flash Bridge
* Copyright (c) 2009 Pieter Michels
*
* ---------------------------------------------
*
* Custom javascript calls
*
* FBFlashBridgeLogIn
* FBFlashBridgeLogOut
* FBFlashBridgeSetStatus
* FBFlashBridgeGetFriendsList
* FBFlashBridgeGetUsersInfo
* FBFlashBridgePromptPermission
* FBFlashBridgePublishFeedStory
* FBFlashBridgeShowShare
* FBFlashBridgeUserInfo
* FBFlashBridgeInviteFriends
*
*
* Custom event listening
*
* FBFlashBridgeListener("LOGGED_IN", onLoggedIn);
* FBFlashBridgeListener("LOGGED_OUT", onLoggedOut);
* FBFlashBridgeListener("STATUS_SET", onStatusSet);
* FBFlashBridgeListener("FRIENDS_LIST", onFriendsList);
* FBFlashBridgeListener("USERS_INFO", onUsersInfo);
* FBFlashBridgeListener("USER_INFO", onUserInfo);
* FBFlashBridgeListener("APP_USERS", onUserInfo);
*/
 
var sAppURL = "";
var sAppKey = "";
 
var api;
var friendResult;
var userResult;
var usersResult;
var oFlash = null;
var isFlashReady = false;
var isLoggedIn = false;
 
 
//***********************************************************************************************************//

function reply(){
   $('addToProfile').update('<fb:add-section-button section="profile" />');
   FB.XFBML.Host.parseDomTree();
   alert("reply!");
}

function addProfileBox(){
        

        FB.ensureInit(function(){
           
            var api = FB.Facebook.apiClient;
            var UID = FB.Connect.get_loggedInUser();
            var profile = "<p> RMG Test! </p> <br/> <fb:name/>"
            
          
            
            api.profile_setFBML(UID,profile,profile,profile,reply);
            }
       );
}
	

function FBFlashBridgeInviteNonUserFriends()
{
  trace("INVITE FRIENDS");
 
  if (!isLoggedIn)
    FBFlashBridgeLogIn();
  else  
  FB.ensureInit(function()
  {
        var UID = FB.Connect.get_loggedInUser(); 
        var fql = "SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1="+UID+" ) AND has_added_app = 1";  
        
        var api = FB.Facebook.apiClient;
        
        api.fql_query(fql,function(result, ex){
            
        var c =0;
        var fr = "";
        
        for(c=0;c<result.length;c++){
            if (c<result.length-1)
                fr+=result[c]['uid']+",";
            else
                fr+=result[c]['uid'];
            
        }    
       //News Case History e Premi
       
       
       var Mf ='<fb:fbml> <fb:request-form style="width:630px; height:540px;"  action="http://www.rmgconnect.it/default.aspx" method="POST" invite="true" type="RMG Connect" content="Vieni a scoprire il mondo RMG" ><fb:multi-friend-selector exclude_ids="';
        Mf+=fr;
       Mf+= '"  rows="5"  actiontext="Chi vuoi invitare ?" invite="true"   />  </fb:request-form></fb:fbml>';
       var dialog = new FB.UI.FBMLPopupDialog('Invita i tuoi amici a RMG Connect', 'Invita');
       
       
       //alert(Mf);
       //var Mf ='<fb:fbml> <fb:request-form style="width:630px; height:540px;"  onsubmit="return false;" action="return false;" method="POST" invite="true" type="RMG Connect" content="Chi vuoi invitare?" ><fb:multi-friend-selector rows="5"  actiontext="Chi vuoi invitare?"   />  </fb:request-form></fb:fbml>';
       //var dialog = new FB.UI.FBMLPopupDialog('Invita i tuoi amici a RMG Connect', 'Invita');
       //alert(Mf);
       
       
       dialog.setContentWidth(630);
       dialog.setContentHeight(540);
   
       dialog.setFBMLContent(Mf);
       dialog.show();
             
        
        }); 
   });
}
 
 
 
 
 
function FBFlashBridgeInviteFriends()
{
  trace("INVITE FRIENDS");
 
  // FB.Connect.inviteConnectUsers();
  FB.ensureInit(function()
  {
        var dialog = new FB.UI.FBMLPopupDialog('Invita i tuoi amici a...', 'Invita');
        var fbml = "<fb:fbml>" +
                "<fb:request-form style=\"width:630px; height:540px;\" onsubmit=\"return false;\" action=\"" + "http://www.rmgconnect.it/stage/flashviral/index.htm" + "\"\tmethod=\"POST\" invite=\"true\" type=\"\" content=\"Tutto il testo che vuoi e link... " +
                  "<fb:req-choice url='http://www.rmgconnect.it/stage/flashviral' label='Conferma' />\">" +
                  "<fb:multi-friend-selector\tshowborder=\"false\" exclude_ids=\"\" actiontext=\"Invita amici\" rows=\"5\" bypass=\"cancel\"\tshowborder=\"false\" />" +
                "</fb:request-form>" +
              "</fb:fbml>";
        
        dialog.setFBMLContent(fbml);
        dialog.setContentWidth(630);
        dialog.setContentHeight(540);
        
        dialog.show();
    });
}
 
function FBFlashBridgeSetStatus(status)
{
  trace("SETTING STATUS (" + status + ")");
 
  api.users_setStatus(status, false, false, function()
  {
    trace("STATUS_SET");
    
    FBFlashBridgeDispatcher("STATUS_SET");
    
    FBFlashBridgeFlashDispatcher("onStatusSet");
  });
}
 
function FBFlashBridgeUserInfo(userId, arrProfileData)
{
  trace("GETTING USER INFO OF LOGGED IN USER OR USER WITH GIVEN UID");
 
  // ["timezone", "status", "sex", "proxied_email", "profile_url", "pic_square_with_logo", "pic_square", "pic_small_with_logo", "pic_small", "pic_big_with_logo", "pic_big", "pic_with_logo", "pic", "name", "first_name", "last_name", "is_app_user", "hometown_location", "birthday", "about_me", "uid"]
  
  api.users_getInfo([userId > 0 ? userId : api._session.uid], arrProfileData, function(result, ex)
  {  
    userResult = result[0];
 
    trace("USER_INFO");
    
    FBFlashBridgeDispatcher("USER_INFO");
    
    FBFlashBridgeFlashDispatcher("onUserInfo", userResult);
  });
}
 
function FBFlashBridgeGetFriendsList()
{
  api.friends_get(null, function(result, ex)
  {          
    friendResult = result;
    
    trace("FRIENDS_LIST");
    
    if(!jQuery.isArray(friendResult))
      friendResult = [];
    
    FBFlashBridgeDispatcher("FRIENDS_LIST");
    
    FBFlashBridgeFlashDispatcher("onFriendsList", friendResult);
  });
}
 
function FBFlashBridgeGetUsersInfo(arrUsers, arrProfileData)
{
  api.users_getInfo(arrUsers, arrProfileData, function(result, ex)
  {  
    usersResult = result;
 
    trace("USERS_INFO");
    
    if(!jQuery.isArray(usersResult))
      usersResult = [];
    
    FBFlashBridgeDispatcher("USERS_INFO");
    
    FBFlashBridgeFlashDispatcher("onUsersInfo", usersResult);
  });
}
 
function FBFlashBridgeGetAppUsers()
{
  api.friends_getAppUsers(function(result, ex)
  {          
    usersResult = result;
    
    trace("APP_USERS");
    
    if(!jQuery.isArray(usersResult))
      usersResult = [];
      
    FBFlashBridgeDispatcher("APP_USERS");
    
    FBFlashBridgeFlashDispatcher("onAppUsers", usersResult);
  });
}
 
function FBFlashBridgePromptPermission(permission)
{
  FB.ensureInit(function()
  {
      FB.Connect.showPermissionDialog(permission);
  });
}

function FBFlashBridgePublishUserAction(templateBundleId, templateData){
  FB.ensureInit(function()
  {
      var UID = FB.Connect.get_loggedInUser(); 
      var sequencer = new FB.BatchSequencer();
      api.feed_publishUserAction('64731402422', templateData, [UID], "This is a test", 1, null, sequencer); 
      sequencer.execute(function() { alert("publishing"); });
       
  });


}
function FBPublishStream(templateData){
  FB.ensureInit(function()
  {
      FB.Connect.streamPublish('', templateData);
	  
  });

	
}


function FBFlashBridgePublishFeedStoryShort(templateBundleId, templateData)
{
  FB.ensureInit(function()
  {
        FB.Connect.showFeedDialog(parseInt(templateBundleId), templateData, null, null, FB.FeedStorySize.oneLine , FB.RequireConnect.promptConnect);
  });
}
 
function FBFlashBridgePublishFeedStory(templateBundleId, templateData)
{
  FB.ensureInit(function()
  {
        FB.Connect.showFeedDialog(parseInt(templateBundleId), templateData, null, null, FB.FeedStorySize.full, FB.RequireConnect.promptConnect);
  });
}
 
function FBFlashBridgeShowShare(link)
{
  FB.Connect.showShareDialog(link, function()
  {
    alert("Share Test");
  });
}
 
//***********************************************************************************************************//
 
function FBFlashBridgeLogOut()
{
  FB.Connect.logout(function()
  {
    trace("LOGGED_OUT");
    
    FBFlashBridgeDispatcher("LOGGED_OUT");
    
    FBFlashBridgeFlashDispatcher("onLoggedOut");
  });
}
 
function FBFlashBridgeLogIn()
{
  FB.Connect.requireSession(function()
  {
    trace("LOG IN READY");
    
    FBFlashBridgeLoggedIn();
  });
}
 
function FBFlashBridgeLoggedIn()
{
  api = FB.Facebook.apiClient;
    
  trace("LOGGED_IN");
  
  isLoggedIn = true;
 
  FBFlashBridgeDispatcher("LOGGED_IN");
  
  FBFlashBridgeFlashDispatcher("onLoggedIn", api._session);
    
  /*MODIFICATO DA TIM */
  
  //addProfileBox();

}
 
function FBFlashBridgeOnLoad()
{
  FB.ensureInit(function()
  {
    FB.Facebook.get_sessionState().waitUntilReady(function(session)
    {
      inspect(session);
      
      if(session)
        FBFlashBridgeLoggedIn();
    });
  });
}
 
//***********************************************************************************************************//  
 
if(!("console" in window) || !("firebug" in console))
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
 
    window.console = {};
 
    for(var i = 0; i < names.length; ++i) window.console[names[i]] = function() {};
}
 
function trace(msg)
{
  //alert(msg);
  
  if(console)  
    console.debug(msg);
}
 
function inspect(obj)
{
  if(console)  
    console.dir(obj);
}
 
//***********************************************************************************************************//  
 
window.onload = function() { FBFlashBridgeOnLoad(false); };
 
//***********************************************************************************************************//
 
function FBFlashBridgeDispatcher(eventType, data)
{
  jQuery(document).trigger(eventType, data);
}  
 
function FBFlashBridgeListener(eventType, func)
{
  jQuery(document).bind(eventType, function(e, data) { func(data); });
}
 
function FBFlashBridgeFlashDispatcher(func)
{
  if(oFlash && isFlashReady) // && typeof obj.JStoASviaExternalInterface != "undefined")
  {    
    if(arguments.length > 1)
      oFlash[func](Array.prototype.slice.call(arguments).slice(1)[0]);
    else
      oFlash[func]();
  }
}
 
function FBFlashBridgeInit(appKey, appURL, flashObj)
{
  sAppKey = appKey;
  sAppURL = appURL;
 
  oFlash = flashObj;
  
  FB.init(sAppKey, sAppURL);
}
 
function FBFlashBridgeFlashLoaded()
{
  trace("FLASH LOADED");
  
  isFlashReady = true;
  
  if(isLoggedIn) // NOTIFY FLASH
  {
    trace("FB WAS ALLREADY LOGGED IN");
    
    FBFlashBridgeFlashDispatcher("onLoggedIn", api._session);
  }
}
 
//***********************************************************************************************************//