
var registered_widgets_a = new Array();
var registered_widgets_o = new Object();
var initialized_widgets_o = new Object();

var Namespace = new function() {

    function Widget() {
    }

    Widget.prototype.init_widget = function() {
        this.name = '';
        this.settings_listeners = [];
    }

    Widget.prototype.add_settings_listener = function(listener) {
        this.settings_listeners.push(listener);
    }

    Widget.prototype.remove_settings_listener = function(listener) {
        var index = this.settings_listeners.indexOf(listener);
        this.settings_listeners.splice(index, 1);
    }

    Widget.prototype.emit_settings_changed = function() {
        for (var i=0; i<this.settings_listeners.length; i++) {
            this.settings_listeners[i](this);
        }
    }

    Widget.prototype.set_initial_values = function(dct) {
    }

    Widget.prototype.get_settings = function() {
        return "";
    }

    Widget.prototype.set_settings = function(data) {
    }

    Widget.prototype.set_size = function(width, height) {
        this.width = width;
        this.height = height;
    }

    Widget.prototype.move_to_place = function() {
        var root_div = document.getElementById(this.div_name);
        root_div.style.position = "absolute";
        root_div.style.left = this.left + "px";
        root_div.style.top = this.top + "px";
    }

    Widget.prototype.temporarily_move_to = function(x, y) {
        var root_div = document.getElementById(this.div_name);
        root_div.style.position = "absolute";
        root_div.style.left = x + "px";
        root_div.style.top = y + "px";
    }

    Widget.prototype.settle = function() {
        var root_div = document.getElementById(this.div_name);
        this.left = root_div.offsetLeft;
        this.top = root_div.offsetTop;
    }

    Widget.prototype.move_to = function(x, y) {
        var root_div = document.getElementById(this.div_name);
        root_div.style.position = "absolute";
        root_div.style.left = x + "px";
        root_div.style.top = y + "px";
        this.left = x;
        this.top = y;
    }

    Widget.prototype.core_build = function() {
        this.titlebar_div_name = this.div_name + "_titlebar"
        var root_div = document.getElementById(this.div_name);
        this.subwidget = document.createElement("div");
        set_class(this.subwidget, "subwidget");
        this.title_div = document.createElement("div");
        this.title_div.setAttribute("id", this.titlebar_div_name);
        set_class(this.title_div, "title");
//        this.title_div.setAttribute("onmouseover", "new Effect.Morph(this, {style: 'background-color: #ccccee;', duration: 0.2});");
//        this.title_div.setAttribute("onmouseout", "new Effect.Morph(this, {style: 'background-color: #eeeeff;', duration: 0.1});");
        this.titletext_span = document.createElement("span");
        set_class(this.titletext_span, "titletext");
        this.title_div.appendChild(this.titletext_span);
        this.canvas_div = document.createElement("div");
        set_class(this.canvas_div, "canvas");

        this.titletext_span.innerHTML = '&nbsp;' + this.title;

        this.subwidget.appendChild(this.title_div);
        this.subwidget.appendChild(this.canvas_div);
        root_div.appendChild(this.subwidget);
    }

    return {
        Widget: Widget
    }
}

var Widget = Namespace.Widget;

function register_widget(widget) {
    registered_widgets_a.push(widget);
    registered_widgets_o[widget.name] = widget;
}

