Search = function () {
	this._enabled = false;
	this._textFieldInitialized = false;
	
	this._showSpeed = 300;
	this._hideSpeed = 300;
	
	this.data_source = "data/rpc_wrapper.php?module=search";
	this.image_server = "";
	
	this.queue;
	
	this.init = function () {
		$('#searchBody').hide();
		$('#searchBody').removeClass('invisible');
		
		$('#searchBody, #searchBody .searchBtnContainer').click(function (event) {
			event.stopPropagation();
		});
		
		$(window.document).click(function (event) {
			if (Search.getInstance()._enabled) {
				Search.getInstance().toggle();
			}
		});
		
		$('#mainSearchInput').keyup(this.searchPhraseChangeHandler);
		$('#mainSearchInput').change(this.searchPhraseChangeHandler);
		$('#mainSearchInput').val('');
		
		this.queue = $.manageAjax.create('searchRequestQueue', { 
			queue: 'clear', 
			cacheResponse: true 
		}); 
	};
	
	this.toggle = function () {
		if (this._enabled) {
			$('#mainSearchIcon').show();
			$('#mainSearchIconActive').hide();
			
			if ($.browser.msie && ($.browser.version < 8)) {
				$('#searchBody').hide(0, this.hideCompleteHandler);
			} else {
				var clearBtn = $("#searchBody .text_clear_button");
				
				if (clearBtn.length) {
					clearBtn.hide();
				}
				
				$('#searchBody').slideUp(this._hideSpeed, this.hideCompleteHandler);
			}
		} else {
			$('#mainSearchIcon').hide();
			$('#mainSearchIconActive').show();
			
			if ($.browser.msie && ($.browser.version < 8)) {
				$('#searchBody').show(0, this.showCompleteHandler);
			} else {
				var clearBtn = $("#searchBody .text_clear_button");
				
				if (clearBtn.length) {
					clearBtn.show();
				}
				
				$('#searchBody').slideDown(this._showSpeed, this.showCompleteHandler);
			}
		}
	};
	
	
	this.performSearch = function (searchPhrase) {
		this.queue.clear(true);
		
		if (searchPhrase) {
			var params = {
				searchField: searchPhrase
			};
			
			AjaxUtils.loadJSON(this.data_source, params, this.renderResults, this, this.queue);
		} else {
			$('#searchResultsContainer').addClass('invisible');
		}
	};
	
	
	this.searchPhraseChangeHandler = function () {
		//alert($(this).val());
		Search.getInstance().performSearch($(this).val());
	};
	
	
	this.renderResults = function(data) {
		$('#searchResultsContainer').removeClass('invisible');
		$('#searchResultsContainer').empty();
		
		var out = "";
		if (data.activeItems.length) {
			out+= this.renderHeader('Auf Sendung');
			
			for (var i=0; i<data.activeItems.length; i++) {
				out+= this.renderResult(data.activeItems[i], i);
			}
		}
		
		if (data.archiveItems.length) {
			out+= this.renderHeader('Archiv', data.activeItems.length > 0);
			
			for (var i=0; i<data.archiveItems.length; i++) {
				out+= this.renderResult(data.archiveItems[i], i);
			}
		}
		
		if (data.totalArchiveItems-data.archiveItems.length) {
			out+= this.renderFooter(data.totalArchiveItems);
		}
		
		
		if (!data.archiveItems.length && !data.activeItems.length) {
			out = this.renderEmptyResultMessage();
		}
		
		$('#searchResultsContainer').append(out);
		
		GlobalAnimations.initRollOver($('#searchResultsContainer .searchResult'));
	};
	
	
	this.renderEmptyResultMessage = function () {
		var out = "";
		
		out+= '<div class="emptyResultMessage">Die Suche ergab keine Treffer.</div>';
		
		return out;
	};
	
	this.renderFooter = function (totalArchiveItems) {
		var out = "";
		out+= '<a class="searchResultsFooter" href="./?view=archive&search='+escape($('#mainSearchInput').val())+'">'+totalArchiveItems+((totalArchiveItems == 1) ? ' weiterer' : ' weitere')+' Treffer im Archiv</a>';
		
		return out;
	};
	
	this.renderHeader = function (text, useSpacing) {
		var out="";
		
		
		var spacing = useSpacing ? ' spacing' : '';
		
		out+= '<div class="searchResultsHeader'+spacing+'">'+text+'</div>';
		
		return out;
	};
	
	this.renderResult = function (data, idx) {
		var out = "";
		
		var altClass = (idx % 2 == 0) ? '' : ' alt';
		
		out+= '<a class="searchResult'+altClass+'" href="./?vid='+data.id+'">';
		out+= '	<div class="imageContainer">';
		out+= '		<img width="64" height="36" alt="" src="'+this.image_server+'?w=64&vid='+data.id+'">';
		out+= '		<img class="rollover invisible" alt="" src="img/img_rollover.png">';
		out+= '	</div>';
		
		out+= '	<div class="resultTitle">'+data.title+'</div>';
		out+= '</a>';
		
		return out;
	};
	
	
	
	this.showCompleteHandler = function (event) {
		Search.getInstance()._enabled = true;
		
		$('#searchContainer .searchBtn').addClass('active');
		
		$("#mainSearchInput").focus();
	};
	
	this.hideCompleteHandler = function (event) {
		Search.getInstance()._enabled = false;
		$('#searchContainer .searchBtn').removeClass('active');
	};
	
};


Search.instance = null;
Search.getInstance = function () {
	if (!Search.instance) {
		Search.instance = new Search();
	}
	
	return Search.instance;
};
