/* for compression http://alex.dojotoolkit.org/shrinksafe/ */
var groups = {};
var groupStringElement;
var groupsArray = new Array();
var originalGroupString;
var originalGroupClass;

function init_group_selection(bundleTextValue, grouplist_id, group_string_id) {
        originalGroupString = bundleTextValue;
        var grouplist = document.getElementById(grouplist_id);
        var anchors = grouplist.getElementsByTagName('span');
        for (var i=0; i<anchors.length; i++) {
                anchors[i].id = "t"+i;
                anchors[i].onclick = anchors[i].onkeyup = function(){return toggleGroup(this.id);};
                anchors[i].onmouseover = function(){return groupMouseIn(this.id);};
                anchors[i].onmouseout = function(){return groupMouseOut(this.id);};
                datas = anchors[i].getElementsByTagName('span')
                group_data = anchors[i];
                if (datas.length > 0) {
                  group_data = datas[0];
                }
                groups["t"+i] = {
                        'selected' : 0,
                        'group' : trim(group_data.innerHTML),
                        'element' : anchors[i]
                }
        }
        groupStringElement = document.getElementById(group_string_id);
        if (groupStringElement) {
                groupStringElement.onkeyup = groupStringElement.onchange = function(){syncGroupList();};
                groupStringElement.value = bundleTextValue;
                groupsArray = groupStringElement.value.replace(/^\s*|\s*$/g,'').split(/\s+/);
                syncGroupList();
        }
}

function addGroupString(word) {
        word = trim(word);
        var present=0;
        for (var i=0; i<groupsArray.length; i++) {
                if (groupsArray[i].toLowerCase() == word.toLowerCase()) {
                        present = 1;
                }
        }
        if (!present) {
                groupsArray.push(word);
                groupStringElement.value = groupsArray.join(' ').replace(/^\s*|\s*$/g,'').replace(/\s\s+/g,' ');
        }
}

function removeGroupString(word) {
        word = trim(word);
        var newWords = new Array();
        for (var i=0; i<groupsArray.length; i++) {
                if (groupsArray[i].toLowerCase() != word.toLowerCase()) {
                        newWords.push(groupsArray[i]);
                }
        }
        groupsArray = newWords;
        groupStringElement.value = newWords.join(' ').replace(/^\s*|\s*$/g,'').replace(/\s\s+/g,' ');
}

function syncGroupList() {
        if (!groupStringElement) { return false; } 

        groupsArray = groupStringElement.value.replace(/^\s*|\s*$/g,'').split(/\s+/);
        var bundleWordHash = {};

        for (var i=0; i<groupsArray.length; i++) {
                bundleWordHash[groupsArray[i].toLowerCase()] = 1;
        }
        for (var id in groups) {
                if (!groups[id]['selected'] && bundleWordHash[groups[id]['group']]) {
                        selectGroup(id);
                }
                if (groups[id]['selected'] && !bundleWordHash[groups[id]['group']]) {
                        deselectGroup(id);
                }
        }
}

function toggleGroup(id) {
        if (!groups[id]) { return false; }
        groups[id]['selected'] = 1 - groups[id]['selected'];
        if (groups[id]['selected']==1) {
                selectGroup(id)
                addGroupString(groups[id]['group']);
        } else {
                deselectGroup(id)
                removeGroupString(groups[id]['group']);
        }
        return false;
}

function selectGroup(id) {
        if (!groups[id]) { return false; }
        groups[id]['selected'] = 1;
        if (groups[id]['element'].className.match(/s_group/)) {
                return;
        }
        if (groups[id]['element'].className.match(/c_group/)) {
                groups[id]['element'].className = groups[id]['element'].className.replace(/c_group/,'c_s_group');
        } else {
                groups[id]['element'].className = groups[id]['element'].className + ' s_group';
        }
        originalGroupClass = groups[id]['element'].className;
}
function deselectGroup(id) {
        if (!groups[id]) { return false; }
        groups[id]['selected'] = 0;
        if (!(groups[id]['element'].className.match(/s_group/))) {
                return;
        }
        if (groups[id]['element'].className.match(/c_s_group/)) {
                groups[id]['element'].className = groups[id]['element'].className.replace(/c_s_group/,'c_group');
        } else {
                groups[id]['element'].className = groups[id]['element'].className.replace(/\s*s_group/,'');
        }
        originalGroupClass = groups[id]['element'].className;
}

function groupMouseIn(id) {
        groups[id]['element'].className = groups[id]['element'].className + ' group_tover';
}

function groupMouseOut(id) {
        if (groups[id]['element'].className.match(/group_tover/)) {
                groups[id]['element'].className = groups[id]['element'].className.replace(/group_tover/,'');
        }
}

function groupClear() {
        if(!groupStringElement){
                return false;
        }
        groupStringElement.value = '';
        syncGroupList();
}

function groupStringSelect(id, group) {
        txt = document.getElementById(id).value;
        txt = group + " " + txt
        document.getElementById(id).value = txt
}

function groupStringClear(id) {
        txt = document.getElementById(id).value;
        txt = ""
        document.getElementById(id).value = txt
}

