var action_params = [];

var currentPageTittle = document.title;
var lastInputs = {};
var currSource;
var currContent;
var contentHistory = new Array();

////////////// HISTORY
var firstFlag = true;
var firstPage;
var firstTab;
var lastPage = "";
var scrollEnable = 1;

var content="content";

$(function() {
    var hash = document.location.hash;
    if (/login/.test(hash)) {
        loginActivate(true);
    }
});



function iniHistory()
{
   var options = {unescape: true};

   $.history.init(function (hash)
    {
        historyAction(hash)
    }, options);
}
function updateCurrentTab()
{
    if (isTab==1)
    {
        scrollEnable = 0;
        loadingContent(document.location.href, content);
    }
}
function historyAction(hash)
{
    var href = document.location.href;

    if ((href.indexOf("#")!=-1) || (firstFlag==false))
    {

		if (href.indexOf("#.")==-1)
		{
			lastPage = hash;
			var url = document.location.href;
			scrollEnable = 1;
			loadingContent(url, content);
			firstFlag = false;
		}
    }

    if (firstFlag==true)
    {
        lastPage  = hash;
        firstFlag = false;
    }
    list = $("#sub_menu > li");
    var how = false;

    $(list).each(function(index)
    {
        var li = $(this);
        var a = $("a", li);
        li.attr("class", "");
        try{
            if ((getFirstPart(a.attr("param")) == getFirstPart(hash)) || ((a.attr("param") == firstPage)&&(hash == "")))
            {
                li.attr("class", "select");
                how = true;
            }
        }catch(e){
            myAlert("ERROR");
        }
    });
    if (how==false){
        try{
            // to do that place returns error when used jquery 1.4.4.min
            firstTab.attr("class", "select");
        }catch(e){}
    }
}

function getFirstPart(st)
{
    var indx = st.indexOf("/");
    var res
    if (indx != -1)
    {
        res = st.substring(0, indx);
    }else{
        res = st;
    }
    return(res);
}

/*******************************************************************************
 *  HISTORY
 **/

function loadingContent(source, content){
    if ((content!=undefined)&&(isTab==1)){
        currSource = source;
        currContent = $("#"+content);
        step1();
    }
}
function getWithOutBase(param)
{
    var indx = String(param).indexOf(base);
    if (indx!=-1)
    {
        param = param.substring(param.indexOf(param)+base.length);
    }
    return param;
}
function scrollToElement(param)
{
    $("#"+param).scrollTo("slow");
}
function iniSet(a)
{
    var set = a.attr("set");
    if (set!=undefined)
    {
        try{
            var obj;
            eval("obj="+set+";");

            if (obj.action=="getWithOutBase")
            {
                obj.value = getWithOutBase(obj.value);
            }
            $("#"+obj.id).attr(obj.attr, obj.value);
        }catch(e){}
    }
}

function iniAction(a)
{
    var action = a.attr("action");
    if (action!=undefined)
    {
        try{
            var obj;
            eval("obj=" + action + ";");

            eval(obj.action).call(null, obj.value);
        }catch(e){}
    }
}


function selectActionLink(param)
{
    if (action_params[param] == 1)
    {
        $.history.load(param);
        return(1);
    }
    return(0)
}
function iniActionLinks()
{
    // OTHER AJAX LINKS
    $("a.ajax").each(function(i)
    {
        var a = $(this);
//        a.attr("class", "");
//
        var param  = a.attr("href");
        param = getWithOutBase(param);
        a.attr("param", param);

        a.click(function(e)
        {
            var action = a.attr("action");
            if (action != undefined)
            {
                 iniAction(a);
                 return false;
            }
            if ((param != undefined)&&(lastPage != param))
            {
                $.history.load(param);
                return false;
            }

            iniSet(a);
            return false;
        });
    });

    // MENU LINKS
    var list = $("#sub_menu > li");
    $(list).each(function(index){
        var li = $(this);
        var a = $("a", li);
        if (a.attr("class")=="ajax"){

            var content = a.attr("content");
            var param  = a.attr("href");

            param = getWithOutBase(param);
            action_params[param] = 1;
            /*
            if (a.attr("id")=='selected'){
                firstPage  = param;
                firstTab = li;
                li.attr("class", "select");
            }*/
            if (li.attr("class")=='select')
            {
                firstPage  = param;
                firstTab = li;
            }

            a.attr("param", param);
            a.click(function(e){
                return false;
            });
        }
    });

    $("a.ajax").each(function(i){
        var a = $(this);
        a.attr("class", "");
    });
}

/*******************************************************************************
 * debug function
 **/
function myAlert(str)
{
    if ($.browser.mozilla){
        try{
            console.log(str);
        }catch(e){
        }
    }
}

function step1()
{ //HIDE ALL
    currContent.stop();
    currContent.fadeTo("fast", 0, function(){
        step2();
    });
}

function step2()
{
    var action = (currSource.indexOf("#")==-1) ? currSource.substring(currSource.indexOf(base)+base.length) : currSource.substring(currSource.indexOf("#")+1);
    var cont = $("#sub_indicator");
    var indicator = addIndicator(cont);
    var data = 'ajax=1';

    /**
     * currSource  = base + all data after the #
     **/
    //if (currSource + '/' != base )
    //{
    currSource = base + action;
    //}

    if ( 1 == scrollEnable ) {
        scrollToElement("place_to_scroll");
    }

    $.ajax({
        type: "POST",
        url: currSource,
        data: data,
        action: action,
        success: function(data) {
            try {
                eval( 'data = ' + data);
                if (data.redirect) {
                    redirect(data.redirect);
                    return;
                }
            } catch(e) { }

            indicator.fadeOut("fast", function() {
                indicator.remove();
                currContent.html(data);
                currContent.show("fast", function() {
                    iniFlash();
                    iniShare();
                    iniActionLinks();
                    iniStars();
                    iniForm();
                    currContent.fadeTo("slow", 1);

                    document.title = currentPageTittle;
                    updateDynamicContent();
                    initAds();
                    if(typeof _gaq !== "undefined")
                    {
                        var requestUri = currSource.substr(currSource.indexOf('/', 10));
                        _gaq.push(['_trackPageview', requestUri]);
                    }
                });
            });
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) { }
    });
}
function iniStars()
{
    $("div.stars").each(function(i)
    {
        var d = $(this);
        var w = d.attr("stars");
        if (w!=undefined)
        {
            w = Math.round(124*Number(w)/5)
            if (w>124)
            {
                w = 124;
            }
            if (w<=0)
            {
                w = 0;
            }
            d.attr("style", "width:"+w+"px");
        }
    });
}

