//scripte kopieren is doof... wir machen das auch nicht bei dir... also lass es :P
//was fraun nich können, kann ich hier... *zup* *zippp* *pofff* O.O
function AutoCompleteBox() {
	this.acListTotal =  0;
	this.acListCurrent = -1;
	this.acDelay = 150;
	this.acSearchId	 = null;
	this.acResultsId = null;
	this.acSearchField = null;
	this.acResultsDiv = null;
	this.tagData = new Array();
	this.boxstyle = 'white';
	var self = this;
	
	this.setStyle = function(style) {
		self.boxstyle = style;
	}
	
	this.setAutoComplete = function(field_id) {
		self.acSearchId  = "#" + field_id;
		self.acResultsId = "#" + field_id + "_search_results";
		$("body").append('<div id="' + field_id + '_search_results" class="autocomplete"></div>');
		self.acSearchField	= $(self.acSearchId);
		self.acResultsDiv	= $(self.acResultsId);
		
		self.repositionResultsDiv();
		
		self.acSearchField.blur(function(){setTimeout(function () {self.clearAutoComplete()}, 150) });
		self.acSearchField.keyup(function (e) {
			var keyCode = e.keyCode || window.event.keyCode;
			var lastVal = self.acSearchField.val();
			if(self.updownArrow(keyCode)){
				return;
			}
			if(keyCode == 13 || keyCode == 27){
				self.clearAutoComplete();
				return;
			}
			setTimeout(function () {self.autoComplete(lastVal)}, self.acDelay);
		});
	}
	
	this.autoComplete = function(lastValue) {
		var part = self.acSearchField.val();
		if(part == ''){
			self.clearAutoComplete();
			return;
		}
		if(lastValue != part){
			return;
		}
		var searchResult = self.searchTags(part);
		var ansLength = self.acListTotal = searchResult.length;
		if(ansLength > 0){
			var newData = '';
			for(i=0; i < ansLength; i++) {
				newData += '<div class="search_' + self.boxstyle + '">' + searchResult[i] + '</div>';
			}
			self.acResultsDiv.html(newData);
			self.acResultsDiv.css("display","block");
			var divs = $(self.acResultsId + " > div");
			divs.mouseover( function() {
				divs.each(function(){ this.className = "search_" + self.boxstyle; });
				this.className = "searchSelect";
			});
			divs.click( function() {
			//?????????????
				self.addSearchResult(this.childNodes[0].nodeValue);
				self.clearAutoComplete();
			});
		} else {
			self.clearAutoComplete();
		}
	}
	
	this.clearAutoComplete = function() {
		self.acResultsDiv.html('');
		self.acResultsDiv.css("display","none");
	}
	
	this.repositionResultsDiv = function() {
		var sf_pos    = self.acSearchField.offset();
		var sf_top    = sf_pos.top;
		var sf_left   = sf_pos.left;
		var sf_height = self.acSearchField.height();
		var sf_width  = self.acSearchField.width();
		self.acResultsDiv.css("position","absolute");
		self.acResultsDiv.css("left", sf_left - 2);
		self.acResultsDiv.css("top", sf_top + sf_height + 5);
		self.acResultsDiv.css("width", sf_width - 2);
	}
	
	this.updownArrow = function(keyCode) {
		if(keyCode == 40 || keyCode == 38){
	
			if(keyCode == 38){ // keyUp
				if(self.acListCurrent == 0 || self.acListCurrent == -1){
					self.acListCurrent = self.acListTotal-1;
				}else{
					self.acListCurrent--;
				}
			} else { // keyDown
				if(self.acListCurrent == self.acListTotal-1){
					self.acListCurrent = 0;
				}else {
					self.acListCurrent++;
				}
			}
	
			this.acResultsDiv.children().each(function(i){
				if(i == self.acListCurrent){
					self.addSearchResult(this.childNodes[0].nodeValue);
					this.className = "searchSelect";
				} else {
					this.className = "search_" + self.boxstyle;
				}
			});
	
			return true;
		} else {
			self.acListCurrent = -1;
			return false;
		}
	}
	
	this.loadSearchMeta = function(inCatid) {
		var tagurl = 'frontpage.php?page=ajax_tagsearch&catid=' + inCatid;
		$.getJSON(tagurl, function(data) {
			self.tagData = data;
		});
	}
	
	this.searchTags = function(searchInput) {
		var tagPos = searchInput.lastIndexOf(',');
		var tagInput = jQuery.trim(searchInput.substring(tagPos + 1));
		var tagSearchResult = new Array();
	
		$.each(self.tagData, function(tagname, tagid) {
			if(tagname.indexOf(tagInput) != -1) {
				tagSearchResult.push(tagname);
			}
		});
		
		return tagSearchResult;
	}
	
	this.addSearchResult = function(result) {
		var oldval = self.acSearchField.get(0).value;
		var commapos = oldval.lastIndexOf(',');
		if(commapos != -1) {
			self.acSearchField.get(0).value = oldval.substring(0, commapos + 1) + " " + result;
		} else {
			self.acSearchField.get(0).value = result;
		}
	}
}
