var oFlash;
var _dialog = null;

PH = new Object();
PH.FB = new Object();
PH.FB.Dialog = new Object();

PH.FB.Login = function() {
  FB.Connect.requireSession(function() {
    PH.FB.API = FB.Facebook.apiClient;  
    PH.FB.Flash = document.getElementById('content').childNodes[0];
    PH.FB.Flash.onFacebookLogin(PH.FB.API._session.uid);
  }, isUserActionHint=true);
};

PH.FB.getUserInfo = function(uid) {

  var oSequencer = new FB.BatchSequencer();
  var oFields = ["uid", "name", "first_name", "sex", "current_location", "birthday", "pic_big"];
  
  var oFriendsResult = this.API.friends_get(null, oSequencer);
  var oProfileResult = this.API.users_getInfo([uid], oFields, oSequencer);
  
  oSequencer.execute(function() {
    PH.FB.Flash.onFacebookUserData(oProfileResult.result[0], oFriendsResult.result);
  });
};

PH.FB.getLoggedInUser = function() {
  if(document.all) {
    PH.FB.onStatus(0);
  } else {
    FB.ensureInit(function() {
      FB.Connect.get_status().waitUntilReady(PH.FB.onStatus);
    });
  }
}

PH.FB.onStatus = function(status) {
  PH.FB.API = FB.Facebook.apiClient;  
  PH.FB.Flash = document.getElementById('content').childNodes[0];

  if(status == FB.ConnectState.connected) {
    PH.FB.Flash.onFacebookLogin(FB.Connect.get_loggedInUser());
  } else {
    PH.FB.Flash.onFacebookLogin(0);
  }
};

PH.FB.onSessionKey = function(key) {
  PH.FB.Flash.onFacebookSession(key);
};

PH.FB.inviteFriends = function() {
  this.showDialog('Invite Friends to B@ TV','<fb:fbml><fb:request-form method="GET" action="http://www.be-at.tv/fbconnect/close.html" invite="false" type="B@TV" content="B@ gives you access the world\'s best festivals, clubs and party scenes LIVE! Exclusive full length video/audio sets from the worlds biggest DJs and artists FOR FREE. <fb:req-choice url=\'http://www.be-at.tv\' label=\'View Site\' />"><fb:multi-friend-selector exclude_ids="" actiontext="Please select the frineds you would like to join you on b@TV." rows="3" bypass="cancel" showborder="true" /></fb:request-form></fb:fbml>',null,760,510);
};
PH.FB.requestPermissions = function() {
  FB.Connect.get_status().waitUntilReady(function(status) {
    if(status == FB.ConnectState.connected) {
      var iCount = 0;
      var hasPublish = false;
      var hasOffline = false;

      FB.Facebook.apiClient.users_hasAppPermission('publish_stream', function(res,ex) {
        hasPublish = res;iCount++;
        if(iCount == 2) PH.FB.requestPermissions2(hasPublish, hasOffline);
      });
      FB.Facebook.apiClient.users_hasAppPermission('offline_access', function(res,ex) {
        hasOffline = res;iCount++;
        if(iCount == 2) PH.FB.requestPermissions2(hasPublish, hasOffline);
      });
    }
  });
};
PH.FB.requestPermissions2 = function(hasPublish, hasOffline) {
  var sCallback = 'function(perms){if(perms.indexOf("offline_access") > 0) {PH.FB.onSessionKey(FB.Facebook.apiClient.get_session().session_key)};_callback=false;}';
  if(!hasPublish) {
    PH.FB.showDialog(null,null,'_callback=true;FB.Connect.showPermissionDialog("publish_stream, offline_access", ' + sCallback + ');',480,350);
  } else if(!hasOffline) {
    PH.FB.showDialog(null,null,'FB.Connect.showPermissionDialog("offline_access", ' + sCallback + ');',480,155);
  }
};

PH.FB.showDialog = function(title, fbml, js, width, height, tries) {
  if(!tries) tries = 0;

  FB.Connect.get_status().waitUntilReady(function(status) {
    if(status == FB.ConnectState.connected) {
      PH.FB.Dialog.title = title;
      PH.FB.Dialog.fbml = fbml;
      PH.FB.Dialog.js = js;
      PH.FB.Dialog.width = width;
      PH.FB.Dialog.height = height;
      PH.FB.Dialog.x = parseInt((screen.width-PH.FB.Dialog.width)/2);
      PH.FB.Dialog.y = parseInt((screen.height-PH.FB.Dialog.height)/2);
      PH.FB.Dialog._window = window.open('fbconnect/popup.html', 'id','toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=' + PH.FB.Dialog.width + ',height=' + (PH.FB.Dialog.height+30) + ',top=' + PH.FB.Dialog.y + ',left=' + PH.FB.Dialog.x);
      if(!PH.FB.Dialog._window && tries < 3) {
     	if(tries < 2)
          alert('A popup blocker has prevented b@ TV from talking to facebook. Your browser has most likely asked you if you would like to allow this.\n\nPlease answer yes to gain the advantages of facebook integration.');

        tries++;

        var sCommand = "PH.FB.showDialog(";
        sCommand += !(!title) ? ("'" + title + "'") : "null";
        sCommand += "," + (!(!fbml) ? ("'" + fbml + "'") : "null");
        sCommand += "," + (!(!js) ? ("'" + js + "'") : "null");      
	sCommand += "," + width;
	sCommand += "," + height
        sCommand += "," + tries + ")";
	setTimeout(sCommand, 10000);
      }
    } else {
      PH.FB.Login();
    }
  });
};

window.onfocus = function() {
  if(PH.FB.Dialog._window) {
    PH.FB.Dialog._window.focus();
  }
};