	var Ads = {
		iter: 0,
		reload: function() {
			if (Ads.iter && Ads.iter % 10 == 0) {
				var a = $A($$('iframe.if_ad'));
				a.each( function(ifad) {
					ifad.src = ifad.src;
				});
			}
			Ads.iter++;
		}
	};

	var modeButtons = [];
	var mapMode = 'info';

	function OpenUrl(pUrl) {
		window.open(pUrl, "", "");
	}
	
	var messageBack;
	var messageFore;
	function hideMessageBox() {
		$('slZtmSearchType').show();
		if (messageBack) $(messageBack).remove();
		if (messageFore) $(messageFore).remove();
	}
	function messageBox(text, timeout) {
		var back = document.createElement('div');
		setTimeout(hideMessageBox, timeout);
		back.style.position = 'absolute';
		back.style.backgroundColor = '#000'
		back.style.top = '0px';
		back.style.left = '0px';
		back.style.width = '100%';
		back.style.height = screen.height+'px';
		back.style.textAlign = 'center';
		back.style.verticalAlign = 'middle';
		back.innerHTML = '&nbsp;';
		var fore = document.createElement('div');
		fore.style.position = 'absolute';
		fore.style.top = '0px';
		fore.style.left = '0px';
		fore.style.width = '100%';
		fore.style.height = '100%';
		fore.style.textAlign = 'center';
		fore.style.verticalAlign = 'middle';
		fore.innerHTML = '<div style="text-align: left; border: 5px solid red; padding: 15px; background-color: #EEE; color: black; font-size: 120%; margin: 20% 20% 20% 20%">'+text+'<br><br><br><br><a href="#" style="color: #111;" onclick="hideMessageBox();">Zamknij</a></div>';
		guiSetOpacity(back, 0.5);
		messageBack = back;
		messageFore = fore;
		$('slZtmSearchType').hide();
		document.body.appendChild(back);
		document.body.appendChild(fore);
	}
	
	function guiShowMultiSearchObject(j, i) {
		visibleLayer.ClearObjects();
		visibleLayer.AddObject(map.lastSearch.Result[j].Objects[i]);
		map.Navigate.ToObject(map.lastSearch.Result[j].Objects[i], 224);
		GlobalTransport.commit(); 
	}
	
	function guiShowSearchObject(i) {
		visibleLayer.ClearObjects();
		visibleLayer.AddObject(map.lastSearch.Result.Objects[i]);
		map.Navigate.ToObject(map.lastSearch.Result.Objects[i], 224);
		GlobalTransport.commit(); 
	}
	
	
	
	
	
