// ==================================================================
// Global variables
// ==================================================================
// the map
var mdvJpMaps = new Array();
var mdvNetPath = null;
var tripPath = null;

// coordinate reduction list
var reductionList = new Array();
var lastAddedPoint = null;

// coordinates of the right mouse click
var ctxCoords = null;

// tooltips array
var toolTipHelpers = new Array();
var typeChngd = 0;

var selPathId = null;

// ==================================================================
// Common map functionality
// ==================================================================

// This function loads and initializes the map when the site is loaded.
function onLoadMapHandler(type, fullTrip) {

	var form = document.forms[0];
	initMdvMapConfig(type);
	currentMap = type;
    var mapBefore = '';
		
	if(type=='navteq' && mdvJpMaps['aerial']!= null)
	{
        mapBefore = 'aerial';
		onUnloadMapHandler('aerial');
	}
	if(type=='navteq' && mdvJpMaps['city']!= null)
	{
        mapBefore = 'city';
		onUnloadMapHandler('city');
	}
	if(type=='aerial' && mdvJpMaps['navteq']!= null)
	{
        mapBefore = 'navteq';
		onUnloadMapHandler('navteq');
	}
	if(type=='aerial' && mdvJpMaps['city']!= null)
	{
        mapBefore = 'city';
		onUnloadMapHandler('city');
	}
	if(type=='city' && mdvJpMaps['navteq']!= null)
	{
        mapBefore = 'navteq';
		onUnloadMapHandler('navteq');
	}
	if(type=='city' && mdvJpMaps['aerial']!= null)
	{
        mapBefore = 'aerial';
		onUnloadMapHandler('aerial');
	}
	
	if (mdvJpMaps[type] == null){
		mdvJpMaps[type] = new MDVMapHelper(type, mapBefore);
		$('itdLPxx_currentMap').value= type;
	}
	
	if(mdvJpMaps[type].mdvMap.getLayer('polylines') && selPathId){
		mdvNetPath = new MDVNetPathHelper(selPathId)
		mdvNetPath.displayNetPath();
	}
	
	if(currentPage=='result'){
		var tripSelector = '1';
		
		var sessionID = document.getElementById('sessionID').value;
		var requestID = document.getElementById('requestID').value;	
		
    	mdvJpMaps[type].displayJourney(sessionID, requestID, tripSelector, fullTrip);
      
	} 
};

function MDVMapEFATrips_onAjaxComplete(request) {

  	var efa;
  	var json = null;
  	var mdvMapName = '';
  	
  	if (request && request.responseText){
  		json = request.responseText;
  	}
    else if (request){
  		json = request;
  	}
    
  	eval('efa = ' + json + ';');

  	if(efa && efa.parameters){
	  	for (var i=0; i < efa.parameters.length; i++) {
	  		if (efa.parameters[i].name == 'mdvMapName') {
	  			mdvMapName = efa.parameters[i].value;
	  			break;
	  		}
	  	}
	}

	// Back to initiator object...  	
	if (document.mdvMaps['mdvMap_' + mdvMapName]){
		document.mdvMaps['mdvMap_' + mdvMapName].events.triggerEvent(MDVEvent_AJAX_CALLBACK, 'MDVMapEFATrips', efa);
    }
        
    var path = null;
    
    if (efa.trips.trip.legs.leg && !efa.trips.trip.legs.length) {
        path = efa.trips.trip.legs.leg.path;
    } 
    else if (efa.trips.trip.legs.length) {
        path = efa.trips.trip.legs[0].path;
    }
    
    for(i=1; i < efa.trips.trip.legs.length; i++){
        path += ',' + efa.trips.trip.legs[i].path
    }
    
    tripPath = path;
   // addDistanceMarker(path)
        
}
  
function addDistanceMarker(path){
    var points = path.split(' ');
    var curDist =0;
    var comDist = 0;
    var realDist = 0;
    var lastDist =0;
    
    for(var i =1; i< points.length; i++){
        
        var last = points[i-1].split(',');
        var cur = points[i].split(',');
        var x0 = last[0];
        var y0 = last[1];
        var x = cur[0];
        var y = cur[1];
        var distX = x0-x;
        var distY = y0-y;
        var distance = Math.sqrt(distX * distX + distY * distY);  
    
        curDist += distance;
        realDist += distance;
        
        var modDist = Math.round(realDist) % 1000
        var disMarker = lastDist > modDist;
       
        if(disMarker){
            var remDist = distance  - (curDist);
            var eX = (x - x0) / distance * remDist;
            var eY = (y - y0) / distance * remDist;
            var mX = parseInt(x0) + eX;
            var mY = parseInt(y0) + eY;
            
            var coord = new MDVCoordinates('NBWT', mX, mY);
            var km = realDist / 1000;
            var text = 'Strecke: ' +  km.toFixed(0)  +' km';
         
            var tool = mdvJpMaps[currentMap].mdvMap.createToolTip(new MDVPoint(200, 100), text);
            
            var distMarker = mdvJpMaps[currentMap].mdvMap.createMarker(coord, new MDVPoint(0.0, 0.9), mdvJpMaps[currentMap].getImage('distance'));

            distMarker.setToolTip(tool);
               
            mdvJpMaps[currentMap].mdvMap.getLayer('mdvMarkers').addMarker(distMarker); 
            
         }
        curDist =0;
        lastDist = Math.round(realDist) % 1000;
    }
    
}


function reDistMarker(obj){


    if(obj ==true){
        addDistanceMarker(tripPath)
    }
    else{
    mdvJpMaps[currentMap].mdvMap.getLayer('mdvMarkers').removeAllMarkers();
    }


}


// This function unloads the map when the site is unloaded.
function onUnloadMapHandler(type) {
	if (mdvJpMaps[type])
		mdvJpMaps[type].destroy(type);
};

// ==================================================================
// Common map functionality
// ==================================================================

// This function destroys the map and clears the cache.
MDVMapHelper.prototype.destroy = function(type) {

	$(document.body).getElements('div[class=MDVMapControl]').dispose();
	$(document.body).getElements('div[id=divScale]').dispose();
 	$(document.body).getElements('div[id=mdvMap_mdvMap_mapper0_mapTiles]').dispose();
	$(document.body).getElements('div[id=mdvMap_mdvMarkers]').dispose();
	$(document.body).getElements('div[id=mdvMap_mapper0]').dispose();
	$(document.body).getElements('div[id=mdvMap_mapper1]').dispose(); 

	mdvJpMaps[type].mdvMap.destroy();
	mdvJpMaps[type].mdvMap = null;
	mdvJpMaps[type] = null;
};

// This function loads the map
function MDVMapHelper(type, mapBefore) {
	this.mdvMap = null;
	this.markerLayer = null;
	this.type = type;
	
	this.marker = null;
	this.graph = [];
    this.polySegments = [];
    this.tooltipSize = new MDVPoint(218, 175);
	this.scale = null;
	
	// output map functionality
	this.viewport = document.getElementById('mdvMap');
	this.trips = null;
	this.mdvMapTripsLoaded = false;
	
	// initialize map and register events
	if (this.mdvMap == null) {
		this.mdvMap = new MDVMap(document.getElementById('mdvMap'));
		
		// correct the map control alt texts
		if(mapLanguage =='de'){
		
			var controlText = new Array();
			controlText['goNorth'] = 'Norden';
			controlText['goWest'] = 'Westen';
			controlText['goEast'] = 'Osten';
			controlText['goSouth'] = 'Süden';
			controlText['lastResult'] = 'Letztes Ergebnis';
			controlText['zoomIn'] = 'Vergrößern';
			controlText['zoomOut'] = 'Verkleinern';
		}
		
		if(this.type=='aerial'){
			$('aerialLabels').style.display='block';
			this.overlay = this.mdvMap.createOverlay('captions', mapServerURL + 'Luftbilder/Text/');		
			this.overlay.setFileType('.png');
			this.mdvMap.addOverlay(this.overlay); 
		}
		else{
			$('aerialLabels').style.display='none';
		}
		
		// vvs context menu only on enquiry page 
		
		if(currentPage!='result'){
			this.ctxMenuArr = new Array();
			this.ctxMenuArr[0] = new MDVMapMenuItem(setPoint, this.setCoordinates);
			
			this.ctxMenu = new MDVMapMenu(this.ctxMenuArr);
			
			var contextMenuPop  = document.getElementById('map-popup-4').innerHTML;
			var new_div = document.createElement("div");
			new_div.setAttribute("class","hideCtxMenu");
			new_div.innerHTML = contextMenuPop;
			this.ctxMenu.div.appendChild(new_div); 
			
			new MDVMapContextMenu(this.mdvMap, this.ctxMenu);
			
			this.mdvMap.events.registerEvent(MDVEvent_CONTEXT_MENU, this, this.ContextMenuHandler);
		}
		//this.mdvMap.events.registerEvent(MDVEvent_MOUSE_MOVED, null, function(id, msg, obj) { window.status = obj; });
        //this.mdvMap.events.registerEvent(MDVEvent_CENTRE_CHANGED, this, this.centreChanged);

		this.mdvMap.events.registerEvent(MDVEvent_TOOLTIP, this, this.onToolTip);
		this.mdvMap.events.registerEvent(MDVEvent_DRAGGABLEMARKER_ONRELEASE, this, this.setCoordinatesAfterDrag);
		
		new MDVMapNavigator(this.mdvMap);
		
		var imgPath = 'images/mdvMap/stopSymbols/';
		
		if(this.type=='aerial'){
			imgPath = 'images/mdvMap/aerialSymbols/';
		}
		
        if(currentPage=='enquiry'){
            new MDVMapEFAInfoEx(this.mdvMap, { comparator: this.pinComparator, imagePath: imgPath, alignment: new MDVPoint(0.5, 0.5) });
        }
		
		this.trips = new MDVMapEFATrips(this.mdvMap, { reductionList: reductionList });
        //this.trips = new MDVMapEFATrips(this.mdvMap);
        
		new MDVMapControl(this.mdvMap, controlText);

        
        this.nearInfoLayer = this.mdvMap.createLayer('nearInfo');
        this.nearInfoLayer.setZIndex(1);
        this.mdvMap.addLayer(this.nearInfoLayer);
        
		if(currentPage=='result'){
        	
			this.polylineLayer = this.mdvMap.createLayer('directions');
			this.polylineLayer.setZIndex(1);
			this.mdvMap.addLayer(this.polylineLayer); 

		}
		else if(currentPage=='enquiry'){
			this.markerLayer = this.mdvMap.createLayer('vvsMarkers');
			this.markerLayer.id = 1;
			this.markerLayer.setZIndex(50);
			this.mdvMap.addLayer(this.markerLayer);
		
			this.polylineLayer = this.mdvMap.createLayer('polylines');
			this.polylineLayer.id = 3;
			this.polylineLayer.setZIndex(55);
			this.mdvMap.addLayer(this.polylineLayer);
			
			this.directionsLayer = this.mdvMap.createLayer('directions');
			this.directionsLayer.id = 4;
			this.directionsLayer.setZIndex(5);
			this.mdvMap.addLayer(this.directionsLayer);
			
		 	this.stopAndPoiLayer = this.mdvMap.createLayer('stopAndPoiMarkers');
			this.stopAndPoiLayer.id = 2;
			this.stopAndPoiLayer.setZIndex(50);
			this.mdvMap.addLayer(this.stopAndPoiLayer); 
			
			this.viaMarkerLayer = this.mdvMap.createLayer('viaMarkers');
			this.viaMarkerLayer.id = 1;
			this.viaMarkerLayer.setZIndex(50);
			this.mdvMap.addLayer(this.viaMarkerLayer);
		}

				
		this.mdvMap.type = type;
        this.mdvMap.mapBefore = mapBefore;
		this.scale = new MDVMapScale(this.mdvMap, {});
        
        
	}
	
	this.execute();
	
	var resultZoom = document.getElementById('itdLPxx_zoomLevel').value;

	if(resultZoom > 0 && document.getElementById('itdLPxx_hiddenCommand').value=='changeRequest'){
	
		this.mdvMap.setZoomLevel(resultZoom);
		
		var mapCentre = document.getElementById('itdLPxx_mapCentre').value.split(':');
		var nc = new MDVCoordinates(mapCentre[2], parseInt(mapCentre[0]), parseInt(mapCentre[1]));
		
		this.mdvMap.setCentre(nc);
		this.mdvMap.update();
	}
	
	// map does not move if it is grapped and the mouse moved over the borders of the map
	attachEventListener(document, 'mouseover', this.mdvMap.release.bind(this.mdvMap), false);
};


