// morebirthdays.com
FB_APP_ID = '118622151528835';
FB_API_KEY = '92db7f9c8d95ee07628d9709d2ec52e5';

// Staging
/*FB_APP_ID = '157729234251529';
FB_API_KEY = '7294c0287666df8958d2e7fb4b9c0b12';*/

var permissions = null;
var lastFBCall = 0;
var fbResponse = null;
var fbSession = null;
var ignoreLoginEvent = false;
var lastLogin = 0;
var dropDownReplaced = false;
var friendsListContinue = null;
var friendsListClose = null;
var multiFriendsListContinue = null;
var multiFriendsListClose = null;
var getPhotosCallback = null;
var friendsListLogin = false;
var actionMovie = '';
var hasInit = false;

setTimeout(function(){getLoginStatus(replaceDropdown);}, 1000);

window.fbAsyncInit = function() {

    FB.init({
        appId: FB_APP_ID,
        status: true,
        cookie: true,
        xfbml: true
    });

    getLoginStatus(replaceDropdown);

    FB.Event.subscribe('auth.login', function(response) {
        fbResponse = response;
        fbSession = response.authResponse;
        if (fbSession) {
            updateUserDetails(fbSession.userID, true);
            getLoginStatus(replaceDropdown);
        }
    });

}


var fbLogin = function(perms, cbSuccess, cbFail) {

    if (!perms) perms = "user_birthday,friends_birthday,publish_stream,offline_access";
    FB.login(function(response) {
        lastLogin = new Date().getTime();
        if (response.authResponse) {
            if (typeof cbSuccess == 'function') {
                cbSuccess(response.session);
            }
        } else {
            if (typeof cbFail == 'function') {
                cbFail(response);
            }
        }
    },
    {
        scope: perms
    });
}

var requestedPermsTemp = '';
var permissionsCallback = null;
var requreExtendedPermissions = function(perms, cbSuccess) {
    requestedPermsTemp = perms;
    if(typeof cbSuccess == 'function') {
        permissionsCallback = cbSuccess;
    }

    if(!fbSession) {
        fbLogin(perms, permissionsCallback);
        return false;
    }
    
    FB.api('/'+fbSession.userID+'/permissions', function (response) {
		var missingPerms = [];
		var perms = requestedPermsTemp.split(',');
		for(var i=0; i<perms.length; i++){
			// !test this
		    if(response.data[0][perms[i]] != "1") {
		        missingPerms.push(perms[i]);
		    }
		}
		
		if(missingPerms.length) {
            fbLogin(perms.join(','), permissionsCallback);
        } else {
            permissionsCallback();
        }
	} );


   /* var query = FB.Data.query("select "+perms+" from permissions where uid = {0}", fbSession.uid);
    query.wait(function(rows){
        var missingPerms = [];
        var perms = requestedPermsTemp.split(',');
        for(var i=0; i<perms.length; i++){
            if(rows[0][perms[i]] != "1") {
                missingPerms.push(perms[i]);
            }
        }
        if(missingPerms.length) {
            fbLogin(perms.join(','), permissionsCallback);
        } else {
            permissionsCallback();
        }
    });*/
}

var photosLogin = false;
var getPhotosCallback = null;
var fbPhotos = null;

var getPhotos = function(fid, cbComplete) {
    var queries = {};
    if(typeof cbComplete == 'function') {
        getPhotosCallback = cbComplete;
    }
    if(fid) {
        queries = {
            "q_albums": "select aid from album where owner = me()",
            "q_photos": "select pid, link, src, src_big from photo where aid in (select aid from #q_albums)",
            "q_tagged": "select pid from photo_tag where subject = "+fid+" and pid in (select pid from #q_photos)"
        };
    } else {
        queries = {
            "q_albums": "select aid from album where owner = me()",
            "q_photos": "select pid, link, src, src_big from photo where aid in (select aid from #q_albums)"
        };
    }
    FB.api({
        method: 'fql.multiquery',
        queries: queries     
    }, function(responseRaw){
        var photos = {};
        var response = {};
        
        for(var i=0; i < responseRaw.length; i++) {
            response[responseRaw[i].name] = responseRaw[i].fql_result_set;
        }

        for(var i=0;i < response["q_photos"].length; i++) {
            photos[response["q_photos"][i].pid] = {src: response["q_photos"][i].src, src_big: response["q_photos"][i].src_big};
        }
        if(response["q_tagged"]) {
            for(var i=0; i<response['q_tagged'].length; i++) {
                photos[response["q_tagged"][i].pid].tagged = true;
            }
        }
        fbPhotos = photos;

        if(typeof getPhotosCallback == 'function') {
            getPhotosCallback();
        }
    });
    
}

