
function DrawAllDetailPushpins(){

	if (xmlHttp.readyState == 4){
		
		map.DeleteAllShapes();
		var data2Draw=xmlDoc.getElementsByTagName("VVK");
		var drawnItems = '';

		var curPushpins = 0;
		for(var i=0;i<data2Draw.length;i++){
			try{
				var curData = data2Draw[i];
				var y = curData.getElementsByTagName('Breitengrad')[0].text.replace(',', '.') * 1;
				var x = curData.getElementsByTagName('Laengengrad')[0].text.replace(',', '.') * 1;

				try{
					var infoText = curData.getElementsByTagName('Strasse')[0].text + '<br>' 
						+ curData.getElementsByTagName('PLZ')[0].text + ' ' + curData.getElementsByTagName('Ort')[0].text;
						if(curData.getElementsByTagName('Telefon').length > 0 && curData.getElementsByTagName('Telefon')[0].text.length > 0)infoText += '<br>Telefon: ' + curData.getElementsByTagName('Telefon')[0].text;
						if(curData.getElementsByTagName('Fax').length > 0 && curData.getElementsByTagName('Fax')[0].text.length > 0)infoText += '<br>Fax: ' + curData.getElementsByTagName('Fax')[0].text;
						if(curData.getElementsByTagName('Email').length > 0 && curData.getElementsByTagName('Email')[0].text.length > 0)infoText += '<br>Email: <a href="mailto:' + curData.getElementsByTagName('Email')[0].text + '">' + curData.getElementsByTagName('Email')[0].text + '</a>';
						if(curData.getElementsByTagName('Website').length > 0 && curData.getElementsByTagName('Website')[0].text.length > 0)infoText += '<br>Webseite: <a href="' + curData.getElementsByTagName('Website')[0].text + '" target="_blank">' + curData.getElementsByTagName('Website')[0].text + '</a>';
					
					CreatePushPin(i, 
						curData.getElementsByTagName('Breitengrad')[0].text,
						curData.getElementsByTagName('Laengengrad')[0].text,
						curData.getElementsByTagName('Name')[0].text,
						infoText);
					
					drawnItems += curData.getElementsByTagName('Name')[0].text;
					curPushpins++;
					//if(curPushpins>maxPushpinsToDraw)return;							

				}catch(e){
					//alert('error');
				}
			}catch(e){
				//alert('error');
			}
		}
	}			
}



