var map, vectorMarker;
var onloads = new Array();
var ckMapParams = {};
var ckMapFunctions = {};

/*
 * bodyOnLoad()
 */
ckMapFunctions.bodyOnLoad = function ()	{
		for ( var i = 0 ; i < onloads.length ; i++ )
		{
			onloads[i]();
		}
};
/*################# Marker Handling #####################*/

ckMapFunctions.addMarker = function (lonlat) {
   	var markersArray = ckMapFunctions.getLayersBy('qmarker');
   	if (markersArray.length > 0) {
   		markers = markersArray[0];
   		markers.clearMarkers();
   		var imgSize = ckMapParams.markerImgSize;
   		var calculateOffset = function(imgSize) {
   			return new OpenLayers.Pixel(-(Math.round(imgSize.w/2)), -(Math.round(imgSize.h)));
   		};
        var icon = new OpenLayers.Icon(ckMapParams.markerImg, imgSize, null, calculateOffset);
        var newMarker = new OpenLayers.Marker(lonlat, icon);
    	markers.addMarker(newMarker);
    	//Marker durch klicken entfernen
        newMarker.events.register("mousedown", newMarker, function(e) {	
        	ckMapFunctions.removeMarker();
        	OpenLayers.Event.stop(e);
        });		
    }
};
    
ckMapFunctions.removeMarker = function () {
    var markersArray = ckMapFunctions.getLayersBy('qmarker');
    if (markersArray.length > 0) {
    	markers = markersArray[0];
    	markers.clearMarkers();
    }
};
/*################# Feature Handling #####################*/
/*
 * out()
 */
ckMapFunctions.out = function(feature) {
	feature.layer.map.div.style.cursor = "default";
};
/*
 * over()
 */
ckMapFunctions.over = function(feature) {
	feature.layer.map.div.style.cursor = "pointer";
};
/*
 * selectedFeature
 */
ckMapFunctions.selectedFeature = null;
/*
 * onFeatureSelect()
 */
ckMapFunctions.onFeatureSelect = function (feature) {
	if (ckMapFunctions.selectedFeature == feature) return;
	if (ckMapFunctions.activePoi == feature) {
		ckMapFunctions.removeVectorPoi();
		return;
	}
	ckMapFunctions.selectedFeature = feature;
	var popup = new ckMapParams.popupClass(feature.id + "_popup", 
                                     feature.geometry.getBounds().getCenterLonLat(),
                                     ckMapParams.popupSize,
                                     ckMapFunctions.getContentHTML(feature),
                                     { size: new OpenLayers.Size(6,6), offset: new OpenLayers.Pixel(0,0) },
                                     true, ckMapFunctions.onPopupClose);
	popup.autoSize = true;
	popup.contentDiv.style.overflow = 'auto';
                                     
	feature.popup = popup;
    map.addPopup(popup);
	ckMapFunctions.updateCoordsForm(feature);
};
/*
 * onFeatureUnselect()
 */
ckMapFunctions.onFeatureUnselect = function (feature) {
	if (ckMapFunctions.selectedFeature != feature) return;
	map.removePopup(feature.popup);
	feature.popup.destroy();
	feature.popup = null;
	ckMapFunctions.selectedFeature = null;
	ckMapFunctions.clearCoordsForm();
};
/*
 * onPopupClose()
 */
ckMapFunctions.onPopupClose = function () {
	var selControl = map.getControlsByClass('OpenLayers.Control.SelectFeature');
	if (selControl[0]) {
		selControl[0].unselect(ckMapFunctions.selectedFeature);
	} else {
		ckMapFunctions.onFeatureUnselect(ckMapFunctions.selectedFeature);
	}
};
/*
 * removeFeaturePopup()
 */
ckMapFunctions.removeFeaturePopup = function (feature, value) {
	if (feature.popup) {
		map.removePopup(feature.popup);
		feature.popup.destroy();
		feature.popup = null;
		ckMapFunctions.selectedFeature = null;
	}
};
/*
 * clickoutFeature()
 */
ckMapFunctions.clickoutFeature = function (feature, value) {
	if (feature.popup) {
		var selControl = map.getControlsByClass('OpenLayers.Control.SelectFeature');
		if (selControl[0]) {
			selControl[0].clickoutFeature(feature);
		}
		ckMapFunctions.selectedFeature = null;
	}
};
/*
 * movePoiLayerToTop()
 */
ckMapFunctions.movePoiLayerToTop = function (index) {
	for (i=0; i < ckMapParams.WFSLayers.length; i++) {
		currIdx = map.getLayerIndex(ckMapParams.WFSLayers[i]);
		idx = parseInt(index)+parseInt(currIdx);
        ckMapParams.WFSLayers[i].setZIndex(idx);
	}
};
/*
 * movePoiLayerBack()
 */
ckMapFunctions.movePoiLayerBack = function (index) {
	for (i=0; i < ckMapParams.WFSLayers.length; i++) {
		currIdx = map.getLayerIndex(ckMapParams.WFSLayers[i]);
		idx = parseInt(index)+parseInt(currIdx);
		ckMapParams.WFSLayers[i].setZIndex(idx);
	}
};
/*
 * getContentHTML()
 */
ckMapFunctions.getContentHTML = function (feature) {
	var contentHTML = '';
	contentHTML = '<div class="olLayerckPoiXMLEnv">';
	contentHTML += '<div class="olLayerckPoiXMLTitle">'+feature.data['title']+'</div>';
	contentHTML += '<div class="olLayerckPoiXMLContent">';
	contentHTML += '<div class="olLayerckPoiXMLContentDescription">';
	contentHTML += feature.data['description'];
	contentHTML += '</div>';
	//contentHTML += '<a class="link" href="javascript:map.zoomToExtent(\''+feature.geometry.getBounds().toBBOX()+'\');">';
	contentHTML += '<a class="link" href="javascript:ckMapFunctions.gotoExtent(\''+feature.geometry.getBounds().toBBOX()+'\');">';
	contentHTML += 'Detailansicht</a>';
	contentHTML += '<br />';
	contentHTML += '</div>';
	contentHTML += '</div>';
	return contentHTML;
};
/*
 * addVectorPointerList()
 */
