/*
	Polynorm QuickSearch 1.0
	
	Beschreibung:
	
	Blendet Elemente (beispielsweise Zeilen in einer Tabelle) ein und aus wenn Sie einem Suchwort in einer 
	Eingabebox entsprechen oder nicht entsprechen.

	Voraussetzungen:
	
	Die Suchtexte müssen in einem <span> stehen, welches die Klasse 'qs_' + namespace + '_data' hat.
	Das <span> muss ein Attribut 'qs_' + namespace + '_id' haben, welches als Inhalt die ID hat.
	Der Bereich der Ein- oder Ausgeblendet werden soll, muss folgende ID haben: 'qs_' + namespace + '_scope_' + id
	
	Beispiel:
	
	<script type="text/javascript">
		var qs = new QuickSearch('ekl');
	</script>
	
	<style>
		.qs_ekl_data { display:none; }
	</style>
	
	<input type="text" onkeyup="qs.search(this.value);" />
	<div id="qs_ekl_scope_1">
		<span class="qs_ekl_data" qs_ekl_id="1">Einkaufslistenname 1</span>
		Einkaufslistenname 1
	</div>
	<div id="qs_ekl_scope_2">
		<span class="qs_ekl_data" qs_ekl_id="2">Einkaufslistenname 2</span>
		Einkaufslistenname 2
	</div>
	<div id="qs_ekl_scope_non" style="display: none;">
		Keine Treffer.
	</div>
	
*/

var QuickSearch = Class.create();

QuickSearch.prototype = {
	
	initialize: function(namespace) {	
		this.namespace   = namespace;  // Namespace für diesen QuickSearch.
		this.searchvalue = '';         // Der Suchstring.
		this.hits        = 0;          // Anzahl der Treffer.
		this.minLength   = 2;          // Ist der eingegebene Suchstring kürzer, werden alle Elemente gezeigt.
		this.noHits      = 'non';      // Das Element, dass angezeigt wird, wenn es keinen Treffer gibt.
		this.results     = 'results';      // Das Element, dass angezeigt wird, wenn es keinen Treffer gibt.
		
		var elements = document.getElementsByClassName('qs_' + this.namespace + '_input');
		var el, i = 0;
		while (el = elements[i++]) {
			el.search = this.search.bind(this);
		}
	},
	
	search: function(searchvalue) {
		var element, elements, elementID, elementData, i = 0;
		
		this.hits = 0;
		searchvalue = searchvalue.toLowerCase();
		
		elements = document.getElementsByClassName('qs_' + this.namespace + '_data');
		
		var elementID, elementData, attr = 'qs_' + this.namespace + '_id';
		
		while (element = elements[i++]) {
			if (!element.qdata) {
				elementData = element.innerHTML.toLowerCase();
				element.qdata = elementData;
			} else {
				elementData = element.qdata;
			}
			elementID = element.getAttribute(attr);
			if ( elementData.indexOf(searchvalue) > -1 || searchvalue.length < this.minLength ){
				this.show(elementID);
				var adds = _(this.getScope(elementID) + '_additional');
				if (adds) adds.show();
				this.hits++;
			} else {
				this.hide(elementID);
				var adds = _(this.getScope(elementID) + '_additional');
				if (adds) _hide(adds);
			}
		}
		
		if (_(this.getScope(this.noHits))) {
			if (this.hits == 0) {
				this.show(this.noHits);
			} else {
				this.hide(this.noHits);
			}
		}
		
		if (_(this.getScope(this.results))) {
			if (this.hits == 0) {
				this.hide(this.results);
			} else {
				this.show(this.results);
			}
		}
	},
	
	getScope: function(elementID) {
		return 'qs_' + this.namespace + '_scope_' + elementID;
	},
	
	show: function(elementID) {
		_show(this.getScope(elementID));
	},
		
	hide: function(elementID) {
		_hide(this.getScope(elementID));
	}
	
};