var replaceDropdown = function(isCallback) {
    var topFriends = readCookie('topFbFriends');
    if (!topFriends && !isCallback) {
        topFriends = '';
        var query = FB.Data.query('SELECT pic_square, uid, first_name, last_name, birthday, birthday_date FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) order by birthday_date');
        query.wait(function(rows) {
            var tempFriends = new Array();
            for (var i = 0; i < rows.length; i++) {
                var row = rows[i];
                var now = new Date();
                if (row.birthday) {
                    var bday = new Date(row.birthday.split(',')[0] + ', ' + now.getFullYear());
                    if (bday.getTime() > now.getTime() && tempFriends.length < 6) {
                        tempFriends.push(row);
                    }
                }
            }

            var tfData = new Array();
            for (var i = 0; i < tempFriends.length; i++) {
                var details = [tempFriends[i].first_name, tempFriends[i].last_name, tempFriends[i].birthday.split(',')[0], tempFriends[i].uid];
                tfData.push(details.join('%%'));
            }

            topFriends = tfData.join('@@');
            createCookie('topFbFriends', topFriends, 1);
            replaceDropdown(true);
            return false;
        });
    }

    $topFacebook = $('.topDropdown .facebook').empty().addClass('connected');
    var user = getUserDetails();
    $topFacebook.append('<span>Facebook connected as</span><div class="connectedAs">' + user.first_name + ' ' + user.last_name + '</div><span>Select an upcoming birthday and start creating a birthday wish.</span><ul class="topFriends"></ul>');

    topFriends = topFriends.split('@@');

    for (var i = 0; i < topFriends.length; i++) {
        var row = topFriends[i].split('%%');
        var $friend = $('<li rel="' + row.uid + '"></li>');
        $friend.append('<img src="http://graph.facebook.com/' + row[3] + '/picture" width="50" height="50" />');
        $friend.append('<div class="name">' + row[0] + ' <br />' + row[1] + '</div>');
        if (row[2]) {
            var bdayString = row[2].split(',')[0];
            var month = bdayString.substr(0, 3);
            var day = bdayString.split(' ')[1];
            $friend.append('<div class="bday">' + month + ' ' + day + '</div>');
        }
        $('.topDropdown .facebook .topFriends').append($friend);

    }

    $('.topDropdown .facebook.connected li').click(function() {
        document.location = '/create';
    });

}

var getLoginStatus = function(cbComplete) {
    if (!cbComplete) cbComplete = null;
    FB.getLoginStatus(function(response) {
        fbResponse = response;
        fbSession = response.authResponse;
        
        FB.api('/'+fbSession.userID+'/permissions', function (response) {
			permissions = response.data;
		} );
        
        if (fbSession) {
            updateUserDetails(fbSession.userID);
            if (typeof cbComplete == 'function') {
                cbComplete();
            }
        }

    },
    true);
}

var fbBlinder = function() {
    $blinder = $('<div class="fbBlinder"></div>');
    $blinder.css({
        height: $(document).height(),
        width: '100%',
        position: 'absolute',
        top: 0,
        left: 0
    });
    $('body').append($blinder);
}

var clearFbBlinder = function() {
    $('.fbBlinder').remove();
}