////////////////////////////////////////////////////////////////////////////////////
function insert(to, what, how, delay, after, params)
{
    var to_obj = $(to);
    if (delay==undefined)
    {
        delay = 0;
    }
    if (to_obj == undefined)
    {
        return false;
    }
    if (how==undefined)
    {
        how = "first";
    }

    var container = $("<div>"+what+"</div>");

    switch (how)
    {
        case "first":
            to_obj.prepend(container);
            break;
        case "last":
            to_obj.append(container);
            break;
        case "before":
            to_obj.before(container);
            break;
        case "after":
            to_obj.after(container);
            break;
        default:
            to_obj.html(container);
    }
    container.slideUp(0).delay(delay).slideDown("fast", function ()
    {
    try{
            if (after!=undefined)
            {
                after.call(null, params);
            }
        }catch(e){
        }
    });
}
function addIndicator(to, how, delay, after, params, animation)
{
    var fooName = "indicator_"+(new Date()).getTime();

    var what = "<div id='"+fooName+"'></div>";
    if (to.css("display") != "none")
    {
        what = "<div id='"+fooName+"' align='center'><img src='" + imgPath + "indicators/loader.gif' width='43' height='11' /></div>";
    }

    insert(to, what, how, delay, after, params, animation)

    var indicator = $("#"+fooName);
    return(indicator);
}
function addError(to, what, border, how, delay, after, params)
{
    if (border==undefined)
    {
        border = true;
    }

    var fooName = "error_"+(new Date()).getTime();
    if (border)
    {
        what = '<div id="'+fooName+'" align="center"><div class="sub_top_error"><div>&nbsp;</div></div><div class="sub_middle_error" align="center"><div class="error">'+what+'</div></div><div class="sub_bottom_error"><div>&nbsp;</div></div><div class="hs_10">&nbsp;</div></div>'
    }
    else
    {
        what = '<div id="'+fooName+'"><div class="error">'+what+'</div></div>'
    }

    insert(to, what, how, delay, after, params);

    var error_div = $("#"+fooName);
    return(error_div);
}
function addAlert(to, what, border, how, delay, after, params)
{
    if (border==undefined)
    {
        border = true;
    }

    var fooName = "alert_"+(new Date()).getTime();
    if (border)
    {
        what = '<div id="'+fooName+'" align="center"><div class="sub_top"><div>&nbsp;</div></div><div class="sub_middle" align="center"><div class="alert">'+what+'</div></div><div class="sub_bottom"><div>&nbsp;</div></div><div class="hs_10">&nbsp;</div></div>'
    }
    else
    {
        what = '<div id="'+fooName+'" align="center"><div class="alert">'+what+'</div></div>'
    }

    insert(to, what, how, delay, after, params);

    var error_div = $("#"+fooName);
    return(error_div);
}
function removeError()
{
    $("div[id*='error_']").each(function(i)
    {
        var err = $(this);
        err.slideUp("fast", function()
        {
            err.remove();
        });
    });
}
function removeAlerts()
{
    $("div[id*='alert_']").each(function(i)
    {
        var err = $(this);
        err.slideUp("fast", function()
        {
            err.remove();
        });
    });
}
/////////////////////////////////////
function setGameRating(game_id, value)
{
    sendRequest("user_set_rating_for_game", {game_id:game_id, value:value});
}

function setImageRating(image_id, value)
{
    sendRequest("user_set_rating_for_image",{image_id:image_id, value:value});
}


function sendRequestAction(url, data, cont, func1, func2)
{
    removeError();
    removeAlerts();

    var page = '';

    if ($('#paginator_current_page_value').val())
    {
        page = $('#paginator_current_page_value').val();
        data = data+'&page=' + page;
    }

    var indicator = addIndicator(cont, "before", 0, function() {
        $.ajax({
            type: "POST",
            url:  url,
            data: data,
            success: function(data) {
                try {
                    eval( 'data = ' + data);
                } catch (e){}

                indicator.slideUp("fast",  function()
                {
                    indicator.remove();
                    func1.call(null, data);
                });
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                myAlert("Don't load request "+url+" "+XMLHttpRequest+" "+textStatus+" "+errorThrown);
            }
        });
    });
}

function getFormValues(inputs, how) {
    how = how || false;

    var form_data = [];
    var data = "";

    for(var i = 0; i < inputs.length; i++) {
        var obj = {input : $("#" + inputs[i]["name"])};

        if (inputs[i]["title"] != undefined) {
            obj["title"] = $("#" + inputs[i]["title"]);
            obj["value"] = getElementValue(obj["input"]);
        }

        form_data[inputs[i]["name"]] = obj;
        data += inputs[i]["name"] + "=" + encodeURIComponent(getElementValue(obj["input"])) + "&";
    }

    if (how) {
        lastInputs = form_data;
    }

    return {form_data : form_data, data : data};
}

/**
 * Get value from form's element
 **/
function getElementValue(el) {

    var value = null;

    switch (el.attr("type")) {
        case "checkbox":
            value = 0;

            if (el.attr("checked")) {
                value = 1;
            }

            break;
        case "select":
            value = el.find("option:selected").val();

            break;
        default:
            value = el.val();
            break;
    }

    return value;
}

function clearForm(inputs)
{
    var form_data = getFormValues(inputs)["form_data"];
    for (var name in form_data)
    {
        form_data[name]["input"].val("");
    }
}

function iniForm()
{
     var how = false;
     for (var name in lastInputs)
     {
         try
         {
            $("#"+name).val(lastInputs[name]["value"]);
             if (how==false)
             {
                scrollToElement(name);
             }
         }
         catch(e){}

         how = true
     }
     if (how)
     {
        lastInput = {}
     }
}