ckMapFunctions.addVectorPointerList = function (pointerArray, layerID) {
	var pointerLayer = ckMapFunctions.getLayersBy(layerID);
	if (!pointerLayer[0].multipleGeoms) ckMapFunctions.deleteAllVectorPointer(pointerLayer[0]);
	pointerLayer[0].addFeatures(pointerArray);
};
/*
 * addVectorPointer()
 */
ckMapFunctions.addVectorPointer = function (lonlat, layerID, attributes) {
	attributes = (!attributes) ? {type: '', title: '', description: ''} : attributes;
	var pointer = new OpenLayers.Feature.Vector( new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat), attributes);
	var pointerLayer = ckMapFunctions.getLayersBy(layerID);
	if (!pointerLayer[0].multipleGeoms) ckMapFunctions.deleteAllVectorPointer(pointerLayer[0]);
	pointerLayer[0].addFeatures([pointer]);
};

/*
 * drawVectorPointer()
 */
ckMapFunctions.drawVectorPointer = function (geometry) {
	if (ckMapFunctions.selectedFeature) ckMapFunctions.clickoutFeature(ckMapFunctions.selectedFeature);
	var attributes = {type: '', title: '', description: ''};
	var aForm = OpenLayers.Util.getElement('CoordsForm');
	if (aForm.type) attributes.type = ckMapFunctions.getSelectedOptionsValue(aForm.type);
	var ed = tinyMCE.get('description');
	if (ed) {
		ed.save();
	}
	if (aForm.title.value != '' || aForm.description.value != '') {
		attributes.title = aForm.title.value;
		attributes.description = aForm.description.value;
	}
	var pointer = new OpenLayers.Feature.Vector(geometry, attributes );
	var pointerLayer = ckMapFunctions.getLayersBy('pointer');
	if (!pointerLayer[0].multipleGeoms) ckMapFunctions.deleteAllVectorPointer(pointerLayer[0]);
	pointerLayer[0].addFeatures([pointer]);
	ckMapFunctions.selectedFeature = pointer;
	ckMapFunctions.updateVectorPointer();
};

/*
 * updateVectorPointer()
 */
ckMapFunctions.updateVectorPointer = function () {
	if (!ckMapFunctions.selectedFeature) return;
	var attributes = {type: '', title: '', description: ''};
	var aForm = OpenLayers.Util.getElement('CoordsForm');
	if (aForm.type) attributes.type = ckMapFunctions.getSelectedOptionsValue(aForm.type);
	var ed = tinyMCE.get('description');
	if (ed) {
		ed.save();
	}
	if (aForm.title.value != '' || aForm.description.value != '') {
		attributes.title = aForm.title.value;
		attributes.description = aForm.description.value;
	}
	if (aForm.coordx.value != '' || aForm.coordy.value != '') {
		var pointer = new OpenLayers.Feature.Vector( new OpenLayers.Geometry.Point(aForm.coordx.value, aForm.coordy.value), attributes);
	} else return;
	
	var pointerLayer = ckMapFunctions.getLayersBy('pointer');
	pointerLayer[0].removeFeatures([ckMapFunctions.selectedFeature]);
	if (!pointerLayer[0].multipleGeoms) ckMapFunctions.deleteAllVectorPointer(pointerLayer[0]);
	pointerLayer[0].addFeatures([pointer]);
	ckMapFunctions.onFeatureSelect(pointer);
	var selControl = map.getControlsByClass('OpenLayers.Control.SelectFeature');
	if (selControl[0]) {
		selControl[0].select(ckMapFunctions.selectedFeature);
	}
};
/*
 * addVectorPointerList()
 */
ckMapFunctions.updateVectorPointerList = function (layerID) {
	var pointerLayer = ckMapFunctions.getLayersBy(layerID);
	var pointerArray = new Array();
	for (i=0; i<pointerLayer[0].features.length; i++) {
		var coord = pointerLayer[0].features[i].geometry.x+','+pointerLayer[0].features[i].geometry.y;
		var title = pointerLayer[0].features[i].attributes.title;
		var type = pointerLayer[0].features[i].attributes.type;
		var description = pointerLayer[0].features[i].attributes.description;
		pointerArray[i] = { 'id': i, 'coordinate':  coord, 'type': type, 'title': title, 'description': description};
	}
	return pointerArray;
};
/*
 * removeAllVectorPointer()
 */
ckMapFunctions.removeAllVectorPointer = function (layerID) {	
	var pointerLayer = ckMapFunctions.getLayersBy(layerID);
	ckMapFunctions.deleteAllVectorPointer(pointerLayer[0]);
};

/*
 * deleteAllVectorPointer()
 */
ckMapFunctions.deleteAllVectorPointer = function (layer) {
	layer.removeFeatures(layer.features);
};
/*
 * deleteCurrentVectorPointer()
 */
ckMapFunctions.deleteCurrentVectorPointer = function () {
	if (!ckMapFunctions.selectedFeature) return;
	ckMapFunctions.selectedFeature.layer.removeFeatures([ckMapFunctions.selectedFeature]);
};
/*################# Feature Edit Form #####################*/
/*
 * clearCoordsForm()
 */
ckMapFunctions.clearCoordsForm = function (feature, pixel) {
	var aForm = OpenLayers.Util.getElement('CoordsForm');
	if (aForm) {
		aForm.coordx.value = '';
		aForm.coordy.value = '';
		aForm.title.value = '';
		var ed = tinyMCE.get('description');
		if (ed) {
			ed.setContent('');
			ed.save();
		}
	}
};
/*
 * updateCoordsForm()
 */