var hasExtendedPermissions = function(perms) {
    if (permissions == null) return false;
    
   /* perms = perms.split(',');
    for (var i = 0; i < perms.length; i++) {
    	if(permissions[perms[i]] != 1) {
        if (jQuery.inArray(perms[i], permissions) == -1) {
            return false;
        }
        
        var missingPerms = [];
		var perms = requestedPermsTemp.split(',');
		for(var i=0; i<perms.length; i++){
		    if(response.data[perms[i]] != "1") {
		        missingPerms.push(perms[i]);
		    }
		}
		
		if(missingPerms.length) {
            fbLogin(perms.join(','), permissionsCallback);
        } else {
            permissionsCallback();
        }
    }*/
	var missingPerms = [];
	var perms = perms.split(',');
	
	for(var i=0; i<perms.length; i++){
		if(permissions[0][perms[i]] != "1") {
		    missingPerms.push(perms[i]);
		}
	}
	
	if(missingPerms.length) {
		return false;
	} else {
		return true;
	}
}

var updateUserDetails = function(uid, force) {
  if(!force) force = false;
  
    var details = readCookie('fbDetails');
    if (!details || force == true) {
        if (fbSession) {
            var query = FB.Data.query('SELECT pic_square, uid, first_name, last_name, birthday FROM user WHERE uid = me()');
            query.wait(function(rows) {
                details = [rows[0].first_name, rows[0].last_name, rows[0].birthday.split(',')[0], rows[0].uid];
                createCookie('fbDetails', details.join('%%'), 1);
                createCookie('birthday', rows[0].birthday.toLowerCase().split(',')[0].replace(' ', '+'));
                replaceFbData();
            });
        }
    } else {
        replaceFbData();
    }
}


var replaceFbData = function() {

    user = getUserDetails();
    $('.fbReplaceName').each(function() {
        if ($(this).is('input')) {
            $(this).val(user.first_name).removeClass('default');
        } else {
            $(this).text(user.first_name);
        }
    });

    $('.fbReplaceBirthday').each(function() {
        if ($(this).is('input')) {
            $(this).val(user.birthday.toLowerCase().split(',')[0]).removeClass('default');
        } else {
            $(this).text(user.birthday.toLowerCase().split(',')[0]);
        }
    });

}

var getUserDetails = function() {
    var details = readCookie('fbDetails');
    if (!details) return false;
    details = details.split('%%');
    var ret = {
        first_name: details[0],
        last_name: details[1],
        birthday: details[2],
        uid: details[3]
    }
    return ret;
}

var mutualFriends = false;
var cbMutualFriends = null;
var getMutualFriends = function(cbComplete) {
    if(!currentState.recipient || currentState.recipient.type != 'facebook') {
        mutualFriends = null;
        cbComplete();
    }
    if(typeof cbComplete === 'function') {
        cbMutualFriends = cbComplete;
    }
    FB.api(
        {
            method: 'friends.getMutualFriends',
            target_uid: currentState.recipient.fb_id
        },
        function(response) {
            mutualFriends = response;
            if(typeof cbMutualFriends == 'function') {
                cbMutualFriends();
            }
        }
    );
}

var photoSelectorContinue = null;
var photoSelectorClose = null;

