var COMMENT_TITLE_TEMPLATE =    '<div class="title">' +
                                    '<div class="comment_creator_photo"><a href="{user_view_url}" title="{login}"><img src="{user_thumbnail}" class="user_small_thumbnail"></a></div>' +
                                    '<div class="rate_block_container">' +
                                        '{if "{image_url}"}' +
                                            '<a href="javascript: void(0)" class="share_comment_link" onclick="return OpenShareCommentForm({id_comment}, \'{view_url}\', event);" title="Share">Share</a>' +
                                        '[if]' +
                                        '{if {is_removable} && \'{image_url}\'}' +
                                            '<div class="remove_link_separator">|</div>' +
                                        '[if]' +
                                        '{if {is_removable}}' +
                                        '<div class="remove_comment_link_container">' +
                                            '<a href="javascript:RemoveComment({id_comment});" class="remove_comment_link_icon" title="Delete"><img src="/images/close_button.gif" alt=""></a>' +
                                            '<a href="javascript:RemoveComment({id_comment});" class="remove_comment_link" title="Delete">Delete</a>' +
                                        '</div>' +
                                        '[if]' +
                                    '</div>' +
                                    '<div class="comment_info">' +
                                        '<a href="{user_view_url}" title="{login}">{login}</a>' +
                                        '&nbsp;{if {is_pro_account}}<a href="{slidelog_url}"><img src="/images/pro.png" class="pro_icon"></a>[if]&nbsp;' +
                                        '<span class="gray">({time_ago} {time_units} ago)</span>' +
                                    '</div>' +
                                '</div>';

var COMMENT_TEMPLATE =          '<p id="commentText{id_comment}">{comment}</p>';
var GRAPHIC_COMMENT_TEMPLATE =  '<div class="comment_container">' +
                                    '<div class="graphic_comment" style="background-image: url(\'{image_url}\');" onclick="LoadCommentToPlayer({id_comment});" ' +
                                        'onmouseover="ShowGraphicCommentMask({id_comment});" onmouseout="HideGraphicCommentMask({id_comment});">' +
                                        '<img src="/images/overlay_view.png" class="graphic_comment_mask hidden" id="graphicCommentMaskIcon{id_comment}">' +
                                    '</div>' +
                                    '<p id="commentText{id_comment}">' +
                                        '{comment}' +
                                    '</p>' +
                                    '<div class="graphic_comment_clear"></div>' +
                                '</div>';

var COMMENTS_PER_PAGE = 10;

var DOWNLOAD_DROPDOWN_TIMEOUT = 1000;

var POPUP_OFFSET_X = jQuery.browser.mozilla ? -3 : -4;
var POPUP_OFFSET_Y = 11;

var WEBCAST_POPUP_OFFSET_X = jQuery.browser.mozilla ? 5 : 4;

var CRITERION_COUNT = 5;
var OTHER_USER_VOTE_ROW_INDEX = 8;

var RELATED_RESOURCES_COUNT_PER_PAGE    = 4;
var USER_RESOURCES_COUNT_PER_PAGE       = 4;

var RELATED_RESOURCES_COLUMNS  = 4;
var USER_RESOURCES_COLUMNS     = 4;

var RESOURCES_LIST_COLUMN_SPACE = 14;


var WEBCAST_RELATED_RESOURCES_COUNT_PER_PAGE    = 4;
var WEBCAST_USER_RESOURCES_COUNT_PER_PAGE       = 2;

var WEBCAST_RELATED_RESOURCES_COLUMNS  = 2;
var WEBCAST_USER_RESOURCES_COLUMNS     = 2;

var WEBCAST_RESOURCES_LIST_COLUMN_SPACE = 24;

var g_idResource = null;
var g_isWebcast = null;
var g_hasPresenterVideo = null;

var g_loadedGraphicComment = 0;

var g_userResourcesRequest    = null;
var g_downloadVars            = null;
var g_resourceInfo            = null;

var g_currentSiteUrl = null;

function PostComment()
{
    var commentField = $("#comment");
    var comment = Trim(commentField.val());

    if (comment == "")
    {
        alert("Please enter text of the comment!");
        return;
    }

    SendComment(comment, g_idResource);

    commentField.val("");
    ClosePostCommentForm();
}

function SendComment(comment, idResource)
{
    var valuesAr =
    [
        idResource,
        comment,
        1,
        GetPage("comments")
    ];

    var varsAr =
    [
        "id_resource",
        "comment",
        "all_comments",
        "page"
    ];

    ShowCommentsLoadProgress();

    var queryString = UriSerialize(varsAr, valuesAr);
    var postCommentScript = "/add_resource_comment.php";

    ajaxpage(postCommentScript, OnSendComment, queryString);
}

function RefreshComments()
{
    ShowCommentsLoadProgress();

    var values = [g_idResource, 1, GetPage("comments")];
    var vars = ["id_resource", "all_comments", "page"];

    var queryString = UriSerialize(vars, values);
    var postCommentScript = "/add_resource_comment.php";

    ajaxpage(postCommentScript, OnSendComment, queryString);
}