function DrawDetailPushpins(left, top, right, bottom)
{
	if (xmlHttp.readyState == 4){
		
		map.DeleteAllShapes();
		
		//First of all, take the middle of the card and draw there. If there is more posible to draw, then draw this afterwards
		
		
		var shortLeft = left - ((left-right) / 4);
		var shortRight = right + ((left-right) / 4);
		var shortTop = top - ((top-bottom) / 4);
		var shortBottom = bottom + ((top-bottom) / 4);
		//AddPolygon(shortLeft, shortTop, shortRight, shortBottom);
		
		
		var data2Draw=getElementsByXPath(xmlDoc, "VVK[Breitengrad < " + shortTop + " and Breitengrad > " + shortBottom + " and Laengengrad > " + shortLeft + " and Laengengrad < " + shortRight + "]");
		if(data2Draw.length==undefined){
		    //we dont have a list, so lets take the whole list and filter it within the loop. this is the firefox- workaround ;-)
		    data2Draw = xmlDoc.getElementsByTagName("VVK");
		}

		var drawnItems = '';

		var curPushpins = 0;
		for(var i=0;i<data2Draw.length;i++){
			try{
				var curData = data2Draw[i];
				var y = curData.getElementsByTagName('Breitengrad')[0].text.replace(',', '.') * 1;
				var x = curData.getElementsByTagName('Laengengrad')[0].text.replace(',', '.') * 1;
				//alert(x + ' ' + y + ' ' + left + ' ' + top + ' ' + right + ' ' + bottom);
				
				if(x>shortLeft && x<shortRight && y<shortTop && y>shortBottom){
					try{
						var infoText = curData.getElementsByTagName('Strasse')[0].text + '<br>' 
							+ curData.getElementsByTagName('PLZ')[0].text + ' ' + curData.getElementsByTagName('Ort')[0].text;
							if(curData.getElementsByTagName('Telefon').length > 0 && curData.getElementsByTagName('Telefon')[0].text.length > 0)infoText += '<br>Telefon: ' + curData.getElementsByTagName('Telefon')[0].text;
							if(curData.getElementsByTagName('Fax').length > 0 && curData.getElementsByTagName('Fax')[0].text.length > 0)infoText += '<br>Fax: ' + curData.getElementsByTagName('Fax')[0].text;
							if(curData.getElementsByTagName('Email').length > 0 && curData.getElementsByTagName('Email')[0].text.length > 0)infoText += '<br>Email: <a href="mailto:' + curData.getElementsByTagName('Email')[0].text + '">' + curData.getElementsByTagName('Email')[0].text + '</a>';
							if(curData.getElementsByTagName('Website').length > 0 && curData.getElementsByTagName('Website')[0].text.length > 0)infoText += '<br>Webseite: <a href="http://' + curData.getElementsByTagName('Website')[0].text + '" target="_blank">' + curData.getElementsByTagName('Website')[0].text + '</a>';
						
						CreatePushPin(i, 
							curData.getElementsByTagName('Breitengrad')[0].text,
							curData.getElementsByTagName('Laengengrad')[0].text,
							curData.getElementsByTagName('Name')[0].text,
							infoText);
						
						drawnItems += curData.getElementsByTagName('ID')[0].text+',';
						curPushpins++;
						if(curPushpins>=maxPushpinsToDraw)return curPushpins;							

					}catch(e){
						//alert('error');
					}
				}
			}catch(ea){
				//alert('error in outer loop');						
			}
		}

		//since we are still in the function, lets draw the rest of the data until we reach the pushpin- limit::
		
		var data2Draw=getElementsByXPath(xmlDoc, "VVK[Breitengrad < " + top + " and Breitengrad > " + bottom + " and Laengengrad > " + left + " and Laengengrad < " + right + "]");
		if(data2Draw.length==undefined){
		    //we dont have a list, so lets take the whole list and filter it within the loop. this is the firefox- workaround ;-)
		    data2Draw = xmlDoc.getElementsByTagName("VVK");
		}
		
		/*
		var detail = confirm(curPushpins + ' ' + data2Draw.length);
		if(detail)alert('drawnItems:' + drawnItems);
		*/
		for(var i=0;i<data2Draw.length;i++){
			try{
				var curData = data2Draw[i];
				var y = curData.getElementsByTagName('Breitengrad')[0].text.replace(',', '.') * 1;
				var x = curData.getElementsByTagName('Laengengrad')[0].text.replace(',', '.') * 1;
				var name = curData.getElementsByTagName('Name')[0].text;
				var ID = curData.getElementsByTagName('ID')[0].text;
				
				/*
				if(detail){
				    alert(name + ' already drawn:' + (drawnItems.indexOf(ID+',')>=0));
				    alert(x + ' ' + y + ' ' + left + ' ' + top + ' ' + right + ' ' + bottom);
				}
				*/
				if((drawnItems.indexOf(ID+',')<0) && x>left && x<right && y<top && y>bottom){
					try{
						var infoText = curData.getElementsByTagName('Strasse')[0].text + '<br>' 
							+ curData.getElementsByTagName('PLZ')[0].text + ' ' + curData.getElementsByTagName('Ort')[0].text;
							if(curData.getElementsByTagName('Telefon').length > 0 && curData.getElementsByTagName('Telefon')[0].text.length > 0)infoText += '<br>Telefon: ' + curData.getElementsByTagName('Telefon')[0].text;
							if(curData.getElementsByTagName('Fax').length > 0 && curData.getElementsByTagName('Fax')[0].text.length > 0)infoText += '<br>Fax: ' + curData.getElementsByTagName('Fax')[0].text;
							if(curData.getElementsByTagName('Email').length > 0 && curData.getElementsByTagName('Email')[0].text.length > 0)infoText += '<br>Email: <a href="mailto:' + curData.getElementsByTagName('Email')[0].text + '">' + curData.getElementsByTagName('Email')[0].text + '</a>';
							if(curData.getElementsByTagName('Website').length > 0 && curData.getElementsByTagName('Website')[0].text.length > 0)infoText += '<br>Webseite: <a href="http://' + curData.getElementsByTagName('Website')[0].text + '" target="_blank">' + curData.getElementsByTagName('Website')[0].text + '</a>';
						
						CreatePushPin(i, 
							curData.getElementsByTagName('Breitengrad')[0].text,
							curData.getElementsByTagName('Laengengrad')[0].text,
							name,
							infoText);

						
						curPushpins++;
						if(curPushpins>=maxPushpinsToDraw)return curPushpins;							

					}catch(e){
						//alert('error');
					}
				}
			}catch(ea){
				//alert('error in outer loop');						
			}
		}
		return curPushpins;
		
	}
}