var fbShowPhotoSelector = function(cbContinue, cbClose) {
    if (typeof cbContinue == "function") {
        photoSelectorContinue = cbContinue;
    }
    if (typeof cbClose == "function") {
        photoSelectorClose = cbClose;
    }

    if ($('.fbOverlayPhotos').length === 0) {
        if($('.fbLoader').length === 0) {
            $('body').append('<div class="fbLoader"><div class="top"></div><div class="content"><div class="loading">Loading... <img src="' + BASE_URL + 'images/candleGallery/loading.gif"/></div></div><div class="bottom"></div></div>');
        }
        var top = ($(window).height() / 2) - ($('.fbLoader').height() / 2);
        var left = ($(window).width() / 2) - ($('.fbLoader').width() / 2);
        $('.fbLoader').css({
            top: top,
            left: left
        }).show();

        if(fbPhotos === null) {
            if(currentState.recipient.type == 'facebook') {
                getPhotos(currentState.recipient.fb_id, fbShowPhotoSelector); 
            } else {
                getPhotos(null, fbShowPhotoSelector); 
            }
            return false;
        } else {
            if ($('.fbOverlayPhotos').length === 0) {
                $('.fbLoader').remove();
                $('body').append('<div class="fbOverlayPhotos" style="display: none"><div class="top"></div><div class="content"><div class="close"></div>\
                         <span class="sort"></span>\
                         <span class="title">Add a photo from facebook</span>\
                         <div class="photos"><div style="clear: both"></div></div><div class="footer"><span class="continue">continue &gt;</span></div>\
                         </div><div class="bottom"></div></div>');
                
                if(currentState.recipient.type == 'facebook') {
                    $('.fbOverlayPhotos .sort').append('<span class="filterAll">All my photos</span> / <span class="filterTagged">My photos of '+currentState.recipient.name+'</span>');
                }

                $('.fbOverlayPhotos .photos').prepend('<ul></ul>');
            
                for (i in fbPhotos) {
                    var row = fbPhotos[i];
                    var $photo = $('<li rel="' + i + '"></li>');
                    if(row.tagged) {
                        $photo.attr('tagged','true');
                    }
                    $photo.append('<img src="' + row.src + '" rel="'+row.src_big+'"/><div class="check"></div>');
                    $('.fbOverlayPhotos .photos ul').append($photo);
                }

                $('.fbOverlayPhotos .close').click(function() {
                    if (typeof photoSelectorClose == "function") {
                        photoSelectorClose();
                    }
                    $('.fbOverlayPhotos').hide();
                    clearFbBlinder();
                });
                
                $('.fbOverlayPhotos .sort .filterAll').click(function(){
                    $('.fbOverlayPhotos .photos li').show();
                    $('.fbOverlayPhotos .photos ul').jScrollPane({
                        dragMinHeight: 30,
                        dragMaxHeight: 30
                    });
                    $(this).addClass('active').siblings().removeClass('active');
                });
        
                $('.fbOverlayPhotos .sort .filterTagged').click(function(){
                    $('.fbOverlayPhotos .photos li').hide();
                    $('.fbOverlayPhotos .photos li[tagged]').show();
                    $('.fbOverlayPhotos .photos ul').jScrollPane({
                        dragMinHeight: 30,
                        dragMaxHeight: 30
                    });
                    $(this).addClass('active').siblings().removeClass('active');
                });


                $('.fbOverlayPhotos .continue').hide().click(function() {
                    $('.fbOverlayPhotos').hide();
                    var src_big = $('.fbOverlayPhotos li.active img').attr('rel');
                    if(typeof photoSelectorContinue == 'function'){
                        photoSelectorContinue(src_big);
                    }
                    clearFbBlinder();
                });

                $(".fbOverlayPhotos .photos li").click(function() {
                    $(this).toggleClass('active');
                    $('.fbOverlayPhotos .continue').click();
                });

                $(".fbOverlayPhotos .friends li").removeClass('active');

                var top = ($(window).height() / 2) - ($('.fbOverlayPhotos').height() / 2);
                var left = ($(window).width() / 2) - ($('.fbOverlayPhotos').width() / 2);
                $('.fbOverlayPhotos').css({
                    top: top,
                    left: left
                }).show();
                $('.fbOverlayPhotos .photos ul').jScrollPane({
                    dragMinHeight: 30,
                    dragMaxHeight: 30
                });
                fbBlinder();
                $('.filterAll').click();
            }

        }

    } else {
        $(".fbOverlayPhotos .photos li").removeClass('active');

        var top = ($(window).height() / 2) - ($('.fbOverlayPhotos').height() / 2);
        var left = ($(window).width() / 2) - ($('.fbOverlayPhotos').width() / 2);
        $('.fbOverlayPhotos').css({
            top: top,
            left: left
        }).show();
        fbBlinder();
        $('.fbOverlayPhotos .photos ul').jScrollPane({
            dragMinHeight: 30,
            dragMaxHeight: 30
        });
    }


}