function ShowCommentsLoadProgress()
{
    var commentsContainer = $("#comments_table");

    //check for empty comments table
    if (commentsContainer.css("display") == 'none')
    {
        commentsContainer.css("display", '');
        $('#comments_title').show();
        $('#no_comments_title').hide();

        //insert empty fill row
        var emptyDiv = $("<div />");
        emptyDiv.css("height", "100px");
        emptyDiv.addClass("emptyPlaceholder");
        emptyDiv.html(" ");

        commentsContainer.append(emptyDiv);
    }

    $("#commentsLoadContainer").css("visibility", "");
    var commentsLoadIcon = $("#commentsLoadIcon");
    commentsLoadIcon.css("top", ((commentsLoadIcon.height() - commentsContainer.height()) / 2) + "px");

    commentsContainer.find(".comment").css("visibility", "hidden");
}

function HideCommentsLoadProgress()
{
    $("#commentsLoadContainer").css("visibility", "hidden");
}

function OnSendComment(response)
{
    var result = ParseQueryString(response);
    var returnCode = parseInt(GetQueryStringParam(result, "code"));
    if (returnCode)
    {
        var allowFlagComment    = $("#allowFlagComment").val();
        var countComments = parseInt(GetQueryStringParam(result, "count_comments"));
        var comments = new Array();
        for (var i = 0; i < countComments; ++i)
        {
            var comment = new Object();
            comment.id_comment      = GetQueryStringParam(result, "id_comment" + i);
            comment.comment         = GetQueryStringParam(result, "comment" + i);
            comment.login           = GetQueryStringParam(result, "login" + i);
            comment.time_ago        = GetQueryStringParam(result, "time_ago" + i);
            comment.time_units      = GetQueryStringParam(result, "time_units" + i);
            comment.user_view_url   = GetQueryStringParam(result, "user_view_url" + i);
            comment.image_url       = GetQueryStringParam(result, "image_url" + i);
            comment.marker_xml      = GetQueryStringParam(result, "marker_xml" + i);
            comment.user_thumbnail  = GetQueryStringParam(result, "user_thumbnail" + i);
            comment.view_url        = GetQueryStringParam(result, "view_url" + i);
            comment.is_pro_account  = parseInt(GetQueryStringParam(result, "is_pro_account" + i));
            comment.slidelog_url    = GetQueryStringParam(result, "slidelog_url" + i);
            comment.is_text_comment = parseInt(GetQueryStringParam(result, "is_text_comment" + i));
            comment.is_removable    = parseInt(GetQueryStringParam(result, "is_removable" + i));

            comment.allow_flag     = allowFlagComment;

            comments.push(comment);
        }

        UpdateComments(comments);

        var countAllComments = parseInt(GetQueryStringParam(result, "count_all_comments"));

        SetPageItems("comments", countAllComments, COMMENTS_PER_PAGE);
        SetPageItems("commentsBottom", countAllComments, COMMENTS_PER_PAGE);
    }
    else
    {
        var isAddCommentError = parseInt(GetQueryStringParam(result, "error"));
        if (isAddCommentError)
        {
            alert(MSG_ADD_COMMENT_FAIL);
        }
    }
}

function UpdateComments(comments)
{
    var commentsContainer = $("#comments_table");
    ClearComments(commentsContainer);
    HideCommentsLoadProgress();

    for (var i = 0; i < comments.length; ++i)
    {
        var comment = comments[i];
        var commentDiv = $("<div />").addClass("comment");

        if (comment.image_url != "")
        {
            commentDiv.addClass("graphic_comment_container");
        }

        commentDiv.append($(ParseTemplate(COMMENT_TITLE_TEMPLATE, comment)));
        if (comment.image_url != "")
        {
            commentDiv.append($(ParseTemplate(GRAPHIC_COMMENT_TEMPLATE, comment)));
        }
        else
        {
            commentDiv.append($(ParseTemplate(COMMENT_TEMPLATE, comment)));
        }

        $("#commentsLoadContainer").before(commentDiv);

        if (comment.image_url != "")
        {
            AddWordWrap("commentText" + comment.id_comment, RESOURCE_DETAILS_GRAPHIC_COMMENT_WRAP_LENGTH);
        }
        else
        {
            AddWordWrap("commentText" + comment.id_comment, RESOURCE_DETAILS_COMMENT_WRAP_LENGTH);
        }
    }

    if (comments && comments.length)
    {
        commentsContainer.show();

        $('#comments_title').show();
        $('#no_comments_title').hide();
    }
    else
    {
        commentsContainer.hide();

        $('#comments_title').hide();
        $('#no_comments_title').show();
    }
}

function ClearComments(commentsContainer)
{
    commentsContainer.find(".comment, .emptyPlaceholder").remove().end();
}

function OpenPostCommentForm()
{
    SwitchVisibility("post_comment_form");
    $("#comment").focus();
    return false;
}

function ClosePostCommentForm()
{
    SwitchVisibility("post_comment_form");
}

function OnChangeCommentsPage()
{
    SynchBottomCommentsWithTopNav();
    RefreshComments();
}

