$extend(gumps, new Events);
$extend(gumps, {
	setup: function(){
		gumps.overtext();
		gumps.getData();
	},
	getData: function(){
		new Request.JSON({
			method: 'get',
			url: gumps.base + '/data.json',
			onSuccess: function(data) {
				gumps.data = data;
				gumps.fireEvent('dataLoaded');
			}
		}).send();
	},
	newsMarque: function(container, data) {
		var active = data.filter(function(d) { return !d.archive; });
		if (!active.length) return;
		if (active.length == 1) {
			container.empty().adopt(new Element('a', {
					href: data.url,
					html: data.title
				})
			);
			return;
		}
		marquee = new Fx.Marquee(container, {
			mode: 'vertical',
			duration: 500,
			showEffect: {
				top: [0,0], //reset the top every time to zero
				left: [100, 0],
				opacity: [0,1]
			},
			hideEffect: {
				top: 20
			}
		});
		var i = 0, item;
		var getNext = function() {
			var value;
			if (active[i]) {
				item = active[i];
				i++;
				return item;
			} else if (active[i + 1]){
				i++;
				return getNext();
			} else {
				i = 0;
				return getNext();
			}
		};
		var next = function(){
			var item = getNext();
			var link = new Element('a', {
				href: item.url,
				html: item.title
			});
			marquee.announce({
				message: link,
				delay: 2000,
				revert: false
			}).chain(function(){
				next.delay(1000);
			});
		};
		next();
	},
	overtext: function(){
		$$('input.overtext').each(function(input) {
			new OverText(input);
		});
	},
	SideSlider: new Class({
		
		Implements: Options,
		
		options: {
			container: null,
			nav: null,
			pages: [],
			prev: null,
			next: null
		},
		
		initialize: function(options){
			this.setOptions(options);
			this.element = $(this.options.container);
			this.nav = $(this.options.nav);
			this.pages = $$(this.options.pages);
			this.makeCarousel();
			this.setupNav();
			this.checkPosition();
		},
		makeCarousel: function(){
			this.carousel = new SimpleSlideShow.Carousel(this.element, {
				crossFadeOptions: {
					duration: 700,
					transition: 'expo:in:out'
				},
				wrap: false,
				slides: this.pages,
				nextLink: $(this.options.next),
				prevLink: $(this.options.prev),
				onSlideDisplay: function(index) {
					this.navs.each(function(nav, i) {
						if (i == index) nav.addClass('selected');
						else nav.removeClass('selected');
					});
				}.bind(this)
			});
		},
		setupNav: function(){
			this.navs = this.pages.map(function(nav, i){
				return new Element('a', {
					html: Browser.Engine.trident4 ? '.' : '',
					events: {
						click: function(){
							this.carousel.show(i);
						}.bind(this)
					}
				}).inject(this.nav);
			}, this);
			this.navs[0].addClass('selected');
		},
		checkPosition: function(){
			var index, item;
			this.pages.some(function(page, i){
				return page.getElements('a').some(function(link){
					if (link.get('href') == window.location.href) {
						item = link.getParent('li');
						index = i;
						return true;
					}
				});
			});
			if (index != undefined) {
				this.carousel.show(index);
				this.currentItem = item;
				item.addClass('current');
			}
		}
	}),
	Calendar: new Class({
		Implements: [Options, Events],
		initialize: function(options) {
			this.setOptions(options);
			this.elements = $$([]);
			this.listings = $H({});
			this.next = $(this.options.next);
			this.prev = $(this.options.prev);
			$$(this.options.listings).each(this.add, this);
			this.show(this.listings.getKeys()[0]);

			this.next.addEvent('click', this.back.bind(this));
			this.prev.addEvent('click', this.forward.bind(this));
		},
		add: function(listing){
			this.elements.push(listing);
			var date = Date.parse(listing.getElement('.cc_date').get('html'));
			if (!this.listings[date.get('year') + '-' + date.get('month')]) this.listings[date.get('year') + '-' + date.get('month')] = $$([]);
			this.listings[date.get('year') + '-' + date.get('month')].push(listing);
			var link = listing.getElement('h2 a');
		},
		show: function(month){
			this.elements.hide();
			$$(this.listings[month]).show();
			this.month = month;
			var months = this.listings.getKeys();
			var index = months.indexOf(month);
			if (index == 0) this.next.addClass('disabled');
			else this.next.removeClass('disabled');
			if (index == months.length - 1) this.prev.addClass('disabled');
			else this.prev.removeClass('disabled');
			this.fireEvent('change', [month]);
		},
		forward: function() {
			var months = this.listings.getKeys();
			var index = months.indexOf(this.month);
			this.show($pick(months[index + 1], this.month));
		},
		back: function(){
			var months = this.listings.getKeys();
			var index = months.indexOf(this.month);
			this.show($pick(months[index - 1], this.month));
		}
	})
});
window.addEvent('domready', gumps.setup);

