// Requires jquery
// Requires the facebook api

function fbutils_callPublish(msg, attachment, action_link, callback)
{
    FB.ensureInit(function (){
        if(typeof(callback) != 'function')
            callback = null;
        FB.Connect.streamPublish(msg, attachment, action_link, null, null, callback);
    });
}


function fbutils_setLoginConditionForSection(selector, bLoggedIn)
{
    var active_class = 'fb-active-panel';
    var inactive_class = 'fb-inactive-panel';

    var makeActive = bLoggedIn? (selector + ' .facebook-main-panel') : (selector + ' .facebook-connect-button');
    var makeInactive = bLoggedIn? (selector + ' .facebook-connect-button') : (selector + ' .facebook-main-panel');

    $j(makeActive).removeClass(inactive_class).addClass(active_class);
    $j(makeInactive).removeClass(active_class).addClass(inactive_class);
}


function fbutils_attachCommentFormEvents(selector, data)
{
    var base_selector = selector + ' .facebook-comment-form ';

    var btn = base_selector + 'button';
    var txt = base_selector + 'textarea';

    function actionBuilder(txt, data, selector)
    {
        return function()
        {
            var media = data.imageurl? [{type: 'image', src: data.imageurl, href: data.href}] : [];

            $j(txt).each(function(index, txt){
                if(index==0)
                {
                    function callbackBuilder(txt, data, selector)
                    {
                        return function(x,y,z)
                        {
                            if(x != null && x != 'null') // looks like fb is returning a string
                            {

                                $j.ajax({
                                    type: "GET",
                                    url: "/_scripts/ajax/fbComment.php",
                                    data: {facebook_post_id: x, page_id: data.pageid, text: txt.value, fb_id: FB.Connect.get_loggedInUser(), usa: window.micro_usa? 1 : 0},
                                    async: false,
                                    success: function() {setTimeout(function() {fbutils_tryReplaceCommentFormWithLink(selector, data)}, 600);}
                                });
                            }
                        }
                    }

                    var cb = callbackBuilder(txt, data, selector);

                    fbutils_callPublish(txt.value, {name:data.title, href: data.href, description:data.description, media: media}, {}, cb);
                }
            });
        }
    }

    $j(btn).click(actionBuilder(txt, data, selector));
}


function fbutils_attachPollFormEvents(selector, data)
{
    var sel_form = selector;
    var sel_radio = selector + ' ul li input:radio';
    var sel_chk = selector + '_fbshare';

    if($j(sel_form).length && $j(sel_radio).length && $j(sel_chk).length) // all required poll elements available
    {
        function formActionBuilder(frm, rad, chk, data)
        {
            return function()
            {
                if($j(chk + ':checked').length && $j(frm).data('allowfbsubmit') !== true)
                {
                    if($j(rad + ':checked').length)
                    {
                        var pollAnswer = $j('label', $j(rad + ':checked').parent()).text();

                        FB.Connect.requireSession(
                            function(){
                                var uid = FB.Connect.get_loggedInUser();
                                FB.Facebook.apiClient.users_getInfo(
                                    [uid],
                                    ['first_name', 'last_name'],
                                    function(users) {
                                        if(users && users[0])
                                        {
                                            var user = users[0];
                                            var name = '' + user.first_name + ((user.last_name) && (user.first_name)? ' ' : '') + user.last_name;

                                            function fbCallback (x,y,z)
                                            {
                                                if(x != null && x != 'null')
                                                {
                                                    $j(frm).data('allowfbsubmit', true);
                                                    $j(frm).submit();
                                                }
                                            };

                                            fbutils_callPublish('', {name: data.title.replace('{1}', pollAnswer).replace('{0}', name), href: data.href, description:data.description, media: []}, {}, fbCallback);
                                        }
                                    }
                                );
                            },
                            function(){},
                            true
                        );

                        return false;
                    }
                }

                return true;
            }
        }

        $j(sel_form).submit(formActionBuilder(sel_form, sel_radio, sel_chk, data));
    }
}


function fbutils_tryReplaceCommentFormWithLink(selector, data)
{

    function readCookie(name)
    {
    	var nameEQ = name + "=";
    	var ca = document.cookie.split(';');
    	for(var i=0;i < ca.length;i++) {
    		var c = ca[i];
    		while (c.charAt(0)==' ') c = c.substring(1,c.length);
    		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    	}
    	return null;
    }

    var cookieval = readCookie('fbcomment_' + data.pageid);
    if(cookieval)
    {
        var sLink = getPostLinkFromId(cookieval);
        $j(selector + ' .facebook-comment-form').empty().addClass('commented').append('<div class="form-area"><a href="' + sLink + '" id="see-your-post">see your post</a><p>You have commented on this page on Facebook.</p></div>');
        return true;
    }

    return false;
}


function getPostLinkFromId(sId)
{
    // sId = userid_postid ... i think
    // sId = 100000731014204_284783125946
    if(sId)
    {
        var aParts = sId.split('_');
        var iUserId = aParts[0];
        var iPostId = aParts[1];

        return 'http://www.facebook.com/#/profile.php?v=feed&story_fbid=' + iPostId + '&id=' + iUserId;
    }
}