ckMapFunctions.updateCoordsForm = function (feature, pixel) {
	var aForm = OpenLayers.Util.getElement('CoordsForm');
	if (aForm) {
		ckMapFunctions.toggleTabs('menueContentEdit');
		var ed = tinyMCE.get('description');
		if (feature.geometry) {
			var coords = feature.geometry.toShortString().split(",");
			aForm.coordx.value = OpenLayers.String.trim(coords[0]);
			aForm.coordy.value = OpenLayers.String.trim(coords[1]);
		} else {
			aForm.coordx.value = '';
			aForm.coordy.value = '';
		}
		if (feature.data) {
			ckMapFunctions.setSelectedOptionsValue(aForm.type, feature.data['type']);
			aForm.title.value = feature.data['title'];
			if (ed) {
				ed.setContent(feature.data['description']);
				ed.save();
			}
		} else {
			aForm.title.value = '';
			if (ed) {
				ed.setContent('');
				ed.save();
			}
		}
	}
};
/*#################   Map Handling    ######################*/
/*
 * setCenter()
 */
ckMapFunctions.setCenter = function(val, newzoom) {
	var coords = val.split(",");
    var lonlat = new OpenLayers.LonLat(coords[0],coords[1]);
    var zoom = (!newzoom) ? null : newzoom;
    map.setCenter(lonlat, newzoom, false, true);
};
/*
 * gotoExtent()
 */
ckMapFunctions.gotoExtent = function(val) {
	var coords = val.split(",");
	var bounds = new OpenLayers.Bounds(coords[0],coords[1],coords[2],coords[3]);
	map.zoomToExtent(bounds);
};
/*
 * getCurrentBBox()
 */
ckMapFunctions.getCurrentBBox = function() {
	var bounds = map.calculateBounds();
	scaled_bounds = bounds.scale(1/ckMapParams.tileBuffer);
	return scaled_bounds.toBBOX();
};

/*
 * updateMapOptions()
 */
ckMapFunctions.updateMapOptions = function () {
	var tmp = ckMapParams.mapOptions.mapHome.value.split(",");
	ckMapParams.home = new OpenLayers.Bounds(tmp[0], tmp[1], tmp[2], tmp[3]);
	tmp = ckMapParams.mapOptions.mapExtent.value.split(",");
	ckMapParams.extent = new OpenLayers.Bounds(tmp[0], tmp[1], tmp[2], tmp[3]);
	ckMapParams.scales = ckMapParams.mapOptions.mapScales.value.split(",");
	tmp = ckMapParams.mapOptions.mapSize.value.split(",");
	ckMapParams.size = new OpenLayers.Size(tmp[0], tmp[1]);
	ckMapParams.projection = "EPSG:"+ckMapParams.mapOptions.mapProj.value;
	ckMapParams.units = ckMapParams.mapOptions.mapUnits.value;
};
/*
 * reinitMap()
 */
ckMapFunctions.reinitMap = function (optionsForm) {
	ckMapParams.mapOptions = (!optionsForm) ? OpenLayers.Util.getElement('mapOptions') : OpenLayers.Util.getElement(optionsForm);
	if (typeof ckMapParams.mapOptions == 'object') {
		ckMapFunctions.updateMapOptions();
	}
	if (map) map.destroy();
	ckInit();
};
/*
 * toggleTabs()
 */
ckMapFunctions.toggleTabs = function (what) {
	var itemsList = new Array('menueContentQuery', 'menueContentSelect', 'menueContentThemes', 'menueContentEdit', 'menueContentPrint', 'menueContentDebug');
	var titleList = new Array('Suchen', 'Auswahl', 'Ansicht', 'Erfassen', 'Drucken', 'Debug'); 
	for ( var i=0 ; i < itemsList.length ; i++ ) {
		if (OpenLayers.Util.getElement(itemsList[i]))
		{
			if (what == itemsList[i]) {
				OpenLayers.Element.show(itemsList[i]);
				var sTitle = titleList[i]+":";
				//OpenLayers.Util.getElement('infotitle').firstChild.nodeValue = sTitle;
			} else {
				OpenLayers.Element.hide(itemsList[i]);
			}
		}
	}
	for ( var i=0 ; i < itemsList.length ; i++ ) {
		var eleA = OpenLayers.Util.getElement(itemsList[i]+'A')
		var eleB = OpenLayers.Util.getElement(itemsList[i]+'B')
		var c = "";
		if ( eleA && eleB)
		{
			if (what == itemsList[i]) {
				c = "activeTab";
			}
			eleA.className = c;
			eleB.className = c;
		}
	}		
};

/*#################   AJAX Handling    ######################*/
/*
 * GlobalHandlers
 */
ckMapFunctions.GlobalHandlers = {
	  onCreate: function() {
	    OpenLayers.Ajax.activeRequestCount++;
	    if (OpenLayers.Ajax.activeRequestCount > 0)
	    	OpenLayers.Util.getElement('infoBusy').style.display='';
	  },
	
	  onComplete: function() {
	    OpenLayers.Ajax.activeRequestCount--;
	    if (OpenLayers.Ajax.activeRequestCount == 0)
	    	OpenLayers.Util.getElement('infoBusy').style.display='none';
	  }
};
/*
 * registerAjaxStuff()
 */
ckMapFunctions.registerAjaxStuff = function() {
	ajaxEngine.registerRequest( 'queryAdress', './request/adress_query.php' );
	ajaxEngine.registerRequest( 'queryGoogle', './request/google_query.php' );
	//ajaxEngine.registerRequest( 'queryWild', './request/adress_query_wild.php' );
	ajaxEngine.registerRequest( 'queryWild', 'http://services.metropoleruhr.de/ol_online/suche_citkomm/db_abfrage_cms.php' );
	ajaxEngine.registerRequest( 'queryWildSimple', 'http://services.metropoleruhr.de/ol_online/suche_citkomm/db_abfrage_cms_simple.php' );	
	
	ajaxEngine.registerAjaxElement( 'field_1');
	ajaxEngine.registerAjaxElement( 'field_2');
	ajaxEngine.registerAjaxElement( 'field_3');
	ajaxEngine.registerAjaxElement( 'field_4');
	OpenLayers.Ajax.Responders.register(ckMapFunctions.GlobalHandlers);
};
/*
 * queryAdress()
 */