function sendFormAction(url, data, cont, form, inputs, func1, func2, notClearForm)
{
    removeError();
    removeAlerts();

    form.slideUp("fast", function() {
        var indicator = addIndicator(cont, "before", 0, function() {
            $.ajax({
                type: "POST",
                url:  url,
                data: data,
                success: function(data) {
                    try {
                        eval( 'data = ' + data);
                        if (data.redirect) {
                            redirect(data.redirect);
                            return;
                        }
                    } catch(e) { }
                    indicator.slideUp("fast",  function() {
                        indicator.remove();
                        if (notClearForm != true) {
                            clearForm(inputs);
                        }

                        if (data.error == -1) {
                            addAlert(form, data.message, true, "before", 0, function() {
                                form.delay(200).slideDown("fast", function() {
                                    func1.call(null, data);
                                });
                            });
                        } else {
                            var form_data = getFormValues(inputs)["form_data"];
                            var st = "";
                            if (data.error_list) {
                                for (var name in data.error_list) {
                                    if (typeof form_data[name] != 'undefined' && typeof form_data[name]["title"] != 'undefined') {
                                        addError(form_data[name]["title"], data.error_list[name], false, "last");
                                    } else {
                                        st+="<div>"+data.error_list[name]+"</div>";
                                    }
                                }
                            }
                            addError(form, data.message+st, true, "before");
                            //cont.delay(200).slideDown("fast");
                            form.delay(200).slideDown("fast", function() {
                                $(this).show();
                                func1.call(null, data);
                            });
                        }
                    });
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                    myAlert("Don't load request "+url+" "+XMLHttpRequest+" "+textStatus+" "+errorThrown);
                }
            });
        });
    });
}