MDVMapHelper.prototype.execute = function () {
	// execute map
	 if (this.mdvMap) {
		if(this.type=='aerial'){
			this.mdvMap.execute(mdvSatelliteMapConfig);	
		}
		if(this.type=='city'){
			this.mdvMap.execute(mdvCityMapConfig);	
		}
		else{
			this.mdvMap.execute(mdvMapConfig);	
		}
	} 
	
	if(document.getElementById('itdLPxx_mapCentre') && document.getElementById('itdLPxx_mapCentre').value!=''){
	
		var mapCentre = document.getElementById('itdLPxx_mapCentre').value.split(':');
		var nc = new MDVCoordinates(mapCentre[2], parseInt(mapCentre[0]), parseInt(mapCentre[1]));
		var zoom = parseInt(document.getElementById('itdLPxx_zoomLevel').value);
        
		this.mdvMap.setCentre(nc);
        
        if(this.mdvMap.type=='aerial' && this.mdvMap.mapBefore=='navteq'){
             zoom = zoom +1;
        }
        else if(this.mdvMap.type=='navteq' && this.mdvMap.mapBefore=='aerial'){
             zoom = zoom -1;
        }
        else if(this.mdvMap.type=='aerial' && this.mdvMap.mapBefore=='city'){
            zoom = zoom +2;
        }
        else if(this.mdvMap.type=='city' && this.mdvMap.mapBefore=='aerial'){
            zoom = zoom -2;
        }
        else if(this.mdvMap.type=='city' && this.mdvMap.mapBefore=='navteq'){
            zoom = zoom -1;
        }
        else if(this.mdvMap.type=='navteq' && this.mdvMap.mapBefore=='city'){
            zoom = zoom +1;
        }
        
        if(zoom < 0){
            zoom = 0;
        }
        
        this.mdvMap.setZoomLevel(zoom);
        
        
        
		this.mdvMap.update();
	}
	
	if(currentPage!='result'){
	
		lastAddedPoint = document.getElementById('itdLPxx_lastAddedPoint') ? document.getElementById('itdLPxx_lastAddedPoint').value : null;
		
		this.mdvMap.events.registerEvent(MDVEvent_LAYER_UPDATED, this, this.setIdentifiedMarker);

		var odvs = $(document.body).getElements('input');
		var viaIndex = document.getElementById('via_index').value;
		
		// centre on identified odv
		if ((document.getElementById('nameX_origin') && document.getElementById('nameX_origin').value!='') || (document.getElementById('nameX_destination') && document.getElementById('nameX_destination').value != '') || (document.getElementById('nameX_via' +viaIndex) && document.getElementById('nameX_via' +viaIndex).value != '')) {
			var usage = new Array();

			for(var i=0; i < odvs.length; i++){
				if(odvs[i].name.indexOf('itdLPxx_odv_')!='-1' && odvs[i].value !=''){
				
					var odvUsage =odvs[i].name.split('_');
					
					if(odvUsage[2] == 'via' && document.getElementById('itdLPxx_adoptPoint').value==''){
						//alert('den nicht');
					}
					else{
						usage.push(odvUsage[2]);
					}
				}
			}

			this.setCentreAndZoomLevel(usage, this);
		}
		
		if(document.getElementById('itdLPxx_mapCentre') && document.getElementById('itdLPxx_mapCentre').value!='' && document.getElementById('itdLPxx_adoptPoint').value!=='' && document.getElementById('nameState_via').value=='identified'){
			this.setViaMarker();
		}
	}
};


// store map centre and zoomlevel
function storeMapCentreAndZoomlevel () {

	//var currentMap =  $('itdLPxx_currentMap').value;

	if (document.getElementById('itdLPxx_mapCentre') && document.getElementById('itdLPxx_zoomLevel')) {
		var mapCentre = mdvJpMaps[currentMap].mdvMap.getCentre();
		document.getElementById('itdLPxx_mapCentre').value = mapCentre.x + ':' + mapCentre.y + ':' + mapCentre.mapName;
		document.getElementById('itdLPxx_zoomLevel').value = mdvJpMaps[currentMap].mdvMap.config.currentZoomLevelIndex;
	}
};

// this function sort orign, destination and via in the right order
function inArraySort(a,b){

	a = a.toLowerCase();
	a = a.replace(/origin/g,"a");
	if(a.length == 5){
		a = a.replace(/via1/g,"c");
		a = a.replace(/via2/g,"d");
	}
	a = a.replace(/via/g,"b");
	a = a.replace(/destination/g,"e");

	b = b.toLowerCase();
	b = b.replace(/origin/g,"a");
	if(b.length == 5){
		b = b.replace(/via1/g,"c");
		b = b.replace(/via2/g,"d");
	}
	b = b.replace(/via/g,"b");
	b = b.replace(/destination/g,"e");

	return(a==b)?0:(a>b)?1:-1;
};


// in mdvMap umziehen
var selSubCat = '';
var selCat = '';

MDVMapHelper.prototype.pinComparator = function(pin) {

    if(pin.attrs && (pin.type=='POI_POINT' || pin.type=='POI_AREA')){
    
       var cat =false;
        
       for(var i =0; i < pin.attrs.length; i++){

            if(pin.attrs[i].name == 'POI_HIERARCHY_KEY' 
                && pin.attrs[i].value.length==2 && selSubCat.indexOf(pin.attrs[i].value + ':') != '-1'){
            
                cat = true; 
            }
       
       }
        
    
       if(cat==true){
            return true;
        }
        else{
            return false;
        } 
    
    }
    else{
        return true;
    }

}


// Set marker on all zoom level 
MDVMapHelper.prototype.setIdentifiedMarker = function(id, msg, layer) {
	var odv = new Array();
	var odvs = $(document.body).getElements('input');
	var pos = 0;
			
	for(var i=0; i < odvs.length; i++){
		if(odvs[i].name.indexOf('itdLPxx_odv_')!='-1' && odvs[i].value!='' && odvs[i].name.value!='itdLPxx_odv_via'){
			var odvUsage =odvs[i].name.split('_');
			
			if(odvUsage[2]=='via' && document.forms[0].nameState_via.value=='list'){
				//alert('via and list')
			}
			else if(odvUsage[2]!='via'){ 
				odv.push(odvUsage[2]);
			}
		}
	}
	
	odv.sort(inArraySort)
			
	if (layer && odv) {

		for (var i=0; i<odv.length; i++) {
		
			var usage = odv[i];
			var realUsage = usage;
			
			if(realUsage.indexOf('via')!='1'){
				realUsage = 'via';
			}
			
			var offset = { x: 0.5, y: 0.5 };
			
			if(document.getElementById('nameState_origin').value=='identified' && 
				document.getElementById('nameState_destination').value=='identified'){
				var orig = document.getElementById('nameX_origin').value+':'+document.getElementById('nameY_origin').value;
				var dest = document.getElementById('nameX_origin').value+':'+document.getElementById('nameY_destination').value;
				
				offset = (usage.indexOf('destination')!='-1' && orig == dest) ? { x: 1.0, y: 0.5 } : { x: 0.5, y: 0.5 } ;
			}
			
			var mapName = document.getElementById('nameMapName_' + usage).value;
			var x = document.getElementById('nameX_' + usage).value;
			var y = document.getElementById('nameY_' + usage).value;
			var display = document.getElementById('nameDisplay_' + usage).value;
			var type = document.getElementById('anyType_' + usage).value;
			
			// small tool tip for identified point!!!!!!!!!!!!!!
			var size = new MDVPoint(218, 80);
			var tool = this.mdvMap.createToolTip(size,'<b>' + display + '</b>');
			var mc = new MDVCoordinates(mapName, parseInt(x), parseInt(y));
			
			var numberDest = 1;
			
			if(odv[odv.length -2] && odv[odv.length -2].indexOf('via')!='-1'){
				numberDest = parseInt(odv[odv.length -2].substring(3)) +2;
			}
			
			if(usage=='destination'){
				usage= 'destination' + numberDest;
			}
				
			if(this.markerLayer.markers.length < odv.length){
			
				this.allZoomMarker = this.mdvMap.createDraggableMarker({
													coords: mc,
													usage: usage,
													factor: offset,
													imgSrc: this.getImage(usage),
													imgClass: 'draggableMarker',
													markerSequence: this.graph,
													func: this.createPolySegment,
													drawLayer: this.polylineLayer
													
				});
				this.allZoomMarker.setToolTip(tool);
				this.markerLayer.addMarker(this.allZoomMarker);
			}

			
			for (var j=0; j<this.graph.length; j+=1) {
				if (this.graph[j].usage === usage) {
					return;
				}
			}
			
			if(this.allZoomMarker){
				this.graph.push({
					markerId: this.allZoomMarker.id,
					x: parseInt(x, 10),
					y: parseInt(y, 10),
					name: display,
					usage: usage
				});
			} 
            
            
		}
	}

	if(currentPage!='result'){
		this.addLines();
	}
    
    
    
};


