var nsMenuClass = new Class({
	initialize: function(options) {
		this.options = options;
		this.elements = $$(this.options.elements) || [];
		this.style = Object.extend({
			out: "", over: "", 
			select: "", outSelect: "", overSelect: "" 
		}, this.options.style || {});

		this.events = Object.extend({}, this.options.Events);
		this.elements.each(function (el, i) {
			el.addEvents({ 
				'click' : 	this.click.bind(this, el, i),
				'mouseout' : 	this.out.bind(this, el, i),
				'mouseover' : 	this.over.bind(this, el, i),
				'dblclick' : 	this.dblclick.bind(this, el, i),
				'unselect': this.unselect.bind(this, el, i)
			});

		}, this);
	},
	unselectAll : function () {
		$each(this.elements, function(el) {
			this.setStyle(el, this.style.out);
		}, this);
	},
	select : function (el) {
		this.unselectAll();
		this.setStyle(el, this.style.select);
	},
	unselect : function(el) {
		this.setStyle(el, this.style.out);
		if ($type(this.events['unselect']) == 'function') {
			var fn = this.events.unselect.bind(this);
			fn(el,i);
		}
	},

	isSelect : function (el) {
		return el.hasClass(this.style.select);
	},
	getSelect : function () {
		var selItem;
		$each(this.elements, function(el) {
			if (this.isSelect(el)) 
				selItem = el;
		}, this);
		return  selItem ? selItem : false;
	},

	setStyle : function (el, style) {
		if ($type(el) == 'element')
			el.setProperty ('class', style);
	},

	out : function(el, i) {
		this.setStyle(el, this.isSelect(el) ? this.style.outSelect : this.style.out);
		if ($type(this.events['out']) == 'function') {
			var fn = this.events.out.bind(this);
			fn(el,i);
		}
	},

	over : function(el, i) {
		this.setStyle(el, this.isSelect(el) ? this.style.overSelect : this.style.over);
		if ($type(this.events['over']) == 'function') {
			var fn = this.events.over.bind(this);
			fn(el,i);
		}
	},

	click : function (el, i) {
		if (this.isSelect(el))
			return;
		this.select(el);
		if ($type(this.events['click']) == 'function') {
			var fn = this.events.click.bind(this);
			fn(el,i);
		}
			
	},
	dblclick: function (el, i) {
		if ($type(this.events['dblclick']) == 'function') {
			var fn = this.events.dblclick.bind(this);
			fn(el,i);
		}
	}
});