function OnChangeBottomTextCommentsPage()
{
    SynchCommentsWithBottomNav();
    RefreshComments();
}

function SynchCommentsWithBottomNav()
{
    var bottomNavigator = g_pageNavigators["commentsBottom"];
    var topNavigator = g_pageNavigators["comments"];

    topNavigator.page = bottomNavigator.page;
    SetPageItems("comments", bottomNavigator.countItems, bottomNavigator.itemsPerPage);
}

function SynchBottomCommentsWithTopNav()
{
    var bottomNavigator = g_pageNavigators["commentsBottom"];
    var topNavigator = g_pageNavigators["comments"];

    bottomNavigator.page = topNavigator.page;
    SetPageItems("commentsBottom", topNavigator.countItems, topNavigator.itemsPerPage);
}

function ShowGraphicCommentMask(idComment)
{
    $("#graphicCommentMaskIcon" + idComment).show();

    if ($.fn.ifixpng)
    {
        $('img.graphic_comment_mask').ifixpng();
    }
}

function HideGraphicCommentMask(idComment)
{
    $("#graphicCommentMaskIcon" + idComment).hide();

    if ($.fn.iunfixpng)
    {
        $('img.graphic_comment_mask').iunfixpng();
    }
}

function LoadCommentToPlayer(idComment)
{
    if (g_loadedGraphicComment == idComment)
    {
        GetFlashApp("onlinePlayer").clearMarkerComment();
        UpdateGraphicCommentMask(g_loadedGraphicComment, false);
        g_loadedGraphicComment = 0;
    }
    else
    {
        if (g_loadedGraphicComment)
        {
            UpdateGraphicCommentMask(g_loadedGraphicComment, false);
        }

        g_loadedGraphicComment = idComment;
        GetFlashApp("onlinePlayer").loadMarkerComment(idComment);
        UpdateGraphicCommentMask(g_loadedGraphicComment, true);
    }
}

function UpdateGraphicCommentMask(idComment, isSelected)
{
    $("#graphicCommentMaskIcon" + idComment).attr("src", (isSelected ? "/images/overlay_hide.png" : "/images/overlay_view.png"));
}

function PrepareGraphicCommentPlaceholder(idResource)
{
    var graphicCommentsContainer = $("#graphic_comments_table");
    graphicCommentsContainer.append($(GRAPHIC_COMMENT_PLACEHOLDER));

    SetVisibility('graphic_comments_title', true);
    SetVisibility('graphic_comments_table_container', true);
}

function FlagResource()
{
    var complainForm = GetElement("complain_form");
    var idResource = complainForm.idResource;

    var reason = GetElementValue("flag_reason");
    if (reason == "")
    {
        alert("Please select your reason for flagging this presentation as inappropriate.");
        return;
    }

    CloseComplainForm();

    var valuesAr =
    [
        reason,
        idResource
    ];
    var varsAr =
    [
        "reason",
        "id_resource"
    ];

    var queryString = UriSerialize(varsAr, valuesAr);
    ajaxpage("/flag_resource.php", OnFlagResource, queryString);
}

function OnFlagResource(response)
{
    alert("Thank you for your feedback.");
}

function OpenComplainForm(idResource, event)
{
    var complainForm = GetElement("complain_form");
    complainForm.idResource = idResource;

    var y = GetMouseOnEventYPosition(event);

    complainForm.style.top = (y + 20) + "px";

    SwitchVisibility("complain_form");

    return false;
}

function CloseComplainForm()
{
    SwitchVisibility("complain_form");
}

function SetPopupPosition(popup, anchorElement, anchorTopElement, alignRight, offsetX, offsetY)
{
    anchorElement = $(anchorElement);
    anchorPosition = anchorElement.offset();

    anchorTopElement = $(anchorTopElement);

    offsetX = offsetX || 0;
    offsetY = offsetY || 0;

    popup = $(popup);

    var popupLeft = (!alignRight ? (anchorPosition.left + offsetX) : (anchorPosition.left + anchorElement.outerWidth() - popup.innerWidth() + offsetX));
    var popupTop = (anchorPosition.top + offsetY);

    if (anchorTopElement.size())
    {
        anchorTopPosition = anchorTopElement.offset();
        popupTop = anchorTopPosition.top + anchorTopElement.height() + offsetY;
    }

    popup.css("top", popupTop + "px");
    popup.css("left", popupLeft + "px");
}

function ToggleShareOptions()
{
    $("#presentation_ShareOptions").toggle();

    if ( $("#presentation_ShareOptions").is(":visible") )
    {
        $("#presentation_ImgMoreOptions").attr("src", "/images/collapse_more_options.png");
        $("#presentation_LinkMoreOptions").text(LNG_PRESENTATION_DETAILS.LESS_SHARE_OPTIONS);
    }
    else
    {
        $("#presentation_ImgMoreOptions").attr("src", "/images/expand_more_options.png");
        $("#presentation_LinkMoreOptions").text(LNG_PRESENTATION_DETAILS.MORE_SHARE_OPTIONS);
    }
}

