// Prevent facebook_login from being called multiple times
// by FB.Connect.requireSession()
var succeeded = 0;
var sav_fb_action = 'unknown';
var log_join_click = false;
var fb_perms = 'email,user_location,user_birthday,publish_stream,offline_access';

function facebook_click_button(fb_action) {
    var pathname = get_path_name();

    sav_fb_action = fb_action;

    if (!log_join_click) {
        pageTracker._trackPageview('/track/facebook/'+sav_fb_action+pathname+'_click');
        log_join_click = true;
    }

    //facebook requires func, not string 
    var func = facebook_login;
    switch(sav_fb_action) {
        case 'link':
            func = facebook_link;
            pageTracker._trackEvent('facebook_connect', sav_fb_action, 'click');
            FB.login(func, {perms:fb_perms});
            break;
        case 'join':
            func = facebook_login;
            pageTracker._trackEvent('facebook_connect', sav_fb_action, 'click');
            FB.login(func, {perms:fb_perms});
            break;
        case 'remove':
            pageTracker._trackEvent('facebook_connect', sav_fb_action, 'click');
            var cf = confirm('Are you sure that you want unlink your Facebook account?');
            if (true == cf) {
                facebook_remove();
            }
            break;
        case 'login_from_settings_page':    
            pageTracker._trackEvent('facebook_connect', sav_fb_action, 'click');
            FB.login();
            break;
        default:
            func = facebook_login;
            pageTracker._trackEvent('facebook_connect', sav_fb_action, 'click');
            FB.login(func, {perms:'email,user_location,user_birthday'});
            break;
    }

    return false;    
}

function show_facebook_error(error) {
    if ($('facebookbox')) {
        $('facebookbox').update(error);
    } else {
        var ele =  $('facebook_'+sav_fb_action+'_message');
        if (ele) {
            ele.addClassName('facebook_login_message_error');
            ele.update(error);
            ele.show();
        } else {
            alert(error);
        }
    }
    //hack to check error string to reload window and resetup facebook js
    if (error == 'Session key invalid or no longer valid')  {
        pageTracker._trackEvent('facebook_connect', sav_fb_action, 'reset');
        FB.logout( function(response) { window.location} );
        facebook_settings();
    }
}

function facebook_link(response) {
    if (response.session) {
        if (response.perms) {
            /* user is logged in and granted some permissions. */
            /* perms is a comma separated list of granted permissions */
        } else {
            /* user is logged in, but did not grant any permissions */
            var pathname = get_path_name();
            pageTracker._trackEvent('facebook_connect', sav_fb_action, 'no perm');
            facebook_settings();
            return; 
        }
        
        var fbuid = response.session.uid;
        if (!fbuid) {
            pageTracker._trackEvent('facebook_connect', sav_fb_action, 'not_logged_in');
            facebook_settings();   
            return;
        }

        /*for goal info*/
        pageTracker._trackEvent('facebook_connect', sav_fb_action, 'connected');

        new Ajax.Request('/a_facebook_connect_link.php', {
            onSuccess: process_facebook_response,
            onCreate: function () { 
                process_facebook_create(sav_fb_action,'Linking fubar and facebook accounts');
                if ($('facebookbox')) {
                    $('facebookbox').update('<img title="Talking with Facebook..." src="/imgs/loading.gif" />');
                }
            } 
        });
    } else {
        /* user is not logged in */
        var pathname = get_path_name();
        pageTracker._trackEvent('facebook_connect', sav_fb_action, 'cancel');       
    }

}

function facebook_remove() {
    new Ajax.Request('/a_facebook_connect_remove.php', {
		onSuccess: function () { FB.logout(); window.location.reload(); }
    });
}

function facebook_login(response) {
    if (response.session) {
        if (response.perms) {
            /* user is logged in and granted some permissions. */
            /* perms is a comma separated list of granted permissions */
        } else {
            /* user is logged in, but did not grant any permissions */
            var pathname = get_path_name();
            pageTracker._trackEvent('facebook_connect', sav_fb_action, 'no perm');
            facebook_settings();
            return; 
        }
        
        var fbuid = response.session.uid;
        if (!fbuid) {
            pageTracker._trackEvent('facebook_connect', sav_fb_action, 'not_logged_in');
            facebook_settings();   
            return;
        }

        /*for goal info*/
	    pageTracker._trackEvent('facebook_connect', sav_fb_action, 'connected'); 

        var tmpform = $('join_home');
        var tmp = tmpform ? tmpform.serialize(true) : null;
        var tmpargs = $H(tmp);
        tmpargs.set('facebook_uid',fbuid);

	    new Ajax.Request('/a_facebook_connect_login.php', {
		    parameters: tmpargs,
		    onCreate: process_facebook_create(sav_fb_action,'Connecting to facebook'),
		    onComplete: process_facebook_response
	    });
    } else {
        /* user is not logged in */
        var pathname = get_path_name();
        pageTracker._trackEvent('facebook_connect', sav_fb_action, 'cancel');       
    }
}