var request_flag = [];
function skipAction(what)
{
    /*
    if (what=="update_profile")
    {
        return(true);
    }
    */
    return(true);
}
function sendRequest(what, params)
{
    var sufix = (params == undefined) ? "" : (params.id == undefined) ? "" : params.id;

    if (request_flag[what+sufix]==undefined)
    {
        request_flag[what+sufix] = false;
    }


    if ((request_flag[what+sufix]==false)||(skipAction(what)))
    {
        request_flag[what+sufix] = true;

        var request_url;
        var request_container;
        var request_form;
        var request_item;
        var request_data;
        var request_inputs = [];

        switch (what)
        {
////////////////////////////////////////////////////////
            case "user_set_rating_for_image":
                request_url  = "assets/user_rating.js";
                request_container = $("#user_list");
                request_data = "rating="+params.value+"&image_id="+params.image_id;

                sendRequestAction(request_url, request_data, request_container,
                function(data)
                {
                    var rating = getFlashMovie("set_rating");

                    if (data.error==-1)
                    {
                        rating.CallFunction('<invoke name="setAverageRating"><arguments><string>'+data.average_rating+'</string><string>'+data.voted+'</string></arguments></invoke>');
                        insert(request_container, data.content, "first");
                        iniStars();
                        // to do check is experience changed
                        Profile.updateProfileForAllWindows();
                    }
                    else
                    {
                        rating.CallFunction('<invoke name="setActiveRatingForm"></invoke>');
                        addError(request_container, data.message, true, "first", 200);
                    }

                    request_flag[what+sufix] = false;
                });
            break;
/////////////////// increase experience section/////////////////////////////////////
            case "user_set_rating_for_game":
//                request_url  = "assets/user_rating.js";
                request_url  = "/services/set-game-rating";
                request_container = $("#user_list");
                request_data = "rating="+params.value+"&hash="+hash;

                sendRequestAction(request_url, request_data, request_container,
                function(data)
                {
                    var rating = getFlashMovie("set_rating");
                    if (data.redirect) {
                        redirect(data.redirect);
                    }
                    if (data.error==-1)
                    {
                        if (data.show_title == -1)
                        {
                            $('#game_rating_list_title').slideDown(2);
                        }

                        rating.CallFunction('<invoke name="setAverageRating"><arguments><string>'+data.average_rating+'</string><string>'+data.voted+'</string></arguments></invoke>');
                        insert(request_container, data.content, "first");
                        iniStars();
                        // to do check is experience changed
                        Profile.updateProfileForAllWindows();
                    }
                    else
                    {
                        rating.CallFunction('<invoke name="setActiveRatingForm"></invoke>');
                        addError(request_container, data.message, true, "first", 200);
                    }
                    updateDynamicContent();
                    request_flag[what+sufix] = false;
                });
            break;
            case "game_stat":
                     request_url  = "/services/game-stat/";
                     request_data = "hash="+hash;

                     $.ajax({
                         type: "POST",
                         url: request_url,
                         data: request_data,
                         success: function(data)
                         {
                              request_flag[what+sufix] = false;
                              // because experienc can be changed
                              Profile.updateProfileForAllWindows();
                         },
                         error: function (XMLHttpRequest, textStatus, errorThrown)
                         {
                              request_flag[what+sufix] = false;
                         }
                     });
             break;

////////////////////////////////////////////////////////
            case "user_add_game_to_favorite":
                request_url  = "assets/add_to_favorite.js";
                request_url  = "/services/add-game-to-favorite-ajax/";
                request_container = $("#favorite_btn_conatiner");
                request_data = "game_id="+hash;

                var button = $("#favorite_button");

                button.slideUp("fast",
                function()
                {

                    request_container.html("");

                    sendRequestAction(request_url, request_data, request_container,
                    function(data)
                    {
                        insert(request_container, data.content, "replace");
                        if (data.error==-1)
                        {
                            Profile.updateProfileForAllWindows();
                        }
                        else
                        {
                           addError(request_container.parent(), data.message, true, "before", 200);
                        }

                    });
                    request_flag[what+sufix] = false;
                });
            break;
////////////////////////////////////////////////////////
            case "user_add_user_to_friend":
                request_url  = "/profile/add-friend-ajax";
                request_container = $("#favorite_btn_conatiner");
                request_data = "friend_nick="+params.friend_nick;

                var button = $("#favorite_button");

                button.slideUp("fast",
                function()
                {
                    request_container.html("");
                    sendRequestAction(request_url, request_data, request_container,
                    function(data)
                    {
                        insert(request_container, data.content, "replace");
                        if (data.error==-1)
                        {
                            Profile.updateProfileForAllWindows();
                        }
                        else
                        {
                            addError(request_container, data.message, true, "before", 0);
                        }
                    });
                    request_flag[what+sufix] = false;
                });
            break;
            case "user_delete_friend":
                request_url  = "/profile/delete-friend-ajax/";
                request_container     = $("#game_list");
                request_form = $("#game_"+params.friend_nick);
                request_data = "friend_nick="+params.friend_nick;

                request_form.slideUp("fast", function()
                {
                    sendRequestAction(request_url, request_data, request_container,
                    function(data)
                    {
                        if (data.error < 0)
                        {
                            Profile.updateProfileForAllWindows();
                            addAlert(request_container, data.message, true, "before", 0);
                            request_form.remove();

                            $("#friends_count").html(data.friendsCount);
                            $("#funs_count").html(data.funsCount);
                        }
                        else
                        {
                            addError(request_container, data.message, true, "before", 0);
                        }

                        request_flag[what+sufix] = false;
                    });
                });
            break;
            case "user_add_friend_from_wall":
                request_url  = "/profile/wall";
                request_container = $("#wall_comments_holder");
                request_data = "friend_nick=" + params.friend_nick;
                                request_data += "&page=" + params.page;
                                request_data += "&run=add";

                request_container.slideUp("fast", function()
                {
                                    sendRequestAction(request_url, request_data,
                                        request_container,
                                        function(data)
                                        {
                                            insert(request_container, data.content, "replace", 0, function() {
                                                request_container.delay(500).slideDown("fast");
                                                iniActionLinks();
                                            });

                                            if (data.error==-1)
                                            {
                                                Profile.updateProfileForAllWindows();
                                            }
                                            else
                                            {
                                                addError(request_container, data.message, true, "before");
                                            }
                                        }
                                    );
                                    request_flag[what+sufix] = false;
                });
            break;
            case "user_delete_friend_from_wall":
                request_url  = "/profile/wall";
                request_container = $("#wall_comments_holder");
                request_data = "friend_nick=" + params.friend_nick;
                                request_data += "&run=del";

                request_container.slideUp("fast", function()
                {
                                    sendRequestAction(request_url, request_data,
                                        request_container,
                                        function(data)
                                        {
                                            insert(request_container, data.content, "replace", 100, function() {
                                                request_container.delay(500).slideDown("fast");
                                                iniActionLinks();
                                            });

                                            if (data.error < 0)
                                            {
                                                Profile.updateProfileForAllWindows();
                                            }
                                            else
                                            {
                                                addError(request_container, data.message, true, "before", 0);
                                            }
                                        }
                                    );
                                    request_flag[what+sufix] = false;
                });
            break;
            case "user_move_fun_to_friend":
                request_url  = "/profile/move-fun-to-friend-ajax/";
                request_container     = $("#game_list");
                request_form = $("#game_"+params.friend_nick);
                request_data = "friend_nick="+params.friend_nick;

                request_form.slideUp("fast", function()
                {
                    sendRequestAction(request_url, request_data, request_container,
                    function(data)
                    {
                        if (data.error==-1)
                        {
                            Profile.updateProfileForAllWindows();
                            addAlert(request_container, data.message, true, "before", 0);
                            request_form.remove();

                            $("#friends_count").html(data.friendsCount);
                            $("#funs_count").html(data.funsCount);
                        }
                        else
                        {
                            addError(request_container, data.message, true, "before", 0);
                        }

                        request_flag[what+sufix] = false;
                    });
                });
            break;
            case "user_messages_process_friendship":
                request_url  = "/profile/process-friendship-ajax/";
                request_container     = $("#messages");
                request_form = $("#friendship_msg_" + params.id);
                request_data = "friend_nick=" + params.nick ;
                request_data = request_data + "&msg_id="      + params.id;
                request_data = request_data + "&is_approved=" + params.app;

                request_form.slideUp("fast", function()
                {
                    sendRequestAction(request_url, request_data, request_container,
                    function(data)
                    {
                        if (data.error==-1)
                        {
                            if(data.message)
                            {
                                addAlert(request_container, data.message, true, "before", 0);
                            }
                        }
                        else
                        {
                         // there is not erro messages should be displayed
                         // in the case if error occired , that error should be displayed like the message
                        }
                        request_form.remove();
                        request_flag[what+sufix] = false;
                    });
                });
            break;
////////////////////////////////////////////////////////
            case "user_send_comment_to_game":
//                request_url          = "assets/add_comment.js";
                request_url          = "/services/add-comment-to-game-ajax";
                request_form         = $("#comment_submit_form");

                request_inputs.push({name :"user_comment",  title:"user_comment_title"});
                request_data = "game_id="+hash+"&"+getFormValues(request_inputs, true)["data"];

                request_container     = $("<div></div>");
                request_form.before(request_container);

                sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
                function(data)
                {
                    if (data.error==-1)
                    {
                        $("#game_comments_count").html(data.commentsCount);

                        var cont = $("#comment_list");
                        insert(cont, data.content, "first", 100, function()
                        {
                            $('.comments_title').show();
                            request_form.delay(500).slideDown("fast");
                            scrollToElement("comment_list");
                            clearForm(request_inputs);
                        });
                    }
                    else
                    {
                    }
                    request_container.remove();
                    request_flag[what+sufix] = false;
                },'',true);
            break;
////////////////////////////////////////////////////////
            case "user_send_comment_to_user_wall":
//                request_url          = "assets/add_wall_message.js";
                request_url          = "/profile/add-wall-msg-ajax";
                request_form         = $("#wall_submit_form");

                request_container     = $("<div></div>");
                request_form.before(request_container);

                request_inputs.push({name :"user_comment",  title:"user_comment_title"});
                request_data = "to_user_id="+params.to_user_id+"&"+getFormValues(request_inputs, true)["data"];

                sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
                function(data)
                {
                    if (data.error==-1)
                    {
                        var cont = $("#wall_comments_list");
                        insert(cont, data.content, "first", 100, function()
                        {
                            request_form.delay(500).slideDown("fast");
                            scrollToElement("wall_comments_list");
                        });
                        clearForm(request_inputs);
                    }
                    else
                    {
                    }
                    request_container.remove();
                    request_flag[what+sufix] = false;
                },'', true);
            break;
////////////////////////////////////////////////////////
            case "user_set_rating_for_comment":
                request_url  = "/services/set-game-comment-rating-ajax";
                request_container = $("#comment_rating_"+params.id);
                request_data = "comment_id="+params.id+"&action="+params.action;
                request_container.slideUp("fast", function()
                {
                    request_container.slideDown(0);
                    request_container.html("");
                    sendRequestAction(request_url, request_data, request_container,
                    function(data)
                    {
                        insert(request_container, String(data.content), "replace");
                        if (data.error==-1)
                        {
                            // to do check is experience changed
                            Profile.updateProfileForAllWindows();
                        }else
                        {
                            addError(request_container.parent(), data.message, true, "before", 0, function()
                            {
                                request_container.delay(200).slideDown("fast");
                            });
                        }
                        request_flag[what+sufix] = false;
                    });
                });
            break;
////////////////////////////////////////////////////////
            case "user_manage_comments_for_wall":
                request_url  = "/profile/wall-ajax";
                request_container = $("#wall_comment_"+params.id);
                request_data = "comment_id="+params.id+"&action="+params.action;

                request_container.slideUp("fast", function()
                {
                    sendRequestAction(request_url, request_data, request_container,
                    function(data)
                    {
                        if (data.error == -1)
                        {
                            addAlert(request_container, data.message, true, "before", 0);
                            request_container.remove();
                            request_flag[what+sufix] = false;
                        }else
                        {
                            request_container.show();
                            addError(request_container, data.message, true, "before", 0);
                        }
                    });
                });
            break;
////////////////////////////////////////////////////////
            case "user_delete_my_gallery":
                request_url  = "assets/user_delete_my_gallery.js";
                request_container = $("#gallery_"+params.id);
                request_data = "gallery_id="+params.id;

                request_container.slideUp("fast", function()
                {
                    sendRequestAction(request_url, request_data, request_container,
                    function(data)
                    {
                        if (data.error==-1)
                        {
                            addAlert(request_container, data.message, true, "before", 0);
                        }
                        else
                        {
                            addError(request_container, data.message, true, "before", 0);
                        }
                        request_container.remove();
                        request_flag[what+sufix] = false;
                    });
                });
            break;
////////////////////////////////////////////////////////
            case "user_delete_game_from_favorite":
                request_url  = "/services/delete-favorite-game-ajax/";
                request_container     = $("#game_list");
                request_form = $("#game_"+params.game_code);
                request_data = {game_code: params.game_code, game_name: params.game_name};
                request_form.slideUp("fast", function() {
                    sendRequestAction(request_url, request_data, request_container,
                    function(data)
                    {
                        if (data.error==-1)
                        {
                            Profile.updateProfileForAllWindows();
                            addAlert(request_container, data.message, true, "before", 0);
                        }
                        else
                        {
                            addError(request_container, data.message, true, "before", 0);
                        }
                        request_form.remove();
                        request_flag[what+sufix] = false;
                    });
                });
            break;
////////////////////////////////////////////////////////
            case "user_send_game_to_friends":
                                request_url  = $('#request_url').val();
                request_form = $("#send_to_friends_form");

                request_container     = $("<div></div>");
                request_form.before(request_container);

                request_inputs.push({name :"recipients",       title:"recipients_title"});
                request_inputs.push({name :"your_name",       title:"your_name_title"});
                request_inputs.push({name :"your_email",       title:"your_email_title"});
                request_inputs.push({name :"message",       title:"message_title"});

                request_data = "game_id="+params.id+"&"+getFormValues(request_inputs)["data"];

                sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
                function(data)
                {
                    if (data.error == -1)
                    {
                        //
                    }else{
                                            $('#recipients').val(data.data.recipients);
                                            $('#your_name').val(data.data.your_name);
                                            $('#your_email').val(data.data.your_email);
                                            $('#message').val(data.data.message);
                    }
                    request_container.remove();
                    request_flag[what+sufix] = false;
                })
            break;
