/***************************************************************************************************
* Requirements:
* - Prototype API: http://www.prototypejs.org/api
*
* This file holds the JavaScript that is used to create the panels throughout the site.
*
* Author: J.P. Daniel
* Date: 04/02/09
***************************************************************************************************/

var panelControl = Class.create({
	initialize: function(elem, config){
		elem = $(elem);
		this.panelsWrapper = new Element('div', {'class':'panelsWrapper'});
		this.handleWrapper = elem.addClassName('handleWrapper');
		this.panelWrapper = new Element('div', {'class':'panelWrapper'});
		this.panelContent = new Element('div', {'class':'panelContent'});
		this.handleWrapper.insert({ before: this.panelsWrapper });
		this.panelsWrapper.insert(this.handleWrapper.remove());
		this.panelsWrapper.insert(this.panelWrapper);
		this.panelWrapper.insert(this.panelContent);
		this.handles = this.panelsWrapper.select('.handle');
		this.panels = this.panelsWrapper.select('.panel');
		this.setActive(((config && !isNaN(config.active)) ? config.active : 0));
		this.panels.each(function(elem) {
			this.panelContent.insert(elem.remove());
		}.bind(this));
		this.handles.each(function(elem, i) {
			elem.observe('click', function(event) {
				event.stop();
				this.setActive(i);
			}.bindAsEventListener(this));
		}.bind(this));
	},
	setActive: function(tab) {
		if (tab >= 0 && tab < this.panels.length) {
			this.panels.each(function(elem, i) {
				if (tab == i) {
					elem.addClassName('active').removeClassName('inactive').show();
					$(this.handles[i]).addClassName('active').removeClassName('inactive');
					this.activePanel = i;
				} else {
					elem.addClassName('inactive').removeClassName('active').hide();
					$(this.handles[i]).addClassName('inactive').removeClassName('active');
				}
			}.bind(this));
		}
	},
	first: function() {
		this.setActive(0);
	},
	previous: function() {
		this.setActive(this.activePanel - 1);
	},
	next: function() {
		this.setActive(this.activePanel + 1);
	},
	last: function() {
		this.setActive(this.panels.length - 1);
	}
});