﻿/*these variables should be set in EditParticipantsControl.ascx control*/
var ParticipantsRemoveIconUrl = null;
var ParticipantsUsersAjaxLoadUrl = null;
var ParticipantsUserSessionId = null;

Participants.prototype = new Object();
function Participants(id)
{
    /* private fields */
    var _id = id;
    var _text = "participants-text-" + id;
    var _progressId = "participants-load-progress-" + id;
    var _autocompleteHolderId = "participants-autocomplete-holder-" + id;
    var _listTableId = "participants-list-table-" + id;
    var _me = this;
    /* ajax request Id */
    var _ajaxAutocomplete = null;
    this.Dialog = null;

    /* a handler for autocomplete row click */
    this.SelectUser = function(user)
    {
        try
        {
            /*check if user has been already added*/
            var userAlreadyAdded = false;
            if ($.browser.msie || $.browser.safari)
            {
                var listTableElements = document.getElementById(_listTableId);
                var userElement = $.GetElement(listTableElements, "TR", "id", user.Id);
                /*user has been added for sure!*/
                userAlreadyAdded = userElement != null;
            }
            else
            {
                userAlreadyAdded = $("#" + _listTableId).find("tr#" + user.Id).length != 0;
            }
            /*if user hasn't been added - add him*/
            if (userAlreadyAdded == false)
            {
                var removeItemsUrl = ParticipantsRemoveIconUrl;
                var newRow = "<tr id='" + user.Id + "'>";
                newRow += "<td>" + user.Agency + "</td>";
                newRow += "<td>" + user.UserName + "</td>";
                //newRow += "<td>" + user.Email + "</td>";
                newRow += "<td>";
                newRow += "<img userid='" + user.Id + "' src='" + removeItemsUrl + "' style='cursor:pointer;' />";
                newRow += "</td></tr>";
                $("#" + _listTableId).append(newRow).show();

                var elementToBindClick;
                if ($.browser.msie || $.browser.safari)
                {
                    var listTableElements = document.getElementById(_listTableId);
                    elementToBindClick = $.GetElement(listTableElements, "IMG", "userid", user.Id);
                }
                else
                {
                    elementToBindClick = $("#" + _listTableId).find("img[userid=" + user.Id + "]");
                }
                /*bind click handler for remove image*/
                $(elementToBindClick).bind("click", function()
                {
                    _me.RemoveUserFromList($(this).attr("userid"));
                });
                /*remove user from */
                this.RemoveUserFromAutocomplete(user.Id);
                /*show submit button*/
                this.Dialog.ShowSubmitButton();
            }
        }
        catch (ex) { /* ignore all exceptions*/ }
    }

    this.RemoveUserFromAutocomplete = function(userId)
    {
        var elementToRemove = null;
        if ($.browser.msie || $.browser.safari)
        {
            var autocompleteList = document.getElementById(_autocompleteHolderId);
            elementToRemove = $.GetElement(autocompleteList, "LI", "id", userId);
        }
        else
        {
            elementToRemove = $("li#" + userId);
        }
        if (elementToRemove != null)
        {
            $(elementToRemove).fadeTo("slow", 0.1, function()
            {
                $(elementToRemove).remove();
            });
        }
    }

    this.Clear = function()
    {
        $("#" + _text).val("");
        $("#" + _autocompleteHolderId).html("");
        var elements;
        if ($.browser.msie || $.browser.safari)
        {
            var listTable = document.getElementById(_listTableId);
            elements = $.GetElements(listTable, "TR", "id");
        }
        else
        {
            elements = $("#" + _listTableId + " tr[id]");
        }
        for (var i = 0; i < elements.length; i++)
        {
            $(elements[i]).remove();
        }
    }

    this.RemoveUserFromList = function(userId)
    {
        if ($.browser.msie || $.browser.safari)
        {
            var listTable = document.getElementById(_listTableId);
            var userElement = $.GetElement(listTable, "TR", "id", userId);
            if (userElement != null)
            {
                $(userElement).remove();
            }
            var usersCount = $.GetElements(listTable, "TR").length;
            if (usersCount < 1)
            {
                this.Dialog.HideSubmitButton();
            }
        }
        else
        {
            if ($("#" + _listTableId).find("tr#" + userId).length > 0)
            {
                $("#" + _listTableId).find("tr#" + userId).remove();
            }
            if ($("#" + _listTableId).find("tr").length == 0)
            {
                /*hide submit button if all users were removed*/
                this.Dialog.HideSubmitButton();
            }
        }
    }

    this.GetUsersIds = function()
    {
        var elements;
        if ($.browser.msie || $.browser.safari)
        {
            var listTable = document.getElementById(_listTableId);
            elements = $.GetElements(listTable, "TR", "id");
        }
        else
        {
            elements = $("#" + _listTableId + " tr[id]");
        }
        var usersIds = [];
        for (var i = 0; i < elements.length; i++)
        {
            usersIds.push($(elements[i]).attr("id"));
        }
        return usersIds;
    }

    this.GetUserFromLiElement = function(liElement)
    {
        var id = $(liElement).attr("id");
        var agency = $(liElement).attr("agency");
        var username = $(liElement).attr("username");
        var email = $(liElement).attr("email");
        var text = $(liElement).text().trim();
        var user = { Id: id, Agency: agency, UserName: username, Email: email };
        return user;
    }

    this.BindAutocompleteItemClickForIE = function()
    {
        var holder = document.getElementById(_autocompleteHolderId);
        var ul = $.GetElement(holder, "UL");
        if (ul != null)
        {
            var autocompleteItems = ul.childNodes;
            for (var j = 0; j < autocompleteItems.length; j++)
            {
                $(autocompleteItems[j]).bind("click", function()
                {
                    //this == li element
                    var user = _me.GetUserFromLiElement(this);
                    _me.SelectUser(user);
                });
            }
        }
    }

    function CancelRequest(ajaxRequest)
    {
        if (ajaxRequest != null)
        {
            try
            {
                ajaxRequest.abort();
            }
            catch (ex) { /*ignore all errors*/ }
        }
    }

    this.Init = function()
    {
        $("#" + _text).unbind("keyup");
        $("#" + _text).keyup(function()
        {
            var query = $("#" + _text).val();
            if (query.length > 0)
            {
                /*show loader*/
                $("#" + _progressId).show();
                /*load data*/
                var url = ParticipantsUsersAjaxLoadUrl;
                var parameters = {
                    q: query,
                    userId: ParticipantsUserSessionId,
                    participantsViewId: _id
                };

                CancelRequest(_ajaxAutocomplete);
                _ajaxAutocomplete = $.post(url, parameters, function(data, status, code)
                {
                    $("#" + _autocompleteHolderId).empty().append(data).show();
                    if ($.browser.msie || $.browser.safari)
                    {
                        _me.BindAutocompleteItemClickForIE();
                    }
                    else
                    {
                        var elements = $("#" + _autocompleteHolderId).find("li");
                        for (var i = 0; i < elements.length; i++)
                        {
                            var item = elements[i];
                            $(item).bind("click", function()
                            {
                                var user = _me.GetUserFromLiElement(this);
                                _me.SelectUser(user);
                            });
                        }
                    }
                    $("#" + _progressId).hide();
                });
            }
            else
            {
                $("#" + _autocompleteHolderId).html("");
                $("#" + _progressId).hide();
            }
        });
    }
    this.Init();
}