// set centre and zoom level 
MDVMapHelper.prototype.setCentreAndZoomLevel = function(usage, obj) {

	for (var i=0; i<usage.length; i++) {
		if(document.getElementById('nameMapName_' + usage[i] )){
			var mapName = document.getElementById('nameMapName_' + usage[i] ).value;
			var x = document.getElementById('nameX_' + usage[i]).value;
			var y = document.getElementById('nameY_' + usage[i]).value;

			if (x <= 0 || y <= 0)
				return;
				
			var nc = new MDVCoordinates(mapName, parseInt(x), parseInt(y));

			if(lastAddedPoint == usage[i]){
				this.mdvMap.setCentre(nc);
			}
		}
	}
	
	this.mdvMap.update();
};


// this function set the via marker on the map
MDVMapHelper.prototype.setViaMarker = function() {

	this.polylineLayer.removeAllMarkers();
		
	var mapCentre = document.getElementById('itdLPxx_mapCentre').value.split(':');
	
	if(document.getElementById('itdLPxx_adoptPoint').value!==''){
		viaIndex = 1;
	}

	var name = document.getElementById('nameDisplay_via').value;
	var nc = new MDVCoordinates(mapCentre[2], parseInt(mapCentre[0]), parseInt(mapCentre[1]));
	
	this.mdvMap.setCentre(nc);
	//this.mdvMap.setZoomLevel(5);
	this.mdvMap.update();

	this.setMarker({ type: 'address', name: name, mapName: mapCentre[2], x: parseInt(mapCentre[0]), y: parseInt(mapCentre[1]), setFixed: true}, 'via');

};

// add polylines between each point 
MDVMapHelper.prototype.addLines = function() {

    var start, end, segment, i=1;
    
	while (this.graph[i]) {	

        start = this.graph[i-1].x + ',' + this.graph[i-1].y;
        end = this.graph[i].x + ',' + this.graph[i].y;

        this.addPolySegment(start, end, i);
        i += 1;
		
		// add tooltip on the last polyline
		if(i == this.graph.length){
			
			if(lastAddedPoint=='origin'){
				this.addHiddenMarker(0, 1);
			}
			else{
				this.addHiddenMarker(i-2, i-1);
			}
		}
    }
};

// this function add a hidden marker on the polyline
MDVMapHelper.prototype.addHiddenMarker = function (start, end) {
	
    var x, y, coord, tooltip;
    
    x = Math.floor((this.graph[start].x + this.graph[end].x) / 2);
    y = Math.floor((this.graph[start].y + this.graph[end].y) / 2);
    coord = new MDVCoordinates(this.mdvMap.config.params.mapName, x, y);
	
    tooltip = this.mdvMap.createToolTip(new MDVPoint(218, 80), 
                                        this.graph[start].name + '$:$' + 
                                        this.graph[end].name + '$:$' + 
                                        this.graph[start].usage);
										
				
    this.hiddenMarker = this.mdvMap.createMarker(coord, new MDVPoint(0.5, 0.5), this.getImage());
    this.hiddenMarker.setToolTip(tooltip);
    this.polylineLayer.addMarker(this.hiddenMarker);
	
    if (document.getElementById('itdLPxx_hiddenMarker').value !== 'false') {

		// calculate the right zoom level for the tooltip
		var width  = Math.abs(this.graph[this.graph.length-2].x - this.graph[this.graph.length-1].x);
		var height = Math.abs(this.graph[this.graph.length-2].y - this.graph[this.graph.length-1].y);
     	var zoom = parseInt(0);
     	var extd = this.mdvMap.getViewportExtends();
     	
     	var zls = this.mdvMap.config.getZoomLevels();
     	for (var i=zls.length-1; i >= 0; i--) {
     		var zl = zls[i];
     		var bWidth = false;
     		var bHeight = false;
     		
     		var vpTiles = new MDVPoint(extd.width / parseInt(zl.get('tileSizeX')),
     			extd.height / parseInt(zl.get('tileSizeY')));
     		
     		var numTiles = new MDVPoint(zl.get('numberOfTilesX'), zl.get('numberOfTilesY'));
     		var realExtends = new MDVPoint(zl.get('realWidth'), zl.get('realHeight'));
     		
     		var tileSize = new MDVPoint(Math.floor(0.5 + realExtends.x / numTiles.x),
     			Math.floor(0.5 + realExtends.y / numTiles.y));
     			
     		var real = new MDVPoint(tileSize.x * vpTiles.x, tileSize.y * vpTiles.y);    		
     		
     		if (real.x > (width*1.15) && !bWidth) {
     			zoom = i;
     			bWidth = true;
     		}		

     		if (real.y > (height*1.15) && !bHeight) {
     			zoom = i;
     			bHeight = true;
     		}
     		
     		if (bWidth && bHeight)
     			break;
     	}
		
  		this.mdvMap.setCentre(coord);
  		this.mdvMap.setZoomLevel(zoom);
        this.hiddenMarker.toolTip.display();
        this.hiddenMarker.toolTip.setFixed(true);	
        document.getElementById('itdLPxx_hiddenMarker').value = 'false';
		
		this.mdvMap.update();
    }
};

MDVMapHelper.prototype.addPolySegment = function(start, end, idx) {
    this.polylineLayer.addPolyline(this.createPolySegment(start, end, idx));
};

MDVMapHelper.prototype.createPolySegment = function(start, end, idx) {
   
    var poly, tooltip;

    poly = this.mdvMap.createPolyline(start + ' ' + end);
    poly.add('colour', '#FF6600');
    poly.add('opacity', '0.8');
    poly.add('weight', '4');
    
    if (idx) {
        tooltip = this.mdvMap.createToolTip(this.tooltipSize, 
                                            this.graph[idx-1].name + '$:$' + 
                                            this.graph[idx].name + '$:$' + 
                                            this.graph[idx-1].usage);
                                            
        poly.setToolTip(tooltip, false);
    }
    return poly;
};


// This function sets the origin/destination marker
MDVMapHelper.prototype.setMarker = function(obj, usage) {

	var mc = new MDVCoordinates(obj.mapName, parseInt(obj.x), parseInt(obj.y));
	var text;
	var size = new MDVPoint(218, 175);
	var adoptPoint = document.getElementById('itdLPxx_adoptPoint').value;
	var offset = { x: 0.5, y: 0.5 };
	
	if(usage.indexOf('destination')!='-1') {
		if (document.getElementById('name_destination') && document.getElementById('name_destination').value!='')
			text = document.getElementById('name_destination').value;
		else
			text =  obj.name;
	}
	
	else if(usage=='via') {
	
		if (document.getElementById('name_via') && document.getElementById('name_via').value!='' 
			&& obj.name=='')
			text = document.getElementById('name_via').value;
		else
			text =  obj.name;
	}
	
	else if(usage.indexOf('via')!='-1') {
		if (document.getElementById('name_via') && document.getElementById('name_via').value!='')
			text = document.getElementById('name_via').value;
		else
			text =  obj.name;
	}
	else {
		if (document.getElementById('name_origin') && document.getElementById('name_origin').value!='')
			text = document.getElementById('name_origin').value;
		else
			text = obj.name;
			usage= 'origin';
	}
	
	this.marker = this.mdvMap.createMarker(mc,  offset, this.getImage(usage));

	var tool = this.mdvMap.createToolTip(size,'<b>' + text + '</b>');
	this.marker.setToolTip(tool);
	
	
	if(usage=='via'){
		
		this.viaMarkerLayer.addMarker(this.marker);
	}
	else{
		this.markerLayer.addMarker(this.marker);
	}
	
	if(usage=='via'){
		this.marker.toolTip.display();
	}

	this.marker.toolTip.setFixed(obj.setFixed);	
	this.mdvMap.update();
};

// This function returns the marker image.
MDVMapHelper.prototype.getImage = function(usage) {
	var img = 'images/mdvMap/transparent.gif';
	
	if(!usage){
		usage= 'transparent';
	}

	switch(usage) {
		case 'origin':
			img = 'images/mdvMap/origin.gif';
			break;
		case 'destination':
			img = 'images/mdvMap/destination.gif';
			break;
		case 'via':
			img = 'images/mdvMap/via.gif';
			break;
		default:
		img = 'images/mdvMap/' +usage +'.gif'
	}
	
	var i = new Image();
	i.src = img;

	return img;
};

//this function create a tooltip
MDVMapHelper.prototype.onToolTip = function(id, msg, obj) {

	if (obj.isFixed()){
		return;
    }
	if (obj.isVisible()) {
		if (!obj.helper)
			obj.helper = new MDVToolTipHelper(obj);
			mdvToolTip = new MDVToolTipHelper(obj);
		
		if(obj.helper.toolTip.parentMarker.layer.name=='efa_trip'){
			if(obj.parentMarker.usage=='via' && obj.innerHTML.indexOf('Zwischenziel') == '-1'){
				obj.innerHTML = 'Zwischenziel' + obj.innerHTML.substring(obj.innerHTML.indexOf(':')) 
			}
		}
        
		if(obj.innerHTML.indexOf('$:$')!='-1'){
			obj.helper.executeLine(obj);
		}
		else{		
			obj.helper.executePoint(obj);
		}
	} 
 
};

// MDVToolTipHelper
function MDVToolTipHelper(toolTip) {
	this.toolTip = toolTip;
	this.processed = false;
	this.type = currentMap;
	
	var viaText = 'Zwischenziel';
    
    // replace place holder 
    if(this.toolTip.innerHTML.indexOf('$UNKNOWN_POINT$')!='-1'){
         this.toolTip.setInnerHTML(this.toolTip.innerHTML.replace('$UNKNOWN_POINT$', 'Punkt aus Karte'));
    }
    
    
	if(this.toolTip.parentMarker.usage=='via' && this.toolTip.innerHTML.indexOf(viaText) == '-1')
	{
		if(this.toolTip.innerHTML.indexOf(':') == '-1')
		{
			viaText += ' ';
		}
		
		this.toolTip.setInnerHTML(viaText + this.toolTip.innerHTML.substring(this.toolTip.innerHTML.indexOf(':')))
	}

	// delete hidden marker on polyline
	if(mdvJpMaps[this.type] && mdvJpMaps[this.type].polylineLayer && mdvJpMaps[this.type].polylineLayer.markers[0]){
		if(mdvJpMaps[this.type].polylineLayer.markers[0].toolTip){
            mdvJpMaps[this.type].polylineLayer.markers[0].toolTip.fixed = false;
		}
        // remove hidden marker on enquiry page 
        if(currentPage!='result'){
            mdvJpMaps[this.type].polylineLayer.removeAllMarkers();
        }
	}
	
	// hide context menu on tooltip 
	if(mdvJpMaps[this.type] && mdvJpMaps[this.type].ctxMenu){
		mdvJpMaps[this.type].ctxMenu.div.style.display='none';
	}
};