var fbShowMultiFriendsList = function(cbContinue, cbClose) {
    if (typeof cbContinue == "function") {
        multiFriendsListContinue = cbContinue;
    }
    if (typeof cbClose == "function") {
        multiFriendsListClose = cbClose;
    }


    if (!hasExtendedPermissions('publish_stream,offline_access')) {
        if (!friendsListLogin) {
            fbLogin('user_birthday,friends_birthday,publish_stream,offline_access', fbShowMultiFriendsList);
            friendsListLogin = true;
        } else {
            getLoginStatus();
            setTimeout(fbShowMultiFriendsList, 1000);
        }
        return false;
    }
    
    if(mutualFriends === false) {
        getMutualFriends(fbShowMultiFriendsList);
        return false;
    }

    if ($('.fbOverlayMulti').length === 0) {
        if($('.fbLoader').length === 0) {
            $('body').append('<div class="fbLoader"><div class="top"></div><div class="content"><div class="loading">Loading... <img src="' + BASE_URL + 'images/candleGallery/loading.gif"/></div></div><div class="bottom"></div></div>');
        }
        var top = ($(window).height() / 2) - ($('.fbLoader').height() / 2);
        var left = ($(window).width() / 2) - ($('.fbLoader').width() / 2);
        $('.fbLoader').css({
            top: top,
            left: left
        }).show();

        var query = FB.Data.query('SELECT pic_square, uid, first_name, last_name, birthday, birthday_date FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) order by birthday_date');
        query.wait(function(rows) {
            if ($('.fbOverlayMulti').length === 0) {
                $('.fbLoader').remove();
                var filters = '';
                if(mutualFriends.length && mutualFriends.length > 0) {
                    filters = '<span class="sort"><span class="filterAll">All Friends</span> / <span class="filterMutual">Mutual Friends</span></span>';
                }
                $('body').append('<div class="fbOverlayMulti" style="display: none"><div class="top"></div><div class="content"><div class="close"></div>\
                         '+filters+' \
                         <span class="title">Select friends</span>\
                         <div class="friends"><div style="clear: both"></div></div><div class="footer"><span class="continue">continue &gt;</span></div>\
                         </div><div class="bottom"></div></div>');

                $('.fbOverlayMulti .friends').prepend('<ul></ul>');

                for (var i = 0; i < rows.length; i++) {
                    var row = rows[i];
                    var mutual = ($.inArray(row.uid, mutualFriends) > -1) ? 'true' : 'false';
                    var $friend = $('<li rel="' + row.uid + '" mutual="'+mutual+'" name="' + row.last_name + ' ' + row.first_name + '"></li>');
                    $friend.append('<img src="' + row.pic_square + '" width="50" height="50" /><div class="check"></div>');
                    $friend.append('<div class="name">' + row.first_name + ' <br />' + row.last_name + '</div>');
                    $('.fbOverlayMulti .friends ul').append($friend);
                }

                $('.fbOverlayMulti .close').click(function() {
                    if (typeof multiFriendsListClose == "function") {
                        multiFriendsListClose();
                    }
                    clearFbBlinder();
                    $('.fbOverlayMulti').hide();
                });
                $('.fbOverlayMulti .continue').click(function() {
                    clearFbBlinder();
                    if (typeof multiFriendsListContinue == "function") {
                        var selection = new Array();
                        $('.fbOverlayMulti .friends li.active').each(function() {
                            selection.push({
                                uid: $(this).attr('rel'),
                                name: $('.name', $(this)).text(),
                                birthday: $('.bday', $(this)).text(),
                                birthdayLong: $(this).attr('bdaylong')
                            });
                        });
                        multiFriendsListContinue(selection);
                    }

                    $('.fbOverlayMulti').hide();
                });

                $(".fbOverlayMulti .friends li").tsort({
                    order: "asc",
                    attr: "name"
                });

                $('.fbOverlayMulti .sort .filterMutual').click(function() {
                    $('.fbOverlayMulti .friends li[mutual=false]').hide();  
                    $(this).addClass('active').siblings().removeClass('active');
                    $('.fbOverlayMulti .friends ul').jScrollPane({
                        dragMinHeight: 30,
                        dragMaxHeight: 30
                    });
                });

                $('.fbOverlayMulti .sort .filterAll').click(function() {
                    $('.fbOverlayMulti .friends li').show();
                    $(this).addClass('active').siblings().removeClass('active');
                    $('.fbOverlayMulti .friends ul').jScrollPane({
                        dragMinHeight: 30,
                        dragMaxHeight: 30
                    });
                });

                $(".fbOverlayMulti .friends li").click(function() {
                    $(this).toggleClass('active');
                });

                $(".fbOverlayMulti .friends li").removeClass('active');

                var top = ($(window).height() / 2) - ($('.fbOverlayMulti').height() / 2);
                var left = ($(window).width() / 2) - ($('.fbOverlayMulti').width() / 2);
                $('.fbOverlayMulti').css({
                    top: top,
                    left: left
                }).show();
                fbBlinder();
                $('.fbOverlayMulti .friends ul').jScrollPane({
                    dragMinHeight: 30,
                    dragMaxHeight: 30
                });
                if(mutualFriends.length && mutualFriends.length > 1) {
                    $('.filterMutual').click();
                }
            }

        });

    } else {

        $('.filterAll').click();

        var top = ($(window).height() / 2) - ($('.fbOverlayMulti').height() / 2);
        var left = ($(window).width() / 2) - ($('.fbOverlayMulti').width() / 2);
        $('.fbOverlayMulti').css({
            top: top,
            left: left
        }).show();
        fbBlinder();
        $('.fbOverlayMulti .friends ul').jScrollPane({
            dragMinHeight: 30,
            dragMaxHeight: 30
        });
    }


}

