/* ===========================================================================
//	lib_searchtool3.js 
// ======================================================================== */

var searchLayer = {
	CURRENT_LAYER	: "visualBrowseBox",
	
	switchToVisualBrowse : function() {
						//this.switchLayer('visualBrowseBox');
						//document.getElementById('headerTabVisual').className = "active";
						//document.getElementById('headerTabSearch').className = "fake";
						//document.getElementById('headerTabAsk').className = "fake";
					},
	
	switchToAskQuestion : function(isLogged,ontClsName) {
						if(isLogged && isLogged==true) {
							var p = "";
							if(ontClsName && ontClsName!="") {
								var response = dkWebService3.getPathToCategory(ontClsName);
								if(response && response != "") {
									/* ahh, we got something */
									if(response.length > 0) {
										p = response.join("|");
										themefinder.PRESETS[themefinder.PRESETS.length] = ["TF_ASK_A_QUESTION", p];
									}
								}
								
								/* TF already started, just check the PRESETS again */
								if(typeof(themefinderObjects['TF_ASK_A_QUESTION']) == 'object') {
									if(p) {
										themefinder.checkPresets();
									} else {
										themefinder.load('TF_ASK_A_QUESTION');
									}
								}
							}
							if(typeof(themefinderObjects['TF_ASK_A_QUESTION']) != 'object') {
								themefinder.init('ASK_A_QUESTION');
							}
						}
						
						//this.switchLayer('askQuestionBox');
						//document.getElementById('headerTabAsk').className = "active";
						//document.getElementById('headerTabVisual').className = "fake";
						//document.getElementById('headerTabSearch').className = "fake";
					},
	
	switchToSimple	: function() {
						//searchtool.resetAdvSearch();
						//document.simpleSearchForm.searchfor.value = document.advSearchForm.searchfor.value;
						//this.switchLayer('simpleSearchBox');
						//document.getElementById('headerTabSearch').className = "active";
						//document.getElementById('headerTabVisual').className = "fake";
						//document.getElementById('headerTabAsk').className = "fake";
					},
	switchToAdv		: function() {
						searchtool.init();
						//document.advSearchForm.searchfor.value = document.simpleSearchForm.searchfor.value;
						//this.switchLayer('advSearchBox');
						//document.getElementById('headerTabSearch').className = "active";
						//document.getElementById('headerTabVisual').className = "fake";
						//document.getElementById('headerTabAsk').className = "fake";
					},
	switchToAdvCstm	: function() {
						//document.advSearchForm.searchfor.value = document.simpleSearchForm.searchfor.value;
						searchtool.deleteAllBars();
						//this.switchLayer('advSearchBox');
						searchtool.addBar(null,null);
					},
	
	switchLayer		: function(newLayer) {
						if(newLayer == "") { return false; }
						if(document.getElementById) {
							/* hide current */
							if(this.CURRENT_LAYER != "" && "object" == typeof(document.getElementById(this.CURRENT_LAYER))) {
								eval("document.getElementById('"+this.CURRENT_LAYER+"')").style.display = "none";
							}
							/* show new, set current */
							if(newLayer != "" && "object" == typeof(document.getElementById(newLayer))) {
								eval("document.getElementById('"+newLayer+"')").style.display = "block";
								this.CURRENT_LAYER = newLayer;
							}
						}
					},
	
	/* prebuild advanced search if config data stored in CONFIG_ON_STARTUP */
	buildAdvSearchOnStartup : function() {
						if(searchtool.ALREADY_INIT==true) { return; }
						
						var LAST_BAR_NUM = 0;
						var PREOBJ = searchtool.CONFIG_ON_STARTUP;
						
						/* get/set some default params */
						if(PREOBJ["searchfor"]) {
							document.advSearchForm.searchfor.value = PREOBJ["searchfor"];
						}
						
						if(!PREOBJ['itemOrder']) { return; }
						var orderArr = searchtool.CONFIG_ON_STARTUP['itemOrder'].split("|");
						
						for(var i=0; i<orderArr.length; i++) {
							var tmp = orderArr[i].split(":");
							var barId	= tmp[0];
							var barType	= tmp[1];
							
							if(!isNaN(barId)) {
								
								if(barType=="theme") {
									LAST_BAR_NUM = searchtool.addBar(LAST_BAR_NUM,barType,null,barId);
									if(barId > searchtool.NEXT_ID) { searchtool.NEXT_ID = barId+1; }
									searchtool.ALREADY_INIT = true;
									
									var themefinder_id = "TF_"+barId;
									var name = "themepath_"+barId;
									if(PREOBJ[name]) {
										var value = PREOBJ[name];
										if(value!="") {
											themefinder.initPreset(themefinder_id, unescape(value));
										}
									}
								}
								
								if(barType=="excludes") {
									LAST_BAR_NUM = searchtool.addBar(LAST_BAR_NUM,barType,null,barId);
									if(barId > searchtool.NEXT_ID) { searchtool.NEXT_ID = barId+1; }
									searchtool.ALREADY_INIT = true;
									
									var name = "excludesThis_"+barId;
									if(PREOBJ[name]) { handleFoFi.fillText(name,PREOBJ[name]); }
								}
								
								if(barType=="types") {
									LAST_BAR_NUM = searchtool.addBar(LAST_BAR_NUM,barType,null,barId);
									if(barId > searchtool.NEXT_ID) { searchtool.NEXT_ID = barId+1; }
									searchtool.ALREADY_INIT = true;
									
									var name = "type_question_"+barId;
									if(PREOBJ[name]) {
										handleFoFi.setCheckbox(name,true);
									} else {
										handleFoFi.setCheckbox(name,false);
									}
									
									var name = "type_answer_"+barId;
									if(PREOBJ[name]) {
										handleFoFi.setCheckbox(name,true);
									} else {
										handleFoFi.setCheckbox(name,false);
									}
									
									var name = "type_comment_"+barId;
									if(PREOBJ[name]) {
										handleFoFi.setCheckbox(name,true);
									} else {
										handleFoFi.setCheckbox(name,false);
									}
									
									var name = "type_media_"+barId;
									if(PREOBJ[name]) {
										handleFoFi.setCheckbox(name,true);
									} else {
										handleFoFi.setCheckbox(name,false);
									}
								}
								
								if(barType=="created") {
									LAST_BAR_NUM = searchtool.addBar(LAST_BAR_NUM,barType,null,barId);
									if(barId > searchtool.NEXT_ID) { searchtool.NEXT_ID = barId+1; }
									searchtool.ALREADY_INIT = true;
									
									/* handle the pulldown */
									var name = "createdDateRange_"+barId;
									if(PREOBJ[name]) {
										handleFoFi.selectOptionByValue(name,PREOBJ[name]);
										searchtool.switchSubSelect(name,PREOBJ[name],barId);
									}
									
									/* handle the text fields */
									var name = "createdDateStartsFrom_"+barId;
									if(PREOBJ[name]) { handleFoFi.fillText(name,PREOBJ[name]); }
									
									var name = "createdDateBetweenFrom_"+barId;
									if(PREOBJ[name]) { handleFoFi.fillText(name,PREOBJ[name]); }
									
									var name = "createdDateBetweenTo_"+barId;
									if(PREOBJ[name]) { handleFoFi.fillText(name,PREOBJ[name]); }
								}
							}
						}
					}
};

