var map;

function $(elementId) {
	return document.getElementById(elementId);
}

window.onload = function() {
	var oP = $('line');
	var sCity = oP.className;

	form();
	if(sCity != 'miasta') { // not main page
		var oDiv = $('googleMap');
		//var map = new GMap2(oDiv);
		oDiv.style.display = 'block';
		oDiv.style.width = '450px';
		oDiv.style.height = '350px';
		oDiv.style.border = '1px solid #000';
		oDiv.style.margin = '0 auto 2em';
		googleMap(sCity);
	} else { // main page - create map
		createDivMap();
		constructActions();
	}
}

window.onunload = function() {
	var oP = $('line');
	var sCity = oP.className;

	if(sCity != 'miasta') { // not main page
		GUnload();
	}
}

function form() {
	var oInput = $('search-what');
	var sTxt = /^([s|S]zukana [f|F]raza)$/;
	oInput.style.fontStyle='italic';
	oInput.style.color='gray';

	oInput.onfocus= function() {
		if (this.value == 'szukana fraza') {
			this.value = '';
			this.style.fontStyle = 'normal';
			this.style.color = '#000000';
		}
	};

	oInput.onblur= function() {
		if (isEmpty(this.value) || sTxt.test(oInput.value)) {
			this.value = 'szukana fraza';
			this.style.color = 'gray';
			this.style.fontStyle = 'italic';
		}
	};
}

function isEmpty(elem) {
	if(elem == null || elem == '') {
		return true;
	}
	return false;
}

function createDivMap() {
	$('divMap').style.display = 'block';
}

function constructActions() {
	var oDiv = $('cities');
	var oLinks = oDiv.getElementsByTagName('a');

	for(i = 0, s = oLinks.length; i < s; i++) {
		var oElem = $(oLinks[i].id);
		oElem.onmouseover = function() {
			changeMap(this.id);
		}
		oElem.onmouseout = function() {
			changeMap();
		}
	}
}

function changeMap() {
	var oImg = $('polandMap');
	if(arguments.length == 1) {
		oImg.src = 'img/maps/' + arguments[0] + '.png';
	} else {
		oImg.src = 'img/maps/poland.png';
	}
}

function createMarker(point, icon, title, img, width, height) {
	var baseIcon = new GIcon();
    baseIcon.shadow = 'img/markers/shadow.png';
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    baseIcon.infoWindowAnchor = new GPoint(9, 2);
    baseIcon.infoShadowAnchor = new GPoint(18, 25);

	var letteredIcon = new GIcon(baseIcon);
	letteredIcon.image = 'img/markers/marker' + icon + '.png';

	markerOptions = {icon:letteredIcon};
	var marker = new GMarker(point, markerOptions);

	GEvent.addListener(marker, 'click', function() {
		if(img == 'none') {
			marker.openInfoWindowHtml('<strong>' + title + '</strong>');
		} else {
			marker.openInfoWindowHtml('<strong>' + title + '</strong><br /><br /><img src="img/googleMaps/' + img + '" width="' + width + '" height="' + height + '" title="' + title + '" alt="' + title + '" style="border: 1px solid #000;" />');
		}
	});

	return marker;
}

function googleMap(city) {
	if (GBrowserIsCompatible()) {
		var oDiv = $('googleMap');
		map = new GMap2(oDiv);

		map.addControl(new GLargeMapControl ());
		map.addControl(new GMapTypeControl());

		map.hideControls();
		GEvent.addListener(map, 'mouseover', function(){map.showControls();});
		GEvent.addListener(map, 'mouseout', function(){map.hideControls();});

		GDownloadUrl('img/googleMaps/cities.xml', function(datas, answerCode){
			var points = new Array();
			var titles = new Array();
			var icons = new Array();
			var images = new Array();
			var imagesWidth = new Array();
			var imagesHeight = new Array();

			var fullURL = parent.document.URL;
			var cityName = fullURL.substring(fullURL.indexOf('://')+ 3, fullURL.indexOf('.'));
			if(answerCode == 200){
				var xml = GXml.parse(datas);

				var city = xml.documentElement.getElementsByTagName(cityName)[0];
				map.setCenter(new GLatLng(0, 0), 1);

				var area = new GLatLngBounds();

				var markers = city.getElementsByTagName('marker');
				var image;
				for(var i = 0; i < markers.length; i++) {
					points.push(new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng"))));
					titles.push(markers[i].getAttribute("name"));
					icons.push(markers[i].getAttribute("icon"));
					image = markers[i].getAttribute("image");
					images.push(image);
					if(image == "none") {
						imagesWidth.push(0);
						imagesHeight.push(0);
					} else {
						imagesWidth.push(markers[i].getAttribute("width"));
						imagesHeight.push(markers[i].getAttribute("height"));
					}
				}
			}

			for(i = 0, k = points.length; i < k; i++) {
				var point = points[i];
				map.addOverlay(createMarker(points[i], icons[i], titles[i], images[i], imagesWidth[i], imagesHeight[i]));
				area.extend(point);
			}

			var zoom = map.getBoundsZoomLevel(area);
			var center = area.getCenter();
			map.setCenter(center,zoom);
		});
	}
}