function DrawOverviewPushpins(left, top, right, bottom)
{
	if (xmlHttp.readyState == 4){
		
		map.DeleteAllShapes();
		
		//First of all, take the middle of the card and draw there. If there is more posible to draw, then draw this afterwards
		
		var shortLeft = left - ((left-right) / 4);
		var shortRight = right + ((left-right) / 4);
		var shortTop = top - ((top-bottom) / 4);
		var shortBottom = bottom + ((top-bottom) / 4);
		
		//var data2Draw=xmlOverviewDoc.getElementsByTagName("VVKOrt[Breitengrad < " + shortTop + " and Breitengrad > " + shortBottom + " and Laengengrad > " + shortLeft + " and Laengengrad < " + shortRight + "]");
		var data2Draw = getElementsByXPath(xmlOverviewDoc, "VVK[Breitengrad < " + shortTop + " and Breitengrad > " + shortBottom + " and Laengengrad > " + shortLeft + " and Laengengrad < " + shortRight + "]");
		if(data2Draw.length==undefined){
		    //we dont have a list, so lets take the whole list and filter it within the loop. this is the firefox- workaround ;-)
		    data2Draw = xmlOverviewDoc.getElementsByTagName("VVK");
		}
		var drawnItems = '';
		
		var curPushpins = 0;
	
		for(var i=0;i<data2Draw.length;i++){
			try{
				var curData = data2Draw[i];
				var y = curData.getElementsByTagName('Breitengrad')[0].text.replace(',', '.') * 1;
				var x = curData.getElementsByTagName('Laengengrad')[0].text.replace(',', '.') * 1;
				//alert(x + ' ' + y + ' ' + left + ' ' + top + ' ' + right + ' ' + bottom);
				
				if(x>shortLeft && x<shortRight && y<shortTop && y>shortBottom){
					try{
						var infoText = '<br/>';
						if(curData.getElementsByTagName('Anzahl')[0].text*1 > 1){
							infoText = curData.getElementsByTagName('Anzahl')[0].text + ' Vorverkaufsstellen';
						}else{
							infoText = curData.getElementsByTagName('Anzahl')[0].text + ' Vorverkaufsstelle';
						}
						
						CreatePushPin(i, 
							curData.getElementsByTagName('Breitengrad')[0].text,
							curData.getElementsByTagName('Laengengrad')[0].text,
							curData.getElementsByTagName('Ort')[0].text,
							infoText, 'images/circle.png');
						
						curPushpins++;
						drawnItems += curData.getElementsByTagName('Ort')[0].text;
						if(curPushpins>=maxPushpinsToDraw)return curPushpins;							
					}catch(e){
				        //alert('error in inner loop');						
				        return curPushpins;
					}
				}else{
					//alert(x + ' ' + y + ' ' + left + ' ' + right + ' ' + top + ' ' + bottom);
				}
			}catch(ea){
				//alert('error in outer loop');						
				return curPushpins;
			}
		}
		
		//we are still in this function, so not all of the pushpins, that could have been painted were so...
		var data2Draw=getElementsByXPath(xmlOverviewDoc, "VVKOrt[Breitengrad < " + top + " and Breitengrad > " + bottom + " and Laengengrad > " + left + " and Laengengrad < " + right + "]");
		if(data2Draw.length==undefined){
		    //we dont have a list, so lets take the whole list and filter it within the loop. this is the firefox- workaround ;-)
		    data2Draw = xmlOverviewDoc.getElementsByTagName("VVKOrt");
		}
	
		for(var i=0;i<data2Draw.length;i++){
			try{
			
				var curData = data2Draw[i];
				var y = curData.getElementsByTagName('Breitengrad')[0].text.replace(',', '.') * 1;
				var x = curData.getElementsByTagName('Laengengrad')[0].text.replace(',', '.') * 1;
				var name = curData.getElementsByTagName('Ort')[0].text;
				//alert(x + ' ' + y + ' ' + left + ' ' + top + ' ' + right + ' ' + bottom);
				
				if((drawnItems.indexOf(name)<0) && x>left && x<right && y<top && y>bottom){
					try{
						var infoText = '<br/>';
						if(curData.getElementsByTagName('Anzahl')[0].text*1 > 1){
							infoText = curData.getElementsByTagName('Anzahl')[0].text + ' Vorverkaufsstellen';
						}else{
							infoText = curData.getElementsByTagName('Anzahl')[0].text + ' Vorverkaufsstelle';
						}
						
						CreatePushPin(i, 
							curData.getElementsByTagName('Breitengrad')[0].text,
							curData.getElementsByTagName('Laengengrad')[0].text,
							name,
							infoText, 'images/circle.png');
						
						curPushpins++;
						if(curPushpins>=maxPushpinsToDraw)return curPushpins;							
					}catch(e){
						//alert('error');
					}
				}else{
					//alert(x + ' ' + y + ' ' + left + ' ' + right + ' ' + top + ' ' + bottom);
				}
			}catch(ea){
				//alert('error in outer loop');						
			}
		}
		return curPushpins;
	}
}