/*	sets opened layers (not bars!) */
var openedLayers = {};

/*	some stuff here, what we need to renumber the bars. */
var criteriaBarIdInit = {};

/* 	handle the search frontend */
var searchtool = {
	
	/* init some vars */
	CONFIG_ON_STARTUP  	: {},
	ALREADY_INIT		: false,
	firstFixSearchBar	: "mainSearchBar",
	nameOfCustomBars 	: "cBar",
	nameOfCriteriaPd	: "criteria_",
	idOfCriteriaPd		: "criteriaChoice_",
	criteriaBarPrefix	: "cBar_",
	templateNodePrefix 	: "CLONE_TEMPLATE__",
	NEXT_ID				: 0,
	DEFAULT_CRITERIA	: "theme",
	NAME_OF_TF_CRITERIA	: "theme",
	OPENED_BARS			: new Array(), /* syntax is ID:THEME */
	
	CRITERIAS			: {
							"theme"		: { OPEN_AT_STARTUP:1, MAX_OPEN:99, CNT_OPEN:0, DISABLED:0, NAME:"Related to theme..." },
							"created"	: { OPEN_AT_STARTUP:1, MAX_OPEN:1,  CNT_OPEN:0, DISABLED:0, NAME:"Posted on..." },
							"types"		: { OPEN_AT_STARTUP:1, MAX_OPEN:1,  CNT_OPEN:0, DISABLED:0, NAME:"Result type is..." },
							"excludes"	: { OPEN_AT_STARTUP:1, MAX_OPEN:99, CNT_OPEN:0, DISABLED:0, NAME:"Excludes..." }
						},
	
	/* what we do on submit */
	submitter			: function(f) {
							/* set itemOrder (bars) in hidden field */
							f.itemOrder.value = this.OPENED_BARS.join("|");
							
							f.submit();
						},
	
	/* check, if we should disable criteria */
	setCriteriaChoices	: function() {
							
							/* first of all, set dummy values */
							for(var c in this.CRITERIAS) {
								if(this.CRITERIAS[c]['CNT_OPEN'] >= this.CRITERIAS[c]['MAX_OPEN']) {
									this.CRITERIAS[c]['DISABLED']=1;
								} else {
									this.CRITERIAS[c]['DISABLED']=0;
								}
							}
							
							/* set all the f***ing pd menues */
							for(var i=0; i<this.OPENED_BARS.length; i++) {
								var token = this.OPENED_BARS[i].split(':');
								var currBarId	= token[0];
								var currCrit	= token[1];
								
								var nodeId = this.idOfCriteriaPd+currBarId;
								var node = document.getElementById(nodeId);
								
								/* FOA: get selected index */
								/* MSIE is unable to get selectedIndex */
								var selIndex = node.selectedIndex;
								
								/* clear menu... */
								node.length = 0;
								
								/* ...and fill it again */
								for(var c in this.CRITERIAS) {
									var currIndex = node.length;
									
									var text	= this.CRITERIAS[c]['NAME'];
									//var value	= ((this.CRITERIAS[c]['DISABLED']>0) ? "0" : "")+c;
									var value	= c;
									
									if(currIndex==selIndex) {
										node.options[currIndex] = new Option(text, value, true, true);
										
										if(isWinIE) { /* BOMB MSIE!!! */
											node.options[currIndex].selected = true;
											node.options[currIndex].defaultSelected = true;
											node.options[currIndex].selectedIndex = currIndex;
										}
									} else {
										node.options[currIndex] = new Option(text, value, false, false);
									}
									
									/* gray it out. BOMB MSIE! */
									if(this.CRITERIAS[c]['DISABLED']>0 && node.options[currIndex].selected==false) {
										node.options[currIndex].className = "grayed";
										node.options[currIndex].disabled = true;
									}
								}
							}
						},
	
	/* check selection of pulldown menues, cause of buggy MSIE */
	checkPdMenu 		: function (elementID, value) {
							
							if(isWinIE) {
								var e = document.getElementById(elementID);
								if(typeof(e) != 'object' || e=='undefinded' || e==null) { return false; }
								
								var setIndex;
								if(value=='' || value==null) {
									e.options[0].selected = true;
								} else {
									if(value != e.options[e.selectedIndex].value) {
										/* buggy */
										for(var i=0; i<e.length; i++) {
											if(e.options[i].value == value) {
												e.options[i].selected = true;
												e.options[i].defaultSelected = true;
												break;
											}
										}
									}
								}
							}
						},
	
	/* reset advanced search */
	resetAdvSearch		: function() {
							this.deleteAllBars();
							this.ALREADY_INIT = false;
						},
	
	/* initialize the bars at startup */
	init				: function () {
							if(this.ALREADY_INIT==true) { return; }
							var num = 0;
							var i = 0;
							for(c in this.CRITERIAS) {
								if(this.CRITERIAS[c]['OPEN_AT_STARTUP']==1) {
									num = this.addBar(i,c, false);
									this.checkPdMenu(this.nameOfCriteriaPd+num, c);
									i++;
								}
							}
							this.ALREADY_INIT=true;
							this.setCriteriaChoices();
						},
	
	/* renumber the bars */
	renumberChilds		: function(cArray, cnode, num) {
							if(cnode.hasChildNodes()) {
								
								for(var i=0; i<cnode.childNodes.length; i++) {
									var ccnode = cnode.childNodes[i];
									
									/* get node name */
									for(var k=0; k<cArray.length; k++) {
										
										if(cArray[k]['ELEMENT_NAME'] == ccnode.nodeName) {
											var namePrefix		= cArray[k]['NAME_ATTR_PREFIX'];
											var attName			= cArray[k]['ATTR_NAME'];
											var attValPrefix	= cArray[k]['ATTR_VAL_PREFIX'];
											var attValSuffix	= cArray[k]['ATTR_VAL_SUFFIX'];
											
											var attNameTmp = '';
											if(ccnode.getAttribute && ccnode.getAttribute('name')) {
												attNameTmp = ccnode.getAttribute('name');
											}
											
											if(ccnode.getAttribute 
											&& ccnode.getAttribute('name') 
											&& ccnode.getAttribute('name').substr(0,namePrefix.length) == namePrefix ) {
												if(ccnode.getAttribute(attName)) {
													ccnode.setAttribute(attName,attValPrefix+num+attValSuffix);
												}
											}
										}
									}
									this.renumberChilds(cArray, ccnode, num);
								}
							}
						},
	
	/* clone a template (node) */
	cloneTemplateNode 	: function (crit, insertAfterNode, numOfNewBar) {
							
							if(isNaN(numOfNewBar) || numOfNewBar==null) { return false; }
							if(insertAfterNode=="" || insertAfterNode==null) { return false; }
							
							/* get the template */
							var idOfTemplateNode = this.templateNodePrefix+crit;
							var node = document.getElementById(idOfTemplateNode);
							if(node==null) { return false; }
							
							/* clone it */
							var clone = node.cloneNode(true);
							
							/* substitute COUNTER with numOfNewBar */ 
							clone.setAttribute('id', this.criteriaBarPrefix+numOfNewBar);
							clone.innerHTML = clone.innerHTML.replace(/COUNTER/g,numOfNewBar);
							
							/* insert the new node */
							insertAfterNode.parentNode.insertBefore(clone, insertAfterNode.nextSibling);
							
							return true;
						},
	
	/* switch the criteria bar */
	switchBar			: function (currentBarId, crit) {
							if(crit=='' || crit==null) { return false; }
							
							/* check if value is grayed out, thanks MSIE. bomb this f***ing browser!!! */
							if(!isWinNN) {
								for(var c in this.CRITERIAS) {
									if(crit==c && this.CRITERIAS[c]['DISABLED']>0) {
										alert("This Criteria can only be used once.");
										return false;
									}
								}
							}
							
							var num = this.addBar(currentBarId,crit, false);
							this.deleteBar(currentBarId, crit);
							this.checkPdMenu(this.nameOfCriteriaPd+num, crit);
						},
	
	/* add a new criteria bar */ 
	addBar 				: function(currentBarId, crit, checkDisableCriterias, newBarId) {
							var crit		= (crit=="" || crit==null) ? this.DEFAULT_CRITERIA : crit;
							var numOfBar	= (currentBarId=="" || currentBarId==null) ? this.NEXT_ID : currentBarId;
							
							/* higher the ID Counter */
							this.NEXT_ID++;
							var newNumOfBar = newBarId || this.NEXT_ID;
							
							/* search node */
							var nameOfBar = this.criteriaBarPrefix+numOfBar;
							var node = (document.getElementById(nameOfBar)) ? document.getElementById(nameOfBar) : document.getElementById(this.firstFixSearchBar);
							if(node==null) {
								return false;
							}
							
							/* clone the template (node) */
							var isCloned = this.cloneTemplateNode(crit, node, newNumOfBar);
							if(isCloned == false) { return false; }
							
							
							/* init the themefinder! */
							if(crit==this.NAME_OF_TF_CRITERIA) {
								themefinder.init(newNumOfBar);
							}
							
							/* push the new id in the OPENED_BARS array */
							this.OPENED_BARS.push(newNumOfBar+":"+crit);
							
							/* set counter */
							this.CRITERIAS[crit]['CNT_OPEN']+=1;
							
							/* check pulldown menu, if !currentBarId */
							if(!currentBarId) {
								this.checkPdMenu(this.nameOfCriteriaPd+newNumOfBar, crit);
							}
							
							/* check disable options */
							if(checkDisableCriterias!=false) {
								this.setCriteriaChoices(crit);
							}
							return(newNumOfBar);
						},
	
	/* delete all opened criteria bars. loop from the end of the array!!! */
	deleteAllBars		: function() {
							for(var i=this.OPENED_BARS.length-1; i>=0; i--) {
								var token = this.OPENED_BARS[i].split(':');
								this.deleteBar(token[0]);
							}
							
							/* reset NEXT_ID */
							this.NEXT_ID=0;
							
							/* reset all 'CNT_OPEN' values */
							for(c in this.CRITERIAS) {
								this.CRITERIAS[c]['CNT_OPEN']=0;
								this.CRITERIAS[c]['DISABLED']=0;
							}
						},
	
	/* delete a criteria bar  */
	deleteBar			: function(barId, crit) {
							if(isNaN(barId)) return false;
							
							/* delete current node */
							var nameOfBar = this.criteriaBarPrefix+barId;
							if(document.getElementById(nameOfBar)) {
								var node = document.getElementById(nameOfBar).firstChild.parentNode;
								var tmp = document.getElementById(nameOfBar).parentNode.removeChild(node);
								
								/* delete this id (numOfBar) from the OPENED_BARS array */
								for(var i=0; i<this.OPENED_BARS.length; i++) {
									var token = this.OPENED_BARS[i].split(':');
									if(token[0]==barId) {
										this.OPENED_BARS.splice(i,1);
										if(this.CRITERIAS[token[1]]['CNT_OPEN']>0) {
											this.CRITERIAS[token[1]]['CNT_OPEN']--;
										}
									}
								}
								
								/* no bar opend? switch to simple search */
								if(this.OPENED_BARS.length <= 0) {
									searchLayer.switchToSimple();
								} else {
									this.setCriteriaChoices();
								}
							}
						},
	
	/* switch layers in an criteria bar */
	switchSubSelect		: function(name, newSelection, num) {
							var eID = newSelection+'_'+num;
							
							if(document.getElementById(eID)) {
								/* hide, if opened */
								if(openedLayers[name]) { /* cause keys has number, write [key] !! */
									document.getElementById(openedLayers[name]).style.display = 'none';
								}
								/* set new layer */ 
								openedLayers[name] = eID;
								document.getElementById(eID).style.display = 'inline';
							}
						}
};


/* eof ==================================================================== */