var layersWithShow = ['Przystanki', 'Tramwaje i autobusy', 'Linie komunikacji miejskiej', 'Bilety STREFA', 'Parkingi STREFA', 'Budynki-reklama'];
	var layersWithUrl = ['Przystanki', 'Tramwaje i autobusy', 'Linie komunikacji miejskiej', 'Bilety STREFA', 'Parkingi STREFA', 
			     'Plus - punkty sprzedaży', 'Plus - salony firmowe', 'Budynki-reklama'];
			
	function guiObjectString(o, i, layername, layerid, multi) {
		if (!o.name)
			return '';
		var s = "";
		s += '<div class="clearer"><span></span></div>';
		s += '<div class="searchResultRow">';
		var url = '';
		if (layersWithUrl.contains(layername)) {
		        if (o.data && o.data.URL)
			        url = o.data.URL;
			if (layername == 'Przystanki' && o.data && o.data.KODP) {
				var ss = o.data.KODP+'';
				url = url_ztm_stop(o.data.KODP);
			}
			else if (layername == 'Tramwaje i autobusy' || layername == 'Linie komunikacji miejskiej') 
				url = url_ztm_line(o.name);
			else if (layername.substr(0, 4) == 'Plus') 
				url = 'http://www.plusgsm.pl/';
			if (url) 
				url = 'onclick="OpenUrl(\''+url+'\');"';
		}
		
//		if (!multi)
			if (layersWithShow.contains(layername)) {
				if (layerid == -1)
					s += '<img onclick="guiShowSearchObject('+i+');" class="button" style="float: right;" alt="Pokaż obiekt na mapie" src="http://beta.ztm.dojazd.pl/imgs/btns/m_center.gif"/>';
				else
					s += '<img onclick="guiShowMultiSearchObject('+layerid+', '+i+');" class="button" style="float: right;" alt="Pokaż obiekt na mapie" src="http://beta.ztm.dojazd.pl/imgs/btns/m_center.gif"/>';
			}
			
		if (url)
		    if (!o.data.ADRES) {
			s += '<a '+url+' class="button">'+o.name+'<br/></a>';
		    }
		    else {
			s += '<a '+url+' class="button">'+o.name+'<br/></a>'+o.data.ADRES;
		    }
		else
			s += ''+o.name+'<br/>';
		s += '</div>';
		s += '<div class="clearer"><span></span></div>';
		return s;
	}
	
	function guiShowMultiSearchResult(srch, op, res) {		var s = "";
		$('searchResultHeader').innerHTML = 'Znaleziono następujące obiekty:';
		var oldLastSearch = map.lastSearch;
		map.lastSearch = srch;
		for (var j = 0; j < srch.Result.length; j++) {
			var ss = '';
			for (var i = 0; i < srch.Result[j].Objects.length; i++)
			{
				var o = srch.Result[j].Objects[i];
				ss += guiObjectString(o, i, srch.Result[j].name, j, true);
			}
			if (ss != '') {
			        var layerName = srch.Result[j].name;
			        layerName = layerName.replace("Budynki-reklama", "Firmy");
			        s += '<strong>'+layerName+'</strong><br/>' + ss;
			}
		}
		$('searchResult').innerHTML = '<div>'+s+'</div>';
//		TabControls['2'].tabs['tabWyniki'].activate();
		$('tabWyniki').activate();
	}

	function guiShowSearchResult(srch, op, res) {
		var s = "";
//		dO(srch.Result.Objects[0]);
		$('searchResultHeader').innerHTML = 'Znaleziono następujące obiekty:';
		var oldLastSearch = map.lastSearch;
		map.lastSearch = srch;
		s += '<strong>'+srch.Result.name+'</strong>';
		for (var i = 0; i < srch.Result.Objects.length; i++)
		{
			var o = srch.Result.Objects[i];
			s += guiObjectString(o, i, srch.Result.name, -1);	     
			var layerName = s;
			layerName = layerName.replace("Budynki-reklama", "Firmy");

		}
		$('searchResult').innerHTML = '<div>'+layerName+'</div>';
//		TabControls['2'].tabs['tabWyniki'].activate();
		$('tabWyniki').activate();
	}
	
	function onSearchException(op, res) {
		$('searchResultHeader').innerHTML = 'Nie znaleziono niczego';
		$('searchResult').innerHTML = '';
		$('tabWyniki').activate();
	}
	
	function doSearch() {
		switch (TabControls['1'].activeTab.name) {
			case 'tabZTM':
				switch ($F('slZtmSearchType')) {
					case 'tramwaje':
					case 'autobusy':
					case 'przystanki':
						if (!$F('slZtmSearchType') || !$F('tfText')) {
							infoBox('Proszę wpisać wyszukiwany ciąg', $('tfText'));
							return;
						}
						break;
					case 'bezplatne':
						if ($F('slFreeLines') == '-1') {
							infoBox('Proszę wybrać linię bezpłatną', $('slFreeLines'));
							return;
						}
						break;
				}
				
				switch ($F('slZtmSearchType')) {
					case 'tramwaje':
					case 'autobusy':
						var srch = new PatternSearch();
						srch.create(autoLayer, 'NUMER', $F('tfText'), 'NUMER');
						map.Searches.Add(srch);
						srch.Execute(guiShowSearchResult);
						srch.onException = onSearchException.bind(srch);
						GlobalTransport.commit();
						break;
					case 'przystanki':
						var srch = new PatternSearch();
				                var s = $F('tfText').toUpperCase();
						srch.create(stopLayer, ['nazwa', 'ulica'], [s, s], 'nazwa', 'OR', 'LIKE', false);
						map.Searches.Add(srch);
						srch.Execute(guiShowSearchResult);
						srch.Exception = onSearchException.bind(srch);
						GlobalTransport.commit();
						break;
					case 'bezplatne':	
						OpenUrl('http://www.maximus.ch/images/mapka_lokalizacji.gif');
						break;
				}
				
				break;
			case 'tabKarta':
				var obj = new MapObject().create()
				dummyLayer.ClearObjects().AddObject(obj);
				obj.SetAddress('Warszawa', $F('tfUlica'), $F('tfDom'));
				var srch = new SimpleProximitySearch();
				var lay = null;
				switch ($F('slKartaSearchType')) {
					case 'strefa':
						lay = 1001762;
						break;
					case 'strefa2':
						lay = 1001761;
						break;									
				}
				srch.create([lay], obj, 5, 'limit');
				map.Searches.Add(srch);
				srch.Execute(guiShowMultiSearchResult);
				srch.Exception = onSearchException.bind(srch);
				GlobalTransport.commit();
				break;
		case 'tabFirmy':
		    var srch = new PatternSearch();
		    var s = $F('slFirmaSearchType');
		    srch.create(companyLayer, ['id'], [s], 'nazwa', 'AND', '=', false);
		    map.Searches.Add(srch);
		    srch.Execute(guiShowSearchResult);
		    srch.Exception = onSearchException.bind(srch);
		    GlobalTransport.commit();
		    break;

		}
		
	}

	function guiSetOpacity(el, opacity) {
		if (!el) return;
		el.style.filter = "alpha(opacity:"+Math.round(opacity*100)+")";
		el.style.opacity = opacity.toFixed(3); /*//*/;
	}


	function guiButtonFocus() {
//		d('focus');
	}
	function guiButtonBlur() {
//		d('blur');
	}	
	function guiSearchTypeChanged() {
		switch ($('slZtmSearchType').selectedIndex) 
		{ 
			case 0:
			case 1:			
				$('tfText').show(); 
				$('slFreeLines').hide(); 
				$('tfText').setDefValue('Numer');
				break; 
			case 2: 
				$('tfText').show(); 
				$('slFreeLines').hide(); 
				$('tfText').setDefValue('Nazwa lub ulica');
				break; 
			case 3: 
				$('tfText').hide(); 
				$('slFreeLines').show(); 
				break; 
		}		
	}

	var inputs = {
		'.button' : function(el) {
			el.addEvent('focus', guiButtonFocus.bind(el), false); 
			el.addEvent('blur', guiButtonBlur.bind(el), false);
			el.addEvent('mouseover', guiButtonFocus.bind(el), false);
			el.addEvent('mouseout', guiButtonBlur.bind(el), false);
		},
		
		'.scaleBar div' : function(el) {
			var scale = parseInt(el.getAttribute('scale'));
			if (!scale) return;
			el.style.height = Math.ceil(scale * 21.7) + 'px';
			
			var x = ((6 - scale) / 5);			
			el.style.backgroundColor = [
							parseInt(30 + x * (106 - 30)), 
							parseInt(70 + x * (148 - 70)),
							parseInt(135 + x * (213 - 135))
						].rgbToHex();
			el.style.borderWidth = '1px';
			var y = x * 0.5;
			el.style.borderColor = [
							parseInt(30 + y * (106 - 30)), 
							parseInt(70 + y * (148 - 70)),
							parseInt(135 + y * (213 - 135))
						].rgbToHex();			
			el.addEvent('click', function() {
				var scale = parseInt(el.getAttribute('scale'));
				map.Navigate.ScaleAbsolute(Math.ceil(Math.pow(scale-1, 1.7)*500 + 150)).commit();				
			}.bind(el), false);
//			Event.observe(el, 'mouseover', function() {
//				this.style.backgroundColor = '#5555'+(235-scale*20).toColorPart()+'';			
//			}.bind(el), false);
//			Event.observe(el, 'mouseout', function() {
//				this.style.backgroundColor = '#0000'+(235-scale*20).toColorPart()+'';			
//			}.bind(el), false);
		}
/*		
		,
		
		'.modeButton' : function(el) {
			if (!modeButtons.contains(el))
				modeButtons.push(el);
			var mode = el.getAttribute('mode');
			if (el.getAttribute('active')!='true') {
				guiSetOpacity(el, 0.5);
			} else
				mapMode = mode;
			el.addEvent('click', function() {
				modeButtons.each( function(el) {
					guiSetOpacity(el, 0.5)
				});
				mapMode = this.getAttribute('mode');
				if (mapMode == 'info')
					map.setCursor('help');
				else
					map.setCursor('move');
				guiSetOpacity(this, 1);
			}.bind(el), false);
		}
*/		
	};
	
	function doMapImageClick(evt){
		var x = evt.x || evt.layerX; 
		var y = evt.y || evt.layerY;

		if (mapMode == 'info') {
			infoObject.SetPoint(map, x, y);
			var srch = new SimpleProximitySearch().create(userInfoLayers, infoObject, 0.02, 'square_relative');
			
/*			var srch = new ProximityMultiSearch().create(
			 					[adminLayer, streetLayer, 
//			 					[streetLayer, 
//								plus3Layer, 
								plus2Layer, plus4Layer, 
//								MaxiBLayer, 
								autoLayer, 
								buildingsLayer,
								stopLayer, strefaLayer, strefa2Layer], obj, 0.02, 'square_relative');
*/																		 
			map.Searches.Add(srch);
			srch.Execute(guiShowMultiSearchResult);
			srch.Exception = onSearchException.bind(srch);
			GlobalTransport.commit();
		}
		else
			map.Navigate.Slide(x - Math.ceil(map.width / 2), y - Math.ceil(map.height / 2)).commit();
	}	

	var Scale = {
		_current: 0,
		_requested: 0,
		
		_timer: null,
				
	
		_onScaleChange: function(scale) {
			//_d(scale);
			Scale._current = scale;
			if (!Scale._requested)
				Scale._requested = scale;
		},
	
		_applyZoom: function(x, y) {
			map.Navigate.ScaleCenterRelative(Scale._requested / Scale._current, x, y).commit();
		},
		_doZoom: function(scale, x, y, timed) {
     		        //_d(x);
		        x = x || parseInt(map.width / 2);
		        y = y || parseInt(map.height / 2);
			timed = timed || false;
			Scale._requested = parseInt(Scale._requested * scale);
			if (timed) {
				$clear(this._timer);
				Scale._timer = Scale._applyZoom.delay(500, Scale, [x, y]);
			} else {
				$clear(this._timer);
				Scale._applyZoom(x, y);
			}
			map.fxZoomImg(Scale._current / Scale._requested, x, y);
		},
		InTimed: function(x, y) {
			Scale.In(x, y, true);
		},
		OutTimed: function(x, y) {
			Scale.Out(x, y, true);
		},
		In: function(x, y, timed) {
			Scale._doZoom(0.5, x, y, timed);
		},
		Out: function(x, y, timed) {
			Scale._doZoom(2, x, y, timed);
		}
	};

	Behaviour.register(inputs);
	Tabs.init();
	Behaviour.apply();

	var map;
	var adminLayer;
	var streetLayer;
	var autoLayer;
	var plus2Layer;