// This function creates the tooltip bubble.
MDVToolTipHelper.prototype.executePoint = function(tooltip) {
	var name = 'ttPoint_' + tooltip.id;


	if(tooltip.getParent().layer.name=='vvsMarkers' && mdvNetPath && mdvNetPath.pathId > 0){
		// this.executePointNormal(tooltip);
	}
	else if(tooltip.getParent().layer.name=='vvsMarkers'){
		this.executePointIdentified(tooltip);
	}
	else if(tooltip.getParent().layer.name=='efa_trip'){
		this.executeEfa_Trip();
	}
	else{
		this.executePointNormal(tooltip);
	}
};

// This function creates the tooltip bubble.
MDVToolTipHelper.prototype.executePointIdentified = function(tooltip) {
	
	var size=new MDVPoint(218, 80);
	
	mdvToolTip.toolTip.container.setSize(size);
	mdvToolTip.toolTip.container.updateBubble();
	
	mdvToolTip.toolTip.container.div.oncontextmenu = MDVToolTipContainer_onMouseDown;
	
	// save original div 
	var originalContent = $('map-popup-3').clone(true, true);
	var bubbleContent = $('map-popup-3');
	var originalName = this.toolTip.getInnerHTML()
	
	//get innerHTML
	var modBubbleContent = bubbleContent.innerHTML;
	
	this.toolTip.setInnerHTML(modBubbleContent);
	
	if (!this.processed) {
	
		// stop, poi tooltip (not on result screen)
		if (tooltip.getParent() && tooltip.getParent().objectId && currentPage=='enquiry') { 
		
			this.toolTip.setInnerHTML(modBubbleContent);
			
			originalName = originalName.replace(/<b>/g, '');
			originalName =  originalName.replace(/<\/b>/g, '');

			toolTipHelpers[name] = this;
			toolTipHelpers[name].type = tooltip.getParent().objectId.type;
			toolTipHelpers[name].omc = tooltip.getParent().objectId.omc;
			toolTipHelpers[name].id = tooltip.getParent().objectId.id;
			toolTipHelpers[name].usage = null;
			toolTipHelpers[name].name = originalName;
			toolTipHelpers[name].layer = tooltip.getParent().layer.name;
			toolTipHelpers[name].dwellTime = null;
			
			// set original usage from this tooltip
			if(tooltip.getParent().options && tooltip.getParent().options.usage){
				toolTipHelpers[name].origUsage = tooltip.getParent().options.usage;
			}
			else if(tooltip.getParent().layer.name=='vvsMarkers'){
				toolTipHelpers[name].origUsage ='via';
			}
			
			this.processed = true;
		}
	}
	
	// restore original div 
	$('map-popup-3').innerHTML = originalContent.innerHTML;
};

// this function change the tooltip content
MDVToolTipHelper.prototype.changeToolTip = function() {
	mdvToolTip.toolTip.innerHTML= mdvToolTip.toolTip.helper.name; 
	mdvToolTip.executePointNormal(mdvToolTip.toolTip) 
};

//  this function delete the selected point 
MDVToolTipHelper.prototype.deletePoint = function() {

	var origUsage = this.toolTip.helper.origUsage;
	
	if(origUsage=='origin'){
		document.forms[0].delOrig.value = '1';
	}
	else if(origUsage.indexOf('destination')!='-1'){
		document.forms[0].delDest.value = '1';
	}
	else{
		document.forms[0].delViaPos.value = parseInt(origUsage.replace('via', ''))-1;
	}

	//document.forms[0].submit();
    sendForm()
};

// This function creates the tooltip bubble.
MDVToolTipHelper.prototype.executePointNormal = function(tooltip) {

	if(mdvToolTip.toolTip.container.type == 'simple'){
		return false;
	}
	
	if(tooltip.getParent().objectId && tooltip.getParent().objectId.desc != ''){
		this.toolTip.innerHTML = '<b>' + tooltip.getParent().objectId.desc + '</b>';
	}
	

	if(headTab == 'net' && tooltip.getParent().objectId && tooltip.getParent().objectId.type && tooltip.getParent().objectId.type.toLowerCase().indexOf('poi')!='-1'){
		var size = new MDVPoint(218, 100)
		mdvToolTip.toolTip.container.setSize(size);
		mdvToolTip.toolTip.setPin(true);
		mdvToolTip.toolTip.container.update();
		mdvToolTip.toolTip.container.updateBubble();
	}
	else if(headTab == 'net'){
		mdvToolTip.toolTip.setPin(true);
		mdvToolTip.toolTip.container.update();
		mdvToolTip.toolTip.container.updateBubble();
	}
	
	else if(currentPage=='enquiry'){
        
        if(tooltip.parentMarker.imgSrc.indexOf('callabike')=='-1'){
    		var size = new MDVPoint(218, 175)
            
            
            var toPar = tooltip.getParent()
            var toParType = toPar.objectId.type.toLowerCase();
            
			if (toPar.objectId && toPar.objectId.type && toParType=='poi_area' 
					|| toPar.objectId && toParType=='poi_point' 
					|| toPar.objectId && toParType=='poi') {
                    
                size = new MDVPoint(238, 205)    
            }
            
    		mdvToolTip.toolTip.container.setSize(size);
    		mdvToolTip.toolTip.setPin(false);
    		mdvToolTip.toolTip.container.update();
    		mdvToolTip.toolTip.container.updateBubble();
        }
	}

	// save original div 
	var originalContent = $('map-popup-1').clone(true, true);
	
	var bubbleContent = $('map-popup-1');
	var originalName = this.toolTip.getInnerHTML()
	
	//get innerHTML
	var modBubbleContent = bubbleContent.innerHTML;
	
	mdvToolTip.toolTip.container.div.oncontextmenu = MDVToolTipContainer_onMouseDown;
	
	// change Stop / Poi name 
	modBubbleContent = modBubbleContent.replace(/Location/g, this.toolTip.getInnerHTML());

	// changed ids
	modBubbleContent = modBubbleContent.replace(/typevia/g, 'typevia'+tooltip.id);
	modBubbleContent = modBubbleContent.replace(/typeorigin/g, 'typeorigin'+tooltip.id);
	modBubbleContent= modBubbleContent.replace(/typedestination/g, 'typedestination'+tooltip.id);
	modBubbleContent = modBubbleContent.replace(/buttonDisabled/g, 'buttonDisabled'+tooltip.id);
	modBubbleContent= modBubbleContent.replace(/buttonEnabled/g, 'buttonEnabled'+tooltip.id);
	modBubbleContent= modBubbleContent.replace(/dwellTimeToolTip/g, 'dwellTimeToolTip'+tooltip.id);
	
	if(document.getElementById('via_index')){
		modBubbleContent= modBubbleContent.replace(/viaX/g, 'via'+document.getElementById('via_index').value);
	}
	
	if (!this.processed) {
	
		// stop, poi tooltip (not on result screen)
		if (tooltip.getParent() && tooltip.getParent().objectId && currentPage=='enquiry' && headTab != 'net') { 

            var toPar = tooltip.getParent()
            var toParType = toPar.objectId.type.toLowerCase();
        
			// POIS
			if (toPar.objectId && toPar.objectId.type && toParType=='poi_area' 
					|| toPar.objectId && toParType=='poi_point' 
					|| toPar.objectId && toParType=='poi') {
			
                var link ='';
                var address ='';
        
                for (var i=0; i < toPar.getObjectId().attrs.length; i++) {
                    var a = toPar.getObjectId().attrs[i];
                    
                    if (a.name == 'POI_LINK') { 		
                        var linkText = a.value.substring(0, a.value.indexOf('$'));
                        
                        if(linkText.indexOf('Umgebungsplan') !='-1' && mapLanguage=='en'){
                            linkText = 'Local Map (PDF)'
                        }
                    
                        link = link + '<a class="bold" href="' + a.value.substring(a.value.indexOf('$') +1) 
                               + '" target="_blank">' 
                               + linkText + '</a><br/>';
                    }
                    
                    // add poi address to the tooltip 
                    if (a.name == 'POI_ADDRESS') { 	
                        address = '<br/>' + a.value;
                    }
                } 
            
                var reContent= this.toolTip.getInnerHTML()
            
                modBubbleContent = modBubbleContent.replace(reContent, reContent + address)
            
                var content = modBubbleContent.substring(0,modBubbleContent.length -6);
                                        
                modBubbleContent = content  + link + '</div>';
			} 
        
			this.toolTip.setInnerHTML(modBubbleContent);

			// check the selected point
			if(this.toolTip.helper.origUsage){
				var selectedBox = this.toolTip.helper.origUsage.indexOf('via')!='-1' ? 'via' : this.toolTip.helper.origUsage;
				
				if($('type' + selectedBox + tooltip.id)){
					$('type' + selectedBox + tooltip.id).checked=true;
				}
				
                
				if(this.toolTip.helper.origUsage.indexOf('via')!='-1'){
					$('buttonDisabled' + tooltip.id).style.display='none';
					$('buttonEnabled' + tooltip.id).style.display='inline';
					$('dwellTimeToolTip' + tooltip.id).disabled = false;
					
					var viaIndex = this.toolTip.helper.origUsage.substring(3,4) -1 + '';
					
					$('dwellTimeToolTip' + tooltip.id).value= $('dwellTime_' + viaIndex).value;
				}
			}
			
			originalName = originalName.replace(/<b>/g, '');
			originalName =  originalName.replace(/<\/b>/g, '');

			toolTipHelpers[name] = this;
			toolTipHelpers[name].type = tooltip.getParent().objectId.type;
			toolTipHelpers[name].omc = tooltip.getParent().objectId.omc;
			toolTipHelpers[name].id = tooltip.getParent().objectId.id;
			if(this.toolTip.helper.origUsage){
				toolTipHelpers[name].usage = this.toolTip.helper.origUsage;
			}
			else{
				toolTipHelpers[name].usage = null;
			}
			toolTipHelpers[name].name = originalName;
			toolTipHelpers[name].layer = tooltip.getParent().layer.name;
			
			// set original usage from this tooltip
			if(tooltip.getParent().options && tooltip.getParent().options.usage){
				toolTipHelpers[name].origUsage = tooltip.getParent().options.usage;
			}
			else if(tooltip.getParent().layer.name=='viaMarkers'){
				toolTipHelpers[name].origUsage ='via';
			}
			else{
				// usage for stop or poi is empty
				toolTipHelpers[name].origUsage ='';
			}
			
			//this.processed = true;
           if(tooltip.parentMarker.imgSrc.indexOf('callabike')!='-1'){
                this.processed = true;
           }
            
		}
		//Result PAGE
		else if(currentPage=='result' || headTab == 'net'){
		
			var wait = 'Bitte warten...';
		
			if (mapLanguage =='en'){
				wait = 'Please wait while loading...';
			}
			
			var stopTxt = 'Haltestelle';
			
			if(mapLanguage=='en'){
				stopTxt ='Stop'
			}
			
			// STOPS
			if (tooltip.getParent().objectId && tooltip.getParent().objectId.type.toLowerCase()=='stop') {
				tooltip.setInnerHTML(stopTxt +': <b>'
					+ tooltip.getParent().objectId.desc
					+ '</b><br><br><div class="dmDiv" id="div_'
					+ tooltip.getParent().objectId.id
					+ '">'
					+ wait
					+'</div>'); 

				tooltip.dm = new MDVEFADepartureMonitor(tooltip.parentMarker.objectId.id, '../dm/XML_DM_REQUEST');
				tooltip.dm.getDepartures(tooltip.getParent().objectId.id);
			} 
			
			// POIS
			if (tooltip.getParent().objectId && tooltip.getParent().objectId.type && tooltip.getParent().objectId.type.toLowerCase()=='poi_area' 
					|| tooltip.getParent().objectId && tooltip.getParent().objectId.type.toLowerCase()=='poi_point' 
					|| tooltip.getParent().objectId && tooltip.getParent().objectId.type.toLowerCase()=='poi') {
			
                var link ='';
                var address ='';
        
                for (var i=0; i < tooltip.getParent().getObjectId().attrs.length; i++) {
                    var a = tooltip.getParent().getObjectId().attrs[i];
                    
                    
                    if (a.name == 'POI_LINK') { 		
                        var linkText = a.value.substring(0, a.value.indexOf('$'));
                        
                        if(linkText.indexOf('Umgebungsplan') !='-1' && mapLanguage=='en'){
                            linkText = 'Local Map (PDF)'
                        }
                    
                        link = link + '<a class="bold" href="' + a.value.substring(a.value.indexOf('$') +1) 
                               + '" target="_blank">' 
                               + linkText + '</a><br/>';
                    }
                    
                    // add poi address to the tooltip 
                    if (a.name == 'POI_ADDRESS') { 	
                        address = a.value+ '<br/>';
                    }
                } 
            
                tooltip.setInnerHTML('<b>'
                    + tooltip.getParent().objectId.desc
                    + '</b><br/>'
                    + address
                    + link
                    +''); 
			} 
		}
	}
	
	// restore original div 
	$('map-popup-1').innerHTML = originalContent.innerHTML;
	
};

