
	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/icon_anbieter_2.gif";
        //icon.shadow = "../../../img/maps/mm_20_shadow.png";
        icon.iconSize = new GSize(23, 34);
        //icon.shadowSize = new GSize(32, 32);
        icon.iconAnchor = new GPoint(1, 1);
        icon.infoWindowAnchor = new GPoint(5, 1);
        return icon;
    }
    function createPrivateAccessIcon() {
        var icon = new GIcon();
        icon.image = "../../../img/icon_anbieter_2.gif";
        icon.shadow = "../../../img/maps/mm_20_shadow.png";
        icon.iconSize = new GSize(23, 34);
        icon.shadowSize = new GSize(32, 32);
        icon.iconAnchor = new GPoint(1, 1);
        icon.infoWindowAnchor = new GPoint(5, 1);
        return icon;
    }
    function createPublicAccessIcon() {
        var icon = new GIcon();
        icon.image = "../../../img/icon_anbieter_1.gif";
        icon.shadow = "../../../img/maps/mm_20_shadow.png";
        icon.iconSize = new GSize(25, 36);
        icon.shadowSize = new GSize(32, 32);
        icon.iconAnchor = new GPoint(1, 1);
        icon.infoWindowAnchor = new GPoint(5, 1);
        return icon;
    }
	function createClockIcon() {
		var icon = new GIcon();
		icon.image = "../../../img/maps/clock_on.gif";
		icon.iconSize = new GSize(36, 31);
		icon.iconAnchor = new GPoint(6, 20);
		icon.infoWindowAnchor = new GPoint(5, 1);
		return icon;
	}
	
	function createRankingIcon() {
		var icon = new GIcon();
		icon.image = "../../../img/icon_anbieter_1.gif";
       // icon.shadow = "../../../img/maps/mm_20_shadow.png";
        icon.iconSize = new GSize(25, 36);
        icon.shadowSize = new GSize(32, 32);
        icon.iconAnchor = new GPoint(1, 1);
        icon.infoWindowAnchor = new GPoint(5, 1);
		return icon;
	}
	function createFavoriteIcon() {
		var icon = new GIcon();
		icon.image = "../../../img/icon_anbieter_1.gif";
        icon.shadow = "../../../img/maps/mm_20_shadow.png";
        icon.iconSize = new GSize(25, 36);
        icon.shadowSize = new GSize(32, 32);
        icon.iconAnchor = new GPoint(1, 1);
        icon.infoWindowAnchor = new GPoint(5, 1);
		return icon;
	}	
	
	// Set different colors for markers
	
	var iconLocked = createLockIcon();    iconLocked.image = "../../../img/icon_anbieter_2.gif";
	var iconPrivateAccess = createPrivateAccessIcon();    iconPrivateAccess.image = "../../../img/icon_anbieter_2.gif";
	var iconPublicAccess = createPublicAccessIcon();    iconPublicAccess.image = "../../../img/icon_anbieter_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/icon_anbieter_1.gif";    
    var iconRankingNo =  createRankingIcon(); iconRankingNo.image = "../../../img/icon_anbieter_3.gif";

    var iconSealExcellent =  createRankingIcon(); iconSealExcellent.image = "../../../img/icon_anbieter_1.gif";
    var iconSealVeryGood =  createRankingIcon(); iconSealVeryGood.image = "../../../img/icon_anbieter_1.gif";
    var iconSealGood =  createRankingIcon(); iconSealGood.image = "../../../img/icon_anbieter_1.gif";
    var iconSealNone =  createRankingIcon(); iconSealNone.image = "../../../img/icon_anbieter_1.gif";

    var iconFavoriteOwn =  createFavoriteIcon(); iconFavoriteOwn.image = "../../../img/icon_anbieter_1.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 });
		    GEvent.addListener(marker, "click", function() {
		    	window.location.href="/" + businessCard.vendorId + "/kundenzufriedenheit.htm";
		    });
			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: businessCard.company, icon: icon });
            //marker.setDetailWinHTML( getBusinessCardCode(businessCard) );
            GEvent.addListener(marker, "click", function() {
		    	window.location.href="/" + businessCard.vendorId + "/kundenzufriedenheit.htm";
		    });
            businessCard.marker = marker;            
            mapVendors.addOverlay(marker);
        }       
    }
    
    function createLockedRankedBusinessCard(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: '', 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++) {
			//icon = businessCards[i].isRanked?iconRankingYes:iconRankingNo;
			if (businessCards[i].isRanked){
	            if (businessCards[i].point.x!='null' && businessCards[i].public===false && loggedIn=="false" && grade==1) {
	            	mapVendors.removeOverlay(businessCards[i].marker);
	            }else if (grade != 1 ){
	            	if (loggedIn=="false" && businessCards[i].public === true && businessCards[i].point.x!='null' &&  (businessCards[i].isRanked===ranked)){ 
						mapVendors.removeOverlay(businessCards[i].marker);
					}
					if (loggedIn=="true" && businessCards[i].point.x!='null' &&  (businessCards[i].isRanked===ranked)){ 
						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].isRanked){
				if (businessCards[i].point.x!='null' && businessCards[i].public===false && loggedIn=="false" && grade==1) {
	            	mapVendors.addOverlay(businessCards[i].marker);
	            }else if (grade != 1 ){
	            	if (loggedIn=="false" && businessCards[i].public === true && businessCards[i].point.x!='null' &&  (businessCards[i].isRanked===ranked)){ 
						mapVendors.addOverlay(businessCards[i].marker);
					}
					if (loggedIn=="true" && businessCards[i].point.x!='null' &&  (businessCards[i].isRanked===ranked)){ 
						mapVendors.addOverlay(businessCards[i].marker);
					}
	            }
			}
		}
	}
	function hideAccessIcons(freeAccess) {
		for (var i=0;i<=businessCards.length-1;i++) {
			if (freeAccess===false && businessCards[i].point.x!='null' && businessCards[i].public===false){
		    	mapVendors.removeOverlay(businessCards[i].marker);
		    }else if (freeAccess===true && businessCards[i].point.x!='null' && businessCards[i].public===true){
		    	mapVendors.removeOverlay(businessCards[i].marker);
		    }			
		}
	}
	function showAccessIcons(freeAccess) {
		for (var i=0;i<=businessCards.length-1;i++) {
		    if (freeAccess===false && businessCards[i].point.x!='null' && businessCards[i].public===false){
		    	mapVendors.addOverlay(businessCards[i].marker);
		    }else if (freeAccess===true && businessCards[i].point.x!='null' && 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 });			
		    if (!tenderCard.isExpired){ 
			    GEvent.addListener(marker, "click", function() {
			    	window.location.href=tenderCard.url;
			    });
		    }
		    //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));
	}
