// JavaScript Document
// map.js
// Map-Funktionen

//Konstanten, Variablen
ImageCache = new Array(2);
for (i=0;i<3;i++) {
	ImageCache[i] = new Image();
}

function initApp() {
	// Anwendung initialisieren
	window.parent.document.title=appName + " - Version " + version;
	showProcessBar('initApp');
	adjustMapsize();	
	//Suchen initialisieren
	clpsSearch = new xCollapsible('elClpsSearch', false, "./images/arrow-down.gif", "./images/arrow-right.gif");
	injectComponentBehaviors();
	//Thema wählen
	setThemeSearches(activeTheme);
	setThemeExtent(activeTheme);
	// Infobox anpassen
	adjustInfoboxSize();
	// Events registrieren	
	registerMapEvents();
	xVisibility('boxMap',true);
	clickMaptool(maptoolMode, true);
	initGraphics();
	//initMaptipXFenster();
	//Aufrufparameter verarbeiten
	var paramString=unescape(parent.location.search.substr(1));
	if (!paramString) {
		initMap();
	} else {
		parent.frames[1].location.href = './extcall.htm?' + paramString;
	}
}

function adjustMapsize() {
	// map den Dimensionen des Browsers anpassen
	var mapLayerPgX=xPageX('boxMap');
	mapwidth = xClientWidth() - mapLayerPgX - 5 - 2;
	mapheight = xClientHeight() - 25 - 20;
  	xResizeTo('boxMap', mapwidth, mapheight);
  	//xResizeTo('boxReference', refwidth, refheight);
  	xWidth('boxToolbar', mapwidth);
	adjustInfoboxSize();  	
}

function initMap() {
	// erster mapserver-Aufruf
	var query = proto + server + mapservExe + '?';
	query += 'mode=browse&map=' + startupMapfile;
	query += '&mapsize=' + mapwidth + '+' + mapheight;
	if (mapext) {	
		query += '&MAPEXT=' + mapext;
	}	
	query += '&_REQUESTMODE=_getMap';
	sendMSRequest(query);
}

//externen Aufruf verarbeiten
function parseCallParams(paramString){
	//alert(paramString);
	var mapRequest = {
		extent: {minx:null, maxx:null, miny:null, maxy:null},
		themeid:null,
		qlayer:null,
		keyfield:null,
		keyvalue:[],
		dsntype:null,
		buffer:100
	}
	var cParamExp = paramString.split(';');
	var cParam;
	for (var i in cParamExp) {
		if (cParamExp[i]!='') {
			if (cParamExp[i].indexOf('=')>=0) {
				cParam = cParamExp[i].split('=')
			} else if (i>0) {
				cParam[1] = cParamExp[i];
			}
			//project=Stadtplan;keyname=Kennzeiche;layerid=flurstuecke;keyvalue=063070-010-00002/053.00;
			//themeid=0;keyfield=Kennzeiche;infolayerid=2;keyvalue=063070-010-00002/053.00;
			switch (cParam[0]) {
				case "themeid":
					mapRequest.themeid=cParam[1];
					break;
				case "infolayerid":
					mapRequest.qlayer=infoLayer[cParam[1]].mapalias;
					mapRequest.dsntype=infoLayer[cParam[1]].dsnType;
					if ((infoLayer[cParam[1]].buffer)&&(!paramString.indexOf('buffer'))) {
						mapRequest.buffer=infoLayer[cParam[1]].buffer;
					}
					break;					
				case "keyfield":
					mapRequest.keyfield=cParam[1];
					break;
				case "keyvalue":
					mapRequest.keyvalue.push(cParam[1]);
					break;
				case "buffer":
					mapRequest.buffer=cParam[1];
					break;					
				default:
	 				alert("Unbekannter Parameter1: " + cParam[0]);
	    			break;
			}
		}
	}
	//**Aufruf verarbeiten**
	//Thema setzen
	if (mapRequest.themeid) {
		setTheme(mapRequest.themeid, false);
		//xGetElementById('elSelTheme').selectedIndex=mapRequest.themeid;
	}
	//Sprung auf Objekt
	if (mapRequest.keyvalue) {
		//TODO anderen fieldtype als 'text' abfangen
		var qstring="";
		for (var i in mapRequest.keyvalue) {
			if (i>0) qstring+='OR'; 
			qstring+='('+ buildConditionByType(mapRequest.keyfield, mapRequest.keyvalue[i],'text',mapRequest.dsntype) + ')';
		}
		if (debug) alert('external call query string: ' + qstring);
		ms_zoomToFeature(mapRequest.qlayer, qstring, mapRequest.buffer, mapRequest.dsntype);
	}
}

function requestMap(additionalParams){
	//vorigen Ausschnitt speichern
	minx0=minx;
	maxx0=maxx;
	miny0=miny;
	maxy0=maxy;
	imgext=mapext;
	//Request erstellen
	var query = 'http://' + server + mapservExe + '?';
	query += 'MAP=' + mapfile;
	query += '&MODE=' + mode;
	query += '&MAPSIZE=' + mapwidth + '+' + mapheight;
	query += '&MAPEXT=' + mapext;
	query += '&_REQUESTMODE=_getMap';
	query += additionalParams;
	hideMaptip();
	sendMSRequest(query);
}

function clearMap() {
	parent.UPGMainF.document.getElementById("theMap").src='./images/transparentpixel.png';
}

function refreshMap(URL) {
	clearMap();
	parent.UPGMainF.document.getElementById("theMap").src=URL;
	xResizeTo('theMap', mapwidth, mapheight);
	xMoveTo('elMap', 0, 0);
	wheelZoomFactor=1;
	//xVisibility('theMap',true);
	//hideProcessBar();
}

function refreshReference(URL) {
	parent.UPGMainF.document.getElementById("theReference").src=URL;
	//hideProcessBar();
}

function refreshLegend(URL) {
	parent.UPGMainF.document.getElementById("theLegend").src=URL;
	//hideProcessBar();
}

//Geokoordinate aus Bild-Koordinate berechnen
function getMapX(imageX) {
	return parseInt(minx + xdist/mapwidth * imageX);
}

function getMapY(imageY) {
	return parseInt(maxy - ydist/mapheight * imageY);
}


