/* author:	Richard Schmid, infolox GmbH, http://www.infolox.de */

function getObjectByID (oDocument, sID) {
	if (oDocument.all) {
		return oDocument.all[sID];
	}
	else if (oDocument.getElementById) {
		return oDocument.getElementById(sID);
	}
	else if (oDocument.layers) {
		return oDocument.layers[sID];
	}
}

function HWSearchController(obj_name, sSearchWord_) {
	this.objName = obj_name;
	this._searchWordParam = sSearchWord_;
	this.is_ie = navigator.userAgent.indexOf("MSIE") != -1;
	
	try{
		if (typeof hw_search_i18n == "object" ){
			this.i18n = hw_search_i18n;
		}
		else {
			alert("Can't find GUI translation HWSearch_i18n.js");
			return false;
		}
		
		if (typeof hw_search_items == "object" ){
			this.allItems = hw_search_items;
		} 
		else {
			alert("Couldn't load data");
			return false;
		}
		
		if (typeof hw_search_synonyms == "object" ){
			this.synonymsList = hw_search_synonyms;
		}
		else {
			this.synonymsList = new Array();
		}
		
		var start_search_cmd = this.objName+".startSearch(null)";
		this.oSearchWordInput = getObjectByID(document, "search_word");
		this.oSearchWordInput.focus();
		this.oSearchWordInput.onclick = function() {
			try {
				this.oSearchWordInput.value = "";
				this.oSearchWordInput.onclick = new Function("");
			} catch(e){}
		};
		this.oSearchWordInput.onkeypress = function(event_object){
			try{
				if( navigator.userAgent.indexOf("MSIE") != -1 ){ var key = event.keyCode; }
				else { var key = event_object.which; }
				
				if( key == 13 ){ eval( start_search_cmd ); }
			} catch(e){ }
		};
	}
	catch(e){
		alert("Initialization failed!\n"+e);
	}
	
	this.startSearch = function(sSearchWordParam_) {
		this.__applyDisplaySettings();
		//this.__clearOldSearchResults();
		
		try{
			var search_word = null;
			if (sSearchWordParam_) {
				search_word = sSearchWordParam_;
				this.oSearchWordInput.value = search_word;
			}
			else {
				search_word = this.oSearchWordInput.value;
			}
		
			if (search_word == "") {
				return false;
			}
			if (!this.oContent) {
				return false;
			}
			
			this.resultsDiv = getObjectByID(document, "ssearch");
			if (!this.resultsDiv) {
				this.resultsDiv = document.createElement("DIV");
				this.oContent.appendChild( this.resultsDiv );
				this.resultsDiv.id = 'ssearch';
			}

			var model = new HWSearchModel();
			model.setItemsList( this.allItems );
			model.setSynonymsList( this.synonymsList );
			model.setSearchWord( search_word );
			model.init();
			
			if (model.getFoundItems().length == 0) {
				var aWords = search_word.split(" ");
				if (aWords.length > 1) {
					var aModels = new Array();
					for (i in aWords){
						if (aWords[i] != "") {
							eval( "var model_"+i+" = new HWSearchModel();" );
							eval( "model_"+i+".setItemsList( this.allItems );" );
							eval( "model_"+i+".setSynonymsList( this.synonymsList );" );
							eval( "model_"+i+".setSearchWord( aWords[i] );" );
							eval( "model_"+i+".init();" );
							eval( "aModels[aModels.length] = model_"+i+";");
						}
					}
					var view = new HWSearchView(this.i18n);
					view.setFoundItems(model.getFoundItems());
					view.setVariants(model.getVariants());
					view.setSearchWord(search_word);
					view.setModels(aModels);
					view.appendSplittedResultBlock(this.resultsDiv);
				}
				else {
					var view = new HWSearchView(this.i18n);
					view.setVariants(model.getVariants());
					view.setSearchWord(search_word);
					view.appendNoResultBlock(this.resultsDiv);
				}
			}
			else {
				var view = new HWSearchView(this.i18n);
				view.setFoundItems(model.getFoundItems());
				view.setVariants(model.getVariants());
				view.setSearchWord(search_word);
				view.appendStdResultBlock(this.resultsDiv);
			}

			if (!this.is_ie)
				document.close();
		}
		catch(e) {
			alert("Search failed!\n"+e);
		}
	};
	
	this.__clearOldSearchResults = function(){
		this.__clearNode(this.resultsDiv);
	};
	
	this.__applyDisplaySettings = function(){
		var oPNLine = getObjectByID(document, 'pnline');
		var oPN = getObjectByID(document, 'pn');
		var oBreadcrumb = getObjectByID(document, 'breadcrumb');
		var oSubmenu = getObjectByID(document, 'submenu');
		this.oContent = getObjectByID(document, 'contenthome');
		if (!this.oContent) {
			this.oContent = getObjectByID(document, 'right');
		}
		if (!this.oContent) {
			this.oContent = getObjectByID(document, 'sitemapcell');
		}
		if (!this.oContent) {
			this.oContent = getObjectByID(document, 'coslist');
		}
		//clear or invalidate Nodes
		if (oBreadcrumb) {
			oBreadcrumb.style.display = 'none';
		}
		if (oSubmenu) oSubmenu.style.display = 'none';
		if (this.oContent) this.__clearNode(this.oContent);
		if (oPNLine && oPN) {
			oPNLine.style.display = 'block';
			oPN.style.display = 'block';
		}
		var oMSP = getObjectByID(document, 'msp');
		var oMSearch = getObjectByID(document, 'msearch');
		var oMMap = getObjectByID(document, 'mmap');
		var oMOSList = getObjectByID(document, 'mos');
		if (oMSP) oMSP.className = 'none';
		if (oMSearch) oMSearch.className = 'active';
		if (oMMap) oMMap.className = 'none';
		if (oMOSList) oMOSList.className = 'none';
	};
	
	this.__clearNode = function(oNode_){
		var oChild = oNode_.firstChild;
		
		while (oChild) {
			oNode_.removeChild(oChild);
			oChild = oNode_.firstChild;
		}
	}
};
var __controller;
HWSearchController.init = function(sSearchWord_) {
	var sSearchWord = sSearchWord_;
	var oInpField = getObjectByID(document, 'search_word');
	if ((sSearchWord_ == '') && (oInpField)) {
		sSearchWord = oInpField.value;
	}
	if (sSearchWord != "") {
		__controller = new HWSearchController("__controller", sSearchWord);
		__controller.startSearch(sSearchWord);
	}
};
