//łąśó
function Maps(extOpts){
	var MO = { };
	var map = null; //uchwyt mapy
	var mapDivHandle = null; //uchwyt diva mapy
	var searchManagerHandle = null; //uchwyt wyszukiwarki
	var displayManagerHandle = null;
	var floatingControlsManagerHandle = null;
	var formsManagerHandle = null;
	var wyszukaneObiektyListaHandle = null;
	var helperHandle = null; //uchwyt do helpera
	var szukaniePrzyTrasieManagerHandle = null;
	var szukanieWWidokuHandle = null;
	var weatherMenagerHandle = null;
	var zoomControlsManagerHandle = null;
	var atrakcjeController = null;
	
	//tutaj przechowywane są zmienne dotyczace stanu aplikacji
	var state = {
		maxHandle : null //event maksymalizacji dymka
	};
		
	/* opcje */
	var opt = { 
		mapDivID : 'map',
		mapContenerDivID : 'MapsContener',
		startLat : 55.17393169256846,
		startLng : 18.8525390625,
		startZoom : 6,
		startBounds : new GLatLngBounds( new GLatLng(49.037868, 14.150391), new GLatLng(54.813347, 24.125977)),
		weather : false //czy inicjowac funkcje pogodowe		
	};
	
	var init = function(){
		mapDivHandle = $('#'+opt.mapDivID);
		removeIfIE();
		setOptions();
	};
	
	/**
	*	ustawia opcje
	*/
	var  setOptions = function(){
		if(typeof(extOpts) == 'object'){
			for(var o in extOpts){
				opt[o] = extOpts[o];
			}
		}
	};
	
	/*
	*	pokazuje/chowa mapę
	*/
	MO.toggleDisplay = function(b){	
		if(typeof(b)!='undefined'){
			if(b){
				$('#'+opt.mapContenerDivID).show();							
				//setTimeout(setMapHeight, 500);
			} else {
				$('#'+opt.mapContenerDivID).hide();
			}
		} else {	
			$('#'+opt.mapContenerDivID).toggle();			
		}
		
		//jeśli mapa nie była do tej pory zainicjowana to ją inicjujemy
		if(map==null){
			initMap();
		}
	};
	
	/* zewnetrzny interfejs wyszukiwania */
	MO.search = function(param){
		if(typeof(param.kryteriaAjax)!='undefined'){
			MO.toggleDisplay(true);
			searchManagerHandle.search(						
				param.kryteriaAjax,
				typeof(param.kryteriaJS)!='object' ? {} : param.kryteriaJS
			);
		}
	};
	
	MO.showWeather = function(param){
		weatherMenagerHandle.showWeather(param);
	};
	

	/**
	*	inicjuje mapę
	*/
	var initMap = function(){
		if (GBrowserIsCompatible()) {			
			setMapHeight();
			map = new GMap2(document.getElementById(opt.mapDivID));	
			//ustawianie globalnej referencji do map google
			Maps.oGMap2 = map;		
	
			
			setTimeout(function(){centerMap(opt.startBounds); }, 0);
			map.enableScrollWheelZoom();
			map.addControl(new GScaleControl());	 
			//ustawiam wysokość mapy przy zmianie wielkości okna
			$(window).resize(setMapHeight);
			
			//ustawianie uchwytów do głównych managerów
			helperHandle = helper();
			searchManagerHandle = searchManager();
			displayManagerHandle = displayManager();
			floatingControlsManagerHandle = floatingControlsManager();
			formsManagerHandle = formsManager();
			wyszukaneObiektyListaHandle = wyszukaneObiektyListaManager();
			szukaniePrzyTrasieManagerHandle = szukaniePrzyTrasieManager(map, searchManagerHandle);
			SzukanieWWidokuManager = new SzukanieWWidokuManager(map, searchManagerHandle);
			zoomControlsManagerHandle = zoomControlsManager();
			atrakcjeController = new AtrakcjeController(map);


			if (opt.weather){
				formsManagerHandle.display(false, 'miasto', true);
				$('.advancedSearchPaneToggleB').remove();
				weatherMenagerHandle = weatherMenager();
			}
			formsManagerHandle.setMode('float');
			//czyszczenie formularzy
			formsManagerHandle.reset('all');
			
			//ustawianie akcji submit formularzy
			$('.searchForm:not(.searchFormPrzyTrasie)').submit(function() { return false; });		
			$('.searchFormPrzyTrasie').submit(function() { $('.searchFormPrzyTrasieSubmitB').click(); return false; });
		}		
	};
	
	
	
	/** centruje mapę na podstawie otrzymanych danych 
	*	@param GLatLngBounds/array
	*/
	var centerMap = function(data){
		if(typeof(data.getCenter)!='undefined'){
			var bounds = data;		
			map.setCenter(bounds.getCenter(),map.getBoundsZoomLevel(bounds));
		} else if (typeof(data.p1)!='undefined' && typeof(data.p2)!='undefined'){
			var bounds = new GLatLngBounds( new GLatLng(data.p1.y, data.p1.x), new GLatLng(data.p2.y, data.p2.x))
			map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		} else if (typeof(data.p)!='undefined' && typeof(data.zoom)!='undefined') {
			map.setCenter(new GLatLng(data.p.y, data.p.x), data.zoom);
		} else {
			//alert("centerMap: brak danych");
		}
	}
	
	/**
	*	ustawia wysokośń mapy
	*/
	var setMapHeight = function(){
		var windowHeight = $(window).height();
		var mapPos = Util.findPosition(mapDivHandle[0]);
		var newMapHeight = windowHeight-mapPos.y;
		mapDivHandle.height(newMapHeight);
		if(map){
			map.checkResize();
		}
	};
	
	/* zarzadzanie kontrolkami na mapie (planowo ma być tam kwybieranie rodzajów i lista obiektów) */
	var floatingControlsManager = function(){
		var O = {};
		var controlsHandle = null;
		 
		var init = function(){
			createControlsPane();
			bindEvents();
			O.display(false);
		};
		
		
		/* bindowanie eventów floatingControls*/
		var bindEvents = function(){
			controlsHandle.find(".tab").click(function(){
				if($(this).hasClass('selected')){ return; }
				var tabName = this.id.substr(3);
				O.selectTab(tabName);
			});
		};
		
		/* tworzenie */
		var createControlsPane = function(){
			var html = '<div id = "floatingControlsPane" class="roundedCorners"><ul class="tabs"><li class="tab selected roundedCornersTop" id="tabRodzaje" >rodzaje</li><li class="tab banIE roundedCornersTop"  id="tabObiekty" >wyszukane obiekty</li></ul><ul class="tabsContent roundedCorners"><li class="tabContent rodzajeLista"  id="tabContentRodzaje"></li><li class="tabContent obiektyLista"  id="tabContentObiekty"  style="display: none;"></li></ul></div>';
			map.addControl(new HtmlControl(html, { visible : true, selectable : true, printable : false } ),  new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 25)));
			controlsHandle = $('#floatingControlsPane');
		};
		
		/* łasdowanie listy rodzajów */
		O.loadRodzaje = function(maska, checked_maska){
			$.get("index.php?c=GetDataHelper&f=rodzaje", {input_maska : typeof(maska)!='undefined' ? maska : '', input_checked_maska:checked_maska}, function(odp){
				controlsHandle.find(".tabsContent .rodzajeLista").html(odp);
				controlsHandle.find(".tabsContent .rodzajeLista .rodzajCheck").click(function(){
					searchManagerHandle.triggerJSSearch();
				});
			});
		};
		
		
		O.display = function(b){
			if(b){
				controlsHandle.show();
			} else {
				controlsHandle.hide('fast');
			}
		}; 
		
		O.selectTab = function(tabName){			
			controlsHandle.find('.tab').removeClass('selected');
			controlsHandle.find('.tab#tab'+tabName).addClass('selected');
			if(controlsHandle.find('.tabContent:visible').length>0){
				controlsHandle.find('.tabContent:visible').fadeOut('fast', function(){
					controlsHandle.find('.tabContent#tabContent'+tabName).fadeIn('fast');
				});
			} else {
				controlsHandle.find('.tabContent#tabContent'+tabName).fadeIn('fast');
			}

			
		};			
		
		//init floatingControlsManager
		init();
		return O;
	};
	

	
	/**
	*	wyszukaneObiektyLista
	*/
	var wyszukaneObiektyListaManager = function(){
		var O={};
		var wyszukaneObiektyListaContainer = null;
		var pageLimit=11;
		var currentPage=1;
		
		var init = function(){
			$('#tabContentObiekty').html('<div id="listaObiektow" ></div>');
			wyszukaneObiektyListaContainer = $('#tabContentObiekty #listaObiektow');
			O.clear();
		};
		
		
		O.addPlace = function(markerO){
			wyszukaneObiektyListaContainer.find(".noItemsInfo").remove();
			//HTML
			var html=[
				'<div class="obiekt obiektDisplay" id="obiektLista',markerO.placeData.nr,'" style="display:none">',
					'<div class="fotoD"><img class="foto" src=""/><span class="fotoSrc">',markerO.placeData.foto.lite,'</span></div>',
					'<div class="cenaMin">',( markerO.placeData.c && markerO.placeData.c>0 ? 'od '+markerO.placeData.c+' PLN' : ''),'</div>',
					'<div class="nazwa">',markerO.placeData.nazwaSkrocona,'</div>',
				'</div>'].join('');
			wyszukaneObiektyListaContainer.append(html);
			
			//podpinanie eventów
			var obiektCont = $('#obiektLista'+markerO.placeData.nr);
			var celownik = new ELabel(markerO.getLatLng() , '<img src="gfx/celownik.gif">', "celownikLabel");
			
			obiektCont.mouseover(function(){	
				map.addOverlay(celownik);
				//upewniam sie że celowanik kiedyś zniknie
				setTimeout(function(){	
					map.removeOverlay(celownik);		
				}, 20000);
			});
			
			obiektCont.mouseout(function(){	
				map.removeOverlay(celownik);		
			});			
			
			
			obiektCont.click(function(){
				wyszukaneObiektyListaContainer.find('.obiekt').removeClass('obiektSelected');
				obiektCont.addClass('obiektSelected');
				displayManagerHandle.triggerClickObiekt(markerO.clusterIndex);
			});
		
		};
		
		O.addShowAllButton = function(){
			var html=[
				'<div class="obiekt showAllB obiektDisplay" style="display:none">',
				'pokaż więcej ofert &gt;&gt;',
				'</div>'].join('');		

			wyszukaneObiektyListaContainer.append(html);
			$('.showAllB').click(function(){
				$('#czyJedynki').val(1);
				searchManagerHandle.triggerJSSearch();
			});
		}
		
		
		//czysci wszystkie wyniki
		O.clear = function(){
			wyszukaneObiektyListaContainer.html('<div class="noItemsInfo">brak obiektów</div>');
			currentPage=1;
		};
		
	
		//pokazuje konkretną strone wyników
		O.showPage = function(page){
			 var offsetStart=(page-1)*pageLimit;
			 var offsetEnd=offsetStart+pageLimit;
			 var obiektyAll=wyszukaneObiektyListaContainer.find('.obiekt, .obiektDisplay');
			 var obiekty=wyszukaneObiektyListaContainer.find('.obiektDisplay');
			 
			 
			 if(offsetStart>=obiekty.length){
				return;
			 }
			 obiektyAll.hide();

			 obiekty.each(function(i){
				if(i >= offsetStart && i<offsetEnd){
					$(this).fadeIn();
					var that = this;
					setTimeout(function(){
						var src = $(that).find('.fotoD .fotoSrc').html();
						if(src){
							$(that).find('.fotoD .foto').attr('src', src);
						}
						$(that).find('.fotoD .fotoSrc').remove();
					}, 0);
				}
			 });
			 currentPage=page;
			 
			 setTimeout(function(){
				if(currentPage == 1){  wyszukaneObiektyListaContainer.find('.paging .previous').css({ 'color' : '#9F9945'});	 }
				else { wyszukaneObiektyListaContainer.find('.paging .previous').css({ 'color' : ''});}
				
				if(offsetStart + pageLimit >= obiekty.length){  wyszukaneObiektyListaContainer.find('.paging .next').css({ 'color' : '#9F9945'});	 }
				else { wyszukaneObiektyListaContainer.find('.paging .next').css({ 'color' : ''});}				
			}, 0);
			 
			 
		};
		
	
		
		O.createPaging = function(){
			var b=wyszukaneObiektyListaContainer.find('.obiektDisplay').length<pageLimit || wyszukaneObiektyListaContainer.find('.paging').length>0;
			if (b){ return; }
			//---HTML---
			var html=[
				'<div class="paging">',
				'<span class="previous strona">poprzednie</span>',
				'<span class="next strona">następne</span>',
				'</div>'
			].join('');
			wyszukaneObiektyListaContainer.append(html);
			
			//----eventy----
			
			//poprzednia strona
			wyszukaneObiektyListaContainer.find('.paging .previous').click(function(){
				if(currentPage>1){
					O.showPage(currentPage-1);
				}
			});
			
			//nastepna strona
			wyszukaneObiektyListaContainer.find('.paging .next').click(function(){
				if(1){
					O.showPage(currentPage+1);
				}
			});			
		};
		
		
		O.refresh = function(){
			setTimeout(function(){
				O.showPage(1);
				O.createPaging();
			}, 0);
		};
		
		
		O.remove = function(obiektID){
			//wyszukaneObiektyListaContainer.find('#obiektLista'+obiektID).remove();			
		};
		
		
		var checkPageButtons = function(){
			
		};
		
		init();
		return O;
	}	
	
	/* zarzadzanie wyświetlaniem obiektów */
	var displayManager = function(){	
		var O = {}; 
		
		/* ikony */
		var baseIcon;
		baseIcon = new GIcon();
		baseIcon.iconSize = new GSize(32,32);
		baseIcon.shadowSize = new GSize(56,32);
		baseIcon.iconAnchor = new GPoint(16,32);
		baseIcon.infoWindowAnchor = new GPoint(16,0);		
		var icoNocleg = new GIcon( baseIcon, "http://maps.google.com/mapfiles/kml/pal2/icon28.png", null, "http://maps.google.com/mapfiles/kml/pal2/icon28s.png" );
		var clusterMarkerIcon = icoNocleg;//new GIcon( baseIcon, "gfx/markery/icon_magnifying.png", null, "gfx/markery/icon_magnifying_shadow.png" );
		var cluster = null;
		
		var init = function(){
			cluster = new ClusterMarker(map, {clusterMarkerTitle : 'Kliknij aby zobaczyć %count obiektów', clusterMarkerIcon : clusterMarkerIcon, intersectPadding : -4 });
            cluster.clusterMarkerClick= function(args) { 
                while(args.clusteredMarkers[0]._isVisible === false){
                    map.zoomIn();
                    map.setCenter(args.clusteredMarkers[0].getLatLng());
                }
            }
		};
		
		O.displayPlaces = function(data, fitToMap){
			
			wyszukaneObiektyListaHandle.clear();
			var markersArray = [];
			for(var i=0; i<data.length; i++){
				var m = O.createPlace(data[i]);
				m.clusterIndex = i;
				markersArray.push(m);
			}
			if($('#czyJedynki').val() == 0){
				wyszukaneObiektyListaHandle.addShowAllButton();
			}			
			//wstawianie nowych markerów do klastra
			cluster.removeMarkers();
			cluster.addMarkers(markersArray);
			
			//odświeżanie listy obiektów
			setTimeout(function(){ wyszukaneObiektyListaHandle.refresh(); }, 0 )
			
			
			//jeśli jest tylko jedne obiekt to trigger click na jego markerze
			if(markersArray.length == 1 && Util.getData('lista_obiektow')){
				O.triggerClickObiekt(0);
				var iw = map.getInfoWindow();
				(function(){
					if(iw.isHidden()) { setTimeout(arguments.callee, 100); return; }
					map.getInfoWindow().maximize();
				})();
				 
			}
			
			//jeśli nie IE to przełączamy tab na liste obiektów (IE nie ma tego taba)
			if(!Util.czyIE6() && data.length>0){
				floatingControlsManagerHandle.selectTab('Obiekty');
			} else {
				floatingControlsManagerHandle.selectTab('Rodzaje');
			}
			if(typeof(fitToMap)!='undefined' && fitToMap && data.length>0){
				cluster.fitMapToMarkers();
			} else {
				cluster.refresh();
			}
			
			var zoom = Util.getData('zoomValue');
			if(zoom){
				setTimeout(function(){
					map.setZoom(parseInt(zoom));
				}, 0);
				Util.setData('zoomValue', '');
			}
		};
		
		O.triggerClickObiekt = function(index){
			cluster.triggerClick(index);
		};
		
		/* tworzenie markera pojedynczego obiektu */
		O.createPlace = function(data){
			var point = new GLatLng(data.y, data.x);  
			var m = new GMarker(point, { icon : icoNocleg, title : data.na});
			m.placeData = data;
			if(!Util.czyIE6()){
				wyszukaneObiektyListaHandle.addPlace(m);
			}
			GEvent.addListener(m, "click", function(){
				openSmallCloud(m);
			});
			return m;
		};
		
		/* maly dymek obiektu*/
		var openSmallCloud = function(m){
			var html =[
				'<div class="smallCloud">', 
					'<img class="foto" src ="', m.placeData.foto.medium, '" />',
					'<div class="nazwa">', m.placeData.na, '</div>',
					'<div class="cenamin">', (parseInt(m.placeData.c)  ? 'za nocleg od <b>' + m.placeData.c + ' PLN<b>' : ''), '</div>',
					'<div style="margin-top:10px;" class="link" onclick="Maps.oGMap2.getInfoWindow().maximize();">wyślij zapytanie >></div>',
					'<div style="float:right;" class="link" onclick="Maps.oGMap2.getInfoWindow().maximize();">więcej >></div>',
				'</div>'
			].join('');
			
			var maxContentDiv = document.createElement('div');
			maxContentDiv.innerHTML='<div style="width: 720px" ><img src="gfx/ajax-loader1.gif">&nbsp;Proszę czekać trwa pobieranie danych ...</div>';
			m.openInfoWindowHtml(html, { maxTitle:'<span class="nazwa">'+m.placeData.na+'</span>', maxContent : maxContentDiv });
	
			var iw = map.getInfoWindow();
						
			//usuwanie listenera jeśli ustawiony
			if(state.maxHandle){
				GEvent.removeListener(state.maxHandle);
			}
			//alert(maxContentDiv);
			state.maxHandle = GEvent.addListener(iw,"maximizeclick", function() { 
				GDownloadUrl("index.php?c=ObiektAjax&obiektID="+m.placeData.nr, function(data) {			
					maxContentDiv.innerHTML ='<div class="bigCloud">'+data+'</div>';
					bigCloudEvents(iw, m.placeData.nr);
				});				
			})
			
		};
		
		/**
		 * strona obiektu
		 */
		function bigCloudEvents(win, obiektID){
			var obiektDetails = null;
			var oRezerwacjeOnlineController = new RezerwacjeOnlineController({ overlay : { color : 'black'}, serwis:'meteor24.pl'});

			/**
			 * inicjalizacja
			 */
			var init = function(){				
				obiektDetails = $('.obiektDetails');
				
				overlayObiekt.init();
				$(".miniatury-karuzela").jcarousel({visible : 4, scroll : 1	});

				bindEvents();
				if($('#obiektPriorytet').val() < 3){
					overlayObiekt.displayMessage("Brak adresu e-mail obiektu");
				}				
			};
			
			/**
			 * bindowanie eventów
			 */
			var bindEvents = function(){
				//usuwanie ducha zapytania
				obiektDetails.find('#pytanie').focus(function(){
					var field = $(this);
					if(field.hasClass('dirty')) {
						return;
					}				
					field.val('');
					field.addClass('dirty');					
				});
				
				//submit zapytania
				obiektDetails.find('#obiektKontakt .submitB').click(function(){
					sendMessage();
				});	
				
				obiektDetails.find('#obiektKontakt .rezOnlineB').click(function(){
					oRezerwacjeOnlineController.display(obiektID);
				});					
				
				$('img.miniatura').hover(function(){ 
					switchFoto($(this).attr('src'), $(this).attr('title'), $(this).attr('data-item-number'));
				});
				
				//showGPSData				
				obiektDetails.find('.showGPSDataB').click(function(){
					$(this).hide();				
					showGPSData();
				});

				obiektDetails.find(".lightBox").fancybox({
					'transitionIn'	:	'elastic',
					'transitionOut'	:	'elastic',
					'speedIn'		:	600,
					'speedOut'		:	200,
					'hideOnContentClick': true

				});


				obiektDetails.find('.fotoBig').css({ cursor:'pointer'});


				//setTimeout(function(){ console.log('juz'); $.fancybox.pos(2); }, 4000);

				
				obiektDetails.find('.fotoBig').click(function(){
					var itemNumber =  $(this).attr('data-item-number');
					obiektDetails.find(".lightBoxItem" + itemNumber).click();
				});
			
				
				
			};
			
			/**
			*	pokazywanie współrzednych
			*/
			var showGPSData = function(){
				var imgSrc = "http://meteor.turystyka.pl/coordinates," + obiektID + ".jpg"
				obiektDetails.find('.coordinatesData').show();
				obiektDetails.find('.coordinatesData').attr("src", imgSrc);
			}
			
			/**
			*	zmiana zdjęcia
			*/
			var switchFoto = function(miniSrc, title, itemNumber){
				$('.fotoBig').attr('src', miniSrc.replace(',lite,', ',big,'));
				$('.fotoBig').attr('data-item-number', itemNumber);
				$('.fotoBig').parent('.lightBox').attr('src', miniSrc.replace(',lite,', ',large,'));
				$('.fotoBig').attr('title', title);
				$('.fotoBig').parent().attr('title', title);
				$('.photoDescription').html(title);

			};

			/**
			 * wysyłanie wiadomości do obiektu
			 */
			var sendMessage = function(){
				var setRed = function(fieldRef, b){
					if(b){
						fieldRef.css( 'border', '2px solid red');
					} else {
						fieldRef.css( 'border', '');
					}
				};			
						
				var refData = {
					nazwisko : obiektDetails.find('#nazwisko'),
					email1 : obiektDetails.find('#email1'),
					telefon : obiektDetails.find('#telefon'),
					od_kiedy : obiektDetails.find('#od_kiedy'),
					do_kiedy : obiektDetails.find('#do_kiedy'),
					ile_osob : obiektDetails.find('#ile_osob'),
					pytanie : obiektDetails.find('#pytanie')
				};
				
				var valid = true;
				
				//walidacja email
				if(!refData.email1.val().match(/^[_a-z0-9\-]+(\.[_a-z0-9\-]+)*@[a-z0-9\-]+(\.[a-z0-9\-]+)*(\.[a-z]{2,4})$/)){ valid = false; setRed(refData.email1, true);} 
				else {	setRed(refData.email1, false);	}

				//walidacja zapytania
				if(refData.pytanie.val().length<10 || !refData.pytanie.hasClass('dirty') || !refData.pytanie.val().match(/\s/)){ valid = false; setRed(refData.pytanie, true);} 
				else {	setRed(refData.pytanie, false);	}				
				
				
				if(valid){
					var sendData = {};					
					for(var k in refData){
						sendData[k] = refData[k].val();
					}				
					sendData.id_o = obiektID;
					sendData.firstname = '';
					sendData.email = '';
					if (obiektDetails.find('#newsletter').attr('checked')){
						sendData.newsletter = 1;
					}
					
					overlayObiekt.display(true);
					overlayObiekt.setMessageText("Trwa wysyłanie ...");
					
					$.post("index.php?c=ObiektKontakt", sendData, function(odp){
						var status = eval(odp);					
						overlayObiekt.displayMessage(status.message, 5000);
					});
				} else {
					overlayObiekt.displayMessage("Proszę poprawić pola zaznaczone na czerwono", 5000);				
				}

			};
			
			/**
			 * overlay obiektu
			 */
			var overlayObiekt = {
				init : function(){
					obiektDetails.find('#obiektKontakt').css('position', 'relative');
					obiektDetails.find('#obiektKontakt').append('<div id="overlayObiektContainer" style="_filter:alpha(opacity=90); -moz-opacity: 0.9; opacity: 0.9;"></div>');
					obiektDetails.find('#obiektKontakt').append('<div id="overlayObiektMessage" style="font-size: 20px; text-align: center;"></div>');
					
					overlayObiekt.message=$('#overlayObiektMessage');
					overlayObiekt.container=$('#overlayObiektContainer');
					overlayObiekt.container.css({
						position : 'absolute',
						height : obiektDetails.find('#obiektKontakt').height(),
						width : obiektDetails.find('#obiektKontakt').width(),
						top : 0,
						left : 0,
						background : 'white',
						display : 'none'
					});
					
					overlayObiekt.message.css({
						position : 'absolute',
						width : obiektDetails.find('#obiektKontakt').width(),
						top : 100,
						left : 0,
						background : 'white',
						display : 'none',
						color : 'red'
					});					
				},
				display : function(b){
					b ? overlayObiekt.container.show() : overlayObiekt.container.hide(); 
					b ? overlayObiekt.message.show() : overlayObiekt.message.hide(); 
				},
				setMessageText : function(text){
					overlayObiekt.message.html(text)
				},
				displayMessage : function(text, time){					
					overlayObiekt.setMessageText(text);
					overlayObiekt.display(true);
					if(typeof(time) != 'undefined'){
						setTimeout(function(){ overlayObiekt.display(false); }, time);					
					}
				}
			};

			//inicjowanie strony obiektu
			if($('#loadIndicator').length>0){
				init();
			} else {
				setTimeout(function(){ bigCloudEvents(win, obiektID); }, 100);
			}			
			
		};
		
		
		//init displayManager
		init();
		return O;
	};
	
	/* zarzadzanie wyszukiwaniem */
	var searchManager = function(){
		var O = {};
		var searchInProgress = false;
		var found = [];
		
		var init = function(){
			autocompleteManager();
			bindEvents();
		};
		
		var bindEvents = function(){
			//kraina
			$('.searchFormKraina').find('.searchSerializeAjax').change(function(){
				formsManagerHandle.reset('kraina', true);
				 O.triggerSearch('kraina_nr');
			});
			
			//przyTrasie
			$('.searchFormPrzyTrasie .searchFormPrzyTrasieSubmitB').click(function(){
				
				var radius = parseInt($('#searchFormPrzyTrasieRadius').val());
				$('#searchFormPrzyTrasieRadius').val(radius ? radius : 11);


				var rMin = 1;
				var rMax = 25;

				if(radius && (radius < rMin || radius > 25)){
					Util.alert({ text : "Promień powinien być<br/> większy od " + rMin + " i mniejszy od " + rMax,  title : "uwaga"});
					return;
				}

				szukaniePrzyTrasieManagerHandle.search({
					locFrom: $('#searchFormPrzyTrasieFrom').val(),
					locTo : $('#searchFormPrzyTrasieTo').val(),
					locThrough : $('#searchFormPrzyTrasieThrough').val(),
					radius : radius ? radius : 11
				});
				formsManagerHandle.reset('przyTrasie', true);
				formsManagerHandle.toggleAdvanced(true);
			});
			
			//cena i miejsca
			$('.searchFormCenaMiejsca .searchFormCenaMiejscaSubmitB').click(function(){
				O.triggerJSSearch(true);	
			});			
		}

		/* szuka obiektów na podtsawie otrzymanych kryteriów */
		O.search = function(kryteriaAjax, kryteriaJS, searchOptions){
			var _searchOptions = {
			    setBounds : true
			};
			
			if(typeof(searchOptions) == 'object'){
			    for(var i in searchOptions){
				_searchOptions[i] = searchOptions[i];
			    }
			}
			if(searchInProgress){
				return;
			}
			searchInProgress = true;
			//formsManagerHandle.toggleAdvanced2(false);
			formsManagerHandle.setMode('compact');
			
			
			//sprawdzamy czy sa ustawione jakieś ktyteria
			if (!Util.hasProperty(kryteriaAjax, true)){			
				return false;
			}
			helperHandle.toggleRadarLoader(true);
			//sprawdzamy czy sa ustawione jakies kryteria dla O.getFilteredFound
		
			
			formsManagerHandle.reset('rodzaje');
			$.post(Util.path+"index.php?c=MapSearch&f=bounds", kryteriaAjax, function(odp){
				
				//centrowanie mapy
				if(_searchOptions.setBounds){
				    var bounds = eval(odp);
				    var boundsSet = Util.hasProperty(bounds);
				    if (boundsSet){
					    centerMap(bounds);
				    } else {

				    }

				    helperHandle.markLocation(bounds);
				} else{
				    boundsSet = true;
				}
				
				$.post(Util.path+"index.php?c=MapSearch&f=list", kryteriaAjax, function(odp){
					searchInProgress = false;
					var data = eval(odp);
					found = [];
					var rodzajMaska = 0;
					for(var ob in data){
						data[ob].foto = {};
						data[ob].foto.lite = helperHandle.getFoto(data[ob], 'lite');
						data[ob].foto.medium = helperHandle.getFoto(data[ob], 'medium');
						data[ob].nazwaSkrocona = Util.limitString(data[ob].na, 50, true);						
						found.push(data[ob]);
						rodzajMaska = rodzajMaska | data[ob].rm;						
					}
					floatingControlsManagerHandle.display(true);
					
					var rodzajChecked = (typeof(kryteriaJS) != 'undefined' && typeof(kryteriaJS.rodzaj_maska_lub) != 'undefined') ? kryteriaJS.rodzaj_maska_lub : 0;
					
					floatingControlsManagerHandle.loadRodzaje(rodzajMaska, rodzajChecked);
					//alert(data.length);

					if(typeof(kryteriaJS) != 'undefined' && (typeof(kryteriaJS.czyJedynki)=='undefined' || !Util.hasProperty(kryteriaJS)) && data.length > 10){
						$('#czyJedynki').val(0);
						if(typeof(kryteriaJS)=='undefined'){
							kryteriaJS = { czyJedynki : false };
						} else {
							kryteriaJS.czyJedynki = false;
						}
					} 
										
					if(!Util.czyIE6() || Util.hasProperty(kryteriaJS, true) || data.length<100){
						displayManagerHandle.displayPlaces(O.getFilteredFound(kryteriaJS), !boundsSet );
					}
					
					if(data.length > 1){
						//formsManagerHandle.toggleAdvanced2(true);
					}
					
					helperHandle.toggleRadarLoader(false);
				});

			});			
		};
		
		
		/* zbiera kryteria wyszukiwania dla ajaxa
		*  @param string nazwa kryterium do serializacji
		*/
		O.serializeSearchAjaxData = function(filter, prefix){
			if(typeof(prefix) == 'undefined'){
				prefix = 'searchKryt_';
			}
			var data = {};
			$('.searchSerializeAjax').each(function(){
				var field = $(this);
				if (field.val()){
					if (typeof(filter)!=='undefined' && filter){
						if(field.attr('name') === filter) {
							data[prefix+field.attr('name')] = field.val();
						}
					} else {
						data[prefix+field.attr('name')] = field.val();
					}
					
				}
			});

			return data;
		};
				
		
		/* zwraca znalezione obiekty przefiltrowane pod kątem rodzaju, cech itp*/
		O.getFilteredFound = function(param){
		
			if(typeof(param)==='undefined'){
				return found;
			}
			var result = [];
			for(var i=0; i<found.length; i++){
				//rodzaj maska
				if( typeof(param.rodzaj_maska_lub)!='undefined' && param.rodzaj_maska_lub>0){ if ((parseInt(found[i].rm) & param.rodzaj_maska_lub) === 0) {  continue; }	}
				
				//cena
				if(typeof(param.cena)!='undefined'){ if (found[i].c < param.cena.from || found[i].c > param.cena.to)  {  continue; }	}

				//miejsca
				if(typeof(param.miejsca)!='undefined'){ if (found[i].mi < param.miejsca.from || found[i].c > param.miejsca.to)  {  continue; }	}

				//priorytet
				if(typeof(param.czyJedynki)!='undefined' && !param.czyJedynki){ if (found[i].pr < 3)  {  continue; }	}
					
				//wrzucanie do tablicy wynikowej
				result.push(found[i]);				
			}

			if(result.length == 0 && typeof(param.czyJedynki)!='undefined' && !param.czyJedynki){
			    param.czyJedynki = true;
			    result = O.getFilteredFound(param);
			}
			return result;
		};
		
		/* odpala wyszukikiwanie */
		O.triggerSearch = function(filterAjax, filterJS){
			O.search(
				O.serializeSearchAjaxData(typeof(filterAjax)!=='undefined' ? filterAjax : false), //dane ajaxowe
				typeof(filterJS)!=='undefined' ? filterJS : {} //dane dla O.getFilteredFound
			);
		};
		
		/* odpala wyszukikiwanie JS */
		O.triggerJSSearch = function(b){
			var setBounds = typeof(b) !='undefined' ? b : false;
		
			var cena = {
				from : parseInt($('#searchFormCenaMiejscaCenaFrom').val()) ? parseInt($('#searchFormCenaMiejscaCenaFrom').val()) : 0,
				to : parseInt($('#searchFormCenaMiejscaCenaTo').val()) ? parseInt($('#searchFormCenaMiejscaCenaTo').val()) : 1000
			};

			var miejsca = {
				from : parseInt($('#searchFormCenaMiejscaMiejscaFrom').val()) ? parseInt($('#searchFormCenaMiejscaMiejscaFrom').val()) : 0,
				to : parseInt($('#searchFormCenaMiejscaMiejscaTo').val()) ? parseInt($('#searchFormCenaMiejscaMiejscaTo').val()) : 10000
			};				
			
			var rodzaj_maska_lub = helperHandle.generateMask($('#floatingControlsPane').find(".tabsContent .rodzajeLista"));
			
			var czyJedynki = $('#czyJedynki').val() == 1 || $('#searchFormPrzyTrasieFrom').val() == 'kopytko'; //warunek z kopytkiem to taki mały trick, żeby łatwiej było testować;)
			
			displayManagerHandle.displayPlaces(
				searchManagerHandle.getFilteredFound({cena : cena, miejsca : miejsca, rodzaj_maska_lub : rodzaj_maska_lub, czyJedynki : czyJedynki}),
				setBounds
			);
		};

		
		/* zarzadza autocompletem */
		var autocompleteManager = function(){
			var init = function(){
				autocompleteMiasto();
				autocompleteObiekt();
				autocompleteJezioro();
			};
			
			var autocompleteMiasto = function(){
			
				$('.searchFormMiasto .searchFormValue').autocomplete("index.php?c=Autocomplete&autocomplete_type=miasto", {
					delay : 100,
					max : 100,
					minChars : 3,
					width : 300,
					formatItem : function(r){  return r[0]+'<span class="ac_addon">'+r[2]+'</span>';}
					//,selectCurrent : true,
					//autoFill : true
				}).result(function(event, data, formatted) {
					$('.searchFormMiasto .searchFormHiddenValue').val(data[1]);
					formsManagerHandle.reset('miasto', true);
					//O.triggerSearch('miasto_nr', { rodzaj_maska_lub : 32768});
					if(opt.weather){
						weatherMenagerHandle.showWeather({kryteria : O.serializeSearchAjaxData('miasto_nr', 'kryt_') });
					} else { 
						O.triggerSearch('miasto_nr');
					}
				});
				
				$('.searchFormMiasto .searchFormValue').keypress(function(e){
					if(e.keyCode == 13){
						O.triggerSearch('miasto_nazwa_textfield');
						$('.ac_results').hide();
					}	
				});
			};

			var autocompleteObiekt = function(){
				$('.searchFormObiekt .searchFormValue').autocomplete("index.php?c=Autocomplete&autocomplete_type=obiekt", {
					delay : 100,
					max : 100,
					minChars : 4,
					width : 300,
					matchContains : true,
					selectCurrent : true,
					autoFill : true
				}).result(function(event, data, formatted) {
				   $('.searchFormObiekt .searchSerialize').val(data[1]);
				   formsManagerHandle.reset('obiekt', true);
				   O.triggerSearch('lista_obiektow');
				});
			};

			var autocompleteJezioro = function(){
				$('.searchFormJezioro .searchFormValue').autocomplete("index.php?c=Autocomplete&autocomplete_type=jezioro", {
					delay : 100,
					max : 100,
					minChars : 4,
					width : 300,
					matchContains : true,
					selectCurrent : true,
					autoFill : true
				}).result(function(event, data, formatted) {
				   $('.searchFormJezioro .searchSerialize').val(data[1]);
				   formsManagerHandle.reset('jezioro', true);
				   O.triggerSearch('jezioro_nr');
				});
			};
			
			init();
		};
		
		//init searchManager
		init();
		return O;
	};


	var formsManager = function(){
		var O = {};
		var currentMode = 'compact';
		var floatingSearchFormsPaneHandle = null;
		var searchFormsDivHandle = null;
		var advancedSearchPaneDivHandle = null;
		var advancedSearchPane2DivHandle = null;
		
		var formsData = {
			'rodzaje' : {
				ref : $(".tabsContent .rodzajeLista"),
				reset : function() { $(".tabsContent .rodzajeLista .rodzajCheck").attr('checked', false); },
				fixedPosition : true
			},
			'miasto' : { 
				ref : $(".searchFormMiasto"),
				reset : function() { $(".searchFormMiasto input:not(.hasGhost)").val(''); }
			},
			'obiekt' : { 
				ref : $(".searchFormObiekt"),
				reset : function() { $(".searchFormObiekt input:not(.hasGhost)").val(''); }
			},
			'jezioro' : { 
				ref : $(".searchFormJezioro"),
				reset : function() { $(".searchFormJezioro input:not(.hasGhost)").val(''); }
			},
			'kraina' : { 
				ref : $(".searchFormKraina"),
				reset : function() { $(".searchFormKraina select").val('');}
			},
			'przyTrasie' : { 
				ref : $(".searchFormPrzyTrasie"),
				reset : function() { szukaniePrzyTrasieManagerHandle.clear();  $(".searchFormPrzyTrasie input[type=text]:not(.hasGhost)").val(''); $(".searchFormPrzyTrasie input[type=hidden]").val('');},
				compactModeDest : $('#advancedSearchPane'),
				compactModePostCallback : function(f, destinationPane){
					destinationPane.find('#searchFormPrzyTrasieRadius').show();
					destinationPane.find('.searchFormLabel').css({
						display : 'block',
						fontSize : 10
					});
				}
			},
			'cenaMiejsca' : { 
				ref : $(".searchFormCenaMiejsca"),
				reset : function() {  $(".searchFormCenaMiejsca input[type=text]:not(.hasGhost)").val(''); $(".searchFormCenaMiejsca input[type=hidden]").val('');},
				fixedPosition : true
			}
		};
		
		var init = function(){
			O.setGhost();
			searchFormsDivHandle = $('#searchForms');
			advancedSearchPaneDivHandle = $('#advancedSearchPane');
			advancedSearchPane2DivHandle = $('#advancedSearchPane2');
			bindEvents();
		};
		
		var bindEvents = function(){
			$('.advancedSearchPaneToggleB').click(function(){
				O.toggleAdvanced();
			});

			$('.advancedSearchPaneCloseB').click(function(){
				O.toggleAdvanced(false);
			});

			$('.advancedSearchPane2ToggleB').click(function(){
				O.toggleAdvanced2();
			});			
			
			$('.advancedSearchPane2CloseB').click(function(){
				O.toggleAdvanced2(false);
			});			
			
		};
		
		
		/* resetowanie wybranych formularzy */
		O.reset = function(co, bez){
			if(typeof(bez)!='undefined' && bez){			
					for(var f in formsData){
						if(co != f){
							formsData[f].reset();
						}
						O.setGhost(co);
					}
			} else {
				if(co == 'all'){
					for(var f in formsData){
						formsData[f].reset();
					}
				} else {
					formsData[co].reset();
				}
			}
		};	

		
		/* ustawia napisy duszki */
		O.setGhost = function(bez){
			for(var f in formsData){
				if(typeof(bez)!='undefined' && f==bez){ continue; }
				formsData[f].ref.find('input[type=text]').each(function(){
					$(this).val($(this).attr('title')).addClass('hasGhost').focus(function(){
						if($(this).hasClass("hasGhost")){
							$(this).removeClass("hasGhost").val('');
						}						
					});					
				});				
			}			
		};


		/* wyswiatlanie/chowanie wybranych formularzy */
		O.display = function(b ,co, bez){
			if(typeof(bez)!='undefined' && bez){			
					for(var f in formsData){
						if(co != f){
							b ? formsData[f].ref.show() : formsData[f].ref.hide();
						}
					}
			} else {
				if(co == 'all'){
					for(var f in formsData){
						b ? formsData[f].ref.show() : formsData[f].ref.hide();
					}
				} else {
					b ? formsData[co].ref.show() : formsData[co].ref.hide();
				}
			}
		};		
		
		/* przełącza tryb wyświetlania formularzy */
		O.setMode = function(mode){
			if(currentMode == mode) {
				return;
			}
			currentMode = mode;
			switch(mode){	
				case 'float': setModeFloat(); break;
				case 'compact': setModeCompact();  break;
			}
		};
		
		/* włącza tryb formularza na tle mapy */
		var setModeFloat = function(){	
			if(!floatingSearchFormsPaneHandle){
				var html = '<div id = "floatingSearchFormsPane" class="roundedCorners"><h4 class="map heading">Szukaj noclegu</h4><h4 class="weather heading">Sprawdź pogodę</h4></div>';
				var left=(mapDivHandle.width())/2 - 130;
				map.addControl(new HtmlControl(html, { visible : true, selectable : true, printable : false } ),  new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(left, 50)));
				floatingSearchFormsPaneHandle = $('#floatingSearchFormsPane');
			}
			
			for(var f in formsData){
				if (typeof(formsData[f].fixedPosition)!='undefined' && formsData[f].fixedPosition) { continue; }
				formsData[f].ref.appendTo(floatingSearchFormsPaneHandle);
			}	
			floatingSearchFormsPaneHandle.show();	

			//dodatkowe 
			$('.advancedSearchPaneToggleB').hide();		
			$('.advancedSearchPane2ToggleB').hide();	
		};
		
		
		/* włącza tryb formularza kompaktowego */
		var setModeCompact = function(){
			for(var f in formsData){
				if ((typeof(formsData[f].fixedPosition)!='undefined' && formsData[f].fixedPosition)) { continue; }
				var destinationPane = searchFormsDivHandle;
				if (typeof(formsData[f].compactModeDest)!='undefined'){	
					destinationPane = formsData[f].compactModeDest;
				}
				formsData[f].ref.appendTo(destinationPane);
				if (typeof(formsData[f].compactModePostCallback)!='undefined'){
					formsData[f].compactModePostCallback(formsData[f], destinationPane);
				}


			}
			floatingSearchFormsPaneHandle.hide();		
			if(!Util.czyIE()){ 
				zoomControlsManagerHandle.toggle(true);
			}
			
			
			//dodatkowe 
			$('.advancedSearchPaneToggleB').show();
			formsManagerHandle.toggleAdvanced2(false);
		};		
		
		O.toggleAdvanced = function(b){
			if(typeof(b)!='undefined'){
				if(b){	
					advancedSearchPaneDivHandle.fadeIn();
					$('.advancedSearchPaneToggleB').fadeOut();						
				} else {	
					advancedSearchPaneDivHandle.fadeOut('fast');	
					$('.advancedSearchPaneToggleB').fadeIn();	
				}
			} else {
				$('.advancedSearchPane:visible').length>0 ? O.toggleAdvanced(false) : O.toggleAdvanced(true);	
			}
		};
		
		O.toggleAdvanced2 = function(b){
			if(typeof(b)!='undefined'){
				if(b){	
					advancedSearchPane2DivHandle.fadeIn();
					$('.advancedSearchPane2ToggleB').fadeOut();						
				} else {	
					advancedSearchPane2DivHandle.fadeOut('fast');	
					$('.advancedSearchPane2ToggleB').fadeIn();	
				}
			} else {
				$('.advancedSearchPane2:visible').length>0 ? O.toggleAdvanced2(false) : O.toggleAdvanced2(true);	
			}
		};		
		
		//init formsManager
		init();
		return O;
	};
	
	
	/* pomocnicze funkcje */
	var helper = function(){
		var O = {};
		
		var locationMarker = null;
		
		/* @param dane obiektu (NIE MARKER) */
		O.getFoto = function(data, format){
			var serwerFoto = "http://www.noclegiw.pl/zdjecia/";	
			return serwerFoto + data.z.replace('#', format) + '.jpg';
		};	

		/* generuje maske na podstawie checkboxów	*/
		O.generateMask = function(contener, inputClass){
			var mask = 0;
			var inputClass = typeof(inputClass)!='undefined' ? inputClass : 'maskaValue';
			contener.find('.'+inputClass).each(function(){
				if(this.checked){
					mask+= parseInt(this.value);
				}			
			});
			return mask;
		};
		
		/* pokazuje/ukrywa loader-radar */
		O.toggleRadarLoader = function(b){
			if(typeof(b)!='undefined'){
				if(b){
					$('#loader-radar:hidden').show();				
				} else {
					$('#loader-radar:visible').hide();
				}
			} else {
				$('#loader-radar').toggle();
			}			
		};
		
		/* oznaczanie lokacji */
		O.markLocation = function(data){
			//usuwanie starego markera
			if (locationMarker){
				map.removeOverlay(locationMarker);
			}
	
			//jezli brak potrzebnych danych to kończymy
			if(typeof(data) == 'undefined' || !data || typeof(data.p) == 'undefined' || typeof(data.markLocation) == 'undefined' || !data.markLocation){
				return;
			}

			//ustawianie opcji markera
			var locationMarkerOptions = {};
			
			//ikona
			if(typeof(data.icon) != 'undefined' && data.icon || typeof(data.icon_shadow) != 'undefined' && data.icon_shadow){
				var icon = new GIcon(G_DEFAULT_ICON);
				icon.iconSize = new GSize(32,32);
				icon.shadowSize = new GSize(56,32);
				icon.iconAnchor = new GPoint(16,32);
				icon.infoWindowAnchor = new GPoint(16,0);					
				icon.image = data.icon;	
				icon.shadow = data.icon_shadow;	
				locationMarkerOptions.icon = icon;
			}
			
			//title
			if(typeof(data.title) != 'undefined' && data.title){
				locationMarkerOptions.title = data.title;
			}
			
			//tworzenie markera
			locationMarker = new GMarker(new GLatLng(data.p.y, data.p.x), locationMarkerOptions);
			
			//infoWindow
			if(typeof(data.infoWindowContent) != 'undefined' && data.infoWindowContent){
				GEvent.addListener(locationMarker, "click", function() {
					if(typeof(data.infoWindowContent)=='string'){//zwykłe info window
						locationMarker.openInfoWindowHtml(data.infoWindowContent);  
					} else if(typeof(data.infoWindowContent)=='object'){ //info window z zakładkami
						var tabs = [];
						for(var strona in data.infoWindowContent){
							tabs.push(new GInfoWindowTab(strona, data.infoWindowContent[strona]));
						}
						locationMarker.openInfoWindowTabsHtml(tabs);
					}
				});  				
			}
						
			//dodawanie markera do mapy
			map.addOverlay(locationMarker);
			
			if(typeof(data.infoWindowOpen) != 'undefined' && data.infoWindowOpen){
				GEvent.trigger(locationMarker, "click");
			}			
		};
		
		return O;
	};
	
	/* zarządzanie wyświetlaniem pogody */
	var weatherMenager = function(){
		var O ={};
		
		var init = function(){
			bindEvents();
		};
		
		var bindEvents = function(){
			GEvent.addListener(map, "click", function(overlay,latlng){
				if(typeof(latlng) != 'undefined'){
					showWeatherWsp({ wsp_lon : latlng.lng(), wsp_lat : latlng.lat()});
				}				
			});
		};
		
		
		/* pokazywanie pogody */
		O.showWeather = function(param){
			formsManagerHandle.setMode('compact');
			if(typeof(param.wsp)!='undefined'){
				showWeatherWsp(param.wsp);
			} else if(typeof(param.kryteria)!='undefined'){
				showWeatherKryteria(param.kryteria);
			}
		};


		/* pokazuje pogodę w miejscu spełniającym okreslone kryteria */
		var showWeatherKryteria = function(kryteria){
			$.get("index.php?c=MapWeather&f=jsonWeatherKryteria", kryteria, function(odp){
				var bounds = eval(odp);	
				centerMap(bounds);					
				helperHandle.markLocation(bounds);
			});
		};
		
		/* pokazuje pogodę w miejscu o określonych współrzednych */
		var showWeatherWsp = function(wsp){
			$.get("index.php?c=MapWeather&f=jsonWeatherWsp", wsp, function(odp){
				var bounds = eval(odp);			
				helperHandle.markLocation(bounds);
			});
		};
		
				
		//init weatherMenager
		init();
		return O;
	};
	
	
	var zoomControlsManager = function(){
		var O = {};
		var controlsPane = null;

		var init = function(){
			var html = '<div id = "zoomControlsPane" class="roundedCorners"><div class="zoomInB zoomB roundedCornersTop" title="przybliż">+</div><div class="zoomOutB  zoomB roundedCornersBottom" title="oddal">-</div></div>';
			map.addControl(new HtmlControl(html, { visible : true, selectable : true, printable : false } ),  new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5, 190)));
			controlsPane = $('#zoomControlsPane');		
			bindEvents();
		}
		
		var bindEvents = function(){
			controlsPane.find(".zoomInB").click(function(){	map.zoomIn(); }); 
			controlsPane.find(".zoomOutB").click(function(){map.zoomOut();}); 
			//controlsPane.find(".zoomB").mouseup(function(){ window.getSelection().removeAllRanges(); }); 
		}
		
		
		O.toggle = function(b){
			if(typeof(b)!='undefined'){
				if(b){	
					controlsPane.fadeIn();					
				} else {	
					controlsPane.fadeOut('fast');	
				}
			} else {
				$('.zoomControlsPane:visible').length>0 ? O.toggle(false) : O.toggle(true);	
			}
		};		
		
		init();
		return O;
	}
	
	
	var removeIfIE = function(){
		if(!Util.czyIE()){ return; }
		$('.advancedSearchPaneToggleB').remove();	
	};
	
	//init Maps
	init();
	return MO;
}

