var ActionPanel = new Class.create();

ActionPanel.prototype = {
	actions: null,
	items: null,
	panel: null,
    message: null,

	initialize: function(id, limit) {
        if (!limit) limit = 6;
        this.limit = limit;
		this.actions = new Queue();
		this.panel = $(id);
        
        var messageId = id + '-message';
        new Insertion.After(this.panel, '<div id="' + messageId + '" style="display:none">' + Dictionary.actions_empty + '</div>');
        //this.message = $(messageId);
	},
  
    loadActionsFrom: function(group, id) {
        new Ajax.Request('/user_actions/find_all_from/' + group + '/' + id + '/' + this.limit, {
            onSuccess: this.load.bind(this),
            onLoading: this.onLoading.bind(this)
        });			  	
    },
    
    countActionsFrom: function(group, id, callback) {
        new Ajax.Request('/user_actions/count_all_from/' + group + '/' + id + '/', {
            onSuccess: callback
        });        
    },
  
    loadLastActions: function() {
          new Ajax.Request('/user_actions/find_last_ones/' + this.limit, {
              onSuccess: this.load.bind(this),
              onLoading: this.onLoading.bind(this)
          });  	
    },

	load: function(transport) {
        var actions = eval(transport.responseText).reverse();
		var action;
		var panelAction;				
		
		for (var index = 0; index < actions.size(); index++) {
			action = actions[index];
			panelAction = new Action(action.UserAction.id, action.UserAction.title, action.UserAction.created, action.UserAction.timestamp, action.Action.key);
			
			if (this.actions.size() >  0) {
				if (action.UserAction.timestamp >= this.actions.rear().timestamp && !this.actions.contains(panelAction)) {
					if (this.actions.size() == this.limit) {
						this.dequeue();
					}							
					this.enqueue(panelAction);
				}
			} else {
				this.enqueue(panelAction);
			}					
		}
	},
    
    show: function() {
    	this.panel.show();
    },
    
	enqueue: function(action) {
		var firstChild = this.panel.down();
		if (typeof firstChild == 'undefined') {
			firstChild = null;
		}
		
		if (this.actions.size() % 2 != 0) {
			//action.element.style.backgroundColor = '#F2FBFF';			
		}

		this.actions.add(action);
		this.panel.insertBefore(action.element, firstChild);
		new Effect.SlideDown(action.element.id, {
			afterFinish: (function(){
				new Effect.Highlight(action.element.id);
			}).bind(this)
		});
	},
	
	dequeue: function() {
		var action = this.actions.front();
        this.actions.remove();
		Effect.SlideUp(action.element.id/*, {
			afterFinish: (function(){
				this.actions.remove();
			}).bind(this)
		}*/);
	},
	
	onLoading: function() {
		//this.panel.innerHTML = "<div style='text-align:center'><img src='/img/loader.gif' /></div>";
	}
}

