var Filter = new Class({
	
	Implements: [Options, Events],
	
	inp: null,
	cont: null,	
	items: null,
	states: null,
	type: null,
	pattern: null,
	containerType: null, 
	
	initialize: function(input, container, type, containerType) {
		this.inp = $(input),
		this.cont=  $(container);
		this.states = new Array();
		this.containerType = containerType;
		
		if(this.cont == null){
			return;
		}
		
		this.items = this.cont.getChildren();		
		
		this.items.each(function(div) {
			var nickname = div.getElements('div ul li a').get('text')[0];
			if(nickname == null) {
				nickname = div.getElements('ul li a').get('text')[0];
			}
			this.states[nickname] = 1;
		}, this);
		
		if(this.inp == null) {
			return false;
		}
		switch(this.containerType){
			case 'album':
				this.inp.addEvent('keyup', this.filterItemsAlbum.bind(this));
				break;
			case 'video':
				this.inp.addEvent('keyup', this.filterItemsVideo.bind(this));
				break;
			case 'event':
				this.inp.addEvent('keyup', this.filterItemsEvent.bind(this));
				break;
			default:
				this.inp.addEvent('keyup', this.filterItems.bind(this));
		}
	},
	
	filterItems: function(event) {
		this.pattern = this.inp.value;
		this.items.each(function(div) {
			var nickname = div.getElements('div ul li a').get('text')[0];			
			var name = div.getElements('div ul li').get('text')[1];
			
			// für <span>
			if(nickname == null) {
				nickname = div.getElements('ul li a').get('text')[0];
				name = div.getElements('ul li').get('text')[1];
			}
			
			if(nickname == null || name == null) {
				return false;
			}
			
			// Rahmen um container verstecken
			if(this.type || div.getParent().get('class') == 'item') {
				this.type = 1;
				toHide = div.getParent();
			}
			else {
				toHide = div;
			}
			
			if(nickname.test(this.pattern, 'i') || name.test(this.pattern, 'i')) {
				if(this.states[nickname] == 0) {
					toHide.setStyle('display', 'inline-block');
					this.states[nickname] = 1;
				}				
			}
			else {
				if(this.states[nickname] == 1) {
					toHide.setStyle('display', 'none');
					this.states[nickname] = 0;
				}
			}
		}, this);
	},
	
	filterItemsAlbum: function(event) {
		var pattern = this.inp.get('value');
		var items = this.cont.getElements('span.album');
		items.each(function(span) {
			var place = span.getElements('a.main ul.description li.place span')[0];
			var name = place.get('text');
			
			if(name.test(pattern, 'i') || pattern.length == 0){
				span.setStyle('display', 'inline-block');
			}
			else{
				span.setStyle('display', 'none');
			}
		});
		
		items = this.cont.getElements('div.daily-container');
		items.each(function(div){
			var albums = div.getElements('span.album');
			for(i = 0; i < albums.length; i++){
				if(albums[i].getStyle('display') != 'none'){
					div.setStyle('display', 'block');
					return;
				}
				div.setStyle('display', 'none');
			}
		});
	},
	
	filterItemsVideo: function(event) {
		var pattern = this.inp.get('value');
		var items = this.cont.getElements('span.container-video');
		items.each(function(span) {
			var place = span.getElements('ul.description li.place span')[0];
			var name = place.get('text');
			
			if(name.test(pattern, 'i') || pattern.length == 0){
				span.setStyle('display', 'inline-block');
			}
			else{
				span.setStyle('display', 'none');
			}
		});
		
		items = this.cont.getElements('div.daily-container');
		items.each(function(div){
			var albums = div.getElements('span.container-video');
			for(i = 0; i < albums.length; i++){
				if(albums[i].getStyle('display') != 'none'){
					div.setStyle('display', 'block');
					return;
				}
				div.setStyle('display', 'none');
			}
		});
	},
	
	filterItemsEvent: function(event) {
		var pattern = this.inp.get('value');
		var items = this.cont.getElements('div.container-event');
		items.each(function(span) {
			var place = span.getElements('ul.description li a')[0];
			var name = place.get('text');
			
			if(name.test(pattern, 'i') || pattern.length == 0){
				span.setStyle('display', 'block');
			}
			else{
				span.setStyle('display', 'none');
			}
		});
		
		items = this.cont.getElements('span.daily-container');
		items.each(function(div){
			var albums = div.getElements('div.container-event');
			for(i = 0; i < albums.length; i++){
				if(albums[i].getStyle('display') != 'none'){
					div.setStyle('display', 'inline-block');
					return;
				}
				div.setStyle('display', 'none');
			}
		});
	}
	
});