function CopyEmbed(idField)
{
    CopyToClipboard(GetElementValue(idField));
    SwitchVisibility(idField + "Link");
    SwitchVisibility(idField + "Span");
}


function OpenShareCommentForm(idComment, commentViewUrl, event)
{
    var resourceObjectUrl   = g_resourceInfo['get_object_url'];
    var resourceEmbedWidth  = g_resourceInfo['embed_width'];
    var resourceEmbedHeight = g_resourceInfo['embed_height'];
    var y = GetMouseOnEventYPosition(event);
    var allowEmbedComment   = g_resourceInfo['allow_embed'] && g_resourceInfo['is_published'] ? 1 : 0;

    if (allowEmbedComment)
    {
        var embedPlayerVars = new Array();
        embedPlayerVars['mode']       = 0;
        embedPlayerVars['idResource'] = g_idResource;
        embedPlayerVars['siteUrl']    = g_currentSiteUrl;
        embedPlayerVars['embed']      = 1;
        embedPlayerVars['comment']    = idComment;
        embedPlayerVars['autoOpenShareScreen'] = 1;
        GetElement('embedComment').value = GetPlayerEmbed("onlinePlayer", resourceObjectUrl, embedPlayerVars, resourceEmbedWidth, resourceEmbedHeight);
    }

    GetElement('viewCommentUrl').value = commentViewUrl;

    var shareCommentForm = GetElement("shareCommentForm");
    shareCommentForm.style.top = (y + 15) + "px";
    shareCommentForm.style.display = "";

    return false;
}

function CloseShareCommentForm()
{
    GetElement("shareCommentForm").style.display = "none";
}

function OnSavePostStatistics()
{
}

function OpenPostForm(idPost, event)
{
    var x = GetMouseOnEventXPosition(event);

    InitWildfire(
        g_idResource,
        'divWildfirePost',
        'playerEmbedHtml',
        idPost,
        function ()
        {
            var postForm = GetElement("post_form");
            postForm.style.left = x - 75;
            postForm.style.display = '';
        },
        ClosePostForm
    );

    return false;
}

function ClosePostForm()
{
    GetElement("post_form").style.display = 'none';
}


function SaveFavorites(idResource)
{
    var url = "/save_favorite_resource.php?id_resource=" + idResource + "&add=1";
    ajaxpage(url, function(){}, null);

    OnFavoriteSaved(true);
}

function RemoveFavorites(idResource)
{
    var url = "/save_favorite_resource.php?id_resource=" + idResource + "&add=0";
    ajaxpage(url, function(){}, null);

    OnFavoriteSaved(false);
}

function OnFavoriteSaved(favorite)
{
    GetElement("favorite_link").style.display = 'none';
    if (favorite)
    {
        alert("This presentation has been added to your favorites.");
    }
    else
    {
        alert("This presentation has been removed from your favorites.");
    }
}

function OpenEmbedForm()
{
    SetPopupPosition($("#embedForm"), $("#shareButtonsContainer"), $("#openEmbedTabLink") , (g_isWebcast || g_hasPresenterVideo), (g_isWebcast || g_hasPresenterVideo) ? WEBCAST_POPUP_OFFSET_X : POPUP_OFFSET_X, POPUP_OFFSET_Y);

    CloseAddPresentationToGroupForm();
    SwitchVisibility("embedForm");
    HideClipboardCopyButtons();
}

function CloseEmbedForm()
{
    ShowClipboardCopyButtons();
    SetVisibility("embedForm", false);
}

function OpenAddPresentationToGroupForm()
{
    SetPopupPosition($("#addPresentationToGroupForm"), $("#shareButtonsContainer"), $("#openShareViaGroupLink"), (g_isWebcast || g_hasPresenterVideo), (g_isWebcast || g_hasPresenterVideo) ? WEBCAST_POPUP_OFFSET_X : POPUP_OFFSET_X, POPUP_OFFSET_Y);

    CloseEmbedForm();
    SwitchVisibility("addPresentationToGroupForm", true);
    HideClipboardCopyButtons();
}

function CloseAddPresentationToGroupForm()
{
    ShowClipboardCopyButtons();
    SetVisibility("addPresentationToGroupForm", false);
}
function AddPresentationToGroup()
{
    var idGroup = parseInt(GetElementValue("idGroup"));
    var message = GetElementValue("groupMessage");

    if (!idGroup)
    {
        alert("Please select group.");
        return;
    }

    SetVisibility("addPresentationToGroupProgress", true);
    DisableButton("addPresentationToGroupButton");

    var paramNames =
    [
        "id_resource",
        "id_group",
        "message"
    ];

    var paramValues =
    [
        g_idResource,
        idGroup,
        message,
    ];

    var query = UriSerialize(paramNames, paramValues);
    ajaxpage("/group/" + idGroup + "/add_presentation/" + g_idResource, OnAddPresentationToGroup, query);
}