ckMapFunctions.queryAdress = function (step,gmdkey,strkey) {
		if (!step) step = "";
		aForm = OpenLayers.Util.getElement('queryForm');
		if (!gmdkey) gmdkey = "";
		if (!strkey) strkey = "";
		
		if(aForm.gmdkey)
		{
			gmdkey = aForm.gmdkey.value;
		}
		if(aForm.strkey && aForm.strkey.value != "")
		{
			strkey = aForm.strkey.value;
		}
		ajaxEngine.sendRequest('queryAdress', "step=" + step, "gmdkey=" + gmdkey, "strkey=" + strkey);
};
/*
 * simpleQuery()
 */
ckMapFunctions.simpleQuery = function(step,params) {
	// step=0&qlayer=flst&qfield=fs&qstring=FS05148900100054&qtitle=Kennzeichen
	if (!step) step = 0;
	qlayer = params[0];
	qfield = params[1];
	qtitle = params[2];
	qstring = "*";
	aForm = OpenLayers.Util.getElement('queryForm');
	
	if(aForm.qstring)
	{
		qstring = aForm.qstring.value;
	}
	ajaxEngine.sendRequest('simpleQuery', "step=" + step, "qlayer=" + qlayer, "qfield=" + qfield, "qstring=" + qstring, "qtitle=" + qtitle);
	if(params[3]) {
		var aLayers = map.getLayersByName(params[3]);
		if (aLayers[0]) {
			aLayers[0].setVisibility(1);
		}
	}
};
/*
 * queryGoogle()
 */
ckMapFunctions.queryGoogle = function(step) {
	if (!step) step = "";
	aForm = OpenLayers.Util.getElement('queryForm');
	qstring = "";
	
	if(aForm.qstring && aForm.qstring.value != "")
	{
		qstring = aForm.qstring.value;
	}
	ajaxEngine.sendRequest('queryGoogle', "step=" + step, "qstring=" + qstring);
};
/*
 * setGoogleCenter()
 */
ckMapFunctions.setGoogleCenter = function(val, zoom, layerID, attributes) {
    var coords = val.split(",");
    var lonlat = new OpenLayers.LonLat(coords[0],coords[1]);    
    var googleproj = new OpenLayers.Projection('EPSG:4326');
    var gkproj = map.getProjectionObject();       
    lonlat.transform(googleproj, gkproj); 

    var numZoomLevel = map.getNumZoomLevels();
    var newzoom = parseInt(numZoomLevel*zoom/8);
    newzoom = (newzoom >= numZoomLevel) ? numZoomLevel-1 : newzoom;
    ckMapFunctions.addVectorPointer(lonlat, layerID, attributes);
    var pointerLayer = ckMapFunctions.getLayersBy(layerID);
   	var selControl = map.getControlsByClass('OpenLayers.Control.SelectFeature');
	if (selControl[0]) {
		selControl[0].select(pointerLayer[0].features[pointerLayer[0].features.length-1]);
	}
    map.setCenter(lonlat, newzoom, false, true);
};
/*
 * targetBlank()
 */
ckMapParams.blankWin = null;
ckMapFunctions.targetBlank = function(winUrl, winName, winParams, winWidth, winHeight) {
	if (!winParams) winParams = 'menubar=yes,toolbar=yes,location=yes,directories=yes,fullscreen=no,titlebar=yes,hotkeys=yes,status=yes,scrollbars=yes,resizable=yes';
    if (!winName) winName = 'newWin';
    if (winWidth && winHeight) {
    	wh = ',width='+parseInt(winWidth)+',height='+parseInt(winHeight);
    	winParams += wh;
    }
    if (ckMapParams.blankWin && ckMapParams.blankWin.closed == false) {
    	ckMapParams.blankWin.close();
    }
    ckMapParams.blankWin = window.open(winUrl,winName,winParams);
    ckMapParams.blankWin.focus();
};
/*
 * getLayersBy()
 * --> Konfliktmethode fuer mootools
 */
ckMapFunctions.getLayersBy = function(layerID) {
	var layers = [];
	for (var i = 0; i < map.layers.length; i++) {
		if (map.layers[i].layerID != undefined && map.layers[i].layerID == layerID) {
			layers.push(map.layers[i]);
		}
	}
	return layers;
};
/*
 * onKeyReturn()
 */
ckMapFunctions.onKeyReturn = function(event, jsFunc)
{
	var K,Ereignis;
	// 
	Ereignis = (event) ? event : window.event;
	if( Ereignis.which ) // Opera, FF method
		K = Ereignis.which;
	else
	if( Ereignis.keyCode ) // MSIE method
		K = Ereignis.keyCode;

	if( K == 13 )
		eval( jsFunc );
};
/*
 * getSelectedOptionsValue()
 */
ckMapFunctions.getSelectedOptionsValue = function(optionField) {
	var val = null;
	if (optionField) {
		for (i = 0; i < optionField.length; ++i)
		    if (optionField.options[i].selected == true) {
				val = optionField.value;
				break;
		    }
	}
	return val;
}
/*
 * setSelectedOptionsValue()
 */
ckMapFunctions.setSelectedOptionsValue = function(optionField, newVal) {
	if (optionField) {
		for (i = 0; i < optionField.length; ++i)
		    if (optionField.options[i].value == newVal) {
		    	optionField.options[i].selected = true;
		    	break;
		    }
	}
}
/*
 * setDefaultSelectedOptionsValue()
 */
