var $fbJ = jQuery;

var SHFB = {
    setting : {
        appId : '171788816171744',
        postUrl : 'http://www.starhub.com/content/dev/facebook.html'
    },

    get$Obj : function(obj) {
        if (typeof obj == 'object' && typeof obj.length == 'number') return obj;
        if (typeof obj == 'object' && typeof obj.length == 'undefined') return $fbJ(obj);
    },

    copyParams : function(a, b) {
        var c = {};
        for (var i in a) {
            c[i] = b[i] ? b[i] : a[i];
        }
        return c;
    },

    login : function(obj, params) {
        var $Obj = SHFB.get$Obj(obj);
        var par = SHFB.copyParams({
            perms : 'read_stream,publish_stream,email,user_birthday,user_groups',
            showfaces : 'false',
            width : '200',
            autologoutlink : 'true',
            size : 'small'
        }, params);

        var content = '<fb:login-button perms="' + par.perms +
                      '" show-faces="' + par.showfaces +
                      '" width="' + par.width + '" max-rows="1"' +
                      ' autologoutlink="' + par.autologoutlink +
                      '" size="' + par.size + '">' +
                      '</fb:login-button>';

        $Obj.html(content);
        $Obj.css({'display':'block','height':'auto','width':'auto'});

//        if (typeof FB != "undefined") {
//            FB.XFBML.parse(obj);
//        }
    },

    changeLoginStatus : function(loginStatus) {
        $fbJ('.fb_button .fb_button_text').each(function(index, el) {
            var $Obj = SHFB.get$Obj(el);
            $Obj.html(loginStatus ? 'Logout' : 'Login');
        });
    },

    like : function(obj, params) {
        var $Obj = SHFB.get$Obj(obj);
        var par = SHFB.copyParams({
            url : window.location.href,
            layout : 'button_count',
            showfaces : 'false',
            width : '200',
            action : 'like'
        }, params);

        var content = '<iframe src="http://www.facebook.com/plugins/like.php?href=' + par.url +
                      '&layout=' + par.layout + '&show_faces=' + par.showfaces +
                      '&width=' + par.width + '&action=' + par.action +
                      '&colorscheme=light&height=20" scrolling="no" frameborder="0" ' +
                      'style="border:none;overflow:hidden;width:' + par.width + 'px;height:20px;" ' +
                      'allowTransparency="true"></iframe>';

        $Obj.html(content);
        $Obj.css({'display':'block','height':'auto','width':'auto'});
    },

    activity : function(obj, params) {
        var $Obj = SHFB.get$Obj(obj);
        var par = SHFB.copyParams({
            url : window.location.host,
            layout : 'standard',
            width : '300',
            height : '300',
            header : 'true',
            recommendations : 'false'
        }, params);

        var content = '<iframe src="http://www.facebook.com/plugins/activity.php?site=' + par.url +
                      '&width=' + par.width + '&height=' + par.height +
                      '&header=' + par.header + '&colorscheme=light' +
                      '&recommendations=' + par.recommendations + '" ' +
                      'scrolling="no" frameborder="0" ' +
                      'style="border:none; overflow:hidden; width:' + par.width +
                      'px; height:' + par.height + 'px;" allowTransparency="true">' +
                      '</iframe>';

        $Obj.html(content);
        $Obj.css({'display':'block','height':'auto','width':'auto'});
    },

    postFeed : function(params) {
        if (SHFB_Member.isLoggedIn('fb') && SHFB_Member.isConnected()) {
            var par = SHFB.copyParams({
                message : '',
                link : '',
                source : '',
                name : '',
                picture : '',
                description : ''
            }, params);

            FB.api('/me/feed', 'post', par, function(response) {
                if (!response || response.error) {
                    alert('Error occured ' + response.error);
                } else {
                    //alert('Message was posted! (post id: ' + response.id + ")");
                }
            });
        }
    }
};

var SHFB_Member = function() {
    var loginStatus = false;
    var connectedStatus = false;
    var api = {
        fbLogin : function(response) {
            SHFB_Member.setFBStatus(response);
            SHFB_Member.postSession(response.session.session_key);
        },
        fbLogout : function(response) {
            SHFB_Member.setFBStatus(response);
        },
        setFBStatus : function (response) {
            switch (response.status) {
                case 'connected':
                    SHFB_Member.loginStatus = true;
                    SHFB_Member.connectedStatus = true;
                    break;
                case 'notConnected':
                    SHFB_Member.loginStatus = true;
                    SHFB_Member.connectedStatus = false;
                    break;
                default:
                    SHFB_Member.loginStatus = false;
                    SHFB_Member.connectedStatus = false;
            }
            SHFB.changeLoginStatus(SHFB_Member.loginStatus && SHFB_Member.connectedStatus);
        },

        postSession : function(sessionKey) {
            $fbJ.get(SHFB.setting.postUrl, {sessionId : sessionKey}, function(resp){
            });
        },

        isLoggedIn : function(loginType) {
            switch (loginType) {
                case 'fb':
                    return SHFB_Member.loginStatus;
                    break;
            }
        },

        isConnected : function() {
            return SHFB_Member.connectedStatus;
        }
    }
    return api;
}();

window.fbAsyncInit = function() {
    FB.init({
        appId  : SHFB.setting.appId,
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml  : true  // parse XFBML
    });

    FB.Event.subscribe('auth.login', SHFB_Member.fbLogin);
    FB.Event.subscribe('auth.logout', SHFB_Member.fbLogout);
    FB.Event.subscribe('auth.sessionChange', SHFB_Member.setFBStatus);
    FB.Event.subscribe('edge.create', function() {});
    FB.Event.subscribe('xfbml.render', function() {
        SHFB.changeLoginStatus(SHFB_Member.isLoggedIn('fb') && SHFB_Member.isConnected());
    });
    FB.getLoginStatus(function (response) {
        SHFB_Member.setFBStatus(response);
    }, true);
};

var renderFBPlugin = function() {
    var loginBtn = $fbJ('#shfacebook-login');
    if (loginBtn) {
        SHFB.login(loginBtn, {});
    };

    $fbJ('.shfacebook-like').each(function(index, el) {
        var url = $fbJ(el).html();
        url = ($fbJ.trim(url) == '' ? window.location.href : url);

        SHFB.like(el, {url : url});
    });

    var activityFeed = $fbJ('#shfacebook-activity');
    if (activityFeed) {
        var url = activityFeed.html();
        url = ($fbJ.trim(url) == '' ? window.location.host : url);
        SHFB.activity(activityFeed, {url : url});
    };
}

$fbJ(document).ready(function() {
    renderFBPlugin();

    var FB_rootNode = document.getElementById('fb-root');
    if (!FB_rootNode) {
        var bodyTag = document.getElementsByTagName('body')[0];
        FB_rootNode = document.createElement('div');
        FB_rootNode.setAttribute('id', 'fb-root');

        var e = document.createElement('script');
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        e.async = true;
        FB_rootNode.appendChild(e);

        bodyTag.insertBefore(FB_rootNode, bodyTag.firstChild);
    }
});

