/* for compression http://alex.dojotoolkit.org/shrinksafe/ */
var tags = {};
var tagStringElement;
var tagsArray = new Array();
var originalTagString;
var originalClass;

function trim(s) {
        return String(s).replace(/^\s*|\s*$/g,'');
}

function init_tag_selection(bundleTextValue, taglist_id, tag_string_id) {
        originalTagString = bundleTextValue;
        var taglist = document.getElementById(taglist_id);
        var anchors = taglist.getElementsByTagName('span');
        for (var i=0; i<anchors.length; i++) {
                anchors[i].id = "t"+i;
                anchors[i].onclick = anchors[i].onkeyup = function(){return toggle(this.id);};
                anchors[i].onmouseover = function(){return mouseIn(this.id);};
                anchors[i].onmouseout = function(){return mouseOut(this.id);};
                datas = anchors[i].getElementsByTagName('span')
                _data = anchors[i];
                if (datas.length > 0) {
                  _data = datas[0];
                }
                tags["t"+i] = {
                        'selected' : 0,
                        'tag' : trim(_data.innerHTML),
                        'element' : anchors[i]
                }
        }
        tagStringElement = document.getElementById(tag_string_id);
        if (tagStringElement) {
                //tagStringElement.onkeyup = tagStringElement.onchange = function(){multi_autocomplete_keyup(this, event);syncTagList();};
                //tagStringElement.onkeydown = tagStringElement.onchange = function(){multi_autocomplete_keydown(this, event);syncTagList();};
                //tagStringElement.onkeypress = tagStringElement.onchange = function(){multi_autocomplete_keypress(this, event);syncTagList();};
                    
                tagStringElement.value = bundleTextValue;
                tagsArray = tagStringElement.value.replace(/^\s*|\s*$/g,'').split(/\s+/);
                syncTagList();
        }
}

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

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

function syncTagList() {
        if (!tagStringElement) { return false; } 

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

        for (var i=0; i<tagsArray.length; i++) {
                bundleWordHash[tagsArray[i].toLowerCase()] = 1;
        }
        for (var id in tags) {
                if (!tags[id]['selected'] && bundleWordHash[tags[id]['tag']]) {
                        selectTag(id);
                }
                if (tags[id]['selected'] && !bundleWordHash[tags[id]['tag']]) {
                        deselectTag(id);
                }
        }
}

function toggle(id) {
        if (!tags[id]) { return false; }
        tags[id]['selected'] = 1 - tags[id]['selected'];
        if (tags[id]['selected']==1) {
                selectTag(id)
                addTagString(tags[id]['tag']);
        } else {
                deselectTag(id)
                removeTagString(tags[id]['tag']);
        }
        return false;
}

function selectTag(id) {
        if (!tags[id]) { return false; }
        tags[id]['selected'] = 1;
        if (tags[id]['element'].className.match(/s_tag/)) {
                return;
        }
        if (tags[id]['element'].className.match(/c_tag/)) {
                tags[id]['element'].className = tags[id]['element'].className.replace(/c_tag/,'c_s_tag');
        } else {
                tags[id]['element'].className = tags[id]['element'].className + ' s_tag';
        }
        originalClass = tags[id]['element'].className;
}
function deselectTag(id) {
        if (!tags[id]) { return false; }
        tags[id]['selected'] = 0;
        if (!(tags[id]['element'].className.match(/s_tag/))) {
                return;
        }
        if (tags[id]['element'].className.match(/c_s_tag/)) {
                tags[id]['element'].className = tags[id]['element'].className.replace(/c_s_tag/,'c_tag');
        } else {
                tags[id]['element'].className = tags[id]['element'].className.replace(/\s*s_tag/,'');
        }
        originalClass = tags[id]['element'].className;
}

function mouseIn(id) {
        tags[id]['element'].className = tags[id]['element'].className + ' tover';
}

function mouseOut(id) {
        if (tags[id]['element'].className.match(/tover/)) {
                tags[id]['element'].className = tags[id]['element'].className.replace(/tover/,'');
        }
}

function tagClear() {
        if(!tagStringElement){
                return false;
        }
        tagStringElement.value = '';
        syncTagList();
}

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

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