ckMapFunctions.setDefaultSelectedOptionsValue = function(optionField) {
	if (optionField) {
		for (i = 0; i < optionField.length; ++i)
		    if (optionField.options[i].defaultSelected == true) {
		    	optionField.options[i].selected = true;
		    	break;
		    }
	}
}
/* ############################################################################
 * ###################### Kundenanforderungen #################################
 * ############################################################################
 */
/*
 * evalPoiWFS
 * --> Kundenanforderung RVR
 */
ckMapFunctions.evalPoiWFS = function (feature) {
	var content = "";
	
	// content = "<div class='FeatureInfo'><span class='FeatureTitle'></span><br />";
	content = "<div class='FeatureInfo'>";
	if(feature.data['name']) content += "<span style=\"font-family:'Trebuchet MS', Arial; font-weight:bold;font-size:11px\">" + feature.data['name'] + "</span><br/>";
        if(feature.data['adr_str']) content += "<span style=\"font-family:'Trebuchet MS', Arial;font-size:11px\">" + feature.data['adr_str'] + " " + (feature.data['adr_hnr']?feature.data['adr_hnr']:'') +"</span><br/>";
        if(feature.data['adr_plz']) content += "<span style=\"font-family:'Trebuchet MS', Arial;font-size:11px\">" + feature.data['adr_plz'] + " </span>";
        if(feature.data['adr_ort']) content += "<span style=\"font-family:'Trebuchet MS', Arial;font-size:11px\">" + feature.data['adr_ort'] + "</span><br/>";
    
	if ( feature.data['adr_tel'] && feature.data['adr_tel'] != "-"  ) {
		var telefon = feature.data['adr_tel'];
		
		if ( telefon.indexOf("-") > 0 ) {
			var vorwahl = telefon.substr(0, telefon.indexOf("-"));
			var rufnummer = telefon.substr(telefon.indexOf("-") + 1);
			
			content += "<span style=\"font-family:'Trebuchet MS',Arial;font-size:11px; white-space: nowrap;\">Telefon: +49 ("+ vorwahl.substr(0, 1) +")"+ vorwahl.substr(1) +"."+ rufnummer +"</span><br />";
		}
		else {
			content += "<span style=\"font-family:'Trebuchet MS',Arial;font-size:11px; white-space: nowrap;\">Telefon: +49 (" + feature.data['adr_tel'].substr(0, 1) + ")"+ feature.data['adr_tel'].substr(1) +"</span><br/>";
		}
	}
	
	if ( feature.data['adr_fax'] && feature.data['adr_fax'] != "-" ) {
		var fax = feature.data['adr_fax'];
		
		if ( fax.indexOf("-") > 0 ) {
			var vorwahl = fax.substr(0, fax.indexOf("-"));
			var rufnummer = fax.substr(fax.indexOf("-") + 1);
			
			content += "<span style=\"font-family:'Trebuchet MS',Arial;font-size:11px; white-space: nowrap;\">Telefax: +49 ("+ vorwahl.substr(0, 1) +")"+ vorwahl.substr(1) +"."+ rufnummer +"</span><br />";
		}
		else {
			content += "<span style=\"font-family:'Trebuchet MS',Arial;font-size:11px; white-space: nowrap;\">Telefax: +49 (" + feature.data['adr_fax'].substr(0,1) + ")"+ feature.data['adr_fax'].substr(1) +"</span><br/>";
		}
	}

    if (feature.data['url'] && feature.data['url'] != "-")
    {
        if (feature.data['url'].substring(0,7) == "http://")
        {
            content += "<span style=\"font-family:'Trebuchet MS',Arial;font-size:11px\">" + "<a class=\"external-link\" href='" + feature.data['url'] + "' target='_blank'>Homepage</a></span>";
        }
        else
        {
            content += "<span style=\"font-family:'Trebuchet MS',Arial;font-size:11px\">" + "<a class=\"external-link\" href='http://" + feature.data['url'] + "' target='_blank'>Homepage</a></span>";
        }
    }

    if (feature.data['rvrurl'] && feature.data['rvrurl'] != "-")
    {
        if (feature.data['rvrurl'].substring(0,7) == "http://")
        {
            content += "<span style=\"font-family:'Trebuchet MS',Arial;font-size:11px\"><br />Link: " + "<a class=\"external-link\" href='" + feature.data['rvrurl'] + "' target='_blank'>weitere Informationen</a></span>";
        }
        else
        {
            content += "<span style=\"font-family:'Trebuchet MS',Arial;font-size:11px\">" + "<br /><a class=\"external-link\" href='http://" + feature.data['rvrurl'] + "' target='_blank'>weitere Informationen</a></span>";
        }
    }

//  	content +"</div>";
	content += "</div>";
 	
 	return content;
};
/*
 * evalPoiWFS
 * --> Kundenanforderung RVR
 */
ckMapFunctions.queryPoiDB = function (step,client) {
	qstring = "";
	if (step == 1) {
		aForm = OpenLayers.Util.getElement('queryForm');
		if (aForm && aForm.queryBarFormText.value != '') {
			qstring = aForm.queryBarFormText.value;
		}
	}
	ajaxEngine.sendRequest('queryWild', "qstring=" + qstring, "step=" + step, "client=" + client);
};

/*
 * evalPoiWFS
 * --> Kundenanforderung RVR
 */
ckMapFunctions.queryPoiDBSimpleExt = function (step,client) {
	qstring = "";
	if (step == 1) {
		aForm = OpenLayers.Util.getElement('queryForm');
		if (aForm && aForm.queryBarFormText.value != '') {
			qstring = aForm.queryBarFormText.value;
		}
	}
	ajaxEngine.sendRequest('queryWildSimple', "qstring=" + qstring, "step=" + step, "client=" + client);
};

/*
 * addVectorPoi()
 * --> Kundenanforderung RVR
 */