function OnAddPresentationToGroup(response)
{
    SetVisibility("addPresentationToGroupProgress", false);
    EnableButton("addPresentationToGroupButton");

    var result = ParseQueryString(response);
    var alreadyShared = parseInt(GetQueryStringParam(result, "already_shared"));
    var isShared      = parseInt(GetQueryStringParam(result, "shared"));
    var isModerated   = parseInt(GetQueryStringParam(result, "is_moderated"));
    var notOwnPresentation = parseInt(GetQueryStringParam(result, "shared_anothers"));
    var limitExceeded = parseInt(GetQueryStringParam(result, "exceed_share_limit"));

    if (alreadyShared)
    {
        alert("Presentation was already shared with this group.");
    }
    else if (isShared)
    {
        alert("Presentation has been successfully shared with this group.");
        CloseAddPresentationToGroupForm();
    }
    else if (isModerated)
    {
        alert("Sorry, you are not allowed to share presentations with this group.");
    }
    else
    {
        alert("Can't share presentation with this group.");
    }
}

function ToggleResourceNotes()
{
    SwitchVisibility("resourceNotes");

    var resourceNotesIcon = GetElement("resourceNotesIcon");
    if (IsVisible("resourceNotes"))
    {
        resourceNotesIcon.src = "/images/collapse_more_options.gif";
    }
    else
    {
        resourceNotesIcon.src = "/images/expand_more_options.gif";
    }
}

function ToggleResourceTranscript()
{
    SwitchVisibility("resourceTranscript");

    var resourceTranscriptIcon = GetElement("resourceTranscriptIcon");
    if (IsVisible("resourceTranscript"))
    {
        resourceTranscriptIcon.src = "/images/collapse_more_options.gif";
    }
    else
    {
        resourceTranscriptIcon.src = "/images/expand_more_options.gif";
    }
}

function HideClipboardCopyButtons()
{
    $('#clipboardResourceUrlContainer').hide();
    $('#clipboardPlayerEmbedContainer').hide();
    $('#clipboardPlayerWordPressEmbedContainer').hide();
}

function ShowClipboardCopyButtons()
{
    $('#clipboardResourceUrlContainer').show();
    $('#clipboardPlayerEmbedContainer').show();
    $('#clipboardPlayerWordPressEmbedContainer').show();
}

function DownloadResource(idResource, resourceTitle, basicUrl, resourceWidth, resourceHeight, startAuto, autoReplay)
{
    var downloadUrl = basicUrl;
    if (g_downloadVars)
    {
        for (var i in g_downloadVars)
        {
            downloadUrl += "&" + i + "=" + encodeURIComponent(g_downloadVars[i]);
        }
    }

    downloadUrl += "&resource_title=" + encodeURIComponent(resourceTitle);
    downloadUrl += "&width=" + encodeURIComponent(resourceWidth);
    downloadUrl += "&height=" + encodeURIComponent(resourceHeight);
    downloadUrl += "&startAuto=" + encodeURIComponent(startAuto);
    downloadUrl += "&autoReplay=" + encodeURIComponent(autoReplay);

    GotoUrl(downloadUrl);
}

function InitDropdownMenus()
{
    var container = $("div#downloadMenuContainer");

    if (!container.size())
    {
        return;
    }

    var downloadMenu = new DropdownMenu(container, DOWNLOAD_DROPDOWN_TIMEOUT);
    var downloadLink = $("a#resourceDownloadLink");
    var downloadIcon = $("a#resourceDownloadIcon");
    var dropdownIcon = $("a#resourceDownloadDropDownIcon");

    downloadLink.hover(function () {downloadMenu.Activate();}, function () {downloadMenu.WaitForHide();});
    downloadLink.click(function () {downloadMenu.Activate();});
    downloadIcon.hover(function () {downloadMenu.Activate();}, function () {downloadMenu.WaitForHide();});
    downloadIcon.click(function () {downloadMenu.Activate();});
    dropdownIcon.hover(function () {downloadMenu.Activate();}, function () {downloadMenu.WaitForHide();});
    dropdownIcon.click(function () {downloadMenu.Activate();});
}

function GeneratePrivateKey()
{
    GetElement("privateKeyProgress").style.visibility = "";

    var queryString = UriSerialize(["id_resource"], [g_idResource]);
    ajaxpage("/generate_private_key.php", OnGeneratePrivateKey, queryString);
}

function OnGeneratePrivateKey(response)
{
    var result = ParseQueryString(response);
    var privateUrl = GetQueryStringParam(result, "view_url");

    GetElement("resourceUrl").value = privateUrl;
    GetElement("privateKeyProgress").style.visibility = "hidden";
}

function ShowHtmlPlayerEmbed()
{
    SetVisibility("playerEmbedHtml", true);
    SetVisibility("playerEmbedXhtml", false);
}

function ShowXhtmlPlayerEmbed()
{
    SetVisibility("playerEmbedHtml", false);
    SetVisibility("playerEmbedXhtml", true);
}

function GetUserVotes(container)
{
    container = $(container);

    var votes = {};

    for (var criterionIndex = 1; criterionIndex <= CRITERION_COUNT; ++criterionIndex)
    {
        votes["criterion_" + criterionIndex + "_rate"] = container.find("input:radio[name=criterion_" + criterionIndex + "_rate]:checked").val();
    }

    return votes;
}

