
	var GROUP_A = 2;
	var GROUP_B = 1;
	//var map;
	var mapTenders;
	var xxx;
	
	var mapVendors;
	var businessCards = new Array();
	var tenderCards = new Array();
	var geocoder = new GClientGeocoder();	
	var countryCode = new Array("de","at","ch","");	
	
	// Define business card object
	function BusinessCard() {}

	// Define tender card object
	function TenderCard() {}
	
	
	/* ==================================================================
	   GENERAL functions
	   ==================================================================
	 */
	function createIcon() {
		var icon = new GIcon();
		icon.image = "../../../img/maps/mm_20_orange.gif";
		icon.shadow = "../../../img/maps/mm_20_shadow.png";
		icon.iconSize = new GSize(12, 20);
		icon.shadowSize = new GSize(22, 20);
		icon.iconAnchor = new GPoint(6, 20);
		icon.infoWindowAnchor = new GPoint(5, 1);
		return icon;
	}
	function createLockIcon() {
        var icon = new GIcon();
        icon.image = "../../../img/lock_1.gif";
        icon.shadow = "../../../img/maps/mm_20_shadow.png";
        icon.iconSize = new GSize(12, 14);
        icon.shadowSize = new GSize(22, 14);
        icon.iconAnchor = new GPoint(6, 14);
        icon.infoWindowAnchor = new GPoint(5, 1);
        return icon;
    }
	function createClockIcon() {
		var icon = new GIcon();
		icon.image = "../../../img/maps/clock_on.gif";
		icon.shadow = "../../../img/maps/clock_shadow.png";
		icon.iconSize = new GSize(14, 14);
		icon.shadowSize = new GSize(23, 11);
		icon.iconAnchor = new GPoint(6, 20);
		icon.infoWindowAnchor = new GPoint(5, 1);
		return icon;
	}
	
	function createRankingIcon() {
		var icon = new GIcon();
		icon.image = "../../../img/maps/ranking_yes.gif";
		icon.shadow = "../../../img/maps/seal_mini_shadow.png";
		icon.iconSize = new GSize(23, 10);
		icon.shadowSize = new GSize(30, 9);
		icon.iconAnchor = new GPoint(6, 20);
		icon.infoWindowAnchor = new GPoint(5, 1);
		return icon;
	}
	function createFavoriteIcon() {
		var icon = new GIcon();
		icon.image = "../../../img/maps/favo_user.gif";
		icon.shadow = "../../../img/maps/favo_shadow.png";
		icon.iconSize = new GSize(21, 20);
		icon.shadowSize = new GSize(27,14);
		icon.iconAnchor = new GPoint(6, 20);
		icon.infoWindowAnchor = new GPoint(5, 1);
		return icon;
	}	
	
	// Set different colors for markers
	
	var iconLocked = createLockIcon();    iconLocked.image = "../../../img/lock_1.gif"; 
	
	var iconRed = createIcon();	iconRed.image = "../../../img/maps/mm_20_red.gif";
	var iconDarkOrange = createIcon(); iconDarkOrange.image = "../../../img/maps/mm_20_darkorange.gif";
	var iconOrange = createIcon(); iconOrange.image = "../../../img/maps/mm_20_orange.gif";
	var iconWhite = createIcon(); iconWhite.image = "../../../img/maps/mm_20_white.gif";

    var iconClockOn =  createClockIcon(); iconClockOn.image = "../../../img/maps/clock_on.gif";
    var iconClockOff =  createClockIcon(); iconClockOff.image = "../../../img/maps/clock_off.gif";
    
    var iconRankingYes =  createRankingIcon(); iconRankingYes.image = "../../../img/maps/ranking_yes.gif";    
    var iconRankingNo =  createRankingIcon(); iconRankingNo.image = "../../../img/maps/ranking_no.gif";        

    var iconSealExcellent =  createRankingIcon(); iconSealExcellent.image = "../../../img/maps/seal_mini_exc.gif";
    var iconSealVeryGood =  createRankingIcon(); iconSealVeryGood.image = "../../../img/maps/seal_mini_vyg.gif";
    var iconSealGood =  createRankingIcon(); iconSealGood.image = "../../../img/maps/seal_mini_goo.gif";
    var iconSealNone =  createRankingIcon(); iconSealNone.image = "../../../img/maps/seal_mini_non.gif";

    var iconFavoriteOwn =  createFavoriteIcon(); iconFavoriteOwn.image = "../../../img/maps/favo_user.gif";
    var iconFavoriteBpk =  createFavoriteIcon(); iconFavoriteBpk.image = "../../../img/maps/favo_all.gif";
    var iconFavoriteNo  =  createFavoriteIcon(); iconFavoriteNo.image  = "../../../img/maps/favo_no.gif";


	/* ==================================================================
	   BUSINESS CARDS functions
	   ==================================================================
	 */
	// Business card templates - this function fills the value variables and returns final html code
	function getBusinessCardCode(businessCard) {	    
    	var time = new Date();
		var businessCardCode = 
   	    	"<div class=\"clearfix\" style=\"left: 0px; top: 0px; width: 422px; height: 207px;\">" +
			"<table class=\"grau\">" +
			"<tr><td width=\"262\"><p style=\"margin-bottom: 1em;\"><a href=../../../" + businessCard.vendorId + "/informationen.htm>" + businessCard.company + "</a> | <img src=../../../img/flag_" + businessCard.country + ".gif /></a></p>"+
            "<p>" + (businessCard.logoExists===true?"<a href=\"http://" + businessCard.website + "\"><img src=\"" + businessCard.logo + "\" width=\"143\" height=\"45\" />":"") + "</p>" +
			"</td>"+
			"<td style=\"height:105px;background-color:#f0e7dd;text-align:center;vertical-align: middle;\">";
			
			if (businessCard.sealExists===true) {
	            businessCardCode += "<div style=\"height:55px;background-image:url('" + businessCard.seal + "');background-repeat: no-repeat;background-position:center;\"></div>Stand: " + today();
			} else {
	            businessCardCode += "<div style=\"height:55px;background-image:url('../../../img/icon_no_seal.gif'); background-repeat: no-repeat;background-position:center;\"></div>";
			}
            
            businessCardCode +=		
			"</td></tr>" +
			"<tr><td>"+
	     	"<img style=\"float:left;margin: 0 .5em .5em 0;\" src=\"" + (businessCard.photo1Exists===true?businessCard.photo1:'../../../img/vendor.resources/dummy.contact.gif') + "\" width=\"30\" height=\"43\" /><p style=\"float:left;\"><a title=\"Direktkontakt\" href=/"+businessCard.vendorId+"/direktkontakt.htm?no=1>"+businessCard.name1+"</a><br />"+businessCard.position1+"</p>" +
	     	"<br style=\"clear:left;\" /><img style=\"float:left;margin: 0 .5em .5em 0;\" src=\"" + (businessCard.photo2Exists===true?businessCard.photo2:'../../../img/vendor.resources/dummy.contact.gif') + "\" width=\"30\" height=\"43\" /><p style=\"float:left;\"><a title=\"Direktkontakt\" href=/"+businessCard.vendorId+"/direktkontakt.htm?no=2>"+businessCard.name2+"</a><br/>"+businessCard.position2+"</p>" +
			"</td>"+
			"<td class=\"bcardListe\"><ul>"+
			"<li><a target=\"_self\" href=/" + businessCard.vendorId + "/empfehlen.htm>Empfehlen</a></li>"+
			"<li><a target=\"_self\" href=/" + businessCard.vendorId + "/kundenzufriedenheit.htm>Empfehlungsspiegel</a></li>"+
			"<li><a target=\"_self\" href=/" + businessCard.vendorId + "/addFavorite.htm?id="+businessCard.vendorId+">Merken</a></li>"+
			"<li><a target=\"_self\" href=/" + businessCard.vendorId + "/addFavorite.htm?tender&id="+businessCard.vendorId+">Anfrage starten</a></li>"+
			"<li><a target=\"_self\" href=/" + businessCard.vendorId + "/editor.htm>Eintrag erweitern</a></li>"+
			"</ul></td></tr>" +		
			"  </table>" +
			"</div>";

		return businessCardCode;
	}

	function createBusinessCardImpl(point, icon, businessCard, fav) {
		if (businessCard==null || businessCard==undefined) alert('no data');
		
		if (!point) {
			//alert(businessCard.address + " not found");
		} else {
			// var marker = createBusinessCardMarker(point, icon, businessCard);
		    var marker = new PdMarker(point, { title: businessCard.company, icon: icon });
		    marker.setDetailWinHTML( getBusinessCardCode(businessCard) );
			businessCard.marker = marker;
			// if (marker && (fav==0 || (fav==1 && businessCard.favorite))) mapVendors.addOverlay(marker);
			if ( (fav==0 || (fav==1 && businessCard.favorite)) ) mapVendors.addOverlay(marker);
		}		
	}

    function createLockedBusinessCard(point, icon, businessCard) {
        if (businessCard==null || businessCard==undefined) alert('no data');
        
        if (!point) {
            //alert(businessCard.address + " not found");
        } else {
            // var marker = createBusinessCardMarker(point, icon, businessCard);
            var marker = new PdMarker(point, { title: 'nur mit Login-in zug�nglich', icon: icon });
            //marker.setDetailWinHTML( getBusinessCardCode(businessCard) );
            businessCard.marker = marker;            
            mapVendors.addOverlay(marker);
        }       
    }

	// Creates business card overlay on the map
	function createBusinessCard(point, icon, businessCard) {
		createBusinessCardImpl(point, icon, businessCard, 0);		
	}

	// Creates business card overlay on the map
	function createFavoritesBusinessCard(point, icon, businessCard) {
		createBusinessCardImpl(point, icon, businessCard, 1);	
	}

	// Creates a marker at the given point with the given icon and businessCard
	/*
	function createBusinessCardMarker(point, icon, businessCard) {
	  var marker = new GMarker(point, icon);	  
	  GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(getBusinessCardCode(businessCard));});
	  return marker;
	}
	*/



	// Hides markers by certain criterias
	function hideBusinessCardMarkers(group,ranked,grade) {
		for (var i=0;i<=businessCards.length-1;i++) {
			if (
				(ranked==null || businessCards[i].isRanked===ranked) &&
				(grade==null || (grade==0&&!businessCards[i].sealExists) || gradeInRange(businessCards[i].grade,grade))
			&& businessCards[i].marker && businessCards[i].public===true ) 
			mapVendors.removeOverlay(businessCards[i].marker);			
		}
	}

	// Shows markers by certain criterias
	function showBusinessCardMarkers(group,ranked,grade) {
		for (var i=0;i<=businessCards.length-1;i++) {
		    if (
		   	    businessCards[i].point.x!='null' && 
				(ranked==null || businessCards[i].isRanked===ranked) &&
				(grade==null || (grade==0&&!businessCards[i].sealExists) || gradeInRange(businessCards[i].grade,grade))
			&& businessCards[i].marker && businessCards[i].public===true) 
			mapVendors.addOverlay(businessCards[i].marker);
		}
	}

    function gradeInRange(vendorGrade, criteriaGrade) {
    	return (criteriaGrade==9 && vendorGrade>=9)
    		|| (criteriaGrade==7 && vendorGrade>=7 && vendorGrade<9)
    		|| (criteriaGrade==5 && vendorGrade>=5 && vendorGrade<7)
    		|| (criteriaGrade==0 && ((vendorGrade>=0 && vendorGrade<5) || vendorGrade==null) );
    }

	// my, bpk, none
	function showFavoritesMarkers(favType) {
		for (var i=0;i<=businessCards.length-1;i++) {			
			if ( businessCards[i].point.x && businessCards[i].point.x!='null' &&
				((favType=='my' && businessCards[i].favorite) ||
				(favType=='bpk' && businessCards[i].bpkfavorite && !businessCards[i].favorite))				
				&& businessCards[i].marker && businessCards[i].public===true) mapVendors.addOverlay(businessCards[i].marker);
		}
	}
	
	function hideFavoritesMarkers(favType) {
		for (var i=0;i<=businessCards.length-1;i++) {			
			if ( 
				((favType=='my' && businessCards[i].favorite) ||
				(favType=='bpk' && businessCards[i].bpkfavorite && !businessCards[i].favorite))
				&& businessCards[i].marker && businessCards[i].public===true) mapVendors.removeOverlay(businessCards[i].marker);
		}
	}

	
	/* ==================================================================
	   TENDER CARDS functions
	   ==================================================================
	 */
	// Tender card templates - this function fills the value variables and returns final html code
	function getTenderCardCode(tenderCard) {
		var tenderCardCode = 
   	    	"<div class=\"clearfix\" style=\"left: 0px; top: 0px; width: 422px; height: 207px;\">" +
			"<table class=\"grau\">" +
				"<tr>" +
					"<td style=\"padding-bottom: 1em;\" width=\"272\"><a href=\"" + tenderCard.url + "\">" + tenderCard.title + "</a></td>" +
						"<span style=\"float:left;padding:1em;\"><img src=\"../../../img/icon_date_end.gif\" width=\"32\" height=\"16\" /></span><span style=\"float:right;padding:1em;\">" + tenderCard.endDate + "</span></td>" +
				"</tr>" +
				"<tr>" +
					"<td style=\"padding-bottom: 1em;\"><img src=../../../img/flag_" + tenderCard.country + ".gif align=absmiddle> " + tenderCard.zip + "</td>" +
					"<td class=\"bcardListe\">" +
						(tenderCard.isExpired===true?"&nbsp;":"<ul><li><a target=\"_self\" href=\"/" + tenderCard.id + "/bewerbung.htm\">bewerben</a></li>");
						
		if (tenderCard.isExpired===false) {	
			if (tenderCard.isfavorite===true) { 
			  tenderCardCode += "<li id=\"favLink" + tenderCard.id + "\">vorgemerkt</li>";
			} else {
			  tenderCardCode += "<li id=\"favLink" + tenderCard.id + "\"><a target=\"_self\" href=\"javascript:void(0);\" onclick=\"javascript:addTenderFavorite(" + tenderCard.id + ");\">vormerken</a></li>";
			}
		};
												
        tenderCardCode += "</ul></td></tr></table></div>";

		return tenderCardCode;
	}

	// Creates tender card overlay on the map
	function createTenderCard(point, icon, tenderCard) {
		if (point) {			
			//var marker = createTenderCardMarker(point, icon, tenderCard);
			var marker = new PdMarker(point, { title: tenderCard.title, icon: icon });			
		    marker.setDetailWinHTML( getTenderCardCode(tenderCard) );
			tenderCard.marker = marker;
			mapTenders.addOverlay(marker);
		}
	}

	// Creates a marker at the given point with the given icon and tenderCard
	function createTenderCardMarker(point, icon, tenderCard) {
	  var marker = new GMarker(point, icon);
	  GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(getTenderCardCode(tenderCard));});
	  return marker;
	}

	// Hides markers by certain criterias
	function hideTenderCardMarkers(expired) {
		for (var i=0;i<=tenderCards.length-1;i++) {
			if (expired==null || tenderCards[i].isExpired===expired) mapTenders.removeOverlay(tenderCards[i].marker);
		}
	}

	// Shows markers by certain criterias
	function showTenderCardMarkers(expired) {
		for (var i=0;i<=tenderCards.length-1;i++) {
		    if (tenderCards[i].point.x!='null' && (expired==null || tenderCards[i].isExpired===expired)) mapTenders.addOverlay(tenderCards[i].marker);
		}
	}	
	
	
	function checkBounds(map,bounds) 
	{
		if (bounds.contains(map.getCenter())) 
		{
			return;
		}

		var center = map.getCenter();
		var x = center.lng();
		var y = center.lat();

		var maxX = bounds.getNorthEast().lng();
		var maxY = bounds.getNorthEast().lat();
		var minX = bounds.getSouthWest().lng();
		var minY = bounds.getSouthWest().lat();

		if (x < minX) 
		{
			x = minX;
		}
		if (x > maxX) 
		{
			x = maxX;
		}
		if (y < minY) 
		{
			y = minY;
		}
		if (y > maxY) 
		{
			y= maxY;
		}

		map.setCenter(new GLatLng(y,x));
	}