ckMapFunctions.activePoi = null;
ckMapFunctions.addVectorPoi_OLD = function (val, newzoom, client) {
	var coords = val.split(",");
    var lonlat = new OpenLayers.LonLat(coords[0],coords[1]);
    var zoom = (!newzoom) ? null : newzoom;
    var icon = (client==0) ? 25 : 20;
	var attributes = {type: icon, title: '', description: ''};
	var layerID = 'pointer';
	var pointerLayer = ckMapFunctions.getLayersBy(layerID);
	if (client == 0) {
		//alert("Client");
		var pointer = new OpenLayers.Feature.Vector( new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat), attributes);
		if (!pointerLayer[0].multipleGeoms) ckMapFunctions.deleteAllVectorPointer(pointerLayer[0]);
		pointerLayer[0].addFeatures([pointer]);
		ckMapFunctions.activePoi = pointer;
	} else if (client == 1) {
		//alert("Redakteur");
		ckMapFunctions.addVectorPointer(lonlat, layerID, attributes);
		var selControl = map.getControlsByClass('OpenLayers.Control.SelectFeature');
		if (selControl[0]) {
			selControl[0].select(pointerLayer[0].features[pointerLayer[0].features.length-1]);
		}
	}
    map.setCenter(lonlat, newzoom, false, true);
};
/*
 * removeVectorPoi()
 * --> Kundenanforderung RVR
 * --> Realisierung als Marker
 */
ckMapFunctions.removeVectorPoi = function () {	
	var pointerLayer = ckMapFunctions.getLayersBy('pointer');
	pointerLayer[0].removeFeatures([ckMapFunctions.activePoi]);
	ckMapFunctions.activePoi = null;
};
/*
 * addVectorPoi()
 * --> Kundenanforderung RVR
 * --> Realisierung als Marker
 */
