FACEBOOK = function(){

    /**
    * Shortcut for document.getElementById()
    * @param {id} id of html element to return
    * @method $
    * @return {Object} Html element with id id
    */
    var $ = function(id){
        return document.getElementById(id);
    }

    /**
    * Render the facebook connect button
    * @param {Object} container
    * @param {String} appID
    * @method renderFBConnectButton
    * @return {Function} 
    */
    var _renderFBConnectButton = function(container, appID, alwaysShow, alreadyConnectedCallback){
        // http://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/
        if(alwaysShow){
      	    container.innerHTML+='<fb:login-button id="fbLoginButton" perms="email">Login with Facebook</fb:login-button>';
	}
	else{
      	    container.innerHTML+='<fb:login-button id="fbLoginButton" perms="email">Login with Facebook</fb:login-button>';
            // Not currently working
            FB.getLoginStatus(function(response) {
                if (response.authResponse) {
                   // logged in and connected user, someone you know
         	    //alert('facebook.js logged in');
                    //alreadyConnectedCallback();
                } else {
                   // no user session available, someone you dont know
              	    //container.innerHTML+='<fb:login-button id="fbLoginButton" perms="email">Login with Facebook</fb:login-button>';		    
                } 
            });
	} 
    }

    var _getFBConnectButtonCode = function(){
	return '<fb:login-button perms="email">Login with Facebook</fb:login-button>';
    }

    /**
    * Get the facebook user and apply the 'callback' function
    * @param {Function} callback
    * @param {String} appID
    * @method _getFBUser
    * @return {Function} 
    */
    var _getFBUser = function(callback, errorCallback){
        var cb = null;
        FB.api('/me', function(user) {
             if(user != null) {
		 callback(user);
             }
	}); 
    }

    /**
    * Render the Facebook like button
    * @param {String} url
    * @method _renderLikeButton
    * @return {Function} 
    */
    var _renderLikeButton = function(url){
       return "<fb:like id='fbLike' href=\""+url+"\" send=\"false\" layout=\"button_count\" width=\"450\" show_faces=\"false\" action=\"like\" font=\"\"></fb:like>"	
    }

    return{


    /**
    * Render the facebook connect button
    * @param {Object} container
    * @method init
    * @return {Function} 
    */
	init : function(appID, initCallback, authCallback, unauthCallback){
               FB.init({ 
                  appId:appID, cookie:true, 
                  status:true, xfbml:true 
                });
                // http://facebook.stackoverflow.com/questions/5200167/how-to-let-facebook-login-button-redirect-to-a-particular-url
                FB.Event.subscribe('auth.login', function () {
                    authCallback();
                });
                FB.Event.subscribe('auth.statusChange', function () {
                   // unauthCallback();
                });
                FB.api('/me', function(user) {
                   if(user != null) {
		       initCallback(user);
                   }
	     });
	},

	renderFBConnectButton : function(container, appID, alwaysShow, alreadyConnectedCallback){
	   return function(e){
	       _renderFBConnectButton(container, appID, alwaysShow, alreadyConnectedCallback);
	   }
	},

    /**
    * Get the facebook user
    * @param {Function} callback
    * @method getFBUser
    * @return {Function} 
    */
	getFBUser : function(callback, errorCallback){
	   return function(e){
	       return _getFBUser(callback, errorCallback);
	   }
	},

    /**
    * Render the Facebook like button
    * @param {Function} url
    * @method renderLikeButton
    * @return {Function} 
    */
        renderLikeButton : function(url){
	    return function(e){
              return _renderLikeButton(url);
	    }
	},

        getFBConnectButtonCode : function(){
            return _getFBConnectButtonCode();
	}
    };

}();









