var References = new Class({
	
	initialize: function(list, nav){
		this.list = $(list);
		this.navigation = $(nav);
		
		//init list
		var items = this.list.getElements('li');
		items.each(function(item){
			var img = item.getElement('img');
			var img2 = item.getElement('.container').getElement('img');
			img.addEvent('mouseover', this.showContainer.pass(item, this));
			img2.addEvent('mouseout', this.hideContainer.pass(item, this));
		}, this);
		
		//init navigation
		var navItems = this.navigation.getElements('li');
		navItems.each(function(item){
			var a = item.getElement('a');
			var checkbox = item.getElement('input');
			
			if(checkbox){
				a.addEvent('click', this.handleNavigationClick.bindWithEvent(this, [item]));
				checkbox.addEvent('click', (function(e){
					e.stopPropagation();
					this.update();
				}).bindWithEvent(this));
			}else{
				a.addEvent('click', this.handleNavigationClickAll.bindWithEvent(this));
			}
		}, this);
		
		this.select();
	},
	
	getSections: function(){
		return this.navigation.getElements('input[checked]').get('value');
	},
	
	update: function(){
		var sections = this.getSections();
		var regexp = new  RegExp('(' + sections.join('|') + ')', 'i');
		var items = this.list.getElements('li');
		
		//list
		items.each(function(item){
			var s = item.getElement('.main_sections').get('text');
			
			if(!s.match(regexp)){
				item.setStyle('display', 'none');
			}else{
				item.setStyle('display', 'block');
			}
		});
		
		//navigation
		this.navigation.getChildren('li').each(function(item){
			var checkbox = item.getElement('input');
			if(!checkbox){
				if(!sections.length){
					item.addClass('active');
				}else{
					item.removeClass('active');
				}
				return;
			}
			
			if(checkbox.get('checked')){
				item.addClass('active');
			}else{
				item.removeClass('active');
			}
		});
	},
	
	select: function(section){
		if(!section){
			this.navigation.getElements('input').set('checked', null);
			this.hideCheckboxes();
		}else{
			var checkbox = this.navigation.getElement('input[value="' + section + '"]');
			var item = checkbox.getParent('li');
			
			this.navigation.getElements('input').set('checked', null);
			this.toggleCheckbox(checkbox);
			//this.showCheckboxes();
		}
		
		this.update();
	},
	
	filter: function(search){
		search = decodeURI(search).escapeRegExp();
		
		var regexp = new  RegExp(search, 'i');
		
		this.list.getElements('span.sections').each(function(el){
			if(el.get('text').match(regexp)){
				el.getParent('li').setStyle('display', 'block');
			}else{
				el.getParent('li').setStyle('display', 'none');
			}
		});
	},
	
	/*
	Event Handler
	*/
	handleNavigationClickAll: function(e){
		this.select(null);
		e.preventDefault();
	},
	handleNavigationClick: function(e, item){
		this.select(item.getElement('input').get('value'));
		e.preventDefault();
	},
	
	/*
	Helpers
	*/
	showContainer: function(el){
		if(this.currentItem)
			this.hideContainer(this.currentItem);
	
		var container = el.getElement('.container');
	
		container.set('tween', {duration: 200});
		container.setStyle('opacity', 0);
		container.tween('opacity', 0, 1);
	
		el.getElement('a').addClass('hover');
		
		this.currentItem = el;
	},
	
	hideContainer: function(el){
		el.getElement('a').removeClass('hover');
	},
	
	toggleCheckbox: function(checkbox){
		if(checkbox.get('checked')){
			checkbox.set('checked', null);
		}else{
			checkbox.set('checked', 'checked');
		}
	},
	
	showCheckboxes: function(){
		this.navigation.getElements('input').setStyle('display', 'inline');
	},
	hideCheckboxes: function(){
		this.navigation.getElements('input').setStyle('display', 'none');
	}
	
});


//init
function initReferences(element){
	var list = element.getElement('.references');
	var nav = element.getElement('.references_navigation');

	var references = new References(list, nav);
	
	if(window.location.hash){
		references.select(window.location.hash.substr(1));
	}else{
		var key = 'section';
		var regex = new RegExp("[?&]" + key + "=([^&#]*)");
		var results = regex.exec(window.location.href);
		results = (results == null) ? null : results[1];
		
		if(results)
			references.filter(results);
	}
}

document.addEvent('domready', function(){
	$$('.rscms_templateblock.projects').each(initReferences);
});