var MooKwick = new Class({
	initialize: function(kwicks, options){
		this.setOptions({
			"mediumSize":6,
			"smallSize":6,
			"largeSize":200,
			"stayOpen": true,
			"show": 0,
			"fxWait": false,
			"fxDuration": 500,
			"fxTransition": Fx.Transitions.Circ.easeOut,
			"supressEvents": true,
			"onOpen":Class.empty,
			"onClose":Class.empty,
			"onComplete":Class.empty
		},options);
		
		this.kwicks = kwicks;
		
		this.fx = new Fx.Elements(kwicks, {
			"wait": this.options.fxWait, 
			"duration": this.options.fxDuration, 
			"transition": this.options.fxTransition,
			"onComplete": this.options.onComplete
		});
	
		var eType = this.options.stayOpen ? "click" : "mouseover";
	
		this.kwicks.each((function(kwick, i) {
			kwick.addEvent(eType, this.expand.bindWithEvent(this, [kwick, i]));
			kwick.setStyle("width", this.options.mediumSize);
		}).bind(this));
			
		if(!this.options.stayOpen)
			this.kwicks.getParent().addEvent("mouseout", this.collapse.bindWithEvent(this));
		else {
			$(document.body).addEvent("click", this.collapse.bindWithEvent(this));
		}
			
		if(this.options.show >= 0) {
			this.expand(null, this.kwicks[this.options.show], this.options.show);
		}
		
	},
	
	expand: function(e, k, i){
		if(e && this.options.supressEvents) 
			new Event(e).stop();
			
		var largeSize = this.options.largeSize;
		var smallSize = this.options.smallSize;
		var o = {};
		o[i] = {"width": [k.getStyle("width"), largeSize]};
		this.kwicks.each(function(other, j) {
			if(i != j) {
				var w = other.getStyle("width");
				if(w != smallSize) o[j] = {"width": [w, smallSize]};
			}
		});
		this.fx.start(o);
		this.options.onOpen(k, i, this);
	},
	
	collapse: function(e){
		var mediumSize = this.options.mediumSize;
		var o = {};
		this.kwicks.each(function(kwick, i) {
			o[i] = {"width": [kwick.getStyle("width"), mediumSize]}
		});
		this.fx.start(o);
		this.options.onClose(this);
	}
});

MooKwick.implement(new Options);

