﻿/// <reference path="../jquery/jquery-1.3.2.js" />
//plik z __funkcjami__ wykorzystywanymi na całym serwisie


//#region logowanie użytkownika

//#region prepareUser
function prepareUser(status, redirect) {
    //console.log('script: prepareUser');

    FB.getLoginStatus(function (result) {
        if (result && result.status == "connected") {
            var userId = result.authResponse.userID;

            if (userId != null) isUserLoggedOn(userId, redirect);
            else logOffUser(redirect);

        } else {
            $log("status: appNotAuthorized");
            logOffUser(redirect);
        };
    });

    /*
    switch (status) {
    case FB.ConnectState.connected:
    $log("status: connected");

    var userId = FB.Connect.get_loggedInUser();
    $log("userId: " + userId);

    if (userId != null)
    isUserLoggedOn(userId, redirect);
    else
    logOffUser(redirect);

    break;

    case FB.ConnectState.appNotAuthorized:
    $log("status: appNotAuthorized");
    logOffUser(redirect);
    break;

    case FB.ConnectState.userNotLoggedIn:
    $log("status: userNotLoggedIn");
    logOffUser(redirect);
    break;
    }
    */
};
//#endregion

//#region isUserLoggedOn
function isUserLoggedOn(userId, redirect) {
    //console.log('script: isUserLoggedOn');

    K2.Powerade.Web.Bieganie.Scripts.UsersWebSrv.IsUserLoggedOn(
        function (result, userContext, methodName) {
            switch (result) {
                case K2.Powerade.Common.Consts.BLLEnums.UserLogOnState.LoggedOn:
                    $log("UserLogOnState: LoggedOn");
                    break;

                case K2.Powerade.Common.Consts.BLLEnums.UserLogOnState.LoggedOff:
                    $log("UserLogOnState: LoggedOff");
                    logOnUser(userContext.userId, userContext.redirect);
                    break;

                case K2.Powerade.Common.Consts.BLLEnums.UserLogOnState.Deleted:
                    $log("UserLogOnState: Deleted");
                    FB.Connect.logout();
                    break;
            }
        },
    //#region function error
        function (error, userContext, methodName) {
            if (consts.debug)
                $log("Wystąpił błąd w metodzie '" + methodName + "', '" + userContext.methodName + "': " +
                    "\n\nerror._exceptionType: " + error._exceptionType +
                    ",\n\n error._message: " + error._message +
                    ",\n\n error._stackTrace: " + error._stackTrace +
                    ",\n\n userContext.userId: " + userContext.userId +
                    ",\n\n userContext.redirect: " + userContext.redirect);
        },
    //#endregion
    //#region userContext
        {
        'userId': userId,
        'methodName': 'isUserLoggedOn',
        'redirect': redirect
    }
    //#endregion
    );

}
//#endregion