// This function creates the tooltip bubble for the efa_trip markers.
MDVToolTipHelper.prototype.executeEfa_Trip = function() {
	
	if (!this.processed) {
    
        // polyline tooltips
    	if(this.toolTip.innerHTML == '102' || this.toolTip.innerHTML == '107'){
            var to = 'Fahrradstrecke nach ' + this.toolTip.parentMarker.leg.points[1].name;
            this.toolTip.setInnerHTML(to);
        }
        else if(this.toolTip.innerHTML == '100'){
            var to = 'Fußweg nach ' + this.toolTip.parentMarker.leg.points[1].name;
            this.toolTip.setInnerHTML(to);
        }
    
        // polyline markers
        if(this.toolTip.parentMarker.point){
            
            var pName = this.toolTip.innerHTML;
            var mTime = ' um <b>' + this.toolTip.parentMarker.point.dateTime.time+' </b>';
            var usage = this.toolTip.parentMarker.point.usage;
            var txt = '';
            
            if( this.toolTip.parentMarker.mode > 97 && usage =='departure'){
                txt = 'Start: ' + pName + mTime
            }
            else if(this.toolTip.parentMarker.mode > 97 && usage =='arrival'){
                txt = 'Ziel: ' + pName + mTime
            }
            else if(usage =='departure'){
                txt = 'Abfahrt ab ' + pName + mTime
            }
            else if(usage =='arrival'){
                txt = 'Ankunft an ' + pName + mTime
            }
            
            if(txt!=''){
                this.toolTip.setInnerHTML(txt);
            }
        }
			
        this.processed = true;
	}
	
};


// This function creates the tooltip bubble for the lines
MDVToolTipHelper.prototype.executeLine = function(tooltip) {
	var name = 'ttLine_' + tooltip.id;
	
	// save original div 
	var originalContent = $('map-popup-2').clone(true, true);
	var bubbleContent = $('map-popup-2');
	
	//get innerHTML
	var modBubbleContent = bubbleContent.innerHTML;
	
	var originalName = tooltip.innerHTML.split('$:$');
	
	// size for line tooltips
	var size=new MDVPoint(218, 175);
	
	mdvToolTip.toolTip.container.setSize(size);
	mdvToolTip.toolTip.container.updateBubble();
	
	mdvToolTip.toolTip.container.div.oncontextmenu = MDVToolTipContainer_onMouseDown;
	
	// get the right start and end name
	modBubbleContent = modBubbleContent.replace(/FirstPoint/g, originalName[0]);
	modBubbleContent= modBubbleContent.replace(/LastPoint/g, originalName[1]);
	
	if (!this.processed) {
		// stop, poi tooltip (not on result screen)
		if (tooltip.getParent()) { 
			this.toolTip.setInnerHTML(modBubbleContent);
		}
		
		toolTipHelpers[name] = this;
		toolTipHelpers[name].usage = originalName[2];
		toolTipHelpers[name].name = originalName;
		toolTipHelpers[name].viaIndex = document.forms[0].via_index.value;
		toolTipHelpers[name].assumed = false;
		this.processed = true;
	}
	
	// restore original div 
	$('map-popup-2').innerHTML = originalContent.innerHTML;
};


// this function submit a point from the tooltip
MDVToolTipHelper.prototype.submitPoint = function(tooltip) {

	var type = this.toolTip.helper.type.toLowerCase();
	var omc = this.toolTip.helper.omc;
	var id = this.toolTip.helper.id;
	var usage = this.toolTip.helper.usage;
	var name = this.toolTip.helper.name;
	var dwellTime = this.toolTip.helper.dwellTime;
	var layer = this.toolTip.helper.layer;
	var origUsage = this.toolTip.helper.origUsage;
    
    if(name.indexOf('<br/>')!='-1'){
        name = name.substring(0,name.indexOf('<br/>'));
    }
	
	document.getElementById('itdLPxx_lastAddedPoint').value = usage;
	
	if(usage){
		var viaIndex = usage.replace('via', '');
	}
	else{
		var viaIndex = origUsage.replace('via', '') -1;
		usage= origUsage;
	}
	
	if(!usage){
		if(document.getElementById('nameState_origin').value!='identified'){
			usage='origin';
		}
		else if(document.getElementById('nameState_destination').value!='identified'){
			usage='destination';
		}
		else{
			usage='via';
		}
	}
	
	if(usage.indexOf('via')!='-1' && dwellTime > 0){
		document.forms[0].adoptViaDwellMin.value = viaIndex + ':' + dwellTime;
	}
	else if(usage=='origin' && dwellTime > 0){
		document.forms[0].adoptViaDwellMin.value = viaIndex + ':' + dwellTime;
	}
	
	// overwrite via usage to submit
	if(usage.indexOf('via')!='-1'){
		usage = 'via';
	}

	// change existing points 
	if(layer=='vvsMarkers' || layer=='viaMarkers'){
		// submit to origin
		if(usage=='origin' && origUsage=='via'){
			document.forms[0].addViaAsOrig.value = '1';
			document.forms[0].via_index.value = 'empty';
		}
		else if(usage=='origin' && origUsage.indexOf('via')!='-1'){
			document.forms[0].changeViaToOrig.value = origUsage.replace('via', '');
		}
		else if(usage=='origin' && origUsage=='destination'){
			document.forms[0].changeDestToOrig.value = 1;
		}
		// submit to destination
		else if(usage=='destination' && origUsage=='via'){
			document.forms[0].addViaAsDest.value = '1';
			document.forms[0].via_index.value = 'empty';
		}
		else if(usage=='destination' && origUsage.indexOf('via')!='-1'){
			document.forms[0].changeViaToDest.value = parseInt(origUsage.replace('via', '')) -1;
		}
		else if(usage=='destination' && origUsage=='origin'){
			document.forms[0].changeOrigToDest.value = 1;
		}
		// submit to via
		else if(usage=='via' && origUsage=='origin'){
			document.forms[0].changeOrigToVia.value = 1;
		}
		else if(usage=='via' && origUsage.indexOf('destination')!='-1'){
			document.forms[0].changeDestToVia.value = 1;
		}
		//submit to origin and destination
		else if(usage=='origDest' && origUsage=='via'){
			document.forms[0].addViaAsOrigDest.value = '1';
			document.forms[0].via_index.value = 'empty';
		}
		else if(usage=='origDest' && origUsage.indexOf('via')!='-1'){
			document.forms[0].changeViaToOrigDest.value = parseInt(origUsage.replace('via', '')) -1;
			document.forms[0].via_index.value = 'empty';
		}
		else if(origUsage=='origin' &&document.getElementById('typedestination' + this.toolTip.id).checked && document.getElementById('typeorigin' + this.toolTip.id).checked){
		
			document.forms[0].copyOrigToDest.value = '1';
		}
		
		else if(origUsage=='destination' &&document.getElementById('typedestination' + this.toolTip.id).checked && document.getElementById('typeorigin' + this.toolTip.id).checked){
		
			document.forms[0].copyDestToOrig.value = '1';
		}
	}
	// submit new points - stops and pois
	else{
		switch (type) {
			case 'coord':
				document.getElementById('nameInfo_' + usage).value = id +':' + name ; 
				document.getElementById('typeInfo_' + usage).value = 'coord';
				break;
			case 'poi':
			case 'poi_point':
			case 'poi_area':
				// add origin and destination 
				if(usage=='origDest'){
				
					document.getElementById('placeInfo_origin').value = omc + ':-1';
					if(id.indexOf('vvs-')!='-1'){
						document.getElementById('nameInfo_origin').value = id.substring(4,20);
					}
					else{
						document.getElementById('nameInfo_origin').value = id;
					}
					document.getElementById('typeInfo_origin').value = 'poiID';
					
					document.getElementById('placeInfo_destination').value = omc + ':-1';
					if(id.indexOf('vvs-')!='-1'){
						document.getElementById('nameInfo_destination').value = id.substring(4,20);
					}
					else{
						$('nameInfo_destination').value = id;
					}
					$('typeInfo_destination').value = 'poiID';
				}
				else{
					document.getElementById('placeInfo_' + usage).value = omc + ':-1';
					if(id.indexOf('vvs-')!='-1'){
						$('nameInfo_' + usage).value = id.substring(4,20);
					}
					else{
						$('nameInfo_' + usage).value = id;
					}
					$('typeInfo_' + usage).value = 'poiID';
					
				}
				break;
			default:	
				// add origin and destination 
				if(usage=='origDest'){
					$('placeInfo_origin').value = '';
					$('nameInfo_origin').value = id;
					$('typeInfo_origin').value = 'stopID';
					
					$('placeInfo_destination').value = '';
					$('nameInfo_destination').value = id;
					$('typeInfo_destination').value = 'stopID';
				}
				else{
					$('placeInfo_' + usage).value = '';
					$('nameInfo_' + usage).value = id;
					$('typeInfo_' + usage).value = 'stopID';
				}
		} 
	}
	
	// store map centre and zoomlevel
	storeMapCentreAndZoomlevel();
	
	$('itdLPxx_adoptPoint').value = ''
	document.forms[0].execInst.value = 'verifyOnly';	
	$('itdLPxx_hiddenMarker').value = 'true';
    
     sendForm()
};

