  var map;
        var geocoder;
        var countriesArrey = new Array();

        var baseIcon = new GIcon(G_DEFAULT_ICON);
        baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.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);


        function initialize() {
            if (GBrowserIsCompatible()) {
		var mapDiv = document.getElementById("map_canvas");
		if(mapDiv == null) return;	
                map = new GMap2(mapDiv );
		
                GDownloadUrl("/media/1690/googlemap.xml", function(data, responseCode) {
                    var xml = GXml.parse(data);
                    var startLat = xml.documentElement.getAttribute("lat");
                    var startLng = xml.documentElement.getAttribute("lng");
                    var startZoom = xml.documentElement.getAttribute("zoom");
		    
                    var elSel = document.getElementById('selectCountry')
		    if(elSel.options.length == 1)
                    {
                    	var countries = xml.documentElement.getElementsByTagName("GoogleCountry");

						var countriesNotSorted = new Array();
						
                    	for (var i = 0; i < countries.length; i++) {
                      	  var countryName = countries[i].getAttribute("name");

						  countriesNotSorted[i] = countryName;
                   	    }
                    	for (var i = 0; i < countriesNotSorted.length - 1; i++) {
							for (var j = i + 1; j < countriesNotSorted.length; j++) {
								if (countriesNotSorted[i] > countriesNotSorted[j])
								{
									var tmp = countriesNotSorted[j];
									countriesNotSorted[j] = countriesNotSorted[i];
									countriesNotSorted[i] = tmp;
								}
							}
						}
                    	for (var i = 0; i < countriesNotSorted.length; i++) {
							appendOptionLast(countriesNotSorted[i]);
                   	    }
                    }
                    map.setUIToDefault();

                    var markers = xml.documentElement.getElementsByTagName("GoogleMarker");
                    for (var i = 0; i < markers.length; i++) {
                        var address = markers[i].childNodes[0].nodeValue;;

                        var point = new GLatLng(
                                 parseFloat(markers[i].getAttribute("lat")),
                                 parseFloat(markers[i].getAttribute("lng"))
                             );
                        var marker = createMarker(point, address);
                        map.addOverlay(marker);
                    }
                   
                    map.setCenter(new GLatLng(startLat, startLng), startZoom * 1);
                });
            }
        }

        function setCountry(country) {
            if(country == "world")
            {
                initialize();
                return;
            }
            map = new GMap2(document.getElementById("map_canvas"));
            map.setUIToDefault();
            geocoder = new GClientGeocoder();
            geocoder.getLocations(country, addAddressToMap);
            GDownloadUrl("/media/1690/googlemap.xml", function(data, responseCode) {
                var xml = GXml.parse(data);
                var markers = xml.documentElement.getElementsByTagName("GoogleMarker");
                for (var i = 0; i < markers.length; i++) {
                    if (markers[i].getAttribute("country") == country) {
                        var address = markers[i].childNodes[0].nodeValue;
                        var point = new GLatLng(
                                 parseFloat(markers[i].getAttribute("lat")),
                                 parseFloat(markers[i].getAttribute("lng"))
                             );
                        var marker = createMarker(point, address);
                        map.addOverlay(marker);
                   }
                }
            });
        }

        function createMarker(point, text) {
            var letteredIcon = new GIcon(baseIcon);
            var marker = new GMarker(point);

            GEvent.addListener(marker, "click", function() {
                marker.openInfoWindowHtml(text);
            });
            return marker;
        }


        function addAddressToMap(response) {
            var east = response.Placemark[0].ExtendedData.LatLonBox.east;
            var west = response.Placemark[0].ExtendedData.LatLonBox.west;
            var north = response.Placemark[0].ExtendedData.LatLonBox.north;
            var south = response.Placemark[0].ExtendedData.LatLonBox.south;
            var mapDiv = document.getElementById("map_canvas");
            var zoom = getBoundsZoomLev(south, west, north, east,
            mapDiv.clientWidth, mapDiv.clientHeight);
            var place = response.Placemark[0];
            var point = new GLatLng(place.Point.coordinates[1],
                            place.Point.coordinates[0]);
            map.setCenter(point, zoom);
        }

        function getBoundsZoomLev(south, west, north, east, width, height) {
            try {
                for (var z = 19; z >= 1; z--) {
                    var blPixel = latLngToPix(south, west, z);
                    var trPixel = latLngToPix(north, east, z);
                    if (blPixel.x > trPixel.x) {
                        var wrapWidth = Math.pow(2, z + 8); blPixel.x -= wrapWidth
                    }
                    if (Math.abs(trPixel.x - blPixel.x) <= width && Math.abs(trPixel.y - blPixel.y) <= height) {
                        z = Math.round(z);
                        return z
                    }
                } return 0
            }
            catch (ex) {
                return 0;
            }
        };

        function latLngToPix(lat, lng, zoom) {
            var centerPoint = Math.pow(2, zoom + 7);
            totalPixels = centerPoint * 2;
            pixelsPerLngDegree = totalPixels / 360;
            pixelsPerLngRadian = totalPixels / (2 * Math.PI);
            siny = Math.min(Math.max(Math.sin(lat * (Math.PI / 180)), -0.9999), 0.9999);
            return { x: Math.round(centerPoint + lng * pixelsPerLngDegree),
                y: Math.round(centerPoint - 0.5 * Math.log((1 + siny) / (1 - siny)) * pixelsPerLngRadian)
            }
        };

        function appendOptionLast(num) {
            var elOptNew = document.createElement('option');
            elOptNew.text = num;
            elOptNew.value = num;
            var elSel = document.getElementById('selectCountry');
            try {
                elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
            }
            catch (ex) {
                elSel.add(elOptNew); // IE only
            }
        }