var fbShowFriendsList = function(cbContinue, cbClose, addlPerms) {

    if (typeof cbContinue == "function") {
        friendsListContinue = cbContinue;
    }
    if (typeof cbClose == "function") {
        friendsListClose = cbClose;
    }
    
    friendsListSafe = readCookie('friendsListSafe');

    if (!hasExtendedPermissions('publish_stream,offline_access')) {
        if (!friendsListLogin) {
            fbLogin('user_birthday,friends_birthday,publish_stream,offline_access', fbShowFriendsList);
            friendsListLogin = true;
        } else {
			getLoginStatus();
            setTimeout(fbShowFriendsList, 1000);
        }
        return false;
    }

    if ($('.fbOverlay').length === 0) {
        $('body').append('<div class="fbLoader"><div class="top"></div><div class="content"><div class="loading">Loading... <img src="' + BASE_URL + 'images/candleGallery/loading.gif"/></div></div><div class="bottom"></div></div>');
        var top = ($(window).height() / 2) - ($('.fbLoader').height() / 2);
        var left = ($(window).width() / 2) - ($('.fbLoader').width() / 2);
        $('.fbLoader').css({
            top: top,
            left: left
        }).show();

        var query = FB.Data.query('SELECT pic_square, uid, first_name, last_name, birthday, birthday_date FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) order by birthday_date');
        query.wait(function(rows) {
            if ($('.fbOverlay').length === 0) {
                $('.fbLoader').remove();
                $('body').append('<div class="fbOverlay" style="display: none"><div class="top"></div><div class="content"><div class="close"></div><span class="title">Facebook connected as</span>\
                         <div class="connectedAs"><img class="photoOverlay" src="' + BASE_URL + 'images/facebook/photoOverlay.png"/></div>\
                         <span class="sort"><span class="sortName">Name</span> / <span class="sortBirthday active">Birthday</span></span>\
                         <span class="title">Select a friend</span>\
                         <div class="friends"><div style="clear: both"></div></div><div class="footer"><span class="continue">continue &gt;</span></div>\
                         </div><div class="bottom"></div></div>');

                var user = getUserDetails();
                $('.fbOverlay .connectedAs').append('<img src="http://graph.facebook.com/' + user.uid + '/picture" width="50" height="50" />');
                $('.fbOverlay .connectedAs').append('<div class="name">' + user.first_name + ' ' + user.last_name + '</div>');
                $('.fbOverlay .connectedAs').append('<div class="birthday">Birthday: ' + user.birthday.split(',')[0] + '</div>');

                $('.fbOverlay .friends').prepend('<ul></ul>');

                for (var i = 0; i < rows.length; i++) {
                    var row = rows[i];
                    var now  = new Date();
                    if (row.birthday) {
                        var bday = new Date(row.birthday.split(',')[0] + ', '+now.getFullYear());
                        if(bday.getTime() < (now.getTime() - 86400000)) {
                          var bday = new Date(row.birthday.split(',')[0] + ', '+(now.getFullYear()+1));
                        }
                        var bdayOrder = bday.getTime();
                        var bdaylong = row.birthday.split(',')[0];
                    } else {
                      var bdaylong = '';
                        var bdayOrder = new Date('January 1, 2025').getTime();
                    }

                    var $friend = $('<li rel="' + row.uid + '" bdaylong="'+bdaylong+'" bdayorder="' + bdayOrder + '" name="' + row.last_name + ' ' + row.first_name + '"></li>');
                    $friend.append('<img src="' + row.pic_square + '" width="50" height="50" /><div class="check"></div>');
                    $friend.append('<div class="name">' + row.first_name + ' <br />' + row.last_name + '</div>');
                    if (row.birthday) {
                        var bdayString = row.birthday.split(',')[0];
                        var month = bdayString.substr(0, 3);
                        var day = bdayString.split(' ')[1];
                        $friend.append('<div class="bday">' + month + ' ' + day + '</div>');
                    }
                    $('.fbOverlay .friends ul').append($friend);

                }

                $('.fbOverlay .close').click(function() {
                    if (typeof friendsListClose == "function") {
                        friendsListClose();
                    }
                    $('.fbOverlay').hide();
                    clearFbBlinder();
                });
                $('.fbOverlay .continue').hide();
                $('.fbOverlay .continue').click(function() {
                    clearFbBlinder();
                    if (typeof friendsListContinue == "function") {
                        var selection = new Array();
                        $('.fbOverlay .friends li.active').each(function() {
                            selection.push({
                                uid: $(this).attr('rel'),
                                name: $('.name', $(this)).text(),
                                birthday: $('.bday', $(this)).text(),
                                birthdayLong: $(this).attr('bdaylong')
                            });
                        });
                        friendsListContinue(selection);
                    }
                    $('.fbOverlay').hide();
                });

                $(".fbOverlay .friends li").tsort({
                    order: "asc",
                    attr: "bdayorder"
                });

                $('.fbOverlay .sort .sortName').click(function() {
                    $(this).siblings().removeClass('active');
                    $(this).addClass('active');
                    $(".fbOverlay .friends li").tsort({
                        order: "asc",
                        attr: "name"
                    });
                });

                $('.fbOverlay .sort .sortBirthday').click(function() {
                    $(this).siblings().removeClass('active');
                    $(this).addClass('active');
                    $(".fbOverlay .friends li").tsort({
                        order: "asc",
                        attr: "bdayorder"
                    });
                });

                $(".fbOverlay .friends li").click(function() {
                    $(this).siblings().removeClass('active');
                    $(this).toggleClass('active');
                    $('.fbOverlay .continue').click();
                });

                $(".fbOverlay .friends li").removeClass('active');

                var top = ($(window).height() / 2) - ($('.fbOverlay').height() / 2);
                var left = ($(window).width() / 2) - ($('.fbOverlay').width() / 2);
                $('.fbOverlay').css({
                    top: top,
                    left: left
                }).show();
                fbBlinder();
                $('.fbOverlay .friends ul').jScrollPane({
                    dragMinHeight: 30,
                    dragMaxHeight: 30
                });

            }

        });

    } else {
        $(".fbOverlay .friends li").removeClass('active');

        var top = ($(window).height() / 2) - ($('.fbOverlay').height() / 2);
        var left = ($(window).width() / 2) - ($('.fbOverlay').width() / 2);
        $('.fbOverlay').css({
            top: top,
            left: left
        }).show();
        fbBlinder();
        $('.fbOverlay .friends ul').jScrollPane({
            dragMinHeight: 30,
            dragMaxHeight: 30
        });
    }

}

// ==========================
// = Flash Helper Functions =
// ==========================

var flashFBLogin = function(pp, movieId) {
    actionMovie = movieId;
    fbLogin(pp, flashFBLoginSuccess, flashFBLoginFail);
}

var flashFBLoginSuccess = function(sess) {
    $('#' + actionMovie)[0].fbLoginSuccessFromJS(sess.secret, sess.session_key, sess.uid);
}

var flashFBLoginFail = function(response) {
    $('#' + actionMovie)[0].fbLoginFailFromJS();
}

var flashFBLoginStatus = function(movieId) {
    actionMovie = movieId;
    FB.getLoginStatus(function(response) {
        if (response.session) {
            $('#' + actionMovie)[0].fbInitLoggedInResponse(response.session);
        } else {
            $('#' + actionMovie)[0].fbInitLoggedInResponse(null);
        }
    });
}