// set the right mot type for each partial route 
MDVToolTipHelper.prototype.setMotType = function(type) {
	
	if(mapLanguage=='en'){
		var typeText= 'only public transport';
		
		if(type=='102'){
			typeText='take my bike on PT';
		}
		else if(type=='107'){
			typeText='cycle route';
		} 
	}
	else{
		var typeText= 'Nur öffentliche Verkehrsmittel';
		
		if(type=='102'){
			typeText='Fahrradmitnahme';
		}
		else if(type=='107'){
			typeText='Radstrecke';
		} 
	}
	
	document.getElementById('itdLPxx_hiddenMarker').value = 'false';

	if(mdvToolTip.toolTip.helper.usage=='origin'){
		document.forms[0].adoptOrigMOT.value = type;
		document.getElementById('motOrigin').innerHTML = typeText;
	}
	else{
		var viaIndex = parseInt(mdvToolTip.toolTip.helper.usage.replace('via', ''))-1;
		
		if(viaIndex >= 0){
			document.getElementById('motVia' + viaIndex).innerHTML = typeText;
			document.getElementById('adoptViaMOT_' + viaIndex).value = viaIndex + ':' + type;
		}
	}

	this.toolTip.setFixed(false);
	this.toolTip.hide()
}

MDVToolTipHelper.prototype.checkBox = function(obj) {

    if(obj.checked==true && obj.id.indexOf('origin')!= -1){
        mdvToolTip.toolTip.helper.usage='origin';
    }
    else if(obj.checked==false && obj.id.indexOf('origin')!= -1 
                && mdvToolTip.toolTip.helper.usage == 'origDest'){
        mdvToolTip.toolTip.helper.usage='destination';
    }
    else if(obj.checked==true && obj.id.indexOf('destination')!= -1){
        mdvToolTip.toolTip.helper.usage='destination';
    }
    else if(obj.checked==false && mdvToolTip.toolTip.helper.usage == 'origDest' 
                && obj.id.indexOf('destination')!= -1){
        mdvToolTip.toolTip.helper.usage='origin';
    }
    else if(obj.checked==true && obj.id.indexOf('via')!= -1){
        mdvToolTip.toolTip.helper.usage='viaX';
         
    }
   
    checkApplyButton(obj.id);
}

// ==================================================================
// Trip request context menu functions.
// ==================================================================

// The context menu handler gets the mouse coordinates and the centre coordinates 
MDVMapHelper.prototype.ContextMenuHandler = function(id, status, obj) {

	if(headTab == 'net'){
		this.ctxMenu.div.style.display ='none'; 
	}
	else if(status == true){
		this.ctxMenu.div.style.display='block';
	}

	// delete hidden marker on polyline
	if(mdvJpMaps[currentMap] && mdvJpMaps[currentMap].polylineLayer && mdvJpMaps[currentMap].polylineLayer.markers[0]){
		mdvJpMaps[currentMap].polylineLayer.markers[0].toolTip.fixed = false;
		mdvJpMaps[currentMap].polylineLayer.removeAllMarkers();
	}

	// delete hidden via marker
	if(mdvJpMaps[currentMap] && mdvJpMaps[currentMap].viaMarkerLayer && mdvJpMaps[currentMap].viaMarkerLayer.markers[0]){
		mdvJpMaps[currentMap].viaMarkerLayer.markers[0].toolTip.fixed = false;
		mdvJpMaps[currentMap].viaMarkerLayer.removeAllMarkers();
	}
	
	if(status == true){
		ctxCoords = obj;
    }
}

// This context menu functions submits a selected point.
MDVMapHelper.prototype.setCoordinates = function() {
	setCoordinates('via');
};

// this function set the coordinates form the context menu 
function setCoordinates(usage) {

	if (mdvJpMaps[currentMap].mdvMap) {
	
		// text displayed in the GUI
		var text='';
		
		// store coordinates and type
		document.getElementById('nameInfo_' + usage).value = parseInt(ctxCoords.x) + ':' + parseInt(ctxCoords.y) + ':' + ctxCoords.mapName + ':' + text; 
		document.getElementById('typeInfo_' + usage).value = 'coord';
		document.getElementById('nameState_' + usage).value = 'notidentified';
		if (document.getElementById('placeState_' + usage))
			document.getElementById('placeState_' + usage).value = 'notidentified';
		if (document.getElementById('placeInfo_' + usage))
			document.getElementById('placeInfo_' + usage).value = '';
			
		document.getElementById('itdLPxx_odv_' + usage).value = parseInt(ctxCoords.x) + ':' + parseInt(ctxCoords.y) + ':' + ctxCoords.mapName + ':' + text; 
		
		//document.forms[0].via_index.value='empty';
		document.forms[0].itdLPxx_adoptPoint.value='inputField';
		
		document.getElementById('itdLPxx_mapCentre').value =  parseInt(ctxCoords.x) + ':' + parseInt(ctxCoords.y) + ':' + ctxCoords.mapName + ':' + text;
		document.getElementById('nameDisplay_via').value = text;
			
		mdvJpMaps[currentMap].mdvMap.mapper.style.cursor = 'wait';
		mdvJpMaps[currentMap].setViaMarker();
		mdvJpMaps[currentMap].mdvMap.mapper.style.cursor = 'default';
	
	}
};	

MDVMapHelper.prototype.setCoordinatesAfterDrag = function(id, msg, obj){

	var usage = obj.options.usage;

	// text displayed in the GUI
	var text = '';
		
	document.getElementById('itdLPxx_lastAddedPoint').value = usage;
		
	if(usage.indexOf('via')!='-1'){
		document.forms[0].via_index.value= parseInt(usage.substring(3)) -1;
		usage='via';
	}
	else if(usage.indexOf('destination')!='-1'){
		usage='destination';
	}
		
	// store coordinates and type
	document.getElementById('nameInfo_' + usage).value = parseInt(obj.coords.x ) + ':' + parseInt(obj.coords.y) + ':' + obj.coords.mapName + ':' + text; 
	document.getElementById('typeInfo_' + usage).value = 'coord';
	document.getElementById('nameState_' + usage).value = 'notidentified';
	if (document.getElementById('placeState_' + usage)){
		document.getElementById('placeState_' + usage).value = 'notidentified';
	}
	if (document.getElementById('placeInfo_' + usage)){
		document.getElementById('placeInfo_' + usage).value = '';
	}
		
	document.getElementById('itdLPxx_odv_' + usage).value = parseInt(obj.coords.x) + ':' + parseInt(obj.coords.y) + ':' + obj.coords.mapName + ':' + text; 
	
	storeMapCentreAndZoomlevel();
    sendForm()
}


// resize map and update position of the scale 
MDVMapHelper.prototype.setViewport = function() {
	this.mdvMap.resize();
	this.scale.updatePosition(this.mdvMap.viewport.style.height);
}


// ==================================================================
// Map output functions.
// ==================================================================

// animation link 
MDVMapHelper.prototype.launchWizard = function(zoomLevel) {

	if (this.mdvMapTripsLoaded) {
		this.trips.launchWizard(zoomLevel);		
	}
};

// This function displays a journey on the map.
MDVMapHelper.prototype.displayJourney = function(sessionID, requestID, tripIndex, fullTrip) {

	if(!sessionID){
		sessionID = document.getElementById('sessionID').value
	}
	
	if(!requestID){
		requestID = document.getElementById('requestID').value
	}
	
	if(!tripIndex){
		tripIndex ='1'
	}

    var mdvMarkers = this.mdvMap.getLayer('mdvMarkers').getMarkers();
       
    this.mdvMap.getLayer('mdvMarkers').removeAllMarkers();
    this.mdvMap.tripIndex = tripIndex;
    
	this.trips.loadTrip(sessionID, requestID, tripIndex, fullTrip);
	this.mdvMapTripsLoaded = true;
}