function SetVotes(resultsTable, userVote, otherUserVotes, totalRate)
{
    resultsTable = $(resultsTable);
    resultsTable.remove("tr.other_user_rate")

    for (var i = 0; i < otherUserVotes.length; ++i)
    {
        var otherUserVote = otherUserVotes[i];

        var row = $("<tr>");
        row.addClass("other_user_rate");
        row.append
        (
            $("<td>").addClass("criterion_title").text(otherUserVote['user_name'] + " " + LNG_RESOURCE_DETAILS.LNG_RATE + ":")
        );

        row.append
        (
            $("<td>").addClass("total_vote_value")
            .text(parseInt(otherUserVote['total'], 10))
        );

        row.insertBefore("tr#other_user_votes_spacer");
    }

    if (otherUserVotes.length)
    {
        $("#other_user_votes_spacer").show();
    }
    else
    {
        $("#other_user_votes_spacer").hide();
    }

    for (var criterionIndex = 1; criterionIndex <= CRITERION_COUNT; ++criterionIndex)
    {
        $("#criterion_" + criterionIndex + "_rate_user").text(userVote["criterion_" + criterionIndex + "_rate"]);
    }

    $("#total_rate_user").text(userVote["total"]);
    $("#total_rate_all").text(totalRate);
}

function VoteForPresentation()
{
    DisableButton("btnVote");
    $("#vote_indicator").show();

    var votes = GetUserVotes($("#vote_block"));

    var paramNames  = ["id_resource"];
    var paramValues = [g_idResource];

    for (var paramName in votes)
    {
        paramNames.push(paramName);
        paramValues.push(votes[paramName]);
    }

    ajaxpage('/vote_for_presentation.php', OnVoteForPresentation, UriSerialize(paramNames, paramValues));
}

function OnVoteForPresentation(response)
{
    EnableButton("btnVote");
    $("#vote_indicator").hide();

    var responseObject = GetObjectFromQuery(response);
    var userVote = GetObjectFromQuery(responseObject['user_vote']);
    var otherUserVotes = [];
    var otherUserVoteCount = parseInt(responseObject['other_user_vote_count'], 10);

    for (var i = 0; i < otherUserVoteCount; ++i)
    {
        otherUserVotes.push(GetObjectFromQuery(responseObject['other_user_vote' + i]));
    }

    var total_rate  = parseFloat(responseObject['total_rate']);

    SetVotes($("#vote_results_block"), userVote, otherUserVotes, total_rate);
    $("#vote_block").hide();
    $("#vote_results_block").show();
    $("div.contest_vote_title").addClass("already_voted");
}

function RemoveComment(idComment)
{
    var paramNames  = ["id_resource", "id_comment"];
    var paramValues = [g_idResource,   idComment];

    if (confirm(LNG_COMMENTS_FORM.DELETE_COMMENT_CONFIRMATION))
    {
        ShowCommentsLoadProgress();
        ajaxpage('/remove_resource_comment.php', OnCommentRemoved, UriSerialize(paramNames, paramValues));
    }
}

function OnCommentRemoved(response)
{
    var result = ParseQueryString(response);
    var returnCode = parseInt(GetQueryStringParam(result, "code"));


    RefreshComments();
}

function adsClickHandler()
{
    var adsCode = $(this).parent().find("input.ads_code").val();
    var additionalParams = new Object();
    additionalParams['ad_code'] = adsCode;
    additionalParams['event'] = 'click';
    saveAdStatistics( g_idResource, additionalParams );
}

function OnChangeResourcesTabs()
{
    InitResourcesTooltips();
}

function InitResourcesTabs()
{
    var resourcesTabs  = new TabsContainer();
    var loggedUserIsPro = parseInt($("#loggedUserIsPro").val());

    var resourcesTypes = new Array();
    $("#moreSection").find("[id$='Tab']").each(function(){
        var tabName = $(this).attr('id').replace('Tab', '');
        resourcesTypes.push( tabName )
    });
    
    if ( resourcesTypes.length == 0 )
        return;

    for (var i in resourcesTypes)
    {
        var resourcesType = resourcesTypes[i];
        var requestUrl = $("#" + resourcesType + "RequestUrl").val();

        var resourcesList = new ResourcesList(resourcesType);
        resourcesList.setRequestUrl(requestUrl);
        resourcesTabs.addTab(resourcesType + "Tab", resourcesList);
        resourcesList.onChange = OnChangeResourcesTabs;
    }

    var firstResourceName = resourcesTypes[0];
    var firstTabName = firstResourceName + 'Tab';
    var firstTabCountResources = $("#" + firstTabName + "Count").val();
    var firstTab = resourcesTabs.getTabContent( firstTabName );
    firstTab.setLoaded( true );
    firstTab.setCountResources( firstTabCountResources );
    resourcesTabs.selectTab( firstTabName );
}

