

/**************************************************************

	Script		: Drawers
	Version		: 1.0
	Authors		: Matt Robinson

**************************************************************/

var Drawers = new Class({
	
	Implements: [Options, Events],
	
	getOptions: function(){
		var options = {
			toggleClass: null,
			toggleText: null,
			openDrawer: null,
			drawSpeed: 500	
			};
			
		return options;
	},
	
	initialize: function(_hiddenElements, _triggerElements, options)
	{
		this.setOptions(this.getOptions(), options);
		
		this.hiddenElements = $$(_hiddenElements);
		this.triggerElements = $$(_triggerElements);
		this.drawerArr = new Array();
		
		this.hiddenElements.each(function(el, i)
		{
			if(this.triggerElements[i])
			{
				var drawer = new Drawer(el, this.triggerElements[i], this.options);
				this.drawerArr.push(drawer);
			}
			
		}.bind(this));
		if((this.options.openDrawer > 0) && (this.options.openDrawer <= (this.drawerArr.length)))
		{
			this.drawerArr[this.options.openDrawer - 1].openDrawer(true);
		}
		
	}
});


/**************************************************************

	Script		: Drawer
	Version		: 1.0
	Authors		: Matt Robinson

**************************************************************/

var Drawer = new Class({
	
	Implements: [Options, Events],
	
	getOptions: function(){
		var options = {
			toggleClass: null,
			toggleText: null,
			drawSpeed: 500	
			};
			
		return options;
	},
	
	initialize: function(_hiddenElement, _triggerElement, options)
	{
		this.setOptions(this.getOptions(), options);
		
		this.open = false;
		this.hiddenElement = _hiddenElement;
		this.hiddenElementOpenHeight = this.hiddenElement.getSize().y;
		this.triggerElement = _triggerElement;	
		
		if(this.options.toggleText)
		{
			this.originalText = this.triggerElement.get('html');
		}
		
		this.drawerTween = new Fx.Morph(this.hiddenElement,{duration: this.options.drawSpeed, transition:Fx.Transitions.Sine.easeInOut});
		
		this.resetStyles();
		this.attachEvents();
	},
	
	resetStyles: function()
	{
		this.hiddenElement.setStyles({
			display: 'block',
			overflow: 'hidden',
			height: '0px'		
		});
	},
	
	attachEvents: function()
	{
		this.triggerElement.addEvent('click', function(evt)
		{
			if(!this.open)
			{
				this.openDrawer();	
			}
			else
			{
				this.closeDrawer();
			}
				
		}.bind(this));
	},
	
	openDrawer: function(setOpen)
	{
		this.open = true;
		
		if(this.options.toggleClass)
		{
			this.triggerElement.addClass(this.options.toggleClass);
		}
		
		if(this.options.toggleText)
		{
			this.triggerElement.set('html', this.options.toggleText);
		}
		
		if(!setOpen)
		{
			this.drawerTween.cancel();
			this.drawerTween.start({
				'height' : String(this.hiddenElementOpenHeight + 'px')	
			});
		}
		else
		{
			this.hiddenElement.setStyle('height', String(this.hiddenElementOpenHeight + 'px'));
		}
	},
	
	closeDrawer: function()
	{
		this.open = false;
		
		if(this.options.toggleClass)
		{
			this.triggerElement.removeClass(this.options.toggleClass);
		}
		
		if(this.options.toggleText)
		{
			this.triggerElement.set('html', this.originalText);
		}
		
		this.drawerTween.cancel();
		this.drawerTween.start({
			'height' : '0px'	
		});
	}
});
