//Local Variable with Flash Content id. default = flashcontent
var as_swf_name = "";

//Initialize Facebook
function fbInit(asSwfName, xd_receiver){
	as_swf_name = asSwfName;
	//FB.init(getFacebookAPIKey(), xd_receiver, {"ifUserConnected":onFBConnected, "ifUserNotConnected":onFBNotConnected});
	FB.init(getFacebookAPIKey(), xd_receiver); 
}

function onFBConnected(user_id) { 
	fb_login.style.display = "none";
	fb_logout.style.display = "";
} 

function onFBNotConnected() {
	fb_login.style.display = "";
	fb_logout.style.display = "none";
}


function fbLogin(){
	FB.Connect.requireSession(function(){
		FB.Facebook.apiClient.users_hasAppPermission("publish_stream",function(has){
	        if (has == 0) 
	        {
	          FB.Connect.showPermissionDialog("publish_stream", function(granted){});
	        } 
		});
	});

}

function fbCheckPermissions(){
	FB.Connect.requireSession(function(){
		FB.Facebook.apiClient.users_hasAppPermission("publish_stream",function(has){
	        if (has == 0) 
	        {
	        	FB.Connect.showPermissionDialog("publish_stream", fbOnCheckPermissions);
	        }
	        else
	        {
		        fbOnCheckPermissions("");
	        }
		});
	});
}

//JavaScript to Flash Connect methods
function fbFlashLogin(){
	FB.Connect.requireSession(fbOnLoginHandler);
}

function fbLogout() {
	FB.Connect.logout( function() {} );
	
}

//Event Handlers
function fbOnLoginHandler(){
	flashCallBack( "onLogIn" );
}

function fbOnCheckPermissions(granted) {
	flashCallBack( "onCheckPermissions" );
}

//Method to dispatch an Event to Flash
function flashCallBack ( func ) {
	// Enable JSON Parsing work-around.
	// Hopefully Safari/Javascript will be resolved soon.
	// Facebook Bug: http://bugs.developers.facebook.com/show_bug.cgi?id=8114
	FB.Facebook.get_sessionState().waitUntilReady(function () {
        // FB.FBDebug.logLevel = 10; FB.FBDebug.isEnabled = true;
        if (!window.loaded_fb_hacks) {
          window.loaded_fb_hacks = true;
          load_fb_hacks();
        }
      });
      
	if( navigator.appName.indexOf("Microsoft")!=-1 )
	{
		if (window[as_swf_name])
			window[as_swf_name][func]();
	}
	else
	{
		if (document[as_swf_name])
			document[as_swf_name][func]();
	}
}

function getFacebookAPIKey() {
	var server = (self.$_SERVER) ? $_SERVER['SERVER_NAME'] : location.host;
	switch(server) {
		case 'mytrailmap.scottnorland.net':
			return 'be72f6d6e1f8b106b32f8f3786ebefe6';
	
		case 'localhost':
			return '046c1bfcf1d3c598d814467acb556655';

		case 'www.mytrailmap.com':
		default:
			return '265cb91d1efa4d92c3655d1f4c4a1c76';
	}
}


function popFlashMediaMarker(mediaId) {
	if( navigator.appName.indexOf("Microsoft")!=-1 )
	{
		if (window[as_swf_name])
			window[as_swf_name].popMarker(mediaId);
	}
	else
	{
		if (document[as_swf_name])
			document[as_swf_name].popMarker(mediaId);
	}

}

// Author: Joe Noon <joe@stat.im>
// Purpose: JSON returned by Facebook isn't always valid.
// Workaround: Try other ways of parsing the JSON value before giving up. 
 
 
// you don't need to call this function.  it gets applied automatically
// when you wrap fql inside fb_ready_do
load_fb_hacks = function () {
  
  var old_deserialize = FB.JSON.deserialize;
  
  // new deserialize: will try different ways of parsing the json before failing
  // you can set logging to true for debugging to console
  FB.JSON.deserialize = function (json) {
    var logging = false, res;
    var log_err = function (msg) { if (logging) console.log('JSON MOD: '+msg); };
    var log_res = function (msg) { 
      if (logging) {
        console.log('JSON MOD RESULT:'); 
        console.log(msg); 
      }
    };
    try {
      res = old_deserialize(json, true);
    } catch (err) {
      log_err('failed on deserialize(json, true)');
      try {
        res = old_deserialize(json, false);
      } catch (err) {
        log_err('failed on deserialize(json, false)');
        try {
          res = jQuery.parseJSON(json);
        } catch (err) {
          log_err('failed on jQuery.parseJSON(json)');
          try {
            res = jQuery.parseJSON(json.replace(/\\'/, "'"));
          } catch (err) {
            log_err('failed on jQuery.parseJSON(json_with_removed_quote_escapes)');
            try {
              res = (function (window, document, top, self) {
                return eval('('+json+')');
              })(null, null, null, null);
            } catch (err) {
              log_err('failed on eval');
              log_err('FAIL!');
              // throw the norm
              res = old_deserialize(json, true);
            }
          }
        }
      }
    }
    log_res(res);
    return res;
  };
            
};