//------------Facebook functions------------
var templateBundle = 152471689556

//產生Facebook connect圖示＋字
function getFbConnBtn(txt, id, aClass) {
    var shareTxt = '<span style="display:inline-block;padding:3px 6px 1px;margin-left:22px;font-size:12px;line-height:14px;background:#5F78AB url(/images/connect_sprite.png);color:#fff;">'+txt+'</span>';
    return '<span style="display:inline-block;cursor:pointer;background:#29447E url(/images/connect_sprite.png) no-repeat scroll 0 0;font-weight:bold;border:1px solid #1A356E;background-position:left -190px;height:20px;overflow:hidden">'+shareTxt+'</span>';
}

//add comment to a post
function addCommentToPost(post_id, comment, cbFn) {
    FB.ensureInit(function() {
        try {
            FB.Facebook.apiClient.callMethod('Stream.addComment', { post_id:post_id, comment:comment}, function(json){
                if (cbFn) {
                    cbFn(json);
                }
            });
        } catch(err){}
    });
}

//get fb links info
function getFbLinksInfo(urls, cbFn){
    var fql = 'SELECT url, share_count, like_count, comment_count FROM link_stat WHERE url IN ('+ urls + ')';
    FB.Facebook.apiClient.fql_query(fql, function(result){
        if (cbFn) {
            cbFn(result)
        }
    }); 
}

//get comments of a post from FB
function FB_getComments(post_id, cbFn){
    FB.Facebook.apiClient.callMethod('Stream.getComments', { post_id:post_id}, function(comment_list){
        if (cbFn) {
            cbFn(comment_list);
        }
    });
}

//get users' info from facebook
function FB_users_getInfo(uidArr, fieldsStr, cbFn){
    FB.Facebook.apiClient.users_getInfo(uidArr, fieldsStr, function(json){
        if (cbFn) {
            cbFn(json);
        }
    });
}

//facebook是否已經checkin
function chkFnLogin(cbFn) {
    FB.ensureInit(function() {
        var api = FB.Facebook.apiClient;
        try {
            FB.Connect.ifUserConnected(function() {cbFn(true);}, function() {cbFn(false);});
        } catch(err) { 
        }
        
    });
}

//facebook是否已經checkin，未login則要求login
function chkAndDoFbLogin(cbFn) {
    FB.ensureInit(function() {
        try {
            FB.Connect.requireSession(function(result){
                if (cbFn) { cbFn(result); }
            })
        } catch(err){ }
    });
}

//check App permission,並要求使用者的允許
function chkAppPermission(cbFn) {
    FB.ensureInit(function() {
        FB.Connect.requireSession(function(){
            try {
                FB.Facebook.apiClient.users_hasAppPermission('read_stream,publish_stream', function(result){
                    FB.Connect.showPermissionDialog('read_stream,publish_stream', function(result){
                        if(cbFn) { cbFn(result); } //通知已經完成
                    });
                });
            } catch(err){
                if(cbFn) { cbFn(false); } //通知已經完成
            }
        });
    })
}

//讀取Login User的關於Yus Reader討論串
function readAppFeed(cbFn) {
    FB.ensureInit(function() {
        var posts = null;
        try {
            FB.Facebook.apiClient.stream_get(null, null, null, null, "app_"+fb_app_id, function(json){
                if (json && cbFn) {
                        cbFn(json); //json.posts[i].message....
                }
                
            });
        } catch(err){}
        
    });
}

//發送notification給多個FB User
function sendFbNotificationToFri(txt, fb_uid, cbFn) {
    var fb_uidArr = ('object' == typeof(fb_uid)) ? fb_uid : new Array(fb_uid);
    FB.ensureInit(function() {
        try {
            var api = FB.Facebook.apiClient;
            api.notifications_send(fb_uidArr, txt, function(d, ex){
                if (cbFn) {
                    cbFn(txt, fb_uid);
                }
            });
        } catch(err) {}
    });
}

