var targetPicture='http://gfx.coigdzie.pl/ikonka_cel.png';
var homePicture='http://gfx.coigdzie.pl/ikonka_home.png';
var localityPicture='http://gfx.coigdzie.pl/ikonka_miasto.png';
var happeningPicture='http://gfx.coigdzie.pl/ikonka_blank.png';
var recommendedPicture='http://gfx.coigdzie.pl/ikonka_sponsor.png';
var recommendedCountingPicture='http://gfx.coigdzie.pl/ikonka_sponsor_blank.png';
var resortPicture='http://gfx.coigdzie.pl/resort.png';
var is_add_target_point;
var celownik;
var recommendedEmptyPicture='http://gfx.coigdzie.pl/ikonka_fiolet_small.png';


var min_poland_zoom=6;
//manager markerow
var markerManager;
//przesuniecie labelek rozmiary
var standartOffset;
var offsetFor2DigitsNumber;
var offsetFor3DigitsNumber;
// do multiokienka
var openMarker;
var isMultiEventWindow = false;
var lastMultiEventWindow;

 /*znajduja sie tu wszystkie funkcje uzywajace api googlowego
 * 
 */
 
  /*
     * osadza mape w komponencie name
     * centruje ja w punkcie o wspolrzdnych lat,lon
     * oraz ustawia zoom           
    */         
    function createMap(lat,lon,zoom,name,xml,recommended,fromLink)
  	{
  		if(fromLink == null) {
  			fromLink = false;
  		}
  	
    	is_add_target_point=false;
    	// inicjuje obszar
		obszar = new GLatLngBounds();  
    	if(GBrowserIsCompatible()) {	// sprawdzamy, czy przegladarka jest kompatybilna
    		standartOffset=new GSize(2, -25);
    		offsetFor2DigitsNumber=new GSize(-2, -25);
    		offsetFor3DigitsNumber=new GSize(-5, -25);
    		
    		// tworzymy nowy obiekt mapy, i umieszczamy go w elemencie blokowym o ID name
    		mapa = new GMap2(document.getElementById(name));
  			// centrujemy mape w okolicy (lat,lon)
    		if(lon!=null && lat!=null){
    			mapa.setCenter(new GLatLng(lat,lon),zoom);
    		}
    		else{
    			mapa.setCenter(new GLatLng(52.5550206,19.7000891),6);
    		}
    		//menu
    		createMenu();
  		
  			
  			//parsowanie miejscowosci
  			if(recommended==true && localities_list!=null && localities_list!=""){ 
  				parseAndAddLocalities(localities_list);
  		    	
  				var div=document.getElementById("tagheader");
  				
  				if (div != null) {
  					div.style.visibility = 'hidden'; 
  					div.style.height = 0;
  				}
  				var div1=document.getElementById("tags");
  				if (div1 != null) {
  					div1.style.visibility = 'hidden'; 
  					div1.style.height = 0;
  				}
				var div2=document.getElementById("polecane");
				if (div2 != null) {
  					div2.style.visibility = 'hidden'; 
  					div2.style.height = 0;
  				}
  			
  			} else if (recommended == true) {
  					var div=document.getElementById("scrollertext");
  					if (div != null) {
  						div.style.visibility = 'hidden'; 
  						div.style.height = 0;  				
  					}
  					var div1=document.getElementById("scrolldiv");
  					if (div1 != null) {
  						div1.style.visibility = 'hidden';
  						div1.style.height = 0;
  					}
  			}
  			//dodaje miejscowosc wyszukiwana
  			else if(recommended==false && lon!='null' && lat!='null'){
  				celownik=addHappeningPoi(new GLatLng(lat,lon),'wybrana miejscowość',"target");
  			}
  			
  			// dodajemy pasek kontroli
  			
  			addControl(mapa);
  			// dodajemy obsluge kolka
  			addMouseWheel(mapa);
  			addDoubleClick(mapa);  
  			
  			if(xml!=null){
  				addMarkersAndInfo(xml,recommended,fromLink);
  			}
  			//addSkiResort();
  			//ograniczenie obszaru
  			polandArea= new GLatLngBounds();
  			polandArea.extend(new GLatLng(49.49667452747044,13.88671875));
  			polandArea.extend(new GLatLng(57.5,23.46679687));
  			//dodaje wschodnie regiony
  			polandArea.extend(new GLatLng(50.6251,24.4556));
  			polandArea.extend(new GLatLng(48.8358,23.1592));
  			var mapy = mapa.getMapTypes();
			for (var i=0; i<mapy.length; i++)
			{
				mapy[i].getMinimumResolution = function() {return min_poland_zoom;}

			
			}
		//	findMeByIp();
			GEvent.addListener(mapa,'move',check_area_and_hide_menu);
			
			GEvent.addListener(mapa, 'infowindowclose', function(){
        		if(isMultiEventWindow==false) {
	        		openMultiInfoWindow();
	        		isMultiEventWindow = true;
       			} 
    		});

  			
        	return mapa;
  		}
  		else{
  			//alert('Nie mozna dodac mapy - przegladarka jest niekompatybilna');
			jQuery(function($){jAlert('Nie mozna dodac mapy - przegladarka jest niekompatybilna', "Coigdzie.pl");});
  		}
  	} 
	
  	
	function createMapKontakt(lat,lon,zoom,name,xml)
  	{
    	is_add_target_point=false;
    	// inicjuje obszar
		obszar = new GLatLngBounds();  
    	if(GBrowserIsCompatible()) {	// sprawdzamy, czy przegladarka jest kompatybilna
    		
    		// tworzymy nowy obiekt mapy, i umieszczamy go w elemencie blokowym o ID name
    		mapa = new GMap2(document.getElementById(name));
    		
  			// centrujemy mape w okolicy (lat,lon)
    		if(lon!=null && lat!=null){
    			mapa.setCenter(new GLatLng(lat,lon),zoom);
    		}
    		else{
    			mapa.setCenter(new GLatLng(52.27900,20.966978),11);
    		}
  			
			addHappeningPoi(new GLatLng(52.27900,20.966978),'info','home');
			
  			// dodajemy pasek kontroli
  			
  			
			mapa.addControl(new GScaleControl()); 
			//dodaje suwak
			mapa.addControl(new  GLargeMapControl3D());   
      
  			// dodajemy obsluge kolka
  			addMouseWheel(mapa);
  			addDoubleClick(mapa);  
  			
  			
  			//ograniczenie obszaru
  			polandArea= new GLatLngBounds();
  			polandArea.extend(new GLatLng(49.49667452747044,13.88671875));
  			polandArea.extend(new GLatLng(57.5,23.46679687));
  			//dodaje wschodnie regiony
  			polandArea.extend(new GLatLng(50.6251,24.4556));
  			polandArea.extend(new GLatLng(48.8358,23.1592));
  			var mapy = mapa.getMapTypes();
			for (var i=0; i<mapy.length; i++)
			{
				mapy[i].getMinimumResolution = function() {return min_poland_zoom;}
			}
	
			GEvent.addListener(mapa,'move',check_area);

  			
        	return mapa;
  		}
  		else{
  			//alert('Nie mozna dodac mapy - przegladarka jest niekompatybilna');
			jQuery(function($){jAlert('Nie mozna dodac mapy - przegladarka jest niekompatybilna', "Coigdzie.pl");});
  		}
  	} 
  	
    function check_area(){
    	if(!polandArea.contains(mapa.getCenter()))
		{
			var lat = mapa.getCenter().lat();
			var lng = mapa.getCenter().lng();
			
			var minlat = polandArea.getSouthWest().lat();
			var maxlat = polandArea.getNorthEast().lat();
			var minlng = polandArea.getSouthWest().lng();
			var maxlng = polandArea.getNorthEast().lng();
			
			if(lat > maxlat){
				lat = maxlat;
			}	
			else if(lat < minlat){
				lat = minlat;
			}	
				
			if(lng > maxlng){
				lng = maxlng;
			}	
			else if(lng < minlng)
			{	
				lng = minlng;
			}	
			
			mapa.setCenter(new GLatLng(lat,lng));
		}
    }
    function check_area_and_hide_menu()
	{
    	hideMenuAndRemoveTarget();
    	check_area();
	}

    
    
    
    
    /*
  	 * dodaje do mapy suwak, podzialke 
  	 * i panel wyboru rodzaju mapy  	 
  	 */            	
  	function addControl(map){
  	 	//dodaje panel zmiany widoku mapy
    //  map.addControl(new GMapTypeControl()); 
  	 	//dodaje podzialke
      map.addControl(new GScaleControl()); 
      //dodaje suwak
      map.addControl(new  GLargeMapControl3D());   
      //minimapa
      map.addControl(new GOverviewMapControl(new GSize(105,105)));  
    }
    
    /*
     * dodaje obsluge kolka myszy
     */         
    
    function addMouseWheel(map){
      map.enableScrollWheelZoom();
    }
    
    /*
     * dodaje plynny zoom przy podwojnym kliknieciu   
     */
     function addDoubleClick(map){
      map.enableDoubleClickZoom();
      map.enableContinuousZoom(); 
     }  
     
    function getLabelOffset(no){
    	if(no>=1 && no<=9){
    		return standartOffset;
    	}
    	else if(no>=10 && no<=99){
    		return offsetFor2DigitsNumber;
    	}
    	else if(no>=100){
    		return offsetFor3DigitsNumber;
    		
    	}
    }
    function createHomeMarker(point){
    	 var icon= createIcon("target");
    	 var marker= new GMarker(point,{icon:icon});
    	 return marker;
    }
    function createHappeningMarker(point,info,flag,no,longInfo,longTittle){
    	 var normal_icon= createIcon(flag);
    	 var marker;  
    	 if(flag=="normal" || flag=="recomended_counting"){
    		   var offset=	getLabelOffset(parseInt(no)+1);
    		   marker= new LabeledMarker(point,{icon:normal_icon,"labelText": (no+1), "labelOffset": offset});   
    	 } 
    	 else
    	 {
    		 marker= new GMarker(point,{icon:normal_icon});  
    	 }
    	
    	 if(longInfo!=null && longInfo!=undefined){
    		 marker.textMax=longInfo;
    	 }
	     if(longTittle!=null && longTittle!=undefined){
	    	 marker.tittleMax=longTittle;
	     }
	     
	     
	     GEvent.addListener(marker,'mouseover',function()  
	     {  
	    	 marker.openInfoWindowHtml(marker.text,{maxContent: marker.textMax, maxTitle: longTittle});
	     });  
	    	 
      	 marker.text=info;
      	 return marker;  
    	 
    }
    
    function createTargetMarker(point,info,no,longInfo,longTittle){
    	  var target_icon=createIcon("target");	
     	  var marker = new GMarker(point,{icon:target_icon,draggable: false});
     	   GEvent.addListener(marker,'dragend',function()
     	  {
     		  var new_lng=roundDouble(marker.getPoint().lng(),4);
 			  var new_lat=roundDouble(marker.getPoint().lat(),4);
 			 point=new GLatLng(new_lat,new_lng);
 			// alert('new_lng'+new_lng);
 			 celownik.setPoint(point);	
   		 	copyValue("search_where",celownik.getPoint().lng()+';'+celownik.getPoint().lat());
     	 });	
     	 marker.text=info;
     	 return marker;  
    }
    
    function addMultiHappeningPoi(point,info,happenings,recommended) {
		var marker;
		var labelClass;
		var normal_icon;
		if(recommended=='true' || recommended==true){
    		normal_icon= createIcon("multi_recommended");
    		offset = new GSize(0 ,-38);
    		labelClass = 'multi_recommended_style';
    	}
    	else{
    		normal_icon= createIcon("multi");
    		offset = new GSize(-8	,-33);
    		labelClass = 'multi_style';
    	}
		
		var labelText = "x" + happenings.length;

		  	 
		marker= new LabeledMarker(point,{icon:normal_icon,"labelText": labelText, "labelOffset": offset, "labelClass" : labelClass});   
		
		GEvent.addListener(marker,'mouseover',function()  
		{  
			marker.openInfoWindowHtml(info);
			isMultiEventWindow = true;
			openMarker = marker;
		});  
		    
		GEvent.addListener(marker , "click", function() 
		{
			marker.openInfoWindowHtml(info);
			isMultiEventWindow = true;
			openMarker = marker;
		});
			    	 
		marker.text=info;
		marker.happenings = happenings;
		marker.number = multi_markers_array.length;
		multi_markers_array.push(marker);
		
		var x;
		for(var i = 0 ; i < happenings.length; i++) {
			x = new Object();
			x.number = i;
			x.multiMarkerNumber = marker.number;
			markers_array.push(x);
		}
		
		mapa.addOverlay(marker);
		obszar.extend(point); 
		
    }
    
    function openFromMultiHappeningPoi(id) {
    	mapa.getInfoWindow().hide();
    	isMultiEventWindow = true;
    	openMarker.openInfoWindowHtml(makePoiShortDescription(openMarker.happenings[id].happening),{maxContent: makePoiLongDescription(openMarker.happenings[id].happening), maxTitle: makePoiTittle(openMarker.happenings[id].happening)});
    	isMultiEventWindow = false;
    }
    
    function addHappeningPoi(point,info,flag,no,longInfo,longTittle){
    	var marker;
    	if(flag=="target"){
    		marker=createTargetMarker(point,info,no,longInfo,longTittle);
        }
    	else if(flag=="home"){
    	
    		marker=createHomeMarker(point);
    	}
        else
        {
        	 var tmpFlag;
        	 if(flag == "from_link_normal") {
        	 	tmpFlag = "link_normal";
        	 } else if(flag == "from_link_recomended") {
        	 	tmpFlag = "recomended";
        	 } else if(flag == "from_link_recomended_counting") {
        	 	tmpFlag = "recomended_counting";
        	 } else {
        	 	tmpFlag = flag;
        	 }
        	 marker=createHappeningMarker(point,info,tmpFlag,no,longInfo,longTittle);
        	 
        }
       
    
    		GEvent.addListener(marker , "click", function() 
    		{
    			//celownik
    			if(flag=="target"){ 
    				//marker.openInfoWindowHtml(marker.text);
    			}
    			//happeningi
    			else if(flag=="normal" || flag=="recomended" || flag=="recomended_counting" ||
    				flag=="from_link_normal" || flag=="from_link_recomended" || flag=="from_link_recomended_counting"){
    	    		marker.openInfoWindowHtml(marker.text,{maxContent: marker.textMax, maxTitle: longTittle});
    	    	}
    		}
    		);
    	
    	if(flag=="from_link_normal" || flag=="from_link_recomended" || flag=="from_link_recomended_counting") {
    		marker.openInfoWindowHtml(marker.text,{maxContent: marker.textMax, maxTitle: longTittle});
    	}
 
        mapa.addOverlay(marker);
        obszar.extend(point); 
   	 	if(flag!=undefined && flag!="target" && flag!="home" ){  
   	    	//dodaje punkt do obszaru
        	markers_array.push(marker);
  	 	}
     return marker;
    }
    
    function closeMarkersInfo(){
    	 mapa.closeInfoWindow() ;
    }
    
    function openMultiInfoWindow() {
    	multi_markers_array[openMarker.number].openInfoWindowHtml(multi_markers_array[openMarker.number].text);
    }
    
    function openMarkerInfo(no){
		if(markers_array[no].number == null) {
	    	if(markers_array[no].textMax!=undefined){
	    		markers_array[no].openInfoWindowHtml(markers_array[no].text,{maxContent: markers_array[no].textMax, maxTitle: markers_array[no].tittleMax});
	    	}
	    	else{
	    		markers_array[no].openInfoWindowHtml(markers_array[no].text);
	    	}
    	} else {
    		openMarker = multi_markers_array[markers_array[no].multiMarkerNumber];
    		openFromMultiHappeningPoi(markers_array[no].number);
    		
    	}
    }
    function addLocalityPoi(point,info,loc_name,localityDistrict,i){
    	//lokalizacja
    	var target_icon;
    	var marker;
    	if(i!=null){
    		target_icon=createIcon("locality");
    		var offset=	getLabelOffset(parseInt(i)+1);
    		marker = new LabeledMarker(point,{icon:target_icon,"labelText": (i+1), "labelOffset": offset});
    	}
    	//kurorty
    	else{
    		target_icon=createIcon("resort");
    		 marker= new GMarker(point,{icon:target_icon});
    	}	
    	marker.text=info;
    	 
		GEvent.addListener(marker,'mouseover',function()  
		{  
			marker.openInfoWindowHtml(marker.text);
		});  
 
		GEvent.addListener(marker , "click", function() {
			choosenLocality(point.lat(),point.lng(),loc_name,localityDistrict);
		});
    	
		mapa.addOverlay(marker);
		markers_array[i]=marker;
    }
    
 
   
    //czysci mape
    function clearMap(map){
      map.clearOverlays();
      obszar = new GLatLngBounds();  
    }
   
    //centruje mapa
    function centerMapAtMarkers(map){
    	var nowyZoom = mapa.getBoundsZoomLevel(obszar);  
    	var nowyPunkt = obszar.getCenter();
    
    	if(nowyZoom>parseInt(min_zoom_for_happening)){
    		nowyZoom=min_zoom_for_happening;
    	}
    	map.setCenter(nowyPunkt,nowyZoom);  
    } 
    
    //tworzy ikonke z podanych rysunkow
    function createIcon(category){
        var ikona = new GIcon();
        if(category=='target'){
        	ikona.image = targetPicture;  
        	//ikona.shadow = targetShadow;
        }
        else if(category=='locality'){
        	ikona.image = localityPicture;  
        	//ikona.shadow = localityShadow;
        }
        else if(category=='recomended'){
        	ikona.image = recommendedPicture;  
        	//ikona.shadow = localityShadow;
        }
        else if(category=='recomended_counting'){
        	ikona.image = recommendedCountingPicture;  
        	//ikona.shadow = localityShadow;
        }
        else if(category=='home'){
        	ikona.image = homePicture;  
        	//ikona.shadow = localityShadow;
        }
        else if(category=='normal'){
        	ikona.image=happeningPicture;	
        } else if(category=='multi') {
        	ikona.image=happeningPicture;	
        }
        else if(category=='multi_recommended') {
        	ikona.image=recommendedEmptyPicture;	
        }
        else if(category=='resort'){
        	ikona.image=resortPicture;
        }	
        
        //if(category=='recomended' || category=='recomended_counting' )
        if(category=='recomended' )
        {	
        	setIconLargeSize(ikona);
        }
        else if(category=='target')
		{
			setIconTargetSize(ikona);
		} 
		else if(category=='multi')
		{
			setIconMultiSize(ikona);
		}
		else if(category=='multi_recommended') {
			setIconLargeMultiSize(ikona);	
	    }
		else
		{
        	setIconSmallSize(ikona);
        }
      
       // ikona.shadowSize = new GSize(59, 32);  
        return ikona;      
    }	
    
    function setIconLargeMultiSize(ikona){
    	ikona.iconSize = new GSize(42,46);
        ikona.infoWindowAnchor = new GPoint(16,16);               
        ikona.iconAnchor = new GPoint(10,45);  
    }
    function setIconSmallSize(ikona){
    	ikona.iconSize = new GSize(24,26);               
        ikona.infoWindowAnchor = new GPoint(12,12);               
        ikona.iconAnchor = new GPoint(8,25);  
    }
    
    function setIconLargeSize(ikona){
    	ikona.iconSize = new GSize(35,38);               
        ikona.infoWindowAnchor = new GPoint(16,16);               
        ikona.iconAnchor = new GPoint(10,37);  
    }
	function setIconTargetSize(ikona){
    	ikona.iconSize = new GSize(43,43);               
        ikona.infoWindowAnchor = new GPoint(21,21);               
        ikona.iconAnchor = new GPoint(21,21);  
    }
    function setIconMultiSize(ikona){
    	ikona.iconSize = new GSize(38,38);
    	ikona.infoWindowAnchor = new GPoint(19,19);               
        ikona.iconAnchor = new GPoint(19,38); 
    }
    //uzywamy przy zatwierdzaniu jesli ktos zmienil 
    function checkTargetPoint(value){
    	
    	var celownik_value=celownik.getPoint().lng()+';'+celownik.getPoint().lat();
    	//alert('cel: '+celownik_value+' val: '+value);
    	if(value==celownik_value){
    		return true;
    	}
    	return false;
    	
    }
    function copyValueFromFieldToTarget(lat,lon){
    	celownik.setPoint(new GLatLng(lat,lon));
    }
    
    //menu
    
    var menu;
    var clickedPoint;
    function createMenu(){
    	menu = document.createElement("div");
	    menu.style.display = "none"; 	// niech menu początkowo będzie niewidoczne
	    menu.className = "menu_map"; 		// za pomocą arkusza CSS nadamy odpowiedni wygląd
		menu.innerHTML = menuHTML;
		
		// dodajemy menu do mapy
		mapa.getContainer().appendChild(menu);
		
		// nasłuch na kliknięcie prawym przyciskiem myszy
		GEvent.addListener(mapa,"singlerightclick",function(p)
		{
			if(celownik!=undefined){
				mapa.removeOverlay(celownik);
			}
			clickedPoint = mapa.fromContainerPixelToLatLng(p);
			var menu_x = p.x;
			var menu_y = p.y;	
			point=new GLatLng(roundDouble(clickedPoint.lat(),4),roundDouble(clickedPoint.lng(),4));
			celownik= addHappeningPoi(point,'to jest celownik',"target");
						
			var position = new GSize(menu_x,menu_y);
			
			var showMenu = new GControlPosition(G_ANCHOR_TOP_LEFT, position);
			showMenu.apply(menu);
			menu.style.display = "block";
		});
		GEvent.addListener(mapa,'click',hideMenuAndRemoveTarget);
    }
    
    var menuHTML = '<div>OPCJE</div>'
		+ '<a href="" onclick="addTarget(); return false;">szukaj imprez w okolicy</a>'
	
	function hideMenu(){
    	menu.style.display = "none";
    }
	function hideMenuAndRemoveTarget()
	{
		hideMenu();
		if(celownik!=undefined){
			mapa.removeOverlay(celownik);
		}
	}
	function addTarget(){
		is_add_target_point=true;
		copyValue("search_where",celownik.getPoint().lng()+';'+celownik.getPoint().lat());
		submitForm(0);
		hideMenu();
	}	
/*	
function(marker,point) {
			if(marker) {
		} else {			
			
			//if(celownik!=undefined){
			//	mapa.removeOverlay(celownik);  
			//}
			var new_lng=roundDouble(point.lng(),4);
			var new_lat=roundDouble(point.lat(),4);
			point=new GLatLng(new_lat,new_lng);
			celownik= addHappeningPoi(point,'to jest celownik',"target");
			is_add_target_point=true;
			copyValue("search_where",celownik.getPoint().lng()+';'+celownik.getPoint().lat());
		} 
	};
	
	*/
    
    
    
     
       