function InitPageNavigators()
{
    InitPageNavigator("comments", "commentsPrev", "commentsNext", "commentsLabel", OnChangeCommentsPage);
    var countComments = $("#countComments").val();
    SetPageItems("comments", countComments, 10);

    InitPageNavigator("commentsBottom", "commentsBottomPrev", "commentsBottomNext", "commentsBottomLabel", OnChangeBottomTextCommentsPage, function () {$("#commentsBottomContainer").show();}, function () {$("#commentsBottomContainer").hide();});
    SetPageItems("commentsBottom", countComments, 10);
}

function OnFavoriteClickHandler()
{
    var link = $(this);
    var linkId = link.attr('id');

    var resourceId = GetSuffixNumericId( linkId );
    if ( resourceId == 0 )
        return;

    SaveFavorites( resourceId );
}

function OnOpenPostFormClickHandler(event)
{
    var link = $(this);
    var linkId = link.attr('id');

    var pattern = /^openPostFormLink([\S]+)$/;
    var matches = pattern.exec( linkId );
    var postId = ( matches[1] ) ? matches[1] : 0;
    if ( postId == 0 )
        return;

    OpenPostForm(postId, event);
}

function OnFlagClickHandler(event)
{
    var userCanFlag = parseInt($("#userCanFlag").val());
    if( userCanFlag )
        OpenComplainForm( g_resourceInfo['id_media_resource'], event);
    else
        OpenLoginPopup(event, '/presentations/' + g_resourceInfo['id_media_resource'], -240, -260);
}

function OnDownloadResourceLinkClickHandler()
{
    var link = $(this);
    var linkId = link.attr('id');

    var pattern = /([\S]{3})$/;
    var matches = pattern.exec( linkId );
    var downloadType = ( matches[1] ) ? matches[1] : 0;
    if ( downloadType == 0 )
        return;

    var id = g_resourceInfo['id_media_resource'];
    var title = g_resourceInfo['title'];
    var url = g_resourceInfo['projector_download_url'];
    var width = g_resourceInfo['width'];
    var height = g_resourceInfo['height'];
    var startAuto = g_resourceInfo['start_auto'];
    var autoReplay = g_resourceInfo['auto_replay'];

    switch( downloadType )
    {
        case "Win":
            url += '&projector_type=win';
            break;
        case "Mac":
            url += '&projector_type=mac';
            break;
        default:
            break;
    }

    DownloadResource(id, title, url, width, height, startAuto, autoReplay);
}

function OnRemoveCommentClickHandler()
{
    var link = $(this);
    var linkId = link.attr('id');

    var resourceId = GetSuffixNumericId( linkId );
    if ( resourceId == 0 )
        return;

    RemoveComment( resourceId );
}

function InitGraphicCommentHandlers()
{
    var link = $(this);
    var linkId = link.attr('id');

    var commentId = GetSuffixNumericId( linkId );
    if ( commentId == 0 )
        return;

    link.click( function(){
        LoadCommentToPlayer( commentId);
    });
    link.mouseover( function(){
        ShowGraphicCommentMask( commentId );
    });
    link.mouseout( function(){
        HideGraphicCommentMask( commentId);
    });
}

function InitLinks()
{
    var ratesBlocked = parseInt($("#ratesBlocked").val());
    if(!ratesBlocked)
    {
        $("#rateResourceUpLink").click(function(){
            RateResource(g_resourceInfo['id_media_resource'],1);
        });
        $("#rateResourceDownLink").click(function(){
            RateResource(g_resourceInfo['id_media_resource'],-1);
        });
    }

    $("a[id^='favoriteLink']").click( OnFavoriteClickHandler );
    $("a[id^='removeCommentLink']").click( OnRemoveCommentClickHandler );

    $("#closeComplainFormLink").click( CloseComplainForm );
    $("#closeShareCommentFormLink").click( CloseShareCommentForm );
    $("#closePostCommentFormLink").click( ClosePostCommentForm );
    $("#toggleResourceNotesLink").click( ToggleResourceNotes );
    $("#toggleResourceTranscriptLink").click( ToggleResourceTranscript );
    $("#openEmbedTabLink").click( OpenEmbedForm );
    $("#generatePrivateKeyLink").click( GeneratePrivateKey );
    $("#closeEmbedFormLink").click( CloseEmbedForm );
    $("#openShareViaGroupLink").click( OpenAddPresentationToGroupForm );
    $("#closeAddPresentationToGroupFormLink").click( CloseAddPresentationToGroupForm );

    var commentAllowed = parseInt($("#commentAllowed").val());
    if( commentAllowed )
        $("#openPostCommentFormLink").click( OpenPostCommentForm );

    $("a[id^='flagLink']").click( OnFlagClickHandler );
    $("a[id^='downloadResourceLink']").click( OnDownloadResourceLinkClickHandler );

}