//留言在一個指定朋友的wall上, f_uid=null就放在自己的牆上
function sendToFriendWall(f_uid, msg, title, titleLink, desc, img, imgLink, callback) {
    //用FB Conn來post
    FB.ensureInit(function() {
        try {
            var prompt_msg = lang.SHARE_WITH_FRI;
            var defaultUrl = 'http://apps.facebook.com/yusreader/';
            //var defaultUrl = "http://"+location.host;
            title = (title) ? title : lang.YUS;
            titleLink = (titleLink) ? titleLink : defaultUrl;
            desc = (desc) ? desc : lang.SHARE_DESC;
            img = (img) ? img : "http://"+location.host+'/images/logo2.png';
            imgLink = (imgLink) ? imgLink : defaultUrl;
            var attachment = {
                'name':title,
                'href':titleLink,
                'description':desc,
                'media': [{'type': 'image', 'src': img, 'href': imgLink}]
            }
            var action_link = [{ "text":lang.YUS, "href":defaultUrl}];
            
            FB.Connect.streamPublish(msg, attachment, action_link, f_uid, prompt_msg, function(post_id, exception, data){
                if (post_id && callback) {
                    callback(data.user_message);
                }
            });
        } catch(err){}
    });
}

//取得某人的FB Friends資料
function getFbFriendsInfo(fb_uid, appUserOnly, num, cbFn) {
    FB.ensureInit(function() {
        try {
            var api = FB.Facebook.apiClient;
            var conditions = (appUserOnly) ? 'and is_app_user' : 'and is_app_user=0';
            var conn = FB.Connect;
            var limit = (num) ? ' limit '+num : '';
            var fql = 'select uid, name, pic_square from user where uid in (select uid2 from friend where uid1=' + fb_uid + limit + ') '+conditions;
            api.fql_query(fql, cbFn);
        } catch(err) {
            //alert('ERR:'+err)
        }
    });
}

//取得某一個FB User資料
function getUserInfo(fb_uid, cbFn) {
    FB.ensureInit(function() {
        try {
            var fql = 'select uid, name, pic_square, profile_url, sex, hometown_location, current_location, about_me, status, pic, online_presence, pic_small_with_logo from user where uid in (' + fb_uid + ')';
            FB.Facebook.apiClient.fql_query(fql, cbFn);
        } catch(err) {}
    })
}

//檢視FB朋友清單, 並挑選一或多個朋友， ALL/IS_APP/NOT_APP
function pickFbFriends(title, onlyPickOne, friendType, cbFn) {
    FB.ensureInit(function() {
        var div = document.getElementById('panel');
        if (!div) {
            div = document.createElement('div');
            $(div).attr('id', 'panel');
            document.body.appendChild(div);
        }
        var api = FB.Facebook.apiClient;
        var conn = FB.Connect;
        var uid = api.get_session().uid;
        var fbFriendPicker = new FbFriendPicker();
        var cancel_pick = function() { $("#panel").dialog('destroy'); }
        var send_pick = function() {
            var friends = fbFriendPicker.getPickedFriends();
            $("#panel").dialog('destroy');
            if (cbFn) { cbFn(friends); }
        }
        var pickOne = function(fb_uid) {
            $("#panel").dialog('destroy');
            if (cbFn) { cbFn(fb_uid); }
        }
        
        //預先清除舊的panel (防錯)
        $("#panel").dialog('destroy');
        
        //要載入的Panel
        $("#panel").html("<div id='friendDiv'><img src='./images/ee_wloading.gif' />loading...</div>");

        //只選一個嘛?
        if (onlyPickOne) {
            fbFriendPicker.onPickCbFn = pickOne;
            $("#panel").dialog({width:'530px',  title:title,  buttons:{'Cancel':cancel_pick}});
        } else {
            fbFriendPicker.onPickCbFn = null;
            $("#panel").dialog({width:'530px',  title:title,  buttons:{"OK":send_pick, 'Cancel':cancel_pick}});
        }

        //顯示哪些名單?
        if ('ALL' == friendType) {
            fbFriendPicker.loadAllFriends(uid, 'friendDiv');
        } else if ('IS_APP' == friendType) {
            fbFriendPicker.loadAppFriends(uid, 'friendDiv');
        } else if ('NOT_APP' == friendType) {
            fbFriendPicker.loadNonAppFriends(uid, 'friendDiv');
        } 
    });
}

//重複偵測登入狀態，改變時回報true or false
function monitorFbLoginStatus(cbFn) {
    FB.ensureInit(function() {
        var api = FB.Facebook.apiClient;
        try {
            FB.Connect.ifUserConnected(function() {cbFn(true);}, function() {cbFn(false);});
            FB.Connect.pollLoginStatus(1000, 20, function() {
                FB.Connect.ifUserConnected(function() {cbFn(true);}, function() {cbFn(false);});
            })
        } catch(err) {}
    });
}
