var Kwick = {};
Kwick.Base = new Class({
	Extends: Fx.Elements,
	options: {
		large: 200,
		normal: 100,
		small: 50,
		link: 'cancel',
		duration:300,
		transition: 'back:out',
		actual:0,
		//internal
		leavedout: true
	},
	
	initialize: function(elements, options) {
		this.parent(elements, options);
	},
	
	enter: function(prop, el, i) {
		var o = {};
		o[i] = {};
		o[i][prop] = [el.getStyle(prop), this.options.large];
		var t = new Array(0,0);
		if ($chk(el.getStyle("background-position")))
		 var t = el.getStyle("background-position").split(" ");
		o[i]['background-position'] = [t[0]+" "+t[1], t[0]+" "+this.options.back_large];
		o[i]['padding-top'] = [el.getStyle("padding-top"), this.options.padding_large];
		this.options.actual = i;
		this.options.leavedout = false;
		this.elements.each(function(other, j) {
			if(i != j) {
				var p = other.getStyle(prop);
				if(p != this.options.small) { 
					o[j] = {};
					o[j][prop] = [p, this.options.small];
					var t = new Array(0,0);
					if ($chk(el.getStyle("background-position")))
					 var t = other.getStyle("background-position").split(" ");
					o[j]['background-position'] = [t[0]+" "+t[1], t[0]+" "+this.options.back_small];
					o[j]['padding-top'] = [other.getStyle("padding-top"), this.options.padding_small];
				}
			}
		}, this);
		this.start(o);
	},
	
	out: function(prop) {
		this.options.leavedout = true;
		if (!this.options.dontleave)
		{ var o = {};
		  this.elements.each(function(el, i) {
			o[i] = {};
			o[i][prop] = [el.getStyle(prop), this.options.normal];
			var t = el.getStyle("background-position").split(" ");
			o[i]['background-position'] = [t[0]+" "+t[1], t[0]+" "+this.options.back_normal];
			o[i]['padding-top'] = [el.getStyle("padding-top"), this.options.padding_normal];
		  }, this);
		  this.start(o);
		}
	},
	
	open: function(index) {
		this.elements[index].fireEvent('mouseenter');
	},
	
	next: function() {
		if (this.options.leavedout)
		{ if (this.options.actual >= (this.elements.length-1))
		   this.options.actual = 0;
		  else
		   this.options.actual++;
		  this.open(this.options.actual);
		  this.options.leavedout = true;
		}
	},
	
	build: function(prop, el, i) {
		el.addEvent("mouseenter", this.enter.bind(this, [prop, el, i]));
	}
});
Kwick.Menu = new Class({
	Extends: Kwick.Base,
	options: {
		mode: 'horizontal',
		dontleave: true
	},
	
	initialize: function(elements, options) {
		this.parent(elements, options);
		this.ul = this.elements.getParent();
		switch(this.options.mode) {
			case 'vertical': this.elements.each(function(el, i) { this.build('height', el, i); }, this);
					  this.elements.each(function(el) { el.addEvent('mouseleave', this.out.bind(this, 'height')); }, this);
					  break;
					  
			case 'horizontal': this.elements.each(function(el, i) { this.build('width', el, i); }, this);
					  this.elements.each(function(el) { el.addEvent('mouseleave', this.out.bind(this, 'width')); }, this);
					  break;
		};
	}
});
Kwick.All = new Class({
	Extends: Kwick.Base,
	initialize: function(elements, property, options) {
		this.parent(elements, options);
		this.property = property;
		this.elements.each(function(el, i) { this.build(this.property, el, i); }, this);
		this.elements.each(function(el) { el.addEvent('mouseleave', this.out.bind(this, this.property)); }, this);
	}
});