//
// Map
//

var Map = Class.create();

Map.prototype = {
    
    initialize: function(id, position, zoom) {
        
        if (!position) position = "32.81899979058092,129.87943768501282";
        if (!zoom) zoom = 13;
        
        this.map = new GMap2(document.getElementById(id));
        this.map.addControl(new GLargeMapControl());
        this.map.addControl(new GMapTypeControl());
        
        this.setCenter(position, parseInt(zoom));
        
    },
    setCenter: function(position, zoom) {
        if (zoom == undefined) zoom = this.map.getZoom();
        this.map.setCenter(this._parseLatLng(position), zoom);
    },
    setMarker: function(position) {
        this.map.addOverlay(new GMarker(this._parseLatLng(position)));
    },
    setMarkers: function(xpath) {
        var elements = $$(xpath);
        
        for (var i = 0; i < elements.length; i++) {
            var title = elements[i].getAttribute('title');
            var date = elements[i].getAttribute('date');
            var image = elements[i].getAttribute('image');
            var url = elements[i].getAttribute('url');
            
            var marker = new GMarker(this._parseLatLng(elements[i].getAttribute('pos')));
            this.map.addOverlay(marker);
            GEvent.addListener(marker, 'click', this._createHandler(date, title, image, url));
        }
    },
    setFormElement: function(posE, zoomE) {
        GEvent.addListener(this.map, 'click', function(overlay, point) {
            if (point) {
                posE.value = point.y + "," + point.x;
                zoomE.value = this.getZoom();
                this.clearOverlays();
                this.addOverlay(new GMarker(new GLatLng(point.y, point.x)));
            }
        });
    },
    _parseLatLng: function(position) {
        var pos = position.replace(/(^\s+|\s+$)/, "").split(",");
        if (pos.length == 2) {
            pos[0] = parseFloat(pos[0]);
            if (pos[0] == NaN) pos[0] = 0;
            
            pos[1] = parseFloat(pos[1]);
            if (pos[1] == NaN) pos[1] = 0;
        } else {
            return new GLatLng(0, 0);
        }
        return new GLatLng(pos[0], pos[1]);
    },
    _createHandler: function(date,title,image,url) {
        var html = "<div>" + date + " <b>" + title + "</b>";
        if (image) html = html + "<br/><img src=\"" + image + "\">";
        html = html + "<p><a href=\"" + url + "\">詳細</a></p></div>";
        return function() {
            this.openInfoWindowHtml(html);
        }
    }
};