/*
---
description: PillMenu
 
authors:
- Luca Scarpa aka luscarpa (http://www.luscarpa.com)
 
license:
- MIT-style license
 
requires:
core/1.2.4: '*'
 
provides:
- PillMenu
...
*/
var PillMenu = new Class({
	Implements: [Options,Events],

	options: {
		vertical: 0,
		pillClass: 'pill',
		selectedClass: 'selected',
		duration: 'short',
		transition: Fx.Transitions.Linear
	},
	
	//initialization
	initialize: function(element,options) {
		//set options
		this.setOptions(options);
		//set element
		this.element = document.id(element);
		
		//set pill element
		this.pill = this.element.getElement('.pill');
		
		if(!this.pill){
			//build pill element
			this.pill = new Element('div',{
				'class': this.options.pillClass,
				'style': 'position:absolute; z-index:1;'
			});
			//inject pill into element
			this.pill.inject(this.element,'top');
		}
		//make effect
		this.pillFx = new Fx.Morph(this.pill, {'duration': this.options.duration, 'link': 'cancel', 'transition': this.options.transition});

		this.start();
		
		if(this.options.clickLock){
			this.element.getElements('li a').each(function(el){
				el.addEvent('click',this.lockPill.bindWithEvent(this));
			}.bind(this));
		}
	},

	lockPill: function(e){
		e.stop();
		
		var targetEl = e.target.getParent('li');
		this.locked = true;
		var parentPos = targetEl.getPosition();
		var parentSize = targetEl.getSize();
		this.lockedLeft = parentPos.x;
		this.lockedWidth = parentSize.x;
		
		if(targetEl.hasClass(this.options.selectedClass)){
			return;
		} 
		else {
			
			var items = $$('.sub-categories li').removeClass('current_page_item');
			targetEl.addClass(this.options.selectedClass);
		}
	},
	
	changeTextColor: function(e,toggler){
		if(toggler == 'over'){
			if(!e.getParent().hasClass('active')){
				new Fx.Morph(e,{duration:this.options.duration}).start({
					'color':this.options.changeColor
				});
			}
		}
		if(toggler == 'out'){
			new Fx.Morph(e.getFirst(),{duration:this.options.duration}).start({
				'color':'#000'
			});
		}
	},
	
	start: function() {
		this.fireEvent('start');
		this.element.getElements('li').each(function(el,i){
			//detect selected menu
			if(el.hasClass(this.options.selectedClass)){
				//save selected menu
				this.selected = el;
				
				//set pill dimensions 
				this.pill.setStyles({
					width: el.getStyle('width'),
					height: el.getStyle('height'),
					left: el.getPosition().x - this.element.getPosition().x,
					top: el.getPosition().y - this.element.getPosition().y
				});
			}
			
			//add event to element
			el.addEvent('mouseenter', function(){
				//fire event start
				this.fireEvent('change');
				//set effect for horizontal and vertical style
				if(!this.options.vertical){
					if((el.hasClass(this.options.titleItem))) return;
					this.pillFx.start({
						'left': [this.pill.getStyle('left'), el.getPosition().x - this.element.getPosition().x],
						'width': [this.pill.getStyle('width'), el.getStyle('width')] 
					});
				} 
				else {
					this.pillFx.start({
						'top': [this.pill.getStyle('top'), el.getPosition().y - this.element.getPosition().y],
						'height': [this.pill.getStyle('height'), el.getStyle('height')]
					});
				}
			}.bind(this));
		}.bind(this));

		//add event to reset all
		this.element.addEvent('mouseleave', function(){
			//set effect for horizontal and vertical style
			if(!this.options.vertical){
				this.pillFx.start({ 
					'left': [this.pill.getStyle('left'), this.selected.getPosition().x - this.element.getPosition().x],
						'width': [this.pill.getStyle('width'), this.selected.getStyle('width')]
				});
				if(this.options.clickLock){
					if(this.locked){
						this.pillFx.start({ 
							'left': [this.pill.getStyle('left'), this.lockedLeft - this.element.getPosition().x],
							'width': this.lockedWidth
						});
					}
				}
			}
			else {
				this.pillFx.start({ 
					'top': [this.pill.getStyle('top'), this.selected.getPosition().y - this.element.getPosition().y],
					'height': [this.pill.getStyle('height'), this.selected.getStyle('height')]
				});
			}
		}.bind(this));
	}
});
