// JavaScript Document
// query.js
// Abfrage / Suche

var SearchMasterCombo;
var dblcombo = new Array();
var selection =  new Object();
var php = new PHP_Serializer();

selection.gid = new Array();
selection.qLayer='';
//SuchKlappleisten
var clpsSearch;

function addThemeSelector() {
  	var content = "<p style='font-weight:bold;'>Welches Thema möchten Sie darstellen?</p>";	
	content += "<form id='masterSearchForm'>";
  	content += "<select id='elSelTheme' name='selTheme' onChange='setTheme(xGetElementById(elSelTheme).value, true);'>";
  	for (var i=0;i<theme.length;i++) {
	  	content += "<option value=" + i;
	  	if (i==activeTheme) content += " selected='selected'";
	  	content += ">" + theme[i].name + "</option>";
	}
  	content += "</select>";  	
  	content += "</form>";
	document.writeln(content);	  		
}

function setTheme(themeID, refresh) {
	//alert(theme[themeID].name);
	activeTheme=themeID;
	mapfile = theme[activeTheme].mapfile;
	setThemeExtent(activeTheme);
	setThemeSearches(activeTheme);
	//für den Fall, dass das Thema durch externen Aufruf geändert wurde
	xGetElementById('elSelTheme').selectedIndex=activeTheme;
	//alle Suchen schließen
	clpsSearch.displayAll(false);
	adjustInfoboxSize();
	if (refresh) ms_refreshMap();	
}

function setThemeExtent(themeID) {
	//BBox setzen
	DoubleCombo.setBBox(theme[activeTheme].bbox);
	var bbox = (theme[activeTheme].bbox!='' ? theme[activeTheme].bbox : projectBBox);
	var extent = bbox.replace(/,/,'').split(' ');
	themeMinX = extent[0];
	themeMinY = extent[1];
	themeMaxX = extent[2];
	themeMaxY = extent[3];
	//gegebenenfalls initialExtent setzen
	if ((theme[activeTheme].initialbbox!='')&&(!mapext)) {
		extent = theme[activeTheme].initialbbox.replace(/,/,'').split(' ');
		mapext = extent[0] + ' ' + extent[1] + ' ' + extent[2] + ' ' + extent[3];
	}
}

function setThemeSearches(activeTheme) {
	for (var i=0; i<theme[activeTheme].searches.length; i++) {
		clpsSearch.showTopLevel(i, theme[activeTheme].searches.charAt(i)=='1');
	}
	emptySearchCombos();
}

function emptySearchCombos() {
	for (var i=0; i<dblcombo.length; i++) {
		if (dblcombo[i][0]) {
			dblcombo[i][0].empty();
		}
	}
}

function addSearchForms() {
	var content = "<form id='masterSearchForm'>";
  	content += "<select id='elSelSearch' name='selSearch' style='display:none'>";
  	content += "<option value='-1'>Suchthema</option>";
  	for (var i=0; i<search.length; i++) {
  		content += "<option value='" + (i+1) + "'>" + search[i].name + "</option>";
  	}
  	content += "</select>";
	content += "</form>	";
  	content += "<p style='font-weight:bold;'>Was möchten Sie suchen?</p>";	
	content += "<div id='clpsSearchContainer'>";
	content += "<ul id='elClpsSearch' class='xMenu'>";
	for (var i=0; i<search.length; i++) {
		content += "<li>";
	  	content += "<form id='searchForm" + i + "' name='searchForm" + i + "'>";
	  	content += "<span><img src='./images/arrow-right.gif'>" + search[i].name + "</span>";
	  	content += "<ul><li>";
	  	for (var ii=0; ii<search[i].combo.length; ii++) {
		  	content += "<select id='" + search[i].combo[ii].id + "' name='" + search[i].combo[ii].id + "' size='4'";
	  		content += " style='width:" + search[i].combo[ii].width + ";'";
		  	if (ii==search[i].combo.length-1) {
		  		content += " onchange='if (document.searchForm" + i + "."+search[i].combo[ii].id +".value!=-1) doSearch(document.searchForm" + i + ");'";
		  	}
		  	content += "><option value='-1'>" + search[i].combo[ii].selText + "</option>";
		  	content += "</select>";	  		
	  	}
	  	if (search[i].button) {
	  		content += "<img id='bt_" + search[i].name + ";' src='images/mActionSearch.png' ";
	  		content += "style='padding:2px;vertical-align:top;' title='Suche starten' onmousedown='doSearch(document.searchForm" + i + ")'>";
	  	}
	  	content += "</li></ul>";			  	
	  	content += "</form>";
	  	content += "</li>";		
	}
	content += "</ul></div>";
	document.writeln(content);	
}

