var oFlash = null;
var sessionData = null;
//var oath;

function getFBData() {   
    POWERADE.getData();	    
};

if (self.location != window.top.location) {
    window.top.location = self.location;
}

var POWERADE = (function () {

    var userID = null;
    var accessToken = null;

    var init = function () {
        getLoginStatus();
    };

    var setEvents = function () {
        jQuery('a#FBConnectBtn').bind('click', function (e) {
            /*
            var backURL = window.location + '?oae=0';
            connectToFB('publish_stream, friends_photos', backURL);
            */
            e.preventDefault();
            FB.login(function (response) {
                if (response.authResponse) {
                    userID = response.authResponse.userID;
                    accessToken = response.authResponse.accessToken;

                    jQuery('#FBConnectBtn').hide();
                    setFlash();
                } else {
                    // not connected
                }
            }, { scope: 'publish_stream, friends_photos' });

        });
    };

    var getLoginStatus = function () {
        FB.getLoginStatus(function (response) {
            // alert(response.status);
            if (response && response.status == 'connected') {
                userID = response.authResponse.userID;
                accessToken = response.authResponse.accessToken;

                jQuery('#FBConnectBtn').hide();
                setFlash();
            } else {
                setEvents();
            };
        });
    };

    var connectToFB = function (perms, url) {
        if (APP_ID !== undefined) window.top.location = "https://www.facebook.com/dialog/oauth?client_id=" + APP_ID + "&scope=" + perms + "&response_type=token&redirect_uri=" + url;
        else { jQuery.error('APP_ID is undefined') };
    };

    var getBasicFriendsData = function () {
        FB.api("/me/friends", function (response) {
            if (response.error) jQuery.error('FBapiMe: Wystąpił błąd krytyczny pobierania danych');
            else {
                var usersData = [];

                for (var i = 0; i < response.data.length; i++) {
                    usersData[i] = response.data[i].id;
                };

                getCustomFriendsData(usersData, 6);
            };
        });
    };

    var getCustomFriendsData = function (data, n) {
        var max = data.length;
        var idArr = [];
        var k = 0;
        var selectedFriends = [];
        var n = max > n ? n : max;
        selectedFriends[0] = userID;

        /*
        for (var i = 1; i < n; i++) {
        idArr[i] = random(0, max-1);
        };

        while (k < max) {
        var flag = false;
        var newId = random(0, max-1);

        for (var j = 0; j < idArr.length; j++) {
        if (idArr[j] === newId) flag = true;
        };

        if (!flag) {
        idArr[k] = newId;
        k++;
        };
        };

        for (var i = 1; i < n + 1; i++) {
        selectedFriends[i] = data[idArr[i]];
        };
        */
        for (var i = 1; i < n + 1; i++) {
            selectedFriends[i] = data[random(0, max - 1)];
        };

        getFriendData(selectedFriends);
    };

    var random = function random(start, end) {
        return Math.round(Math.random() * (end - start) + start);
    };

    var getFriendData = function (id) {
        if (userID !== null) {
            var ids = id.join(',');

            var query = FB.Data.query('SELECT first_name, last_name, pic_big, sex FROM user WHERE uid IN (' + ids + ')');
            query.wait(function (response) {
                if (response.error) jQuery.error('FBapiMe: Wystąpił błąd krytyczny pobierania danych');
                else {
                    var dataArr = [];

                    for (var i = 0, j = response, k = j.length; i < k; i++) {
                        dataArr[i] = new Array(4);
                        dataArr[i][0] = response[i].first_name;
                        dataArr[i][1] = response[i].last_name;
                        dataArr[i][2] = response[i].pic_big;
                        dataArr[i][3] = response[i].sex;
                    };

                    var oFlash = swfobject.getObjectById('flashcontent');
                    oFlash.getFBDataHandler(dataArr);
                };
            });
        };

    };

    return {
        init: init,
        getData: getBasicFriendsData
    };
})();




/*** NIEUZYWANE _ DLA REFERENCJI **/

//Initialize Facebook  
function fbInit(pAsSwfName, pApi_key, pReceiver) {    
    //console.log('fbInit');
    
    oFlash = swfobject.getObjectById(pAsSwfName);
    var backURL = window.location + "?oae=0";
    var APID = '104586039575067'
    
    FB.getLoginStatus(function(res) {        
        if (res.authResponse) { 
            //console.log('connected');
            /*
            flashDispatcher("onLoggedIn", {
                status: "connected",
                secret: res.authResponse.signedRequest,
                session_key: res.authResponse.accessToken
            });
            */
        } else {
            //console.log('not connected');
            // window.location = 'https://www.facebook.com/dialog/oauth?client_id='+APID+'&redirect_uri='+backURL+'&response_type=token&scope=publish_stream';
        }
    });
            
    // window.location = 'https://www.facebook.com/dialog/oauth?client_id='+APID+'&redirect_uri='+backURL+'&response_type=token&scope=publish_stream'
    /*
    oFlash = swfobject.getObjectById(pAsSwfName);
    $log("fbInit pAsSwfName:" + pAsSwfName + "; pApi_key:" + pApi_key + "; pReceiver:" + pReceiver + "; oFlash:" + oFlash);
    trace("fbInit pAsSwfName:" + pAsSwfName + " pApi_key:" + pApi_key + " pReceiver:" + pReceiver + " oFlash:" + oFlash);    
    FB.init(pApi_key, pReceiver,
        {
            "ifUserConnected": function() { $log("ifUserConnected, FB.init, fbInit, facebookconnectobject.js"); },
            "ifUserNotConnected": function() { $log("ifUserNotConnected, FB.init, fbInit, facebookconnectobject.js"); }
        }
    );    
    
    FB.Bootstrap.requireFeatures(["Connect"], function() {
        FB.Connect.requireSession(function(exception) {
            //Pull out the current session data from Facebook
            $log("requireSession");
            sessionData = FB.Facebook.apiClient.get_session();
            var returnObj = {
                secret: sessionData.secret,
                session_key: sessionData.session_key
            };

            flashDispatcher("onLoggedIn", returnObj);
        });
    });
    */
}