//	var plus3Layer;
	var plus4Layer;
    var buildingsLayer;
	var logo1Layer;
	var logo2Layer;
	var MaxiBLayer;
	
	var stopLayer;
	
	var strefaLayer;
	var strefa2Layer;
	
	var dummyLayer;
	var visibleLayer;
	
	MapApi.init('1e3cd9aead92d72fe9e91ac70144901c');
	
	map = new MapContainer('MapBox');

	map.addListener('click', doMapImageClick);
	map.addListener('mousewheel', function(event) {
		event = new Event(event);
		if (event.wheel > 0)
			Scale.InTimed(event.layer.x, event.layer.y);
		else
			Scale.OutTimed(event.layer.x, event.layer.y);
		event.stop();
	});

	map.addEvent('onScaleChange', Scale._onScaleChange);

	$('adStrefa').inject('MapBox').show();	

//	$('navigatorBox').inject(map.dr.box).show();
//	$('navigatorToggleButton').addEvent('click', navigatorShow);
//	$('navigatorImageBox').addEvent('click', navigatorHide);
	

	$('scaleMinus').addEvent('click', function() { Scale.Out(); });
	$('scalePlus').addEvent('click', function() { Scale.In(); });
	
	map.onBeforeOperation = function(a, b, c) {
		if (a && a.func && a.func.indexOf('Navigate') != -1) {
			Ads.reload();
		}
	};
	map.setCursor('help');
	map.create('Warszawa');
	map.SetNavParams(180, 175, -19, -15);


	visibleLayer = new Layer().create('Widoczne obiekty', '');
	visibleLayer.SetVisibility("always");
	visibleLayer.SetSelected(true);
	visibleLayer.SetMixContainer(true);
	dummyLayer = new Layer().create('Niewidoczne obiekty', '');
	dummyLayer.SetMixContainer(true);

	var infoObject = new MapObject().create();

	dummyLayer.AddObject(infoObject);
	map.Layers.Add(visibleLayer);
	map.Layers.Add(dummyLayer);
	
	adminLayer = new MapnetTablePointLayer().create(1005000, 'Podział administracyjny', '', '', '', '');
	streetLayer = new MapnetTablePointLayer().create(1000240, 'Ulice i Place', '', '', '', '');
	buildingsLayer = new MapnetTablePointLayer().create(1000350, 'Budynki', '', '', '', '');

	autoLayer = new MapnetTablePointLayer().create(1000920, 'Linie komunikacji miejskiej', '', 'a__bus', 'numer', 'numer').SetVisibility('on');
	stopLayer = new MapnetTablePointLayer().create(1001780, 'Przystanki', '', 'prztm', 'nazwa', 'nazwa').SetVisibility('on');

        companyLayer = new MapnetTablePointLayer().create(1000531, 'Budynki-reklama', '', 'b_rkl', 'nazwa', 'nazwa').SetVisibility('on');



	plus2Layer = new MapnetTablePointLayer().create(1001871, 'Plus - punkty sprzedaży', '', '', 'nazwa_agenta', 'nazwa_agenta').SetVisibility('on');