//DODATKOWE funkcje dla GMaps
//http://googlemapsapi.martinpearman.co.uk/htmlcontrol
function HtmlControl(_1,_2){this.html=_1;this.isVisible=true;this.isPrintable=false;this.isSelectable=false;if(_2){this.isVisible=(_2.visible===false)?false:true;this.isPrintable=(_2.printable===true)?true:false;this.isSelectable=(_2.selectable===true)?true:false;}}HtmlControl.prototype=new GControl();HtmlControl.prototype.initialize=function(_3){this.div=document.createElement("div");this.div.innerHTML=this.html;this.setVisible(this.isVisible);_3.getContainer().appendChild(this.div);return this.div;};HtmlControl.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(7,7));};HtmlControl.prototype.selectable=function(){return this.isSelectable;};HtmlControl.prototype.printable=function(){return this.isPrintable;};HtmlControl.prototype.setVisible=function(_4){this.div.style.display=_4?"":"none";this.isVisible=_4;};HtmlControl.prototype.visible=function(){return this.isVisible;};
function ELabel(point,html,classname,pixelOffset,percentOpacity,overlap){this.point=point;this.html=html;this.classname=classname||"";this.pixelOffset=pixelOffset||new GSize(0,0);if(percentOpacity){if(percentOpacity<0){percentOpacity=0;}if(percentOpacity>100){percentOpacity=100;}}this.percentOpacity=percentOpacity;this.overlap=overlap||false;this.hidden=false;}ELabel.prototype=new GOverlay();ELabel.prototype.initialize=function(map){var div=document.createElement("div");div.style.position="absolute";div.innerHTML='<div class="'+this.classname+'">'+this.html+'</div>';map.getPane(G_MAP_FLOAT_SHADOW_PANE).appendChild(div);this.map_=map;this.div_=div;if(this.percentOpacity){if(typeof(div.style.filter)=='string'){div.style.filter='alpha(opacity:'+this.percentOpacity+')';}if(typeof(div.style.KHTMLOpacity)=='string'){div.style.KHTMLOpacity=this.percentOpacity/100;}if(typeof(div.style.MozOpacity)=='string'){div.style.MozOpacity=this.percentOpacity/100;}if(typeof(div.style.opacity)=='string'){div.style.opacity=this.percentOpacity/100;}}if(this.overlap){var z=GOverlay.getZIndex(this.point.lat());this.div_.style.zIndex=z;}if(this.hidden){this.hide();}};ELabel.prototype.remove=function(){this.div_.parentNode.removeChild(this.div_);};ELabel.prototype.copy=function(){return new ELabel(this.point,this.html,this.classname,this.pixelOffset,this.percentOpacity,this.overlap);};ELabel.prototype.redraw=function(force){var p=this.map_.fromLatLngToDivPixel(this.point);var h=parseInt(this.div_.clientHeight);this.div_.style.left=(p.x+this.pixelOffset.width)+"px";this.div_.style.top=(p.y+this.pixelOffset.height-h)+"px";};ELabel.prototype.show=function(){if(this.div_){this.div_.style.display="";this.redraw();}this.hidden=false;};ELabel.prototype.hide=function(){if(this.div_){this.div_.style.display="none";}this.hidden=true;};ELabel.prototype.isHidden=function(){return this.hidden;};ELabel.prototype.supportsHide=function(){return true;};ELabel.prototype.setContents=function(html){this.html=html;this.div_.innerHTML='<div class="'+this.classname+'">'+this.html+'</div>';this.redraw(true);};ELabel.prototype.setPoint=function(point){this.point=point;if(this.overlap){var z=GOverlay.getZIndex(this.point.lat());this.div_.style.zIndex=z;}this.redraw(true);};ELabel.prototype.setOpacity=function(percentOpacity){if(percentOpacity){if(percentOpacity<0){percentOpacity=0;}if(percentOpacity>100){percentOpacity=100;}}this.percentOpacity=percentOpacity;if(this.percentOpacity){if(typeof(this.div_.style.filter)=='string'){this.div_.style.filter='alpha(opacity:'+this.percentOpacity+')';}if(typeof(this.div_.style.KHTMLOpacity)=='string'){this.div_.style.KHTMLOpacity=this.percentOpacity/100;}if(typeof(this.div_.style.MozOpacity)=='string'){this.div_.style.MozOpacity=this.percentOpacity/100;}if(typeof(this.div_.style.opacity)=='string'){this.div_.style.opacity=this.percentOpacity/100;}}};ELabel.prototype.getPoint=function(){return this.point;};ELabel.prototype.U=function(){return this.point;};ELabel.prototype.V=function(){return this.point;};ELabel.prototype.W=function(){return this.point;};ELabel.prototype.X=function(){return this.point;};ELabel.prototype.Y=function(){return this.point;};ELabel.prototype.Z=function(){return this.point;};

