function OpenUrl(pUrl) {
	window.open(pUrl, "", "");
	return false;
}

function irnts(s) {
	return (s == "no name road" || !s);
}

$extend($s, lang == 'en' ? {
	'ulica nienazwana': 'unnamed road',
	'dlugosc_trasy': 'Route length is ',
	'wyjazd_na_droge': 'Distance to the street is ',
	"Startujemy z ": "Route starts at ",
	"Jedź prosto ": "Go straing ",
	"Skręć w prawo w \"": "Turn right into \"",
	"Skręć w lewo w \"": "Turn left int \"",
	"Zawróc na \"": "U-turn to \"",
	"przejedź": " for ",
	"ulicą": "street",
	"Kończymy w ": "Route stops at "
    } : 
    {
	"ulica nienazwana": "ulica nienazwana",
	    'dlugosc_trasy': 'Długość wybranej trasy wynosi ',
	    'wyjazd_na_droge': 'Wyjazd na drogę ',
	    "Startujemy z ": "Startujemy z ",
	    "Jedź prosto ": "Jedź prosto ",
	    "Skręć w prawo w \"": "Skręć w prawo w \"",
	    "Skręć w lewo w \"": "Skręć w lewo w \"",
	    "Zawróc na \"": "Zawróc na \"",
	    "przejedź": ", przejedź",
	    "ulicą": "ulicą",
	    "Kończymy w ":"Kończymy w "
    });


function rnts(s) {
	return irnts(s) ? $s["ulica nienazwana"] : s;
}

function meterToKilometer(value) {
    if (value>=1000) {
	return (value/1000).toFixed(2)+"km";
    }
    else {
	return value+"m";
    }
}

function showRoute(route) {
	var s = $s['dlugosc_trasy']+route.Length+"m.<br/><br/>";
	s += $s["Startujemy z "]+route.Points[0].street+" "+route.Points[0].number+"<br/>"+$s['wyjazd_na_droge']+route.Details[0].Length+"m<br/>";
	
	var ll = 0;
	for (var i = 1; i < route.Details.length-1; i++) {
		var d = route.Details[i];
		var l = parseInt(d.Length);
		if (irnts(d)) {
			ll += l;
			continue;
		}
		l += ll;
		ll = 0;
		l = meterToKilometer(l);
		switch (d.Direction) {
			case 1:
				s += $s["Jedź prosto "]+l+" "+$s["ulicą"]+" \""+rnts(d.RoadName)+"\"<br/>";
				break;
			case 2:
				s += $s["Skręć w prawo w \""]+rnts(d.RoadName)+"\" "+$s['przejedź']+" "+l+"<br/>";
				break;
			case 3:
				s += $s["Skręć w lewo w \""]+rnts(d.RoadName)+"\" przejedź "+l+"<br/>";
				break;
			case 4:
			    s += $s["Zawróc na \""]+rnts(d.RoadName)+"\" przejedź "+l+"<br/>";
				break;
		}
	}

	s += $s["Kończymy w "]+route.Points[1].street+" "+route.Points[1].number;
	
	$('layResultText').innerHTML = s;
}

var routeObject = null;

function DoFindRoute() {
  var street = $F('tfUlica');
  var number = $F('tfDom');
  if (street.clean() == '' || street.length <= 3) {
    var pos = Position.page('tfUlica');
    Tooltip.show(pos[0]+10, pos[1]+10, 'Proszę wprowadzić nazwę ulicy');
    return false;
  }
  var x = parseInt(parseInt(number));
  var b = isNaN(x);
  if (number.clean() == '' || b) {
    var pos = Position.page('tfDom');
    Tooltip.show(pos[0]+10, pos[1]+10, 'Proszę wprowadzić '+(!b?'':'poprawny ')+'numer budynku');
    return false;
  }	
	other.SetAddress(_map_object.city, street, number);
	DoGenerateRoute();
}

function DoFindPlacesRoute() {
    var place = $('slPlaces').getProperty('value');
    if (place == -1)
	return false;
    place = places[place];
    //alert(place);
    other.SetPointWorld(place[0], place[1]);
    DoGenerateRoute();
}


function DoGenerateRoute(rev) {
    rev = rev || false;
	map.Route.Clear();
	if (!routeObject) {
		routeObject = new RouteObject().create();
		lay.AddObject(routeObject);
	}
	var path = [other, obj];
	if (rev)
	    path = [obj, other];
	map.Route.ReGenerate(routeObject, path,
		function(map, op, res) {
			showRoute(res.route);
		}
	);
	$('layResultText').innerHTML = 'Wytyczanie trasy...';
	$('tabBtnResult').enable();
	map.Navigate.ToObject(routeObject).commit();
	
	return false;
}

$extend($s, lang == 'en' ? {
	'f_address': 'address',
	'f_direction': 'other cities'
    } : {
	'f_address': 'adresu',
	'f_direction': 'kierunku'
    });

$('switchTxt').setText($s['f_direction']);

