if ( !window.FBC ) { FBC = {}; }

FBC.isConnected 	= false;
FBC.xdReceiverPath     = '/xd_receiver.html';
//FBC.containerRef	 = null;

FBC.initFB = function() {
    try {
        FB_RequireFeatures(["Connect"], function() {
                FB.init(FBC.fbApiKey, FBC.xdReceiverPath, {"ifUserConnected":FBC.setConnected,"ifUserNotConnected":FBC.setUnconnected, 'permsToRequestOnConnect': "email" });
        });
        FB_RequireFeatures(["Comments"], function() {
           FB.CommentClient.add_onComment(
            function(comment){
                $.get(config.base_path+'/card/synccomment?cid='+($("#comment_cid").val())+(($("body.invites").length>0)?'&inv=true':'')+(($("body#someusercards").length>0)?'&usr=true':''), null, function(){
                    if(!FBC.loadedLoggedIn && FBC.getLoggedInUser())
                        reloadPage();
                });
                if($("#comment_count").length>0){
                    var cc = $("#comment_count").val();
                    cc = parseInt(cc);
                    if(!isNaN(cc)){
                        $("#comments_tab").html('Discuss this Card <b>('+(++cc)+')</b>');
                        $("#comment_count").val(cc);
                    }
                }
           });
        });

    } catch(e){}
}
FBC.logout = function(callback) {
    FB.Connect.logout(callback);
}
FBC.login = function(callback) {
    FBC.logout(function(){
        FB.Connect.requireSession(callback);
    });
}
FBC.setConnected = function() {
    FBC.session = FB.Facebook.apiClient.get_session();
    FBC.isConnected = true;
    FB.XFBML.Host.parseDomTree();
}
FBC.setUnconnected = function() {
    FBC.isConnected = false;
}
FBC.getLoggedInUser = function() {
    try { return FB.Connect.get_loggedInUser(); }
    catch(e) {  }
}
/*
FBC.connect = function() {
    FB.init(FBC.fbApiKey, FBC.xdReceiverPath,{"reloadIfSessionStateChanged":true});
}
FBC.toplogin = function() {
    FB.Connect.requireSession();
    location.href = "/user/fblink";
    return false;
}
FBC.getLoggedInUser = function() {
    return FB.Connect.get_loggedInUser();
}
*/


function fb_validateEmailOnly(e, ec, terms_sel){

    if($(terms_sel+":checked").length<=0){
        return 'You must agree with the Terms of Service and Privacy Policy to continue.';
    }

    // check for empty
    if(e=="" || ec==""){
        return 'Please enter an email address.';
    }

    // check email format
    if (!validateEmail(e)) {
        return 'Please enter a valid email.';
    }
    // check email match
    if((e!="" && ec!="") && e!=ec){
        return 'Emails don\'t match.';
    }

    return '';
}

function fb_publishCardToStream(u, p_fbid, p_attch){
    FB.ensureInit(function() {
        FB.Connect.streamPublish('', p_attch, null, p_fbid, null, function(post_id, exception){
            if(!FBC.loadedLoggedIn && FBC.getLoggedInUser())
                reloadPage();
        });
    });
    return false;
}

function fb_publishCardToStatus(msg){
    FB.ensureInit(function() {
        FB.Connect.streamPublish(msg, null, null, null, null, function(post_id, exception){
            if(!FBC.loadedLoggedIn && FBC.getLoggedInUser())
                reloadPage();
        });
        if($(".fb_friend_list .options li.ajax-loader").length>0)
            $(".fb_friend_list .options li.ajax-loader").hide();
    });
}









function bindFBDock(dock_id, fbpost_attch, is_overlay){
    var dock = $("#"+dock_id);
    if(is_overlay) dock = $("#cardthumb_overlay #"+dock_id);
    
    // toggle options
    dock.find(".options .close").click(function(e){
        e.preventDefault();
        if(dock.is(":visible")) dock.fadeOut();
        else {
            dock.fadeIn();
            if(!FBC.isConnected)
                loadFBScript(function(){ FBC.initFB(); });
        }
    });

    // fetch friend list
    dock.find(".friendpost .post_friend_link").click(function(e){
        e.preventDefault();
        dock.find(".friendpost").addClass("selected");
        dock.find(".friend_list_holder")
               .html('<div class="select_friend"><div class="ajax-loader"><img src="http://cdn.someecards.com/someecards/sec/images/ajax-loader-white.gif" /> Loading friend list...</div></div>');
        $.get("/user/fbgetfriends?sendcard=1&did="+dock_id+((!FBC.getLoggedInUser())?'&nc=1':''), {}, function(data){
            dock.find(".friend_list_holder").html(data);
            var fb_frlist = dock.find("ul.friend_list");

            // lazy loader
            var lazyloadTimeout;
            fb_frlist.scroll(function(e){
                clearTimeout(lazyloadTimeout);
                lazyloadTimeout = setTimeout(function(){
                    var threshold = 50, top = fb_frlist.scrollTop(), hei = fb_frlist.height()+threshold;
                    fb_frlist.find("li[class!=loaded]:visible").each(function(){
                        var img_top = top+$(this).position().top;
                        if(img_top >= (top-threshold) && img_top <= (top+hei) ){
                            var i = $(this).children("img.profile_thumb");
                            i.attr("src", i.attr("id")).removeAttr('id');
                            $(this).addClass("loaded");
                        }
                    });
                }, 50);
            });

            // friend click
            fb_frlist.children("li").click(function(e){
                e.preventDefault();
                var frid = $(this).attr("id").substr(12);
                fb_publishCardToStream(fbpost_attch.href, frid, fbpost_attch);
                //dock.find(".publishToStream").click();
            });

            dock.find(".fb_find_friends").keyup(function(e){
                var q = $.trim($(this).val().toLowerCase());
                if(q != '') dock.find(".clear_fb_search").show();
                else dock.find(".clear_fb_search").hide();
                var llc = 0;
                fb_frlist.children("li").each(function(i){
                    var n = $(this).children("label").html().toLowerCase();
                    if(n.indexOf(q)!=-1){
                        $(this).show();
                        if(!$(this).hasClass("loaded") && llc<17){
                            var i = $(this).children("img.profile_thumb");
                            i.attr("src", i.attr("id")).removeAttr('id');
                            $(this).addClass("loaded");
                            llc++;
                        }
                    }
                    else $(this).hide();
                });

            });
            dock.find(".clear_fb_search").click(function(e){
                e.preventDefault();
                dock.find(".fb_find_friends").val('').trigger("keyup");
            });

        });
    });

    // publish to stream
    dock.find(".publishToStream").click(function(e){
        e.preventDefault();
        fb_publishCardToStream(fbpost_attch.href, null, fbpost_attch);

    });

    // publish status
    dock.find(".publishToStatus").click(function(e){
        e.preventDefault();
        dock.find(".options li.ajax-loader").show();
        fb_publishCardToStatus(fbpost_attch.name+': '+fbpost_attch.short_url);
    });


}


function toggleFBDock(dockid){
    var dock = $(dockid);
    if(dock.is(":visible")) dock.fadeOut();
    else {
        dock.fadeIn();
        if(!FBC.isConnected) loadFBScript(function(){ FBC.initFB(); });
    }

}