////////////////////////////////////////////////////////
            case "user_save_password":
//                request_url  = "assets/user_save_password.js";
                request_url  = "/profile/change-password-ajax/";
                request_form = $("#password_form");
                request_container     = $("<div></div>");
                request_form.before(request_container);

                request_inputs.push({name :"old_password",           title:"old_password_title"});
                request_inputs.push({name :"new_password",           title:"new_password_title"});
                request_inputs.push({name :"new_password_again",       title:"new_password_again_title"});

                request_data = getFormValues(request_inputs)["data"];

                sendFormAction(
                                    request_url,
                                    request_data,
                                    request_container,
                                    request_form,
                                    request_inputs,
                                    function(data){
                                            if (data.error==-1)
                                            {
                                            }else{
                                            }
                                            request_container.remove();
                                            request_flag[what+sufix] = false;
                                        })
            break;
////////////////////////////////////////////////////////
            case "user_save_profile":
                request_url  = "assets/user_save_profile.js";
                request_url  = "/profile/save-profile-ajax/";
                request_form = $("#profile_form");
                request_container     = $("<div></div>");
                request_form.before(request_container);

                request_inputs.push({name :"name",           title:"name_title"});
                request_inputs.push({name :"last_name",       title:"last_name_title"});
                request_inputs.push({name :"gender",           title:"gende_title"});
                request_inputs.push({name :"day",           title:"data_title"});
                request_inputs.push({name :"month",           title:"data_title"});
                request_inputs.push({name :"year",           title:"data_title"});
                request_inputs.push({name :"country",       title:"country_title"});
                request_inputs.push({name :"city",           title:"city_title"});
                request_inputs.push({name :"about",           title:"about_title"});


                request_data = getFormValues(request_inputs)["data"];

                sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
                function(data)
                {
                    if (data.error==-1)
                    {
                        $('#player_info').replaceWith(data.player_info)
                    }
                    else
                    {
                    }
                    request_container.remove();
                    request_flag[what+sufix] = false;
                },false,true);
            break;
////////////////////////////////////////////////////////
            case "user_save_settings":