// handle-Funktion für das Auf-/Zuklappen der XCollapsible
// ele: geklicktes Element
// open ? öffnen : schließen
function handleClickXCollapsible(ele,open) {
	if (open) {
		// Öffnen: Prüfen ob Suche, wenn ja, Slave für MasterKombo setzen
		var ele2 = xFirstChild(xFirstChild(xNextSib(ele,'UL')));
      	if (ele2 && (ele2.nodeName=='SELECT')) {
			var i=-1;
			do {
				i++;
			} while (!(search[i].combo[0].id==ele2.id)&&(i<search.length-1));
   			SearchMasterCombo.masterComboSelect("",ele2.id,
				{requestParameters: ['slave=' + ele2.id, "searchConfig=" + php.serialize(search[i]), 'map=' +  mapfile]});
		}
	} else {
      	// Schließen
    }
	adjustInfoboxSize();    
};

//DoubleCombos initialisieren
function injectComponentBehaviors()	{
	
		//Initialisieren der MasterCombo mit Standardsuche (eigentlich egal welche)
		SearchMasterCombo  = new DoubleCombo('elSelSearch',	search[0].combo[0].id,	'./php/doubleComboMaster.php',
			{requestParameters: ["slave=" + search[0].combo[0].id, "searchConfig=" + php.serialize(search[0])]});

		for (var i=0; i<search.length; i++) {
			dblcombo[i] = new Array();
			for (var ii=0; ii<search[i].combo.length-1; ii++) {
				var rParams = new Array();
				rParams[0] = "master=" + search[i].combo[ii].id;
				rParams[1] = "searchConfig=" + php.serialize(search[i]);
				rParams[2] = "map=" +  mapfile;				
				for (var iii=ii-1; iii>=0; iii--) {
					rParams[rParams.length] = search[i].combo[iii].idField + "=getParentSelValue('" + search[i].combo[iii].id + "')";
				}
				dblcombo[i][ii] = new DoubleCombo(
					search[i].combo[ii].id,
					search[i].combo[ii+1].id,
					'./php/doubleComboSlave.php',
					{requestParameters: rParams,
					dblcomboTree: dblcombo[i],					
					dblcomboTreeLevel: ii}
					);
			}
		}
}

function getParentSelValue(elSel) {
		var mySlave = document.getElementById(elSel);
		var strval = mySlave.options[mySlave.selectedIndex].value;
		return strval;
}

function doSearch(theForm) {
	var qString, qLayer, dsnType;
	var searchI = parseInt(theForm.id.substring(10,theForm.id.length));
	var i=0;
	var qString="";
	while ((i<search[searchI].combo.length)&&(document.getElementById(search[searchI].combo[i].id).value)&&(document.getElementById(search[searchI].combo[i].id).value!=-1)) {
		if (i>0) {
			qString += "AND";
		}
		qString += "(" + buildConditionByType(search[searchI].combo[i].idField, document.getElementById(search[searchI].combo[i].id).value, search[searchI].combo[i].idFieldType, search[searchI].dsnType) + ")";
		i++;
	}
	if ((search[searchI].auxCondition)&&(search[searchI].auxCondition!="")) {
		var parts = search[searchI].auxCondition.split("=");
		if (parts[1].indexOf("'")>-1) {
			parts[1]=parts[1].substring(1,parts[1].length-1)
			qString += "AND(" + buildConditionByType(parts[0],parts[1],'text',search[searchI].dsnType) + ")";
		} else {
			qString += "AND(" + buildConditionByType(parts[0],parts[1],'num', search[searchI].dsnType) + ")";		
		}
	}
	qLayer = search[searchI].qLayer;
	dsnType = search[searchI].dsnType;
	var buffer = search[searchI].buffer;
	if (debug) alert("doSearch:qString=" +qString);
	selection.qLayer=qLayer;
	selection.dsnType = dsnType;
	ms_zoomToFeature(qLayer,qString,buffer,dsnType);
}

// Bedingung erstellen
function buildConditionByType(fieldName,fieldValue,fieldType,dsnType) {
	var condition = fieldName;
	if (dsnType=='SHAPEFILE' || dsnType=='OGR') {
		condition = "[" + condition + "]";
		if (fieldType=='text') {
			condition = "'" + condition + "'";
		}
	}
	condition += "=";
	if (fieldType=='text') {
		condition += "'" + trimSpace(fieldValue) + "'";
	} else {
		condition += trimSpace(fieldValue);	
	}
	return condition;
}

//Point-Identify-Funktion
function db_identify(x,y,dbRequestMode) {
	var query = 'mapx=' + x + '&mapy=' + y;
	query += '&map=' +  mapfile;
	query += '&infomode=' + dbRequestMode;
	query += '&infolayer=' + php.serialize(infoLayer);
	//query = encodeURI(query);
	sendDBRequest('./php/infoPicker.php', query);
}

function db_query(qlayer, gid, dsnType) {
	var query='';
	query += 'qlayer=' + qlayer + '&gid=' + gid.join(';');
	query += '&map=' +  mapfile;
	query += '&infomode=_identify';
	query += '&infolayer=' + php.serialize(infoLayer);
	//query = encodeURI(query);
	sendDBRequest('./php/infoPicker.php', query);
}