function AddWordWraps()
{
    var commentsId = JsonDecode($("#commentsId").val());

    for(var key in commentsId)
    {
        AddWordWrap("commentText" + commentsId[key], RESOURCE_DETAILS_COMMENT_WRAP_LENGTH);
        AddWordWrap("commentText" + commentsId[key], RESOURCE_DETAILS_GRAPHIC_COMMENT_WRAP_LENGTH);
    }

    var resourceNotesSlideIndexes = JsonDecode($("#resourceNotesSlideIndexes").val());
    for(var key in resourceNotesSlideIndexes)
    {
        AddWordWrap("noteText" + resourceNotesSlideIndexes[key], 30);
    }

    var slidesTextsIndexes = JsonDecode($("#slidesTextsIndexes").val());
    for(var key in slidesTextsIndexes)
    {
        AddWordWrap("slideText" + slidesTextsIndexes[key], 30);
    }
}

function InitEmbedArea()
{
    var presentationTitle = g_resourceInfo['title'];
    var presentationUrl = g_currentSiteUrl + g_resourceInfo['url'];
    var loggedUserIsPro = parseInt($("#loggedUserIsPro").val());

    if ( loggedUserIsPro || g_resourceInfo['user_is_pro_account'] )
    {
        GetElement('playerEmbedHtml').value  = GetPlayerEmbed("onlinePlayer" + g_idResource, g_resourceInfo['get_object_url'], [], g_resourceInfo['embed_width'], g_resourceInfo['embed_height']);
        GetElement('playerEmbedXhtml').value = GetPlayerEmbedForXhtml("onlinePlayer" + g_idResource, g_resourceInfo['get_object_url'], [], g_resourceInfo['embed_width'], g_resourceInfo['embed_height']);
    }
    else
    {
        GetElement('playerEmbedHtml').value  = GetPlayerEmbedCode("onlinePlayer" + g_idResource, g_resourceInfo['get_object_url'], presentationTitle, presentationUrl, [], g_resourceInfo['embed_width'], g_resourceInfo['embed_height'], null, false);
        GetElement('playerEmbedXhtml').value = GetPlayerEmbedCode("onlinePlayer" + g_idResource, g_resourceInfo['get_object_url'], presentationTitle, presentationUrl, [], g_resourceInfo['embed_width'], g_resourceInfo['embed_height'], null, true);
    }
}

function OnClickSelectHandler()
{
    $(this).select();
}

function InitTextareas()
{
    var counterLabel = $("#counterLabel").val();
    var commentCharLimit = parseInt($("#commentCharLimit").val());
    var groupMessageCharLimit = parseInt($("#groupMessageCharLimit").val());

    $("#comment").setLimit( commentCharLimit ).setCounter( counterLabel );
    $("#groupMessage").setLimit( groupMessageCharLimit ).setCounter( counterLabel );
}

function InitOpenShareCommentLinkClickHandler()
{
    var id = $(this).attr('id');
    var viewUrl = $(this).val();

    var commentId = GetSuffixNumericId( id );
    if ( commentId == 0 )
        return;
    $("#openShareCommentFormLink" + commentId).click(function(event){
        OpenShareCommentForm(commentId, viewUrl, event);
    });
}

function GetEmbedCode()
{
    var embedCode = null;
    if( $("#embedTypeHtml").attr('checked') )
        embedCode = $("#playerEmbedHtml").val();
    else
        embedCode = $("#playerEmbedXhtml").val();
    return embedCode;
}

$(function(){
    g_hasPresenterVideo = parseInt($("#hasPresenterVideo").val());
    $(".ads_stat_event_click").click( adsClickHandler );
    InitDropdownMenus();
    if( !g_hasPresenterVideo )
        InitResourcesTabs();

    g_downloadVars = JsonDecode($("#downloadVars").val());
    g_resourceInfo = JsonDecode($("#resourceInfo").val());
    g_currentSiteUrl = $("#currentSiteUrl").val();
    g_idResource = g_resourceInfo['id_media_resource'];
    g_isWebcast = $("#isWebcast").val();

    var isFlashInstalled = CheckIsFlashInstalled();
    var isAvailableFlashPlayer = CheckIsFlashAvailable();
    var haveFlashPlayer = isFlashInstalled && isAvailableFlashPlayer;
    InitPageNavigators();
    InitTextareas();
    InitLinks();
    AddWordWraps();

    $("#playerEmbedHtml").click( OnClickSelectHandler );
    $("#playerEmbedXhtml").click( OnClickSelectHandler );

    if( parseInt( g_resourceInfo['allow_embed'] ) && parseInt( g_resourceInfo['is_published'] ) )
        $("#embedComment").click( OnClickSelectHandler );
    $("#viewCommentUrl").click( OnClickSelectHandler );

    if( ( parseInt( g_resourceInfo['allow_embed'] ) && parseInt( g_resourceInfo['is_published'] ) ) || parseInt( g_resourceInfo['trusted_domains_exists'] ) )
    {
        InitEmbedArea();
        $("#embedTypeHtml").click( ShowHtmlPlayerEmbed );
        $("#embedTypeXhtml").click( ShowXhtmlPlayerEmbed );
    }

    $("input[id^='shareCommentData']").each( InitOpenShareCommentLinkClickHandler );

    $("div[id^='graphic_comment']").each( InitGraphicCommentHandlers );
});