//                request_url          = "assets/user_save_settings.js";
                request_url          = "/profile/edit-settings-ajax/";
                request_form         = $("#settings_form");

                request_container     = $("<div></div>");
                request_form.before(request_container);

                request_inputs.push({name :"show_name"});
                request_inputs.push({name :"wall_enabled"});
                request_inputs.push({name :"new_games_alert"});


                request_data = getFormValues(request_inputs)["data"];

                sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
                function(data)
                {
                    if (data.error==-1)
                    {
                        $('#player_info').replaceWith(data.player_info)
                    }
                    else
                    {
                    }
                    request_container.remove();
                    request_flag[what+sufix] = false;
                }, true, true);
            break;
            ////////////////////////////////////////////////////////
            case "user_login":
                request_url  = "/auth/login-ajax";
                request_form = $("#login_form");
                request_container = $("<div></div>");
                request_form.before(request_container);

                request_inputs.push({name :"nickname"});
                request_inputs.push({name :"password"});
                request_inputs.push({name :"remember"});
                request_data = getFormValues(request_inputs)["data"];
                sendFormAction(
                    request_url,
                    request_data,
                    request_container,
                    request_form,
                    request_inputs,
                    function(data) {
                        if (data.sessionToken) {
                            Profile.setApiSessionToken(data.sessionToken);
                        }
                        if (data.error == -1) {
                            loginActivate(false);
                            $("#profile_params").html(data.content);
                            Profile.logInResponse();
                        }
                        request_container.remove();
                        request_flag[what+sufix] = false;
                    }
                );
                break;

            case "user_login_2":
                request_url  = "/auth/login-ajax";
                request_form = $("#login_form_2");
                request_container     = $("<div></div>");
                request_form.before(request_container);

                request_inputs.push({name :"nickname_2",           title:"nickname_title_2"});
                request_inputs.push({name :"password_2",           title:"password_title_2"});

                request_data = getFormValues(request_inputs)["data"];
                request_data = request_data + '&type=login2';
                sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
                function(data)
                {
                    Profile.setApiSessionToken(data.sessionToken);

                    if (data.error==-1)
                    {
                        Profile.logInResponse();
                        if (data.redirect) {
                            redirect(data.redirect);
                        } else {
                            loginActivate(false);
                            $("#profile_params").html(data.content);
                        }
                    }
                    else
                    {
                    }
                    request_container.remove();
                    request_flag[what+sufix] = false;
                });
            break;
            case "forgot_password":
                request_url  = "/forgot-password/send-requiest-ajax";
                request_form = $("#forgot_password_container");
                request_container     = $("<div></div>");
                request_form.before(request_container);
                request_inputs.push({name :"nickname_email", title:"nickname_email_title"});

                request_data = getFormValues(request_inputs)["data"];
                request_data = request_data;
                sendFormAction(
                    request_url,
                    request_data,
                    request_container,
                    request_form,
                    request_inputs,
                    function(data) {
                        if (data.error==-1) {
                            if (data.redirect) {
                                redirect(data.redirect);
                            } else {

                            }
                        } else {

                        }
                        //request_container.remove();
                        request_flag[what+sufix] = false;
                    },
                    false,
                    true
                );
            break;
            //------ fb  actions start
            case "user_profile_add_fb":
                Profile.clearSessionInterval();
                request_url  = "/profile/add-fb-account-ajax";
                request_form = $("#edit_profile_tab_fb_add");
                request_container     = $("<div></div>");
                request_form.before(request_container);

                request_data = getFormValues(request_inputs)["data"];
                request_data = request_data + '&perms=' + params;

                sendRequestAction(
                    request_url,
                    request_data,
                    request_container,
                    function(data) {
                        Profile.setApiSessionToken(data.sessionToken);
                        if (data.error==-1) {
                            $("#edit_profile_tab_fb_add").html('');
                            addAlert(request_container, data.message, true, "first", 200);
                        } else{
                            addError(request_container, data.message, true, "first", 200);
                            //facebookLogout();
                        }
                        if (data.redirect) {
                            redirect(data.redirect);
                        }
                        request_flag[what+sufix] = false;
                    }
                );
                break;
            case "user_login_via_facebook":
                Profile.clearSessionInterval();
                request_url  = "/auth/login-ajax-facebook";
                request_form = $("#login_form");
                request_container     = $("<div></div>");
                request_form.before(request_container);

                request_inputs.push({name :"nickname"});
                request_inputs.push({name :"password"});

                request_data = getFormValues(request_inputs)["data"];
                sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
                function(data)
                {
                    if (data.sessionToken) {
                        Profile.setApiSessionToken(data.sessionToken);
                    }
                    if (data.error==-1)
                    {
                        loginActivate(false);
                        $("#profile_params").html(data.content);
                    }
                    else
                    {
                    }
                    //if (data.redirect) {
                    //redirect(data.redirect);
                    //}
                    Profile.logInResponse(function() {
                        //reloadCurrentPage();
                    });
                    request_container.remove();
                    request_flag[what+sufix] = false;
                });
                break;
            //------ fb  actions end

            case "user_logout":
                request_url  = "/auth/logout-ajax";
                request_form = $("#login_form");
                request_container     = $("<div></div>");
                request_form.before(request_container);
                request_inputs.push({name :"logout"});

                request_data = getFormValues(request_inputs)["data"];
                sendFormAction(
                    request_url,
                    request_data,
                    request_container,
                    request_form,
                    request_inputs,
                    function(data) {
                        if (data.error == -1) {
                            loginActivate(false);
                            if (data.sessionToken) {
                                Profile.setApiSessionToken(data.sessionToken);
                            }
                            $("#profile_params").html(data.content);
                            Profile.logOutResponse();
                        }
                        request_container.remove();
                        request_flag[what+sufix] = false;
                    }
                );
                break;
            ////////////////////////////////////////////////////////
            case "user_register":
                request_url  = "/register/register-ajax";
                request_form = $("#register_form");
                request_container = $("<div></div>");
                request_form.before(request_container);

                request_inputs.push({name :"day",            title:"data_title"});
                request_inputs.push({name :"month",          title:"data_title"});
                request_inputs.push({name :"year",           title:"data_title"});
                request_inputs.push({name :"country",        title:"data_country"});
                request_inputs.push({name :"email",          title:"email_title"});
                request_inputs.push({name :"email_again",    title:"email_again_title"});
                request_inputs.push({name :"nickname_r",     title:"nickname_r_title"});
                request_inputs.push({name :"password_r",     title:"password_r_title"});
                request_inputs.push({name :"password_again", title:"password_again_title"});
                request_inputs.push({name :"gender",         title:"gender_title"});
                request_inputs.push({name :"captcha_input",  title:"captcha_input_title"});
                request_inputs.push({name :"captcha_id",     title:"captcha_id"});

                request_data = getFormValues(request_inputs)["data"];
                sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
                function(data) {
                    if (data.error == -1) {
                        if (data.sessionToken) {
                            Profile.setApiSessionToken(data.sessionToken);
                        }
                    } else { }
                    $('#captcha_img').attr('src', data.captcha_img);
                    $('#captcha_id').val(data.captcha_id);
                    $('#captcha_input').val('');
                    $('#password_r').val('');
                    $('#password_again').val('');
                    request_container.remove();
                    request_flag[what + sufix] = false;
                    if (data.redirect) {
                        redirect(data.redirect);
                    }
                }, '', true);
            break;

            case "user_register_fb":
                request_url  = "/facebook/register-ajax";
                request_form = $("#register_form");
                request_container     = $("<div></div>");
                request_form.before(request_container);

                request_inputs.push({name :"day",            title:"data_title"});
                request_inputs.push({name :"month",          title:"data_title"});
                request_inputs.push({name :"year",           title:"data_title"});
                request_inputs.push({name :"country",        title:"data_country"});
                request_inputs.push({name :"email",          title:"email_title"});
                request_inputs.push({name :"email_again",    title:"email_again_title"});
                request_inputs.push({name :"nickname_r",     title:"nickname_r_title"});
                request_inputs.push({name :"password_r",     title:"password_r_title"});
                request_inputs.push({name :"password_again", title:"password_again_title"});
                request_inputs.push({name :"gender",         title:"gender_title"});

                request_data = getFormValues(request_inputs)["data"];
                sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
                function(data)
                {
                    if (data.error == -1) { } else { }
                    if (data.sessionToken) {
                        Profile.setApiSessionToken(data.sessionToken);
                    }
                    $('#password_r').val('');
                    $('#password_again').val('');
                    request_container.remove();
                    request_flag[what+sufix] = false;
                    if (data.redirect) {
                        redirect(data.redirect);
                    }
                }, '',true);
            break;
            case "update_profile":
                request_url  = "/auth/get-profile-header-ajax";
                request_form = $("#profile_params");
                request_container     = $("<div style='display: none;'></div>");
                request_form.append(request_container);
                request_data = "";

                if (hash)
                {
                    request_data = "hash="+hash;
                }

                sendRequestAction(request_url, request_data, request_container, function(data) {
                    $("#profile_params").html('');
                    $("#profile_params").html(data.content);
                    updateReplacement(data.replace);
                    updateAchivments(data.achivments);

                    request_flag[what+sufix] = false;
                    request_container.remove();
                    Profile.updateResponse();
                });
            break;
            case "main_page":
                request_url  = "/index/lazy-loading/";

                request_container = params.container;
                request_data = "index=" + params.index;

                sendRequestAction(request_url, request_data, request_container,
                function(data)
                {
                    if (data.error==-1)
                    {
                        insert(request_container, data.content, "first", 0, function()
                        {
                            request_flag[what+sufix] = false;
                            updateDynamicContent();
                            iniStars();
                            initAds();
                        });
                    }
                    else
                    {
                        request_flag[what+sufix] = false;
                        addError(request_container, data.message, true, "first", 200);
                    }
                });
            break;
            ///////////////////////////////////////////////////////
            default:myAlert("Don't find request "+what);
        }
    }
}