function checkConnection(pAsSwfName, pApi_key, pReceiver) {    
    //console.log('checkConnection');    
    oFlash = swfobject.getObjectById(pAsSwfName);
    FB.getLoginStatus(function(res) {
        //console.log(res);
        if (res.authResponse) {                                    
            flashDispatcher("onCheckConnection", {
                status: "connected",
                secret: res.authResponse.signedRequest,
                session_key: res.authResponse.accessToken
            });
        }
    });
    
    /*
    oFlash = swfobject.getObjectById(pAsSwfName);
    $log("checkConnection pAsSwfName:" + pAsSwfName + "; pApi_key:" + pApi_key + "; pReceiver:" + pReceiver + "; oFlash:" + oFlash);
    trace("checkConnection pAsSwfName:" + pAsSwfName + " pApi_key:" + pApi_key + " pReceiver:" + pReceiver + " oFlash:" + oFlash);
    FB.init(pApi_key, pReceiver,
        {
            "ifUserConnected": function() { $log("ifUserConnected, FB.init. checkConnection, facebookconnectobject.js"); },
            "ifUserNotConnected": function() { $log("ifUserNotConnected, FB.init. checkConnection, facebookconnectobject.js"); }
        }
    );

    FB.Bootstrap.requireFeatures(["Connect"], function() {
        FB.Connect.get_status().waitUntilReady(function(status) {
            switch (status) {
                case FB.ConnectState.connected:
                    $log("checkConnection	ConnectState.connected");
                    trace("checkConnection	ConnectState.connected");
                    
                    FB.Connect.requireSession(function(exception) {
                        sessionData = FB.Facebook.apiClient.get_session();

                        flashDispatcher("onCheckConnection", {
                            status: "connected",
                            secret: sessionData.secret,
                            session_key: sessionData.session_key
                        });
                    });
                    break;

                case FB.ConnectState.appNotAuthorized:
                    $log("checkConnection	ConnectState.appNotAuthorized");
                    trace("checkConnection	ConnectState.appNotAuthorized");
                    flashDispatcher("onCheckConnection", { status: "appNotAuthorized" });
                    break;

                case FB.ConnectState.userNotLoggedIn:
                    $log("checkConnection	ConnectState.userNotLoggedIn");
                    trace("checkConnection	ConnectState.userNotLoggedIn");
                    flashDispatcher("onCheckConnection", { status: "userNotLoggedIn" });
                    break;
            }
        });
    });
    */
}

function grantExtendedPermission() {
    //console.log('grantExtendedPermission');
    /*
    $log("grantExtendedPermission");
    trace("grantExtendedPermission");

    FB.Connect.showPermissionDialog("publish_stream", function(perms) {
        $log("perms: " + perms);
        flashDispatcher("onGrantExtendedPermissionJS", { permission: ((perms == true) ? "true" : "false") });
    });
    */
}


function publishPost(message, attachment, action_links, target_id, user_message_prompt) {
    //console.log('publishPost');
    /*
    $log("publishPost message:" + message + "; attachment:" + attachment + "; action_links:" + action_links + "; target_id:" + target_id);
    trace("publishPost message:" + message + " attachment:" + attachment + " action_links:" + action_links + " target_id:" + target_id);

    FB.Connect.streamPublish(message, attachment, action_links, target_id, user_message_prompt, function(post_id, exception) {
        $log("post_id: " + post_id);
        flashDispatcher("onPublished", { published: ((post_id == true) ? "true" : "false") });
    });
    */
}

function flashDispatcher(func) {
    /*
    $log("FBFlashBridgeFlashDispatcher; func: " + func + "; oFlash: " + oFlash + "; arguments.length: " + arguments.length + "; arguments: " + arguments);
    trace("FBFlashBridgeFlashDispatcher");
    */

    if (oFlash) {
        if (arguments.length > 1) {
            // $log("Array.prototype.slice.call(arguments).slice(1)[0]: " + Array.prototype.slice.call(arguments).slice(1)[0]);
            //console.log(func,Array.prototype.slice.call(arguments).slice(1)[0]);
            oFlash[func](Array.prototype.slice.call(arguments).slice(1)[0]);
        }
        else
            oFlash[func]();
    }
}

function trace(msg) {
    if (typeof (jsTrace) != 'undefined') {
        jsTrace.send(msg);
    }
}