//	plus3Layer = new MapnetTablePointLayer().create(1001872, 'Plus - sklepy firmowe', '', '', 'nazwa_agenta', 'nazwa_agenta');
	plus4Layer = new MapnetTablePointLayer().create(1001873, 'Plus - salony firmowe', '', '', 'nazwa_agenta', 'nazwa_agenta').SetVisibility('on');

	strefaLayer = new MapnetTablePointLayer().create(1001761, 'Bilety STREFA', '', '', 'Opis_lokalizacji', 'Opis_lokalizacji').SetVisibility('on');
	strefa2Layer = new MapnetTablePointLayer().create(1001762, 'Parkingi STREFA', '', '', 'Opis_lokalizacji', 'Opis_lokalizacji').SetVisibility('on');

//	MaxiBLayer = new MapnetTablePointLayer().create(1, 'Przystanki MaxiBus', '', '', '', '');



	var userInfoLayers = [	1005000,
				1000240,
				1000920,
				1001871,
				1001872,
				1001873,
				1000350,
				1000610,
				1000601,
				1000620,
				1001780,
				1001761,
				1001762,
				1000531]


	map.Layers.Add(plus2Layer);
//	map.Layers.Add(plus3Layer);
	map.Layers.Add(plus4Layer);
		
//	map.Layers.Add(MaxiBLayer);
	map.Layers.Add(strefaLayer);
	map.Layers.Add(strefa2Layer);
	map.Layers.Add(autoLayer);
	map.Layers.Add(stopLayer);
	map.Layers.Add(companyLayer);
		
	
	if (!showObject) 
		map.Navigate.LoadView('Warszawa'); 
	else {
		var l = map.Layers.List.detect( function(lay) {
			return lay.name == showObject.layername;
		} );
		if (l) {
			l.AddObject(showObject);
			map.Navigate.ToObject(showObject);
		} else {
			map.Navigate.Representative(); 
		}
	}
//	window.addEvent('domready', function() {
		GlobalTransport.commit();
//	} ); 
//}