//#region logOnUser
function logOnUser(userId, redirect) {
    //console.log('script: logOnUser');
    
    FB.api({
            method: 'fql.query'
            , query: 'SELECT uid2 FROM friend WHERE uid1=' + userId
        }
        , function(result) { 
            if (result.error) $log('FBapiMe: Wystąpił błąd krytyczny pobierania danych');
            else {
                var resultArray = new Array();
                for (var i = 0, j = result.length; i < j; i++) {
                    resultArray.push(result[i].uid2);
                };

                $log("logOnUser, fql_query, user friends: " + resultArray);

                K2.Powerade.Web.Bieganie.Scripts.UsersWebSrv.LogOnUser(
                    resultArray
                    , function (result, userContext, methodName) {
                        $log("LogOnUser: " + result);
                        if (userContext.redirect) {
                            $redirect(userContext.redirect, "LogOnUser, logOnUser");
                        }
                    }
                //#region function error
                    , function (error, userContext, methodName) {
                        if (consts.debug)
                            $log("Wystąpił błąd w metodzie '" + methodName + "', '" + userContext.methodName + "': " +
                                "\n\nerror._exceptionType: " + error._exceptionType +
                                ",\n\n error._message: " + error._message +
                                ",\n\n error._stackTrace: " + error._stackTrace +
                                ",\n\n userContext.userId: " + userContext.userId +
                                ",\n\n userContext.resultArray: " + userContext.resultArray +
                                ",\n\n userContext.redirect: " + userContext.redirect);
                    }
                //#endregion
                //#region userContext
                    , {
                        'userId': userId,
                        'resultArray': resultArray,
                        'redirect': redirect,
                        'methodName': 'logOnUser'
                    }
                //#endregion
                );

            }
        }
    );


    /*
    FB.Facebook.apiClient.fql_query(
    "SELECT uid2 FROM friend WHERE uid1=" + userId,
    function(results) {
    if (!results) {
    $log("logOnUser, fql_query, results: " + results);
    } else {
    var resultArray = new Array();

    for (var i = 0; i < results.length; i++)
    resultArray.push(results[i].uid2);

    $log("logOnUser, fql_query, user friends: " + resultArray);

    K2.Powerade.Web.Bieganie.Scripts.UsersWebSrv.LogOnUser(
    resultArray,
    function(result, userContext, methodName) {
    $log("LogOnUser: " + result);

    if (userContext.redirect) {
    $redirect(userContext.redirect, "LogOnUser, logOnUser");
    }
    },
    //#region function error
    function(error, userContext, methodName) {
    if (consts.debug)
    alert("Wystąpił błąd w metodzie '" + methodName + "', '" + userContext.methodName + "': " +
    "\n\nerror._exceptionType: " + error._exceptionType +
    ",\n\n error._message: " + error._message +
    ",\n\n error._stackTrace: " + error._stackTrace +
    ",\n\n userContext.userId: " + userContext.userId +
    ",\n\n userContext.resultArray: " + userContext.resultArray +
    ",\n\n userContext.redirect: " + userContext.redirect);
    },
    //#endregion
    //#region userContext
    {
    'userId': userId,
    'resultArray': resultArray,
    'redirect': redirect,
    'methodName': 'logOnUser'
    }
    //#endregion
    );
    }
    }
    );
    */
}
//#endregion

//#region addFriends
function addFriends(userId, redirect) {
    //console.log('script: addFriends');
    FB.api({
            method: 'fql.query'
            , query: 'SELECT uid2 FROM friend WHERE uid1=' + userId
        }
        , function(result) {         
            if (result.error) {
                $log('FBapiMe: Wystąpił błąd krytyczny pobierania danych');
            } else {
                if (!result) {
                    $log("addFriends, fql_query, results: " + response);
                } else {
                    var resultArray = new Array();
                    for (var i = 0; i < result.length; i++)
                        resultArray.push(result[i].uid2);
                    };
                    $log("addFriends, fql_query, user friends: " + resultArray);
                    K2.Powerade.Web.Bieganie.Scripts.UsersWebSrv.AddFriends(
                        resultArray
                        , function (result, userContext, methodName) {
                            $log("AddFriends: " + result);
                            if (userContext.redirect) { $redirect(userContext.redirect, "AddFriends, addFriends"); }
                        }
                        //#region function error
                        , function (error, userContext, methodName) {
                            if (consts.debug)
                                alert("Wystąpił błąd w metodzie '" + methodName + "', '" + userContext.methodName + "': " +
                                    "\n\nerror._exceptionType: " + error._exceptionType +
                                    ",\n\n error._message: " + error._message +
                                    ",\n\n error._stackTrace: " + error._stackTrace +
                                    ",\n\n userContext.resultArray: " + userContext.resultArray +
                                    ",\n\n userContext.redirect: " + userContext.redirect);
                        }
                        //#endregion
                        //#region userContext
                        , {
                            'resultArray': resultArray,
                            'redirect': redirect,
                            'methodName': 'addFriends'
                        }
                        //#endregion
                    );
            
            };
        }
    );

    /*
    FB.Facebook.apiClient.fql_query(
    "SELECT uid2 FROM friend WHERE uid1=" + userId,
    function(results) {
    if (!results) {
    $log("addFriends, fql_query, results: " + results);
    } else {
    var resultArray = new Array();

    for (var i = 0; i < results.length; i++)
    resultArray.push(results[i].uid2);

    $log("addFriends, fql_query, user friends: " + resultArray);

    K2.Powerade.Web.Bieganie.Scripts.UsersWebSrv.AddFriends(
    resultArray,
    function(result, userContext, methodName) {
    $log("AddFriends: " + result);

    if (userContext.redirect) {
    $redirect(userContext.redirect, "AddFriends, addFriends");
    }
    },
    //#region function error
    function(error, userContext, methodName) {
    if (consts.debug)
    alert("Wystąpił błąd w metodzie '" + methodName + "', '" + userContext.methodName + "': " +
    "\n\nerror._exceptionType: " + error._exceptionType +
    ",\n\n error._message: " + error._message +
    ",\n\n error._stackTrace: " + error._stackTrace +
    ",\n\n userContext.resultArray: " + userContext.resultArray +
    ",\n\n userContext.redirect: " + userContext.redirect);
    },
    //#endregion
    //#region userContext
    {
    'resultArray': resultArray,
    'redirect': redirect,
    'methodName': 'addFriends'
    }
    //#endregion
    );
    }
    }
    );
    */
}
//#endregion

