var selNameToId = new Object();
var selTexts = new Object();
var selListGroups = new Object();

var selTextOrder = new Array("function", "devskills", "sysskills", "busskills");
var selTextSize = 0;
var _numFunctionSel = 0;
var _numCriteriaSel = 0;
var largeSelText = false;

var updateSkillsText_ignore_next_group_add = null;

function updateSkillsText(sel, groupName, checked, id)
{
    self.lastSel = sel;
    self.lastSelId=id;
    
    if (!selTexts[groupName])
      selTexts[groupName] = new Object();

     if (sel[id] && checked && (sel[id].isGroupItem || !sel[id].groupName))
     {
        if (groupName == "function" && self.limitFunctions && _numFunctionSel >= self.limitFunctions)
        {
          if( selTexts[groupName] && ! selTexts[groupName][id] )
          {
              showPopup("tooManyFunctions", true);
              if (sel[id].isGroupItem)
                updateSkillsText_ignore_next_group_add = sel[id].groupName;
              listSelect(groupName, getArray(id), true, null, true);
              return;
          }
        }

        if (groupName != "function" && self.limitCriteria && _numCriteriaSel >= self.limitCriteria)
        {
          if( selTexts[groupName] && ! selTexts[groupName][id] )
          {
            showPopup("tooManyCriteria", true);
            if (sel[id].isGroupItem)
                updateSkillsText_ignore_next_group_add = sel[id].groupName;
            listSelect(groupName, getArray(id), true, null, true);
            return;
          }
        }
     }

     if (updateSkillsText_ignore_next_group_add)
     {
         if (sel[id] && !sel[id].isGroupItem && sel[id].groupName == updateSkillsText_ignore_next_group_add)
         {
             listSelect(groupName, getArray(id), true, null, true);
             return;
         }
         updateSkillsText_ignore_next_group_add = null;
     }

    var a_name_to_id = new Object();
    var a_listgroups = new Object();
    var a_texts = new Object();

    for (var v in sel)
    {
      if (sel[v])
      {
	var name = sel[v].name;
        var listGroup = sel[v].isGroup ? null : sel[v].groupName;

        var text = name;
        if (self.levelValueToName)
        {
            var levelValues = sel[v].levelValues;
            if (levelValues)
            {
                var levelInfo = "";
                for (var i = 0; i < levelValues.length; i++)
                {
                    if (levelValues[i] > 0)
                    {
                        levelInfo += (levelInfo.length > 0 ? "/" : "") + self.levelValueToName[levelValues[i]];
                    }
                }
                if (levelInfo.length > 0)
                    text += " (" + levelInfo + ")";
            }
        }

        a_name_to_id[name] = sel[v].id;
        a_texts[sel[v].id] = text;
        a_listgroups[sel[v].id] = listGroup;
      }
    }
    

    selNameToId[groupName] = a_name_to_id;
    selListGroups[groupName] = a_listgroups;
    selTexts[groupName] = a_texts;


    var tot = new Array();
    selTextSize = 0;

    _numFunctionSel = 0;
    _numCriteriaSel = 0;


    var long_tot = new Object();

    for (var i = 0; i < selTextOrder.length; i++)
    {
      var sel_group = selTextOrder[i];
      if (selTexts[sel_group])
      {
        a_name_to_id = selNameToId[sel_group];
        a_listgroups = selListGroups[sel_group];
        a_texts = selTexts[sel_group];

        for (var a_id in a_texts)
        {
            var a_listgroup_id = a_listgroups[a_id] ? a_name_to_id[a_listgroups[a_id]] : null;

            if (a_listgroup_id)
            {
                if (!long_tot[a_listgroup_id])
                {
                    long_tot[a_listgroup_id] = new Object();
                }
                long_tot[a_listgroup_id][a_id] = true;
            }
            else
              if (!long_tot[a_id])
                long_tot[a_id] = new Object();

            selTextSize++;

            if (!a_listgroup_id)
            {
               if (sel_group == "function")
                   _numFunctionSel++;
               else
                   _numCriteriaSel++;
            }
        }

        for (var sel_group_master_id in a_texts)
        {
            if (long_tot[sel_group_master_id])
                long_tot[sel_group_master_id].sel_group = sel_group;
        }
      }
    }

    var long_tot_txt = null;

    var existsSubItem = false;

    if (largeSelText)
    {
        long_tot_txt = "<ul>";
        for (var sel_master_id in long_tot)
        {
            a_texts = selTexts[long_tot[sel_master_id].sel_group];
            long_tot_txt += "<li>" + a_texts[sel_master_id];
            var hasSubItem = false;
            for (var sel_sub_id in long_tot[sel_master_id])
            {
                if (sel_sub_id == "sel_group")
                    continue;

                if (!hasSubItem)
                {
                    hasSubItem = true;
                    existsSubItem = true;
                    long_tot_txt += "<ul style='padding-left: 12px'>";
                }
                long_tot_txt += "<li>" + a_texts[sel_sub_id] + "</li>";
            }
            if (hasSubItem)
            {
                long_tot_txt += "</ul>";
                hasSubItem = false;
            }
            long_tot_txt += "</li>";
        }
        long_tot_txt += "</ul>";
    }
    else
    {
        for (var sel_master_id in long_tot)
        {
            a_texts = selTexts[long_tot[sel_master_id].sel_group];
            var short_txt = a_texts[sel_master_id];
            var hasSubItem = false;
            for (var sel_sub_id in long_tot[sel_master_id])
            {
                if (sel_sub_id == "sel_group")
                    continue;

                if (!hasSubItem)
                {
                    existsSubItem = true;
                    hasSubItem = true;
                    short_txt += ": &middot;";
                }
                else
                    short_txt += " &middot;";
                short_txt += a_texts[sel_sub_id];
            }
            if (hasSubItem)
            {
                hasSubItem = false;
            }
            tot.push(short_txt);
        }
    }

    var selectiondiv = document.getElementById("skillsSelectionDiv");
    var selectiontext = document.getElementById("skillsSelectionText");
    selectiontext.innerHTML = largeSelText ? long_tot_txt : tot.join(" ; ");
    if (selTextSize == 0)
        selectiondiv.style.display = "none";
    else
        selectiondiv.style.display = "";
}

function functionSelChanged(sel, checked, id)
{
    updateSkillsText(sel, "function", checked, id);
}
function devskillsSelChanged(sel, checked, id)
{
    updateSkillsText(sel, "devskills", checked, id);
}
function sysskillsSelChanged(sel, checked, id)
{
    updateSkillsText(sel, "sysskills", checked, id);
}
function busskillsSelChanged(sel, checked, id)
{
    updateSkillsText(sel, "busskills", checked, id);
}

