// (c)2008 Transinsight GmbH - www.transinsight.com - All rights reserved.

function Clipboard(){
    this.list = {};
    this.size = 0;
    this.updateCallbacks = {};
    this.clearCallbacks = {};

    this.update = Clipboard_update;
    //this.addUpdateCallback = Clipboard_addUpdateCallback;
    //this.removeUpdateCallback = Clipboard_removeUpdateCallback;

    this.add = Clipboard_add;
    this.remove = Clipboard_remove;
    this.toggle = Clipboard_toggle;
    this.clear = Clipboard_clear;
    this.getQueryString = Clipboard_getQueryString;
    this.save = Clipboard_save;
    this.load = Clipboard_load;
}

function Clipboard_update(){
    for (var key in this.updateCallbacks) {
        var func = this.updateCallbacks[key];
        func();
    }
}

function Clipboard_add(value){
    if (value in this.list)
        return false;

    this.list[value] = true;
    this.size++;
    this.update();
}

function Clipboard_remove(value){
    if (!(value in this.list))
        return false;

    delete this.list[value];
    this.size--;
    this.update();
}

function Clipboard_toggle(value){
    if (value in this.list) {
        this.remove(value);
        return false;
    }
    else {
        this.add(value);
        return true;
    }
}

function Clipboard_clear(){
    for (var key in this.clearCallbacks) {
        var func = this.clearCallbacks[key];
        func();
    }

    this.list = {};
    this.size = 0;
    this.update();
}

function Clipboard_getQueryString(){
    var query = "";
    for (var value in this.list) {
        if ("" != query)
            query += " ";
        query += value;
    }

    if ("" == query)
        return "";

    return "(" + query + "[uid])";
}

function Clipboard_save(map){
    var arr = [];
    for (var value in this.list)
        arr.push(escape(value));
    map['clip'] = arr.join(';');
}

function Clipboard_load(map){
    if (!("clip" in map))
        return;
    var arr = map["clip"].split(';');
    this.size = arr.length;
    this.list = {};
    for (var i = 0; i < this.size; i++)
        this.list[unescape(arr[i])] = true;

    this.update();
}

var clipboard = new Clipboard();
