function Map(language) {
    this.language = language;
    this.xmlDoc = null;
}

Map.prototype.initializeMap = function(filename) {
    if (GBrowserIsCompatible()) {
        this.xmlDoc = new Document().loadXMLDocument(filename);
        this.initMapObject();
        this.createMap();
        this.populateMap();
    }
}

Map.prototype.initMapObject = function() {
    GMap2.prototype.getWindowOptions = function() {
        var options = {};
        options.maxWidth = 200;
        return options;
    }
}

Map.prototype.createMap = function() {
    var parent = this.xmlDoc.getElementsByTagName('center')[0];
    var latitude = parent.getElementsByTagName('latitude')[0].firstChild.nodeValue;
    var longitude = parent.getElementsByTagName('longitude')[0].firstChild.nodeValue;
    var zoomLevel = parent.getElementsByTagName('zoom_level')[0].firstChild.nodeValue;
    var nodes = parent.getElementsByTagName('info');
    _map = new GMap2(document.getElementById('map_canvas'));
    _map.setCenter(new GLatLng(latitude, longitude), parseFloat(zoomLevel));
    _map.setUIToDefault();

    for (var i = 0; i < nodes.length; i++) {
        if (nodes[i].attributes.getNamedItem('language').value == this.language) {
            latitude = nodes[i].getElementsByTagName('latitude')[0].firstChild.nodeValue;
            longitude = nodes[i].getElementsByTagName('longitude')[0].firstChild.nodeValue;
            var info = nodes[i].getElementsByTagName('content')[0].firstChild.nodeValue;
            info = '<p class="map_content">' + info + '</p>';
            break;
        }
    }

    _map.openInfoWindowHtml(new GLatLng(latitude, longitude), info, _map.getWindowOptions());
}

Map.prototype.populateMap = function() {
    var nodes = this.xmlDoc.getElementsByTagName('overlay');

    for (var i = 0; i < nodes.length; i++) {
        var latitude = nodes[i].getElementsByTagName('latitude')[0].firstChild.nodeValue;
        var longitude = nodes[i].getElementsByTagName('longitude')[0].firstChild.nodeValue;
        var location = new GLatLng(latitude, longitude);
        var info = this.getInfo(nodes[i]);
        var priority = nodes[i].attributes.getNamedItem('priority').value;

        switch(priority) {
            case 'high':
                this.createMarker(location, null, info);
                break;
            case 'low':
                this.createMarker(location, this.createLowPriorityIcon(), info);
                break;
        }
    }
}

Map.prototype.createLowPriorityIcon = function() {
    var iconOptions = {};
    iconOptions.width = 15;
    iconOptions.height = 20;
    iconOptions.primaryColor = '#FF0000';
    iconOptions.cornerColor = '#FFFFFF';
    iconOptions.strokeColor = '#000000';
    return new MapIconMaker().createMarkerIcon(iconOptions);
}

Map.prototype.getInfo = function(parent) {
    var nodes = parent.getElementsByTagName('info');

    for (var i = 0; i < nodes.length; i++) {
        if (nodes[i].attributes.getNamedItem('language').value == this.language) {
            var title = this.getText(nodes[i].getElementsByTagName('title'));
            var content = this.getText(nodes[i].getElementsByTagName('content'));
            var link = this.getText(nodes[i].getElementsByTagName('link'));
            var info = '';

            if (title != null) {
                info += '<h4>' + title + '</h4>';
            }
            if (content != null) {
                info += '<p class="map_content">' + content + '</p>';
            }
            if (link != null) {
                info += '<p><a href ="http://' + link + '" target="_blank">' + link + '</a></p>';
            }

            return info;
        }
    }
}

Map.prototype.getText = function(nodes) {
    if (nodes.length > 0) {
        return nodes[0].firstChild.nodeValue;
    }

    return null;
}

Map.prototype.createMarker = function(location, icon, info) {
    var marker = new GMarker(location, icon);

    GEvent.addListener(marker, 'click', function() {
        _map.openInfoWindowHtml(location, info, _map.getWindowOptions());
    });

    _map.addOverlay(marker);
}