var autoJustifyMaxPushpins = true;
function drawCurrentScreenPushpins(e, exitAfterDrawing){
	var curPos = map.GetMapView();
	var startTime = new Date();
	var drawnPushpins = 0;
	if(map.GetZoomLevel()==8){ // || map.GetZoomLevel()==7 || map.GetZoomLevel()==6){
		drawnPushpins = DrawOverviewPushpins(curPos.TopLeftLatLong.Longitude, curPos.TopLeftLatLong.Latitude, curPos.BottomRightLatLong.Longitude, curPos.BottomRightLatLong.Latitude);	
        mainShapeLayer.SetClusteringConfiguration(VEClusteringType.None);
	}else if(map.GetZoomLevel()>=9){
		drawnPushpins = DrawDetailPushpins(curPos.TopLeftLatLong.Longitude, curPos.TopLeftLatLong.Latitude, curPos.BottomRightLatLong.Longitude, curPos.BottomRightLatLong.Latitude);
		mainShapeLayer.SetClusteringConfiguration(VEClusteringType.Grid);
	}else{
		map.DeleteAllShapes();
        mainShapeLayer.SetClusteringConfiguration(VEClusteringType.None);
	}
    var endTime = new Date();
    var diff = endTime - startTime;
	if(!exitAfterDrawing && autoJustifyMaxPushpins && drawnPushpins>0){
	    //check if the limit of pushpins to draw was rendered within one second.
	    var sel = document.getElementById("selMaxPushpins");
        if((drawnPushpins >= maxPushpinsToDraw - 20) && diff < 700){
            //if the rendering was fast enough then choose one setting higher
            if(sel.selectedIndex < sel.length-1)sel.selectedIndex += 1;
            maxPushpinsToDraw=sel.options[sel.selectedIndex].text;
            //render again
            drawCurrentScreenPushpins(null, true);
        }else if(diff > 1300){
            //if the rendering took more than one second, lets choose a setting lowser
            if(sel.selectedIndex > 0)sel.selectedIndex -= 1;
            maxPushpinsToDraw=sel.options[sel.selectedIndex].text;
            //do not render again since the last rendering took long enough!
        }
	}
	if(drawnPushpins>0){
        window.status = drawnPushpins + ' pushpins drawn within ' + (diff / 1000) + ' seconds';
	}
}