ckMapFunctions.addVectorPoi = function (val, newzoom, client) {
	var jsonVal = val.replace(/\\'/g, '"');
	jsonFormat = new OpenLayers.Format.JSON();
	jsonObj = jsonFormat.read(jsonVal);
	ckMapFunctions.setPrintAttributes(jsonObj);
	var coords = jsonObj.coord.split(",");
    var lonlat = new OpenLayers.LonLat(coords[0],coords[1]);
    var zoom = (!newzoom) ? null : parseInt(newzoom);
	ckMapFunctions.addVectorMarker(lonlat);
    map.setCenter(lonlat, zoom, false, true);
};

ckMapFunctions.addVectorPoi_Simple = function (val, client) {
    var jsonVal = val.replace(/\\'/g, '"');
    jsonFormat = new OpenLayers.Format.JSON();
    jsonObj = jsonFormat.read(jsonVal);
    ckMapFunctions.setPrintAttributes(jsonObj);
    var coords = jsonObj.coord.split(",");
    var lonlat = new OpenLayers.LonLat(coords[0],coords[1]);

    //x Koordinate auslesen, WIE nun im Form speichern????    
    ckMapFunctions.setEditformValue('x_koordinate', coords[0]);
    ckMapFunctions.setEditformValue('y_koordinate', coords[1]);

    if ( jsonObj.name != ' ' && jsonObj.name != 'Keine Suchergebnisse vorhanden...') {
	poiInformation  = "<p>" + jsonObj.name + "<br />";
	
	if ( jsonObj.strasse != ' ' ) {
    	    poiInformation += jsonObj.strasse + "<br />";
    	}
    	
    	if ( jsonObj.plz != ' ' || jsonObj.stadt != ' ' ) {
    	    poiInformation += jsonObj.plz + " " + jsonObj.stadt + "<br />";
    	}
    	
    	if ( jsonObj.telefon != ' ' ) {
    	    poiInformation += "Telefon: " + jsonObj.telefon + "<br />";
    	}
    	
    	if ( jsonObj.url != ' ' && jsonObj.url != '-' ) {
    	
    	    if ( jsonObj.url.indexOf('http') >= 0 ) {
    		poiInformation += '<a href="'+ jsonObj.url  +'" target="_blank" title="Zur Webseite von: '+ jsonObj.name  +'">'+ jsonObj.name  +'</a>';
    	    }
    	    else {
    		poiInformation += '<a href="http://'+ jsonObj.url  +'" target="_blank" title="Zur Webseite von: '+ jsonObj.name  +'">'+ jsonObj.name  +'</a>';
    	    }
    	}
    	
    	poiInformation += "</p>";
    
        ckMapFunctions.setEditformValue('poiInformation', poiInformation);

	//ACHTUNG: poiInformation MUSS der erste RTE auf der Seite sein!        
        self.frames[0].document.body.innerHTML = poiInformation;
        
    }
    else {
	ckMapFunctions.setEditformValue('poiInformation', 'HINWEIS: Es wurden keine Informationen zu diesem PoI gefunden.');
	self.frames[0].document.body.innerHTML = 'HINWEIS: Es wurden keine Informationen zu diesem PoI gefunden.';
    }
};

ckMapFunctions.setEditformValue = function(inputname, invalue) {
	for ( i=0; i < document.editform.elements.length; i++ ) {
		element = document.editform.elements[i];
		
		if ( element.name != null && element.name.indexOf(inputname) > -1 ) {
			//alert('Feld gefunden: ' + inputname + ' Element: ' + element.name);
			element.value = invalue;
		}
	}

};



/*
 * addVectorMarker()
 * --> Kundenanforderung RVR
 * --> Realisierung Suchmarke als Marker
 */
ckMapFunctions.addVectorMarker = function (lonlat) {
   	var markersArray = ckMapFunctions.getLayersBy('qmarker');
   	if (markersArray.length > 0) {
   		markers = markersArray[0];
   		markers.clearMarkers();
   		var imgSize = ckMapParams.markerImgSize;
   		var calculateOffset = function(imgSize) {
   			return new OpenLayers.Pixel(-(Math.round(imgSize.w/2)), -(Math.round(imgSize.h)));
   		};
        var icon = new OpenLayers.Icon(ckMapParams.markerImg, imgSize, null, calculateOffset);
        var newMarker = new OpenLayers.Marker(lonlat, icon);
    	markers.addMarker(newMarker);
    	//Marker durch klicken entfernen
        newMarker.events.register("mousedown", newMarker, function(e) {	
        	ckMapFunctions.removeVectorMarker();
        	OpenLayers.Event.stop(e);
        });		
    }
};

/*
 * addVectorMarker()
 * --> Kundenanforderung RVR
 * --> Realisierung Suchmarke als Marker
 */
ckMapFunctions.addVectorMarkerSimple = function (lonlat) {
   	var markersArray = ckMapFunctions.getLayersBy('qmarker');
   	if (markersArray.length > 0) {
   		markers = markersArray[0];
   		markers.clearMarkers();
   		var imgSize = ckMapParams.markerImgSize;
   		var calculateOffset = function(imgSize) {
   			return new OpenLayers.Pixel(-(Math.round(imgSize.w/2)), -(Math.round(imgSize.h)));
   		};
        var icon = new OpenLayers.Icon(ckMapParams.markerImgSimple, imgSize, null, calculateOffset);
        var newMarker = new OpenLayers.Marker(lonlat, icon);
    	markers.addMarker(newMarker);
    }
};
/*
 * removeVectorMarker()
 * --> Kundenanforderung RVR
 * --> Realisierung Suchmarke als Marker
 */
ckMapFunctions.removeVectorMarker = function () {
    var markersArray = ckMapFunctions.getLayersBy('qmarker');
    if (markersArray.length > 0) {
    	markers = markersArray[0];
    	markers.clearMarkers();
    	ckMapFishParams.results = ckMapFishParams.resultsDefault;
    }
};

//Hier Anpassung vornehmen Layout der unterschiedlichen Bereiche!
/*
var ckMapFishParams = {};
ckMapFishParams.results = {}; //
ckMapFishParams.resultsDefault = {name: 'Keine Suchergebnisse vorhanden...', strasse: '', plz: '', stadt: '', telefon: '', url: ''};
ckMapFishParams.results = ckMapFishParams.resultsDefault;
ckMapFishParams.configUrls = { 'quick' : 'http://services.metropoleruhr.de:8080/mapfish-printer-1.1/pdf-a4_quick/info.json',
							   'data' : 'http://services.metropoleruhr.de:8080/mapfish-printer-1.1/pdf-a4/info.json' };
							   
ckMapFishParams.pcmdSpec = { comment: "www.metropoleruhr.de", mapTitle: "Karte", dpi: 190 };
*/
/*
 * updateVisibleLayers()
 * --> Kundenanforderung RVR
 * --> notwendig fuer Druckausgabe von WFS-Pointern
 */
ckMapFunctions.updateVisibleLayers = function() {
	var visib = new Array();
	for (var e = 0; e < map.layers.length-1; e++) {
		var lay = map.layers[e];
		// identify the visible vector-overlays
		if ((lay.isBaseLayer == false) && (lay.isVector == true )
		&& (lay.visibility == true)) {
			visib.push(lay.name);
		}
	}
	var layerOverrides = {};
	if (visib.length > 0) {
		for (var a = 0 ; a < visib.length; a++) {
			var vis = visib[a];
			layerOverrides[vis] = {'visibility': false};
			vis = vis+"-wms";
			layerOverrides[vis] = {'visibility': true};
		}
	}
	//ckMapFishParams.printActionQuick.overrides = ckMapFishParams.printActionData.overrides = layerOverrides;
	ckMapFishParams.printActionData.overrides = layerOverrides;
};

/*
 * dateTime()
 * --> Kundenanforderung RVR
 * --> Zeit fuer Druckausgabe
 * Returns: {String} dateTime
 */
ckMapFunctions.dateTime = function () {
	var dt = new Date();
	var day = dt.getDate();
	var month = dt.getMonth()+1;
	var year = dt.getFullYear();
	var minutes = dt.getMinutes();
	if (minutes < 10)
	minutes = "0" + minutes
	var dateTime = day+"."+month+"."+year+", "+dt.getHours()+":"+minutes;
	return dateTime;
};

/*
 * Method: ckMapFunctions.printMapInit()
 * Initialisierung Druckmodul Mapfish
 * Definitionen werden vom printServer gelesen
 */
ckMapFunctions.printMapInit = function () {
	// Quick Layout
	/* Mod 2009-04-16, QuickPrint nicht mehr notwendig
	var printActionQuick = new mapfish.widgets.print.PrintAction({
		map: map,
		configUrl: ckMapFishParams.configUrls.quick,
		overrides: ckMapFishParams.overrides, 
		fillSpec: function(printCommand) {
			mapfish.widgets.print.PrintAction.prototype.fillSpec.call(this, printCommand);
			printCommand.spec.comment = ckMapFishParams.pcmdSpec.comment;
			printCommand.spec.mapTitle = ckMapFishParams.pcmdSpec.mapTitle;
			printCommand.spec.dateTime = ckMapFunctions.dateTime();
			printCommand.spec.dpi = ckMapFishParams.pcmdSpec.dpi;
		}
	});
	ckMapFishParams.printActionQuick = printActionQuick;
	*/
	// Layout with data
	var printActionData = new mapfish.widgets.print.PrintAction({
		map: map,
		configUrl: ckMapFishParams.configUrls.data,
		overrides: ckMapFishParams.overrides, 
		fillSpec: function(printCommand) {
			mapfish.widgets.print.PrintAction.prototype.fillSpec.call(this, printCommand);
			printCommand.spec.comment = ckMapFishParams.pcmdSpec.comment;
			printCommand.spec.mapTitle = ckMapFishParams.pcmdSpec.mapTitle;
			printCommand.spec.dateTime = ckMapFunctions.dateTime();
			printCommand.spec.dpi = ckMapFishParams.pcmdSpec.dpi;
			//printCommand.spec.results = ckMapFishParams.results;
			for (field in ckMapFishParams.results) {
				var field_res = field + '_res';
				printCommand.spec[field_res] = ckMapFishParams.results[field];
				//alert(field_res + '  ' + printCommand.spec[field_res] + '  ' + ckMapFishParams.results[field]);
			}
		}
	});
	ckMapFishParams.printActionData = printActionData;
};
/*
 * Method: ckMapFunctions.setPrintAttributes
 * Parameters: jsonObj - {Object} JSON Objekt mit Attributen
 */
ckMapFunctions.setPrintAttributes = function (jsonObj) {
	var dataObj = new Object();
	var columnArray = new Array();
	for (field in jsonObj) {
		if (field != 'coord') {
			columnArray.push(field);
			dataObj[field] = jsonObj[field];
			//alert(field + '  ' + dataObj[field]);
		}
	}
	ckMapFishParams.results = dataObj;
	//ckMapFishParams.results = { name : "Am Musebieter Strasse", strasse: "Neuer Weg", plz : "0596600411034", stadt: "Attendorn", telefon: "0231-12345", url: "www.citkomm.de" };
	//ckMapFishParams.results = { data: [dataObj], columns: columnArray };
	//ckMapFishParams.results = { data: [{ name : "Am Musebieter StraÃŸe", plz : "0596600411034", stadt: "Attendorn" }], columns: ["name", "plz", "stadt"] };	
}
/*
 * Method: ckMapFunctions.printMap
 * Druckmodul Mapfish
 */
ckMapFunctions.printMap = function () {
	/*
	if (typeof ckMapFishParams.results == "object" && ckMapFishParams.results.data) {
		ckMapFishParams.printActionData.print();
	} else {
		ckMapFishParams.printActionQuick.print();
	}
	*/
	if (typeof ckMapFishParams.results == "object" && ckMapFishParams.results.name != "") {
		ckMapFishParams.printActionData.print();
	}
};

ckMapFunctions.printDivContent = function (div_id) {
    var DocumentContainer = document.getElementById(div_id);
	var height = DocumentContainer.offsetHeight?DocumentContainer.offsetHeight + 40:200;
	var width  = DocumentContainer.offsetWidth?DocumentContainer.offsetWidth + 20:700;
	
    var WindowObject = window.open('', "Kartendruck",
    "width="+width+",height="+height+",top=200,left=250,toolbars=no,scrollbars=yes,status=no,resizable=no");
    WindowObject.document.writeln('<style rel="text/css">body {font-family:Trebuchet MS;font-size:13px;}#printButton {display: none;} .metropoleruhr_logo {margin-right: 10%;} .contenttable {font-size: 1em;} </style>');
    WindowObject.document.writeln(DocumentContainer.innerHTML);
    WindowObject.document.close();
    WindowObject.focus();
    WindowObject.print();
    //WindowObject.close();
};
/**
* Method: convertMarkersLayer
*
* Builds the layer configuration from an {OpenLayers.Layer.Vector} layer.
* The structure expected from the print module is:
* (start code)
* {
*   type: 'Vector'
*   styles: {Object}
*   styleProperty: {String}
*   geoJson: {Object}
*   opacity: {Float}
*   name: {String}
* }
* (end)
*
* Parameters:
* olLayer - {OpenLayers.Layer.Markers} The OL layer.
*
* Returns:
* {Object} The config for this layer
*/
ckMapFunctions.convertMarkersLayer = function(olLayer) {
	var olMarkers = olLayer.markers;
	var features = [];
	var styles = {};
	var styleMap = new OpenLayers.StyleMap({
		pointRadius: 10, // Radius in PIxel
		fillColor: "#00FA9A", // Füllfarbe
		strokeColor: "#000000", // Randfarbe
		strokeWidth: 2 // Randstärke
		//externalGraphic: OpenLayers.Util.getImagesLocation()+"../img/AQUA.png"
	});
	var formatter = new OpenLayers.Format.GeoJSON();
	var nextId = 1;
	for (var i = 0; i < olMarkers.length; ++i) {
		var marker = olMarkers[i];
		var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(marker.lonlat.lon, marker.lonlat.lat));

		var style = styleMap.createSymbolizer(feature, feature.renderIntent);

		var styleName;
		if (style._printId) {
			//this style is already known
			styleName = style._printId;
		} else {
			//new style
			style._printId = styleName = nextId++;
			styles[styleName] = style;

			//Make the URLs absolute
			if (style.externalGraphic) {
				style.externalGraphic = mapfish.Util.relativeToAbsoluteURL(style.externalGraphic);
			}
		}
		var featureGeoJson = formatter.extract.feature.call(formatter, feature);

		//OL just copy the reference to the properties. Since we don't want
		//to modify the original dictionary, we make a copy.
		featureGeoJson.properties = OpenLayers.Util.extend({
			_style: styleName
		}, featureGeoJson.properties);
		for (var cur in featureGeoJson.properties) {
			var curVal = featureGeoJson.properties[cur];
			if (curVal instanceof Object && !(curVal instanceof String)) {
				//OL.Format.Json goes into an infinite recursion if we have too
				//complex objects. So we remove them.
				delete featureGeoJson.properties[cur];
			}
		}

		features.push(featureGeoJson);
	}
	for (var key in styles) {
		delete styles[key]._printId;
	}

	var geoJson = {
	"type": "FeatureCollection",
	"features": features
	};
	return OpenLayers.Util.extend(this.convertLayer(olLayer), {
		type: 'Vector',
		styles: styles,
		styleProperty: '_style',
		geoJson: geoJson,
		name: olLayer.name,
		opacity:  (olLayer.opacity != null) ? olLayer.opacity : 1.0
	});
};

if (typeof window.mapfish == "object") {
	OpenLayers.Util.extend( mapfish.PrintProtocol.SUPPORTED_TYPES,
	{ 'OpenLayers.Layer.ckWMS': mapfish.PrintProtocol.prototype.convertWMSLayer,
	  'OpenLayers.Layer.Markers': ckMapFunctions.convertMarkersLayer
	} );
};