/////////////////////////////////////
function iniShare()
{
     if (window.addthis){
                try
                {  
		           window.addthis.ost = 0;
                   window.addthis.ready();
                   twttr.widgets.load();
                }
                catch(e){} 
     }
}

///////////////////////////
var searchParam = 0;
function changeSearchParams()
{
    searchParam = !searchParam;
    updateSearchParams()
}
function updateSearchParams()
{
    if (searchParam==0)
    {
        $("#search_select").html(getTranlation("Game"))
    }
    else
    {
        $("#search_select").html(getTranlation("Player"));
    }
}
function loginActivate(flag)
{
    removeError();
    removeAlerts();
    if (flag)
    {
        $("#login").slideDown(200);
    }
    else
    {
        $("#login").slideUp(200);
    }
}
function makeQuickSearch()
{
    var search_var = $('#search_input').val();
    var action = 'game';
    if (searchParam != 0)
    {
        action = 'player';
    }
    var url = 'http://' + Profile.getDomainName() + "/search/" + action + '?s=' + search_var;
    window.location = url;
}

function redirect(location)
{
    if (!location)
    {
        window.location = '';
    } else {
        window.location = location;
    }
}

/*******************************************************************************
 * AJAX forms
 **/

function ajaxSendContactUs(formName)
{
    var request_url;
    var request_container;
    var request_form;
    var request_data;
    var request_inputs = [];

    request_url  = $('#request_url').val();
    request_form = $("#" + formName);
    request_container     = $("<div></div>");
    request_form.before(request_container);

    request_inputs.push({
        name :"name",
        title:"name_title"
    });
    request_inputs.push({
        name :"email",
        title:"email_title"
    });
    request_inputs.push({
        name :"comments",
        title:"comments_title"
    });
    request_inputs.push({
        name :"captcha_input",
        title:"captcha_input_title"
    });
    request_inputs.push({
        name :"captcha_id",
        title:"captcha_id_title"
    });

    request_data = getFormValues(request_inputs)["data"];

    sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
        function(data)
        {
            if (data.content)
            {
                request_form.html(data.content);
            }
            request_container.remove();
        });
}

function ajaxSuggestGame(formName)
{
    var request_url;
    var request_container;
    var request_form;
    var request_data;
    var request_inputs = [];

    request_url  = $('#request_url').val();
    request_form = $("#" + formName);
    request_container     = $("<div></div>");
    request_form.before(request_container);

    request_inputs.push({
        name :"game_name",
        title:"game_name_title"
    });
    request_inputs.push({
        name :"your_name",
        title:"your_name_title"
    });
    request_inputs.push({
        name :"developer_name",
        title:"developer_name_title"
    });
    request_inputs.push({
        name :"email",
        title:"email_title"
    });
    request_inputs.push({
        name :"game_url",
        title:"game_url_title"
    });
    request_inputs.push({
        name :"game_description",
        title:"game_description_title"
    });
    request_inputs.push({
        name :"captcha_input",
        title:"captcha_input_title"
    });
    request_inputs.push({
        name :"captcha_id",
        title:"captcha_id_title"
    });

    request_data = getFormValues(request_inputs)["data"];

    sendFormAction(request_url, request_data, request_container, request_form, request_inputs,
        function(data)
        {
            if (data.content)
            {
                request_form.html(data.content);
            }
            request_container.remove();
        });
}

function selectText(obj)
{
    obj.focus();
    obj.select();
    if (window.clipboardData)
    {
        window.clipboardData.setData('Text',obj.value);
    }
}
// 28-09-2010
var arr_dimages = new Array();
var arr_dimages_show = new Array();
var b_dimages_loading = false;
var n_time = 0;
var n_interva;
var n_t = 150;

function belowthefold(element) {
    var fold = $(window).height() + $(window).scrollTop();
    return fold <= $(element).offset().top;
}

function abovethetop(element) {
    var top = $(window).scrollTop();
    return top >= $(element).offset().top + $(element).height();
}

function rightofscreen(element) {
    var fold = $(window).width() + $(window).scrollLeft();
    return fold <= $(element).offset().left;
}

