﻿	function FormPropose ( form_id, suggestion_div_id, list ) {
		this.min_length = 0;
		this.max_count = 25;
		this.list = list; 
		this.form_id = form_id;
		this.suggestion_div_id = suggestion_div_id;
		
		this.form = document.getElementById( this.form_id  );
		this.suggestion_div = document.getElementById( this.suggestion_div_id  );
		this.form.parent_class = this;
		this.suggestion_div.parent_class = this;
			
		this.addHandlers();
	}
	
	FormPropose.prototype.addHandlers = function () {
		this.addListener( "keyup", this.form, this.search );
		this.addListener( "focus", this.form, this.search );
		this.addListener( "blur", this.form, this.blurBox );
	}
	
	FormPropose.prototype.addListener = function ( event, el, func ) {
		if ( el.addEventListener ) {	// Für FF, Opera usw.
			el.addEventListener( event, func, false );
		} else {	// Für IE
			el.attachEvent( "on"+event, func );
		}
	}
	
	FormPropose.prototype.createEntry = function ( string ) {
	
		var new_child = document.createElement("div");
		new_child.appendChild( document.createTextNode( string ) );

		this.addListener( "mousedown", new_child, this.setValue );
		
		return new_child;
	}
	
	FormPropose.prototype.createBox = function ( list ) {
	
		var new_div = document.createElement("div");
		for (var i=0; i<list.length; i++) { new_div.appendChild( this.createEntry( list[i] ) ); }
		return new_div;
	}
	
	FormPropose.prototype.filterList = function ( string, list ) {
		
		var new_list = new Array;
		
		for (var i=0; i<list.length; i++) {
			var substr = list[i].substring( 0, string.length ).toLowerCase();
			var string = string.toLowerCase();
			if ( substr == string ) { new_list.push( list[i] ); }
		}
		
		return new_list;
	}
	
	FormPropose.prototype.search = function ( event ) {
	
		if ( event.target ) { var parent =  event.target; }
		else if ( event.srcElement ) { var parent = event.srcElement; }
		
		var parent_class = parent.parent_class;
		var string = parent.value;
		
		var suggestion_div = parent_class.suggestion_div;
		var max_count = parent_class.max_count;
		var min_length = parent_class.min_length;
		var list = parent_class.list;
	
		var count = 0;
		
		if ( string.length <= min_length ) { parent_class.clearBox(); return false; }				// Erst ab einer bestimmten Anzahl von Zeichen suchen
		if ( !suggestion_div.firstChild) { suggestion_div.appendChild( document.createElement("div") ); }		// Div innerhalb von Suggestion vorhanden?

		filtered_list = parent_class.filterList( string, list );
		
		count = filtered_list.length;
		if ( count == 0 || count > max_count ) { parent_class.clearBox(); return false;}				// Keine / zu viele Übereinstimmung/en gefunden?
		var new_div = parent_class.createBox( filtered_list );
		
		parent_class.clearBox();
		suggestion_div.appendChild( new_div );
		
	}
	
	FormPropose.prototype.clearBox = function () {
		if ( this.suggestion_div.firstChild ) {
			this.suggestion_div.removeChild( this.suggestion_div.firstChild );
		}
	}
	
	FormPropose.prototype.blurBox = function ( event ) {
		if ( event.target ) { var parent =  event.target; }
		else if ( event.srcElement ) { var parent = event.srcElement; }
		var parent_class = parent.parent_class;
		
		parent_class.clearBox();
	}
	
	FormPropose.prototype.setValue = function ( event ) {
		
		var string = "";
		if ( event.target ) { var parent =  event.target; }
		else if ( event.srcElement ) { var parent = event.srcElement; }
		
		var parent_class = parent.parentNode.parentNode.parent_class;
		var string = parent.firstChild.data;
		
		parent_class.form.value = string;
		parent_class.clearBox();
		return false;
	}