// this function gets the proximity pois 
MDVMapHelper.prototype.getProxPOIs = function(radius){
    var host = 'XML_TRIP_REQUEST2';

    if(!radius){
        radius = '100';
    }
    
    
    if(radius == '0'){
        if (this.nearInfoLayer) {
            this.nearInfoLayer.removeAllMarkers();
            this.nearInfoLayer.update(); 
        }
    }
    else{

        if(mdvNetPath && mdvNetPath.pathId){
            host = 'XML_NETPATH_REQUEST';
            
        	var _params = { 
        		outputFormat: 'JSON',
        		sessionID:'0',
        		coordOutputFormatTail: '0',
        		pathId: mdvNetPath.pathId,
                purposeSuffix: 'RRP2',
                inclDrawClasses_1: '',
                inclFilter: '1',
                radius_1: radius,
                type_1: 'POI_AREA',
                inclPOIH_1:selSubCat,
                radius_2: radius,
                type_2: 'POI_POINT',
                inclPOIH_2: selSubCat
        	};
            
        }
        else{
        
        	var _params = { 
            	sessionID: document.getElementById('sessionID').value, 
            	requestID: document.getElementById('requestID').value,
                output: 'JSON',
        		command: 'NearInfo:' + this.mdvMap.tripIndex,
                purposeSuffix: 'RRP2',
                inclDrawClasses_1: '',
                inclFilter: '1',
                radius_1: radius,
                type_1: 'POI_AREA',
                inclPOIH_1: selSubCat,
                radius_2: radius,
                type_2: 'POI_POINT',
                inclPOIH_2: selSubCat
        	};
        
        }
        
    	var _ajax = mdvLib.ajax({ host: host, parameters: _params, onComplete: MDVEFAGetProxPOIs_onAjaxComplete.bind(this)});
    
    }

}

// this function display the proximity pois on map 
function MDVEFAGetProxPOIs_onAjaxComplete(request){

    this.nearInfoLayer = this.mdvMap.getLayer('nearInfo');

    if(!request){
        return false;
    }
    
    this.nearInfoLayer.removeAllMarkers();
    
    eval('efa = ' + request + ';');

    var allPins = efa.pins || efa.netPathInfo.pins;
    
    for(var i=0; i<allPins.length; i++) {
        var x = allPins[i].coords.split(',')[0];
        var y = allPins[i].coords.split(',')[1];
        var coord = new MDVCoordinates(this.mdvMap.config.params.mapName, x,y);
        
     //   if(selSubCat.indexOf(allPins[i].attrs[2].value + ':')!='-1'){
        var link = '';
        var address='';
            
        for (var ii=0; ii < allPins[i].attrs.length; ii++) {
            var a = allPins[i].attrs[ii];
            
            if (a.name == 'POI_LINK') { 		
                var linkText = a.value.substring(0, a.value.indexOf('$'));
                
                if(linkText.indexOf('Umgebungsplan') !='-1' && mapLanguage=='en'){
                    linkText = 'Local Map (PDF)'
                }
            
                link = link + '<a class="bold" href="' + a.value.substring(a.value.indexOf('$') +1) 
                       + '" target="_blank">' 
                       + linkText + '</a><br/>';
            }
            
            // add poi address to the tooltip 
            if (a.name == 'POI_ADDRESS') { 	
                address = a.value + '<br/>';
            }
        } 

        var desc = '<b>' + allPins[i].desc + '</b><br/>'
        var tool = this.mdvMap.createToolTip(new MDVPoint(218, 120), desc + address + link);
        
        var poiMarker = this.mdvMap.createMarker(coord, new MDVPoint(0.5, 0.5), this.getImage('nearbyPoi'));
            poiMarker.setToolTip(tool);
            poiMarker.nearbyPOI = true;;
        
       this.nearInfoLayer.addMarker(poiMarker); 
       
      // }
    }
        
    this.nearInfoLayer.update(); 

}

// This function clears all journeys on the map.
MDVMapHelper.prototype.clearJourney = function() {
	this.trips.clear();
}

/**
* MDVEFADepartureMonitor
*/
function MDVEFADepartureMonitor(id, url) {
	this.id 	= id;
	this.url 	= url;
}

MDVEFADepartureMonitor.prototype.getDepartures = function(identifier) {

	var _params = { 
		language: mapLanguage, 
		itdLPxx_id: identifier, 
		name_dm: this.id, 
		type_dm: 'stopID', 
		mode: 'direct', 
		limit: '5', 
		deleteAssignedStops_dm: '1'
	};
	
	var _ajax = mdvLib.ajax({ host: this.url, parameters: _params, onComplete: MDVEFADepartureMonitor_onAjaxComplete});
	
};

function MDVEFADepartureMonitor_onAjaxComplete(request) {
	if (request){
		MDVEFADepartureMonitor_populateTable(this.response);
	}
}

function MDVEFADepartureMonitor_populateTable(request) {

	if (request) {
	
		var id ='';
		
		if(request.xml.firstChild.nodeName=='table'){
			id = request.xml.firstChild.getAttribute('id');
		}
		else if(request.xml.lastChild.nodeName=='table'){
			id = request.xml.lastChild.getAttribute('id');
		}
		
		var text = request.text;

		if(document.getElementById('div_' + id)){
			var target = document.getElementById('div_' + id);
				target.innerHTML = text;
		}
	}
};

// MDVNetPathHelper
function MDVNetPathHelper(id) {
	this.pathId = id;
	this.savePathId = null;
	this.efaURLLite = '/lite/';
	this.sessionID = null;
	//this.selPathId = null;
}

MDVNetPathHelper.prototype.displayNetPath = function() {
	
	if(!this.savePathId){
		this.savePathId = this.pathId;
		selPathId = this.pathId;
	}

	var URL = this.efaURLLite + 'XML_NETPATH_REQUEST?';
	var _params = { 
		outputFormat: 'JSON',
        language: mapLanguage,
		sessionID:'0',
		coordOutputFormatTail: '0',
		pathId: this.pathId
	};
	
	var _ajax = mdvLib.ajax({ host: URL, parameters: _params, onComplete: onNetPathRequestCallback});
	
	if(currentMap=='navteq'){
		var URL2 = 'XSLT_NETPATH_REQUEST?';
		var _params2 = { 
			sessionID:'0',
			pathId: this.pathId,
            language: mapLanguage
		};
		var _ajax = mdvLib.ajax({ host: URL2, parameters: _params2, onComplete: changeEnquiryContent});
	}
}

// display the cylce path on the map
function onNetPathRequestCallback(request){

	if(!request){
		return false;
	}
	else{
		json = request;
	}
	
	eval('efa = ' + json + ';'); 
	
	$('routeName').innerHTML = '<strong>' + efa.netPathInfo.name + ' </strong>';
	$('routeLink').style.display='';
    
    $('netBody').href = $('netBody').href.replace('XXX', efa.netPathInfo.id);
    $('linkto').value = $('linkto').value.replace('XXX', efa.netPathInfo.id);
    
    $('netpathMailto').style.display='';
	
	mdvNetPath.sessionID = efa.parameters[1].value;
	
	var poly = mdvJpMaps[currentMap].mdvMap.createPolyline(efa.netPathInfo.pathCoord.path);
		poly.add('colour', mdvJpMaps[currentMap].mdvMap.config.params['path.polyline.color']);
		poly.add('opacity', mdvJpMaps[currentMap].mdvMap.config.params['path.polyline.opacity']);
		poly.add('weight', mdvJpMaps[currentMap].mdvMap.config.params['path.polyline.weight']);
	
	var tool = mdvJpMaps[currentMap].mdvMap.createToolTip('<b>' + efa.netPathInfo.name + '</b>');
		poly.setToolTip(tool);
		
	mdvJpMaps[currentMap].mdvMap.getLayer('polylines').removeAllPolylines();
	mdvJpMaps[currentMap].mdvMap.getLayer('polylines').addPolyline(poly);
	
	mdvJpMaps[currentMap].mdvMap.getLayer('polylines').polylines[0].getArrows()
	
	routePoly = mdvJpMaps[currentMap].mdvMap.getLayer('polylines').polylines[0];

	routePoly.arrows = routePoly.getArrows();
	
	mdvJpMaps[currentMap].mdvMap.getLayer('directions').polyNum = p;
	var r =  mdvJpMaps[currentMap].mdvMap.getLayer('polylines').polylines[0].getDirectionsNetPath();
	
	for (var d=0; d < r.length; d++) {
		var update = d == r.length-1 ? true : false;
		
		mdvJpMaps[currentMap].mdvMap.getLayer('directions').addMarker(r[d], update);
		
	} 
	
	mdvJpMaps[currentMap].mdvMap.getLayer('polylines').polylines[0].directions = r;
	
	var p = efa.netPathInfo.pathCoord.path;	
	
    x = p.split(' ')[0].split(',')[0];
    y = p.split(' ')[0].split(',')[1];
    coord = new MDVCoordinates(mdvJpMaps[currentMap].mdvMap.config.params.mapName, x,y);
	
    x1 = p.split(' ')[p.split(' ').length-1].split(',')[0];
    y1 = p.split(' ')[p.split(' ').length-1].split(',')[1];
    coord1 = new MDVCoordinates(mdvJpMaps[currentMap].mdvMap.config.params.mapName, x1,y1);

	
    var toolDest = mdvJpMaps[currentMap].mdvMap.createToolTip(new MDVPoint(118, 61), 'Ziel');
    var destMarker = mdvJpMaps[currentMap].mdvMap.createMarker(coord1, new MDVPoint(0.7, 0.5), mdvJpMaps[currentMap].getImage('destination1'));
    destMarker.setToolTip(toolDest);
    mdvJpMaps[currentMap].mdvMap.getLayer('vvsMarkers').addMarker(destMarker);
	
    var toolOrig = mdvJpMaps[currentMap].mdvMap.createToolTip(new MDVPoint(118, 61), 'Start');
    var origMarker = mdvJpMaps[currentMap].mdvMap.createMarker(coord, new MDVPoint(0.5, 0.5), mdvJpMaps[currentMap].getImage('origin'));
    origMarker.setToolTip(toolOrig);
    mdvJpMaps[currentMap].mdvMap.getLayer('vvsMarkers').addMarker(origMarker);
	
	var coords = new Array();
	coords['x'] =  new Array();
	coords['y'] =  new Array();
	
	var coordArray = p.split(' ');
	for (var i = 0; i < coordArray.length; i++) {
		var couple = coordArray[i].split(',');
		if (couple[0] && couple[1]) {
			coords['x'].push(couple[0]);
			coords['y'].push(couple[1]);
		}
	}
    
	beautifyMap(coords);
	mdvJpMaps[currentMap].mdvMap.update();
    
    $('distMarkerBox').style.display='block';
	
    tripPath = p;
    //addDistanceMarker(p)
}

