function getElementsByClassName(name) {
    var ret = [];
    var elem = document.getElementsByTagName('*');
    for (var i = 0; i < elem.length; i++) {        
        if (elem[i].className == name){
            ret.push(elem[i]);
        }
    }
    return ret;
};

function initialize() {    
    var latitudeMIN = 1000, latitudeMAX = -1000;
    var longitudeMIN = 1000, longitudeMAX = -1000;
    var geos = getElementsByClassName('geo');
    var latLngs = [];
    var ids = [];
    var bounds = new google.maps.LatLngBounds();
    for (var i = 0; i < geos.length; i++) {
        var title = geos[i].title;
        var index = title.indexOf(';');
        var latitude = parseFloat(title.substring(0, index));
        var longitude = parseFloat(title.substring(index + 1, title.length));        
        ids[i] = geos[i].id;
        /*if (latitude < latitudeMIN){
            latitudeMIN = latitude;
        }
        if (latitude > latitudeMAX){
            latitudeMAX = latitude;
        }
        if (longitude < longitudeMIN){
            longitudeMIN = longitude;
        }
        if (longitude > longitudeMAX){
            longitudeMAX = longitude;
        }*/        
        latLngs[i] = new google.maps.LatLng(latitude, longitude);        
        bounds.extend(latLngs[i]);
    }    
    //var latlng = new google.maps.LatLng((latitudeMAX + latitudeMIN) / 2, (longitudeMAX + longitudeMIN) / 2);
    var latlng = bounds.getCenter();    
    var myOptions = {
      zoom: 11,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      scrollwheel: false
    };    
    var mapElement = document.getElementById("mapCanvas");    
    if (mapElement.currentStyle){
        mapElement.style[width] = mapElement.parentNode.currentStyle[width];
    }
    else{
        if (window.getComputedStyle){
            mapElement.style['width'] = document.defaultView.getComputedStyle(mapElement.parentNode, null).getPropertyValue('width');
        }
    }
    mapElement.style['height'] = '450px';
    var map = new google.maps.Map(mapElement, myOptions);
    if (geos.length != 1){
        map.fitBounds(bounds);    
    }    
    for (i = 0; i < latLngs.length; i++){
        var marker = new google.maps.Marker({
            position: latLngs[i], 
            map: map
        });
        var keyWord = document.getElementById('K' + ids[i]);        
        var html = '<b>' + keyWord.firstChild.nodeValue + '</b><p>' + keyWord.title + '</p>';
        marker.infoWindow = new google.maps.InfoWindow({content: html});
        marker.permanent = false;
        marker.open = function(){
            this.permanent = false;
            this.infoWindow.open(map, this);
        };
        marker.close = function(){
            if (!this.permanent){
                this.infoWindow.close();
            }
        };
        marker.click = function(){
            this.permanent = true;
            this.infoWindow.open(map, this);
        };
        google.maps.event.addListener(marker, 'mouseover', marker.open);
        google.maps.event.addListener(marker, 'mouseout', marker.close);
        google.maps.event.addListener(marker, 'click', marker.click);
    }
}

addEvent(window, 'load', initialize);