//#region logOffUser
function logOffUser(redirect) {
    //console.log('script: logOffUser');

    K2.Powerade.Web.Bieganie.Scripts.UsersWebSrv.LogOffUser(
        function (result, userContext, methodName) {
            $log("LogOffUser: session cleared: " + result);

            if (userContext.redirect) {
                $redirect(userContext.redirect, "LogOffUser, logOffUser");
            }
        },
    //#region function error
        function (error, userContext, methodName) {
            if (consts.debug)
                alert("Wystąpił błąd w metodzie '" + methodName + "', '" + userContext.methodName + "': " +
                    "\n\nerror._exceptionType: " + error._exceptionType +
                    ",\n\n error._message: " + error._message +
                    ",\n\n error._stackTrace: " + error._stackTrace +
                    ",\n\n userContext.redirect: " + userContext.redirect);
        },
    //#endregion
        {'methodName': 'logOffUser', 'redirect': redirect }
    );

}
//#endregion

//#endregion

//#region updateTips
function updateTips(validateTips, text) {
    validateTips.text(text).effect("highlight", {}, 1500);
}
//#endregion

//#region log
//kod dodajacy funkcje wyswietlajace informacje na konsoli firebug'a np
(function ($) {
    // Create our Plugin function, with $ as the argument (we pass the jQuery object over later)
    // More info: http://docs.jquery.com/Plugins/Authoring#Custom_Alias

    // Debug
    if (typeof $.log === 'undefined') {
        if (!$.browser.safari && typeof window.console !== 'undefined' && typeof window.console.log === 'function') {	// Use window.console
            $.log = function () {
                var args = [];
                for (var i = 0; i < arguments.length; i++) {
                    args.push(arguments[i]);
                }
                window.console.log.apply(window.console, args);
            }
            $.console = {
                log: $.log,
                debug: window.console.debug || $.log,
                warn: window.console.warn || $.log,
                error: window.console.error || $.log,
                trace: window.console.trace || $.log
            }
        }
        else {	// Don't use anything
            $.log = function () { };
            $.console = {
                log: $.log,
                debug: $.log,
                warn: $.log,
                error: alert,
                trace: $.log
            };
        }
    }
})(jQuery);
//#endregion

//#region maxZIndex
// funkcja ustawia dla elementu najwyzszy zindex
$.maxZIndex = $.fn.maxZIndex = function (opt) {
    /// <summary>
    /// Returns the max zOrder in the document (no parameter)
    /// Sets max zOrder by passing a non-zero number
    /// which gets added to the highest zOrder.
    /// </summary>    
    /// <param name="opt" type="object">
    /// inc: increment value, 
    /// group: selector for zIndex elements to find max for
    /// </param>
    /// <returns type="jQuery" />
    var def = { inc: 10, group: "*" };
    $.extend(def, opt);
    var zmax = 0;
    $(def.group).each(function () {
        var cur = parseInt($(this).css('z-index'));
        zmax = cur > zmax ? cur : zmax;
    });
    if (!this.jquery)
        return zmax;

    return this.each(function () {
        zmax += def.inc;
        $(this).css("z-index", zmax);
    });
}
//#endregion

//#region $log
function $log(napis) {
    var consts = new poweradeConsts();
    napis = (new Date()).toMyString() + ": " + napis;
    if (consts.debug)
        $(function () {
            if (typeof (console) != 'undefined' && typeof (console.log) == 'function')
                console.log(napis);
            else
                $.console.log(napis)
        });
}
//#endregion