function beautifyMap(coords) {

	var x = coords['x'];
	var y = coords['y'];
	
	x.sort(MDVMap_NumSort);
	y.sort(MDVMap_NumSort);
	
	var width  = x[x.length-1] - x[0];
	var height = y[y.length-1] - y[0];
	var newX   = parseInt(x[0]) + Math.floor(0.5 + width/2);
	var newY   = parseInt(y[0]) + Math.floor(0.5 + height/2);     	
	
	var centre = new MDVCoordinates(mdvJpMaps[currentMap].mdvMap.config.get('mapName'),
		newX, newY);
		
	var zoom = 0;
	var extd = mdvJpMaps[currentMap].mdvMap.getViewportExtends();
	
	var zls = mdvJpMaps[currentMap].mdvMap.config.getZoomLevels();
	for (var i=zls.length-1; i >= 0; i--) {
		var zl = zls[i];
		var bWidth = false;
		var bHeight = false;
		
		var vpTiles = new MDVPoint(extd.width / parseInt(zl.get('tileSizeX')),
			extd.height / parseInt(zl.get('tileSizeY')));
		
		var numTiles = new MDVPoint(zl.get('numberOfTilesX'), zl.get('numberOfTilesY'));
		var realExtends = new MDVPoint(zl.get('realWidth'), zl.get('realHeight'));
		
		var tileSize = new MDVPoint(Math.floor(0.5 + realExtends.x / numTiles.x),
			Math.floor(0.5 + realExtends.y / numTiles.y));
			
		var real = new MDVPoint(tileSize.x * vpTiles.x, tileSize.y * vpTiles.y);    		
		
		if (real.x > (width*1.15) && !bWidth) {
			zoom = i;
			bWidth = true;
		}		

		if (real.y > (height*1.15) && !bHeight) {
			zoom = i;
			bHeight = true;
		}
		
		if (bWidth && bHeight)
			break;
	}

	mdvJpMaps[currentMap].mdvMap.setCentre(centre);
	mdvJpMaps[currentMap].mdvMap.setZoomLevel(zoom);
};

MDVMapHelper.prototype.launchWizardNetPath = function (zoomLevel) {
	mdvTimer.remove(this.wizardJobID);
	this.mdvMap.stepPx = 4;
	this.mdvMap.stepTime = 40;
	this.mdvMap.cancelMoveBySeq();
	this.wizardJobID = null;
	this.wizardScreenPlay = new Array();

  	if (this.mdvMap.getLayer('polylines').polylines.length > 0) {
		if (zoomLevel >= 0)
	  		this.mdvMap.setZoomLevel(zoomLevel);
  		this.mdvMap.setCentre(this.mdvMap.getLayer('polylines').polylines[0].getAllCoords()[0].clone());
  		this.mdvMap.update();
  	} 	
	
	var _polyline = this.mdvMap.getLayer('polylines').polylines[0];
	this.wizardScreenPlay.push({ object: _polyline, type: 'polyline', state: true, timeout: 10 });
  	
	this.wizardIndex = 0;
  	this.wizardJobID = mdvTimer.add(1, this, this.wizardRunNetPath, [null, null, null]);
  };
  
 MDVMapHelper.prototype.wizardRunNetPath = function(id, msg, obj) {  	
  	var _sp = this.wizardScreenPlay[this.wizardIndex];
  	this.wizardIndex++; 
  	
  	if (id == MDVEvent_ROUTE_TRACE_FINISHED)
  		this.mdvMap.events.deregisterEvent(MDVEvent_ROUTE_TRACE_FINISHED, this, this.wizardRunNetPath);
  	
  	if (_sp) {  	
  		switch (_sp.type) {
  			case 'marker':
  				if (_sp.state)
					_sp.object.toolTip.display();
				else
					_sp.object.toolTip.hide();

				this.wizardJobID = mdvTimer.add(_sp.timeout, this, this.wizardRunNetPath, [null, null, null]);
  			break;
  			default:  				
  				this.mdvMap.events.registerEvent(MDVEvent_ROUTE_TRACE_FINISHED, this, this.wizardRunNetPath);
  				var coords = _sp.object.getAllCoords();
  				var mrkr = this.mdvMap.config.get('imagePath') + 'mot102_follow.gif';;
				
				this.mdvMap.wizardSetMotIcon(mrkr);
  				this.wizardJobID = mdvTimer.add(_sp.timeout, this, this.wizardMoveBySeqNetPath, [coords]);
  			break;
  		}

  	}  	
  };
  
MDVMapHelper.prototype.wizardMoveBySeqNetPath = function (coords, marker) {
	this.mdvMap.moveBySeq(coords, marker);
};


// this function gets the proximity pois 
MDVMapHelper.prototype.getCallABikes = function(){
    //var host = '/lite/XSLT_COORD_REQUEST';
    var host = 'XML_COORD_REQUEST';
    
    if( $('callABike').src.indexOf('pressed')!='-1'){
         $('callABike').src = 'images/icon.callabike.gif';
    
        this.mdvMap.getLayer('mdvMarkers').removeAllMarkers()
    
    }
    else{

        var vpReal = this.mdvMap.getViewportRealExtends();
      	var radius = Math.floor(0.5 + Math.sqrt((Math.pow(vpReal.width/2, 2) + Math.pow(vpReal.height/2, 2))));
        var centre = this.mdvMap.getCentre();
        var coord = Math.floor(centre.x + 0.5) + ':' + Math.floor(centre.y + 0.5) + ':' + centre.mapName;
        
        var _params = { 
            outputFormat: 'JSON',
            coord: coord, 
            inclFilter: 1, 
            purpose: '', 
            max: -1, 
            coordListFormat: 'STRING', 
            itdLPxx_mdvMapName: 'mdvMap_' + this.mdvMap.getName(), 
            coordListOutputFormat: 'STRING',
            inclDrawClasses_1: '',
            inclFilter: '1',
            radius_1: radius,
            type_1: 'CALL_A_BIKE' 
        };
        
    	var _ajax = mdvLib.ajax({ host: host, parameters: _params, onComplete: MDVEFAGetCallABikes_onAjaxComplete.bind(this)});
    
    }

}

// this function display the proximity pois on map 
function MDVEFAGetCallABikes_onAjaxComplete(request){
 	var json = null;
 	var efa = null;

    if(!request){
        return false;
    }

    eval('efa = ' + request + ';');

    this.mdvMap.getLayer('mdvMarkers').removeAllMarkers()
    
    if(!efa.pins){
        return false;
    }
    
	var allPins = [];
	 
	if (efa.pins.pin) {
		allPins.push(efa.pins.pin);
	} 
    else {
		allPins = efa.pins;
	}
    
    $('callABike').src = 'images/call_a_bike_pressed.gif';

    for(var i=0; i<allPins.length; i++) {
        
        var x = allPins[i].coords.split(',')[0];
        var y = allPins[i].coords.split(',')[1];
        var coord = new MDVCoordinates(this.mdvMap.config.params.mapName, x,y);
        var nBikes = '-';
        var street1 = '';
        var street2 = '';
        var nFreeSlots = '';
        
        for(var ii =0; ii < allPins[i].attrs.length;ii++){
            if(allPins[i].attrs[ii].name == 'CAB_AVAILABLE_BIKES'){
                nBikes = allPins[i].attrs[ii].value;
                //nFreeSlots = '<br/>Aktuell freie Stellplätze ' + allPins[i].attrs[ii].value;
            }
            else if(allPins[i].attrs[ii].name == 'CAB_STREETNAME1'){
                street1 = allPins[i].attrs[ii].value + ' ';
            }
            else if(allPins[i].attrs[ii].name == 'CAB_STREETNAME2'){
                street2 = allPins[i].attrs[ii].value;
            }
            else if(allPins[i].attrs[ii].name == 'CAB_FREE_SLOTS'){
                nFreeSlots = '<br/><span style="color:#5292CE">Aktuell freie Stellplätze: ' + allPins[i].attrs[ii].value + '</span>';
            }
            
        }
        
        var txt = street1 + street2 + '<br/><span style="color:#e20216">Aktuell verfügbare Räder: ' + nBikes + '</span>';
            txt += nFreeSlots;
        var tool = this.mdvMap.createToolTip(new MDVPoint(218, 206), '<b>' + txt + '</b>');
        var poiMarker = this.mdvMap.createMarker(coord, new MDVPoint(0.5, 0.5), this.getImage('callabike'));
        
            poiMarker.setToolTip(tool);
            poiMarker.nearbyPOI = true;
        
        this.mdvMap.getLayer('mdvMarkers').addMarker(poiMarker); 
    }
        
    this.mdvMap.getLayer('mdvMarkers').update(); 

}

//this function creates the wait div 
MDVMapHelper.prototype.displayWaitDiv = function (bool) {

	if (bool === false) {
		document.body.style.cursor = 'default'  
		return;
	}
	else if(bool === true) {
		document.body.style.cursor = 'wait'  
	}
};

MDVMapHelper.prototype.zoomCoord = function (coordX, coordY, poiID) {

    var coord = new MDVCoordinates(mdvJpMaps[currentMap].mdvMap.config.params.mapName, coordX, coordY);
    
	this.mdvMap.setCentre(coord);
    
	if(mdvJpMaps[currentMap].hiddenMarker && mdvJpMaps[currentMap].hiddenMarker.coords){
		mdvJpMaps[currentMap].hiddenMarker.coords.x = coordX;
		mdvJpMaps[currentMap].hiddenMarker.coords.y = coordY;
	}
	else{
	    mdvJpMaps[currentMap].hiddenMarker = mdvJpMaps[currentMap].mdvMap.createMarker(coord, new MDVPoint(0.5, 0.5), 'images/mdvMap/stopSymbols/origin.gif');
		mdvJpMaps[currentMap].mdvMap.markerLayer.addMarker(mdvJpMaps[currentMap].hiddenMarker);
	} 
    
    this.mdvMap.setZoomLevel(5);
	this.mdvMap.update()

}


MDVMapHelper.prototype.setBikeMarker = function (coordX, coordY) {

    var coord = new MDVCoordinates(mdvJpMaps[currentMap].mdvMap.config.params.mapName, coordX, coordY);
	
	 if(mdvJpMaps[currentMap].hiddenMarker){
		mdvJpMaps[currentMap].hiddenMarker.coords.x = coordX;
		mdvJpMaps[currentMap].hiddenMarker.coords.y = coordY;
	}
	else{
	    mdvJpMaps[currentMap].hiddenMarker = mdvJpMaps[currentMap].mdvMap.createMarker(coord, new MDVPoint(0.5, 0.5), 'images/mdvMap/elevationMarker.gif');
		mdvJpMaps[currentMap].mdvMap.markerLayer.addMarker(mdvJpMaps[currentMap].hiddenMarker);
	}
	
	mdvJpMaps[currentMap].mdvMap.setCentre(coord);

	mdvJpMaps[currentMap].mdvMap.update()

}