var Action = Class.create();

Action.prototype = {
    initialize: function( text, action, container, payload,
        canSelect, cssClass ) {
        if (cssClass) this.cssClass = cssClass;
        this.text = text;
        this.action = action;
        this.container = $(container);
        this.element = document.createElement( "div" );
        this.element.innerHTML = text;
        this.payload = payload;
        if (canSelect==null) this.selectable = true;
        else this.selectable = canSelect;

        this.element.onclick =
        this.doAction.bindAsEventListener(this);
        this.element.onmouseover =
        this.rollover.bindAsEventListener(this);
        this.element.onmouseout =
        this.rollover.bindAsEventListener(this);

        setStyle( this.element, this.cssClass );
        //this.element.style.background = "#dddddd";
        this.container.appendChild( this.element );
    },
    cssClass: "action",
    doAction: function(evt){
        this.clicked = evt!=null;
        
        if (this.selectable) this.select();
        this.action( this );
    },
    rollover: function(evt) {
        if (evt.type=="mouseover") {
            Element.addClassName( this.element, "action-hover" );
            this.mouseOver( this );
        }
        else if (evt.type=="mouseout"){
            Element.removeClassName( this.element, "action-hover" );
            this.mouseOut( this );
        }
    },
    mouseOver: function (action) {},
    mouseOut: function (action) {},
    selectable: true,
    select: function(  ){
        var elems = this.container.getElementsByTagName( "div" );
        for (var n=0; n<elems.length; n++) {
            if (elems[n]==this.element && this.selectable) Element.addClassName( elems[n], "action-selected" );
            else Element.removeClassName( elems[n], "action-selected" );
        }
    },
    clearSelection: function() {
        var elems = this.container.getElementsByTagName( "div" );
        for (var n=0; n<elems.length; n++) {
            Element.removeClassName( elems[n], "action-selected" );
        }
    },
    setText: function( text ) {
        this.text = text;
        this.element.innerHTML = this.text;
    },
    selected: function(){
        return this.element.hasClassName( "action-selected" );
    }


};
