var SelectPreviewPlugin = {
	activehash: '',
	elements: Array(),
	paused: window.selectpreview_paused,
	hold_time: window.selectpreview_hold_time,
	timer: false,
	init: function() {
		var wrapper = document.id('SelectPreview');
		var selectors = new Element('ul', {
			'id': 'SelectPreview_selectors'
		});
		SelectPreviewPlugin.elements = wrapper.getElements('div[class~=navitem]');
		SelectPreviewPlugin.elements.each(function (element, i) {
			element.set('id', 'selectpreview'+i);
			if(i>0) SelectPreviewPlugin.hide(element.get('id'));
		
			var selector = new Element('li', {
				'id': element.get('id')+'_selector',
				'events' : {
					'click': function (ev) {
						var elementid = this.get('id').substring(0, this.get('id').length-9);
						SelectPreviewPlugin.show(elementid);
					}
				}
			});
			var selector_name = new Element('h3');
			if(element.getElement('h1')) {
				selector_name.set('text', element.getElement('h1').get('text'));
				element.getElement('h1').dispose();
			} else if(element.getElement('h2')) {
				selector_name.set('text', element.getElement('h2').get('text'));
				element.getElement('h2').dispose();
			}
			selector.grab(selector_name);
			var selector_summary = new Element('div', {
				'class': 'summary'
			});
			if(element.getElement('div[class~=summary]')) {
				var summarylink = element.getElement('div[class~=summary]').getElement('a[class~=more-link]');
				var clonedlink;
				if(summarylink) {
					clonedlink = summarylink.clone();
					summarylink.dispose();
				}
				var summarytext = (element.getElement('div[class~=summary]').textContent||element.getElement('div[class~=summary]').innerText).substring(0, 80);
				if(summarytext.length == 80) {
					selector_summary.set('text', summarytext.substring(0, summarytext.lastIndexOf(' '))+'...');
				} else {
					selector_summary.set('text', summarytext);
				}
				if(clonedlink) {
					selector_summary.grab(clonedlink);
				}
				element.getElement('div[class~=summary]').dispose();
			}
			selector.grab(selector_summary);
			selectors.grab(selector);
			wrapper.grab(selectors);
		});
		SelectPreviewPlugin.activehash = window.location.hash;
		if(SelectPreviewPlugin.activehash=='' || !wrapper.getElementById(SelectPreviewPlugin.activehash)) SelectPreviewPlugin.activehash = SelectPreviewPlugin.elements[0].get('id');
		SelectPreviewPlugin.show(SelectPreviewPlugin.activehash);
		selectpreview_show_controls = true;
		if(typeof selectpreview_show_controls != 'undefined' && selectpreview_show_controls==true) {
			var selectpreview_controls = new Element('div', { 'id': 'selectpreview_controls' });
			var next = new Element('span', { 
				'class': 'next', 
				'events': {
					'click': function(ev) {
						if(SelectPreviewPlugin.paused == false) {
							$clear(SelectPreviewPlugin.timer);
							SelectPreviewPlugin.timer = SelectPreviewPlugin.next.periodical(SelectPreviewPlugin.hold_time);
						}
						SelectPreviewPlugin.next();
					}
				}
			});
			var playpause = new Element('span', { 
				'class': 'playpause pause',
				'events': {
					'click': function(ev) {
						if(SelectPreviewPlugin.paused == false) {
							SelectPreviewPlugin.paused = true;
							$clear(SelectPreviewPlugin.timer);
							this.removeClass('play');
							this.addClass('pause');
						} else {
							SelectPreviewPlugin.paused = false;
							SelectPreviewPlugin.timer = SelectPreviewPlugin.next.periodical(SelectPreviewPlugin.hold_time);
							this.removeClass('pause');
							this.addClass('play');
						}
					}
				}	
			});
			var previous = new Element('span', { 
				'class': 'previous',
				'events': {
					'click': function(ev) {
						if(SelectPreviewPlugin.paused == false) {
							$clear(SelectPreviewPlugin.timer);
							SelectPreviewPlugin.timer = SelectPreviewPlugin.next.periodical(SelectPreviewPlugin.hold_time);
						}
						SelectPreviewPlugin.previous();
					}
				}
			});
			selectpreview_controls.grab(previous);
			selectpreview_controls.grab(playpause);
			selectpreview_controls.grab(next);
			selectpreview_controls.inject(wrapper, 'after');
			wrapper.addEvent('mouseenter', function() {
				document.id('selectpreview_controls').getElement('span[class~=playpause]').fireEvent('click');
			});
			wrapper.addEvent('mouseleave', function() {
				document.id('selectpreview_controls').getElement('span[class~=playpause]').fireEvent('click');
			});
		}
	},
	show: function(id) {
		var current = parseInt(id.substring('selectpreview'.length));
		document.id(SelectPreviewPlugin.activehash+'_selector').removeClass('active');
		SelectPreviewPlugin.elements[current].replaces(document.id(SelectPreviewPlugin.activehash));
		SelectPreviewPlugin.activehash = id;
		document.id(SelectPreviewPlugin.activehash+'_selector').addClass('active');
	},
	hide: function(id) {
		document.id(id).dispose();
	},
	next: function() {
		var current = parseInt(SelectPreviewPlugin.activehash.substring('selectpreview'.length));
		var next = current+1;
		if(next > SelectPreviewPlugin.elements.length-1) {
			next = 0;
		}
		SelectPreviewPlugin.show('selectpreview'+next);
	},
	previous: function() {
		var current = parseInt(SelectPreviewPlugin.activehash.substring('selectpreview'.length));
		var previous = current-1;
		if(previous < 0) {
			previous = SelectPreviewPlugin.elements.length-1;
		}
		SelectPreviewPlugin.show('selectpreview'+previous);
	}
};
SelectPreviewPlugin.init();
if(SelectPreviewPlugin.paused==false) {
	var control = document.id('selectpreview_controls').getElement('span[class~=playpause]');
	SelectPreviewPlugin.timer = SelectPreviewPlugin.next.periodical(SelectPreviewPlugin.hold_time);
	control.removeClass('pause');
	control.addClass('play');
}