function switchClick() {
    if ($('switchTxt').getText() == $s['f_address']) {
	$('switchTxt').setText($s['f_direction']);
	$('placesBox').setStyle('display','none');
	$('addressBox').setStyle('display','');
    } else {
	$('switchTxt').setText($s['f_address']);
	$('placesBox').setStyle('display','');
	$('addressBox').setStyle('display','none');
    }
}

function onSearchException() {
	alert('error');
}

var layersWithUrl = ['Przystanki', 'Tramwaje i autobusy', 'Linie komunikacji miejskiej', 'Bilety STREFA', 'Parkingi STREFA', 
		     'Plus - punkty sprzedazy', 'Plus - sklepy firmowe', 'Plus - salony firmowe'];

	function guiObjectString(o, i, layername, layerid) {
		if (o.name == '')
			return '';
		var s = "";
		s += '<div class="clearer"><span></span></div>';
		s += '<div class="searchResultRow">';
		var url = '';
		if (layersWithUrl.contains(layername)) {
			if (layername == 'Przystanki' && o.data && o.data.KODP) {
				var ss = o.data.KODP+'';
				url = ztm_url+"PRZYST/"+ss.substring(0, 4)+".HTM";
			}
			else if (layername == 'Tramwaje i autobusy' || layername == 'Linie komunikacji miejskiej') {
                                if (o.name.indexOf('nie kursuje') != -1) return '';
				url = ztm_url+o.name+'/TRASY.HTM';
			} else if (layername.substr(0, 4) == 'Plus') 
				url = 'http://www.plusgsm.pl/';
			if (url) 
				url = 'onclick="OpenUrl(\''+url+'\');Event.stop(event);"';
		}
		
//		if (layersWithShow.member(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)
			s += '<a '+url+'>'+o.name+'<br/></a>';
		else
			s += ''+o.name+'<br/>';
		s += '</div>';
		s += '<div class="clearer"><span></span></div>';
		return s;
	}
	

function guiShowMultiSearchResult(srch, op, res) {
	var s = "Znaleziono następujące obiekty:<br/>";
//	$('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);
		}
		s += '<strong>'+srch.Result[j].name+'</strong><br/>' + ss;
	}
	Tooltip.setContent('<div>'+s+'</div>');
}

//	344,202
//  351,302

function showHome() {
  var id = $('selHomes').getValue();
  var home = homes[id];
  obj = home;
  map.Navigate.ToObject(home).commit();
}

function infoClick(x, y, sx, sy) {
	infoObject.SetPoint(map, x, y);
	var srch = new SimpleProximitySearch().create(infoLayers, infoObject, 0.02, 'square_relative');
	map.Searches.Add(srch);
	srch.Execute(guiShowMultiSearchResult);
	srch.Exception = onSearchException.bind(srch);
	Tooltip.show(sx, sy, 'Wczytywanie danych...');
	Tooltip.persist = true;
	GlobalTransport.commit();
	Tooltip.persist = false;
}

function mapOnClick(e) {
        e = new Event(e);
	var x = e.layer.x;
	var y = e.layer.y;

	infoClick(x, y, e.page.x, e.page.y);
	
	e.stop();	
}

var infoLayers = ['Podział administracyjny', 'Ulice i Place'];

var lay;
var md;
var map;
var obj;
var other;
var infoObject;
var invisibleObjects;


window.addEvent('domready', function() {
	Buttons.init();
	Tabs.init();
	$('tabBtnResult').disable();
	
	Tooltip.init(480, 555);
	Behaviour.apply();

	MapApi.init('fbe5ae8206efeeec9a1eae6f96f0e3dc');
	
	md = new MapDecoration('MapBox', {width: 476, height: 460,
					  scales: [30179, 25179, 17471, 10000, 5000, 3500, 2494, 2000, 1000, 574, 340, 200, 112].reverse(),
					  imgPath: 'http://services.dojazd.pl/mapapi/common/imgs/'});
	
	map = new MapContainer(md.mapBox);
	
	map.addListener('click', mapOnClick);
	
	map.onBeforeOperation = function(op) {
	    if (!Tooltip.persist)
		Tooltip.hide();
	};
	
	map.create(_map_object.map);
	
	md.injectMap(map);
	
	map.Layers.Add(new MapnetTablePointLayer().create(1001780, 'Przystanki').SetVisibility('on'));
	map.Layers.Add(new MapnetTablePointLayer().create(1000621, 'Stacje metra').SetVisibility('on'));
	
	lay = new PointLayer().create('', '').SetSelected(true);
	map.Layers.Add(lay);
	
	obj = new MapObject().create(_map_object.ico);
	lay.AddObject(obj);
	obj.SetAddress(_map_object.city, _map_object.street, _map_object.number);
	if (_map_object.x && _map_object.y) {
	    obj.SetPointWorld(_map_object.x, _map_object.y);
	}
	map.Navigate.ToObject(obj, scale);

	other = new MapObject().create(_other_ico);
	lay.AddObject(other);

	infoObject = new MapObject().create();
	
	invisibleObjects = new PointLayer().create('', '', '');
	map.Layers.Add(invisibleObjects);
	invisibleObjects.AddObject(infoObject);	
	
	GlobalTransport.commit();
	
    });


