/**
 * CP Widget : Menu
 * 
 * This widget will activate one of its children and disable the previous active item.
 */
(function($){

var Menu = {
	
	options: {
		itemSelector: "a",
		activeClass:"active"
	},
	
	_create: function() {
		this.element.addClass("cp-menu");
		this._bind();
	},
	
	destroy: function() {
		this._unbind();
		this.element.removeClass("cp-menu");
		this.element.find(this.options.itemSelector).removeClass(this.options.activeClass);
		$.Widget.prototype.destroy.call(this);
	},
	
	_bind: function(){
		var self = this;
		this.element.find(this.options.itemSelector).click(function(e){
			//e.preventDefault();
			self.activateItem($(this));
		});
	},
	
	_unbind: function(){
		this.element.find(this.options.itemSelector).unbind("click");
	},
	
	enable: function(){
		this.element.removeAttr('disabled');
		this._bind();
	},
	
	disable: function(){
		this.element.attr('disabled', 'disabled');
		this._unbind();
	},
	
    /**
     * activates the jQuery object provided in the first parameter 
     */
    activateItem: function(el){
    	this.deactivateAll();
    	el.addClass(this.options.activeClass);
    },
    
    /**
     * activates an element by attribute's value
     */
    activateByAttr: function(attr,value){
    	var selector = this.options.itemSelector;//+'['+attr+'="'+value+'"]';
    	var el = this.element.find(this.options.itemSelector).filter(function(index){
    		return ($(this).attr(attr)==value);
    	});
    	this.activateItem(el);
    },
    
    /**
     * deactivates all items
     */
    deactivateAll: function(){
    	this.element.find(this.options.itemSelector).removeClass(this.options.activeClass);
    },
	
	_setOption: function( key, value ) {
		$.Widget.prototype._setOption.apply( this, arguments );
		switch ( key ) {
			
		}
	}
}


//Expose the widget with the widget system
$.widget('nj.cp_menu', Menu);

//Expost the widget with the sublass system
//$.ui.widget.subclass('nj.cpmenu', Menu);

})(jQuery)