function process_facebook_create(action,msg) {
    succeeded = 1;
    var ele =  $('facebook_'+action+'_message');
    if (ele) {
        ele.removeClassName('facebook_login_message_error');
        ele.update(msg+'<img src="/imgs/indicator.gif" border="0"/>');
        ele.show();
    }
}


function process_facebook_response(resp) {
    var pathname = get_path_name();

    if (resp.status != 200) {
        pageTracker._trackEvent('facebook_connect', sav_fb_action, 'bad_http_status');
        pageTracker._trackEvent('facebook_connect', sav_fb_action+'_bad_http_status', String(resp.status)+':'+resp.getAllHeaders()+' '+resp.responseText);
        show_facebook_error('Sorry, please try again (1).');
        return false;
    }

    var json = resp.responseJSON;
    if (!json) {
        pageTracker._trackEvent('facebook_connect', sav_fb_action, 'bad_json_response');
        pageTracker._trackEvent('facebook_connect', sav_fb_action+'_bad_json_response',resp.responseText);
        show_facebook_error('Sorry, please try again (2).');
        return false;
    }

    if (json.option && json.option.hide_action_button) {
        var ele = $('facebook_action_button');
        if (ele) {
            ele.hide();
        }
    }

    if(typeof json.error != 'undefined') {
        succeeded = 0;
        pageTracker._trackEvent('facebook_connect', sav_fb_action, 'failure');
        pageTracker._trackEvent('facebook_connect', sav_fb_action + '_failure_item',json.html);

        if (json.option && json.option.divid) {
            $(json.option.divid).update(json.html);
        } else {
            show_facebook_error(json.html ? json.html : 'Sorry, an error occured. Please try again (3).');
            //alert(resp.responseText);
        }

        return false;
    }

    /*for goal info*/
    pageTracker._trackPageview('/track/'+sav_fb_action+pathname+'_success');
    pageTracker._trackEvent('facebook_connect', sav_fb_action, 'success');

    var destination = window.login_form && login_form.dest;
    var new_user = json.option && json.option.new_user;

    if (json.option && json.option.new_user) {
        pageTracker._trackEvent('facebook_connect', sav_fb_action, 'new');
    }
    if (json.option && json.option.link) {
        pageTracker._trackEvent('facebook_connect', sav_fb_action, 'link');
    }
    if (json.option && json.option.anon_convert) {
        new_user = true;
        pageTracker._trackEvent('facebook_connect', sav_fb_action, 'convert');
    }

    if ($('facebookbox')) {
        $('facebookbox').update('<i>Thank you for connecting your fubar account to Facebook. You got 50k points, whee!</i>');
        return true;
    }

    if (json.option && json.option.reload) {
        setTimeout("window.location.reload()", 600 );
        return true;
    }

    /*need to delay to make sure analytics stuff is logged*/
    if (new_user) {
        setTimeout("window.location='/home.php?npw=1&step=3'", 800 );
        return true;
    } else if (destination) {
        setTimeout("window.location='"+destination.value+"'", 800 );
        return true;
    }

    setTimeout("window.location='/home.php'", 800 );
    return true;
}

function facebook_settings () {
    window.location.reload();
}

function fb_nag_lightbox () {
    var box = '/lb_autoShare.php';
    lightboxActive();
    open_lightbox_manual(box);
}

function setupFacebook () {
    facebook_click_button('link');
}

function fb_ask_for_perms () {
    FB.login (
        function(response) { 
            if (response.perms && (response.perms.indexOf('publish_stream') != -1 || response.perms.indexOf('offline_access') != -1)) {
                if ($('facebookbox')) {
                    $('facebookbox').update ('Hey thanks!');
	                new Ajax.Request('/a_facebook.php', {
                        parameters: { action: 'perms' }
	                });
                } else {
                    // window.location.reload();
                }
            }
        }, 
        { perms:'email,user_location,user_birthday,publish_stream,offline_access' }
    );
}

function fb_close_lightbox () {
    close_lightbox();
}

function fb_like_login(res){
    var params = {action:'like',unique:'567gh34f87'};
    new Ajax.Request('/a_fb_actions.php', {
            method: 'get',
            parameters: params,
            onSuccess: function(response){
               fb_like_login_response(response);
            }
    });
}

function fb_like_login_response(response){
    if (response.status == 200) {
        var data = response.responseJSON;
        if (data) {
            if (data.error){
            }
            else {
                var fb_like = $('fb_like_login');
                if(fb_like != null){
                    fb_like.hide();
                }
            }
        }
    }
}