//#region $error
function $error(napis) {
    var consts = new poweradeConsts();
    napis = (new Date()).toMyString() + ": \t" + napis;
    if (consts.debug)
        $(function () {
            if (typeof (console) != 'undefined' && typeof (console.error) == 'function') {
                console.error(napis);
            }
            else {
                $.console.error(napis)
            }
        });
}
//#endregion

//#region $redirect

function $redirect(page, from, timeout, force) {
    timeout = timeout || 100;
    $log(page + ", from: " + from + ", time: " + timeout);

    $(function () {
        setTimeout(
            function () {
                if (force)
                    location.replace(page);
                else
                    location = page;
            },
            timeout);
    });
}

//#endregion

//#region cookies

/* COOKIES */

var Cookies = {
    init: function () {
        var allCookies = document.cookie.split('; ');
        for (var i = 0; i < allCookies.length; i++) {
            var cookiePair = allCookies[i].split('=');
            this[cookiePair[0]] = cookiePair[1];
        }
    },
    create: function (name, value, days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            var expires = "; expires=" + date.toGMTString();
        }
        else var expires = "";
        document.cookie = name + "=" + value + expires + "; path=/";
        this[name] = value;
    },
    erase: function (name) {
        this.create(name, '', -1);
        this[name] = undefined;
    }
};
Cookies.init();

//#endregion

//#region Extensions
(function () {
    Date.prototype.toMyString = function () {
        var m = this.getMilliseconds(), mstr;
        if (m < 10)
            mstr = "00" + m;
        else if (m < 100)
            mstr = "0" + m;
        else
            mstr = m;
        return this.format("yyyy-MM-dd HH:mm:ss.") + mstr;
    }

    Array.prototype.indexOf = function (obj) {
        ///<summary>Wyznacza indeks obiektu w tablicy</summary>
        ///<param name="obj">Szukany obiekt</param>
        ///<return>Indeks na ktorym znajduje sie szukany obiekt, lub -1 w przypadku niepowodzenia</return>
        var result = -1;
        var length = this.length;
        for (var i = 0; i < length; i++) {
            if (this[i] == obj) {
                result = i;
                break;
            }
        }
        return result;
    }

    Array.prototype.contains = function (obj) {
        ///<summary>
        /// Okresla czy tablica posiada podany obiekt
        ///</summary>
        ///<param name="obj">Szukany obiekt</param>
        ///<return>Informacja czy dany obiekt znajduje sie w tablicy</return>
        return (this.indexOf(obj) >= 0);
    }

    Array.prototype.remove = function (obj) {
        ///<summary>Usuwa obiekt z tablicy (o ile on sie tam znajduje)</summary>
        var index = this.indexOf(obj);
        if (index >= 0)
            this.splice(index, 1);
    }

    Array.prototype.add = function (obj) {
        ///<summary>Dodaje obiekt do tablicy (o ile on sie tam nie znajduje)</summary>
        if (!this.contains(obj))
            this[this.length] = obj;
    }
})();

//#endregion

//#region modal popup
$(function () {
    function beginReq(sender, args) {
        // shows the Popup 
        $find(ModalProgress).show();
    }

    function endReq(sender, args) {
        //  shows the Popup 
        setTimeout(function () { $find(ModalProgress).hide() }, 400);
    }

    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginReq);
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endReq);
});
//#endregion

//#region wysrodkowanie za duzego avatara
function placeMediumAvatar(divId, img, e) {
    divId = divId || "profiledetails";
    img = img || 'profilePic';
    bindMediumAvatar(divId, img);

    var selectora = 'div#' + divId + ' img.' + img;
    //console.log(e + " " + selectora + " " + $(selectora).length);
    var wysokoscav = $(selectora).height();
    //console.log("wysokosc: " + wysokoscav + " src:" + $(selectora).attr("src"));
    if (wysokoscav > 0 && wysokoscav < 113) {
        var pad = Math.round((113 - wysokoscav) / 2);
        $(selectora).css("padding-top", pad);
    }
    else
        $(selectora).css("padding-top", 0);
}

function bindMediumAvatar(divId, img) {
    divId = divId || "profiledetails";
    img = img || 'profilePic';
    var selectora = 'div#' + divId + ' img.' + img;
    if ($(selectora).length) {
        if (!$(selectora)[0].wasBinded) {
            $(selectora)[0].wasBinded = true;
            $(selectora).load(function (e) { placeMediumAvatar(divId, img, e); });
        }
    }
}
//#endregion