function leftofscreen(element) {
    var left = $(window).scrollLeft();
    return left >= $(element).offset().left + $(element).width();
}

function inviewport(element) {
    if (element)
    {
        return !rightofscreen(element) && !leftofscreen(element) && !belowthefold(element) && !abovethetop(element);
    }
    else
    {
        return(false);
    }
}

function showDynamicImage()
{
    if ((b_dimages_loading==false)&&(arr_dimages_show.length>0))
    {

        var item = arr_dimages_show[0]["item"];
        var img  = arr_dimages_show[0]["img"];

        b_dimages_loading = true;

        $(img).fadeIn(n_t,
        function()
        {
            item.removeClass("image_loading");
            item.addClass("image_loaded");

            arr_dimages_show.splice(0,1);
            b_dimages_loading = false;
            showDynamicImage()
        })
    }
}
function onLoadComplete(item, img)
{
    arr_dimages_show.push({item:item, img:img})
    $(img).hide();

    var f = function ()
    {
        $(item).append($(img));
        showDynamicImage();
    }
    return(f);
}
function onLoadError(item, img)
{
    var f = function ()
    {
        showDynamicImage();
    }
    return(f);
}
function loadDynamicImage()
{
    for (var i=0; i<arr_dimages.length; i++)
    {
        var img = new Image();

        var src = arr_dimages[i]["src"];
        var item = arr_dimages[i]["item"];

        $(img).load(onLoadComplete(item, img)).error(onLoadError(item, img)).attr('src', src);
    }
    arr_dimages = new Array();
}

function updateDynamicImages()
{
    var n = new Date().getTime();
    var j = 0;

    $(".image_loader").each(function() {
        var item = $(this);

        if (inviewport(this))
        {
            var src = item.attr("image_src");
            item.removeAttr("image_src");
            item.removeClass("image_loader");
            item.addClass("image_loading");

            arr_dimages.push({src:src, item:item, loaded:0});
        }
        j++;
    });
    loadDynamicImage();
}

function updateDynamicGamesList()
{
    var n = 0;
    $(".content_loader").each(function() {

        if (inviewport(this))
        {
            var item     = $(this);
            var src     = item.attr("content_src");
            var index     = item.attr("index");
            if ((request_flag[src]==undefined) || (request_flag[src]==false))
            {
                item.removeClass("content_loader");
                item.addClass("content_loaded");
                sendRequest(src, {index:index, container:item, onData:updateDynamicImages})
            }
        }
    });

    loadDynamicImage();
}
function updateDynamicContent()
{
    updateDynamicImages();
    updateDynamicGamesList();
}
function iniDynamicContent()
{

    updateDynamicContent();

    jQuery(window).bind('scrollstop', function(e){
        updateDynamicContent();
    });
    jQuery(window).bind('resize', function(e){
        updateDynamicContent();
    });
}

function showLoginForm()
{
    scrollToElement("profile_info");
    loginActivate(true);
}

function reloadCurrentPage()
{
    var currSource  = document.location.href;
    var url = base+((currSource.indexOf("#")==-1) ? currSource.substring(currSource.indexOf(base)+base.length) : "/"+currSource.substring(currSource.indexOf("#")+1));
    //myAlert('reload ' + url);
    //alert(url);
    document.location.href = url;
}

function isDebugModeEnabled()
{
    if (debugIsEnabled > 0)
    {
        return true;
    }else {
        return false;
    }
}
function updateReplacement(arr_rep) {
     if (arr_rep) {
          for (var name in arr_rep) {
               $("."+name).each(function() {
                    var item = $(this);
                    if (item.html() != arr_rep[name]) {
                        item.html(arr_rep[name]);
                    }
               });
          }
     }
}
function updateAchivments(arr_ach) {
    if (arr_ach) {
        for (var i = 0; i < arr_ach.length; i++) {
            $(".ach_" + arr_ach[i]).each(function() {
                var item = $(this);
                item.addClass("taken");
            });
        }
    }
}
var gameStatInterval
function iniGameStat() {
    if ((hash != undefined ) && (hash != '')) {
        gameStatInterval = setInterval(updateStat, gameReviewTime);
    }
}
function updateStat() {
     sendRequest("game_stat");
     clearInterval(gameStatInterval);
}

/**
 * sets global variable apiSessionToken to custom value
 * is require t odinamically change that value(session token for api server)
 * @val string
 */
function setApiSessionToken(val)
{
    showApiSessionToken('old');
    window.apiSessionToken = val;

    //Profile.iniParams();

    showApiSessionToken('new');
}
function showApiSessionToken(prefix )
{
    myAlert('showApiSessionToken prefix=' + prefix + ' apiSessionToken=' + apiSessionToken);
}

function safariCookiesFix()
{
     if (($.browser.webkit) || ($.browser.safari)) {
        $('body').append('<iframe id="safari_cookies_fix" name="safari_cookies_fix"></iframe>');
        $('body').append('<form id="safari_cookies_fix_form" action="' + Profile.getApiNoContent() + '" method="post" target="safari_cookies_fix" >');
        $('#safari_cookies_fix_form').submit();
     }
}

var setDiffTimeCookie = function(domain, diffTimeCookieName, diffTimeExpireDays) {
    if ($.cookie(diffTimeCookieName) == null) {
        var expires = new Date();
        var diffSec = expires.getTimezoneOffset();
        expires.setDate(expires.getDate() + diffTimeExpireDays);
        $.cookie(diffTimeCookieName, diffSec, {
            expires: expires,
            path: '/',
            domain: domain
        });
    }
};

function initAds()
{
    $("div[id^='div-gpt-ad']").each(function ()
    {
        var item = $(this);
        if(!item.hasClass('ad-displayed'))
        {
            var slot = item.attr("slot");
            var oop  = Number(item.attr("oop"));
            var id   = 'div-gpt-ad-' + Math.round(Math.random() * 100000) + '-0';
            item.attr('id', id);
            item.addClass('ad-displayed');
            if(oop == 1)
            {
                googletag.defineOutOfPageSlot(slot, id).addService(googletag.pubads());
            }
            else
            {
                googletag.defineSlot(slot, [item.width(), item.height()], id).addService(googletag.pubads());
            }
            googletag.enableServices();
            googletag.display(id);
        }
    });
}

function loadSharedLevel(_level_id)
{
    var game_iframe = document.getElementById('gamezhero_game_frame');
    if (game_iframe)
    {
        game_iframe.contentWindow.loadSharedLevel(_level_id);
    }
}
