//var TnkMap = new Object();
var TnkMap = {
    DEBUG: false,
    centers: {
        dongkhoi: [10.7629182, 106.7135524],
        hanoi: [21.03693895, 105.8433314]
    },
    markers: {},
    items: {},
    controls: {},
    categories: [],
    map: null,
    tnkmap: null
}
TnkMap.Base = {
    initialize: function() {
        if (GBrowserIsCompatible()) {
            TnkMap.map = new GMap2(document.getElementById("map_canvas"));
            var control = new GSmallMapControl();
            TnkMap.map.addControl(control);

            var copyright = new GCopyright(1, new GLatLngBounds(
                   new GLatLng(-90, -180), new GLatLng(90, 180)),
                 0, "&copy; 2009 TNK Travel Japan" );
            var cr_collection = new GCopyrightCollection("TnkTravel");
            cr_collection.addCopyright(copyright);
    
            var tilelayers = [new GTileLayer(cr_collection, 1, 16)];
            tilelayers[0].getTileUrl = function(a, b) { 
                var pos = a.x  + "_" + a.y + "_" + b;
                if (TnkMap.DEBUG) $('#tileimage').val(pos);
                return "maps/map_" + pos + ".jpg";
            }

            TnkMap.tnkmap = new GMapType(tilelayers,
                 new GMercatorProjection(17), "TnkTravel",
                 { errorMessage:"マップの範囲外ですよ" });

            TnkMap.map.addMapType(TnkMap.tnkmap);
            TnkMap.map.setMapType(TnkMap.tnkmap);
        }
    },
    loadMarkers: function() {
        $.ajax({
            type: "POST",
            url: "get_marker_data.php",
            data: "location=saigon",
            success: function(json) {
                $.map(eval(json), function(v) {
                    TnkMap.Base.createMarker(v);
//                    TnkMap.items[this.id] = TnkMap.Base.createItem(this);
                });
                TnkMap.Base.filterControlers(TnkMap.Base.getMapName());
            }
        });
    },
    createItem: function(json) {
        var item = new TnkMap.Item();
        item.id = json.id;
        item.name = json.name;
        item.ename = json.ename;
        item.map = json.map;
        item.category_id = json.category_id;
        item.coodinate_x = json.coodinate_x;
        item.coodinate_y = json.coodinate_y;
        item.address = json.address;
        item.tel = json.tel;
        item.description = json.description;
        return item;
    },
    createMarker: function(json) {
        var marker = new GMarker(
                new GLatLng(json['coodinate_x'], json['coodinate_y']),
                { draggable: true }
            );
        marker.disableDragging();
        for (key in json) {
            marker[key] = json[key];
        }
        marker.bindInfoWindowHtml(TnkMap.Base.createInfoWindowHtml(marker));
        TnkMap.markers[json.id] = marker;
        TnkMap.map.addOverlay(TnkMap.markers[json.id]);
        TnkMap.Base.createControlBar(json);
    },
    createInfoWindowHtml: function(marker) {
        var html = "<div class='g_info_window'>";
        html += "<h5>" + marker.name + " - " + marker.ename + "</h5>";
        html += "<h6>" + marker.address + "</h6>";
        html += "<p>" + marker.description + "</p>";
        html += "</div>";
        return html;
    },
    createControlBar: function(json) {
        var a = $("<a href='javascript:void(0);' class='move_to_map'></a>").html("マップへ&#187;");
        a.click(function(){TnkMap.Map.panToMarker(json['id']);});

        var name = $("<span></span>").html(json['name'] + "&nbsp;&nbsp;");
        var ename = $("<div class='ename'></div>").html(json['ename']);
        var h4 = $("<h4></h4>").append(name).append(a).append(ename);

        var div = $("<div></div>");
        div.id = "ctrl_" + json['id'];
        div.append(h4);
        if (json['address'] != "") {
            div.append($("<p class='address'></p>").html("Addrss: " + json['address']));
        }
        div.append($("<p class='desc'></p>").html(json['description']));
        div.addClass('control').addClass(json['map']);
        div.appendTo('#controlbar');
    },
    getMapName: function() {
        var map = location.hash.replace(/#/, "");
        var dim = TnkMap.centers[map];
        if (dim == undefined) return 'dongkhoi';
        return map;
    },
    filterControlers: function(map_name) {
        $(".control").css('display', 'none');
        $("." + map_name).css('display', 'block');
    }
}
TnkMap.Map = {
    moveToMap: function(map, zoom) {
        var dim = TnkMap.centers[map];
        if (dim == undefined) {
            map = "dongkhoi";
            dim = TnkMap.centers[map];
        }
        var latlng = new GLatLng(dim[0], dim[1]);
        TnkMap.map.setCenter(latlng, zoom);
        var baseurl = location.toString().split('#');
        location.href = baseurl[0] + "#" + map;
        TnkMap.Base.filterControlers(TnkMap.Base.getMapName());
        $('#printer').attr("href", "print_" + map + ".html");
    },
    panToMarker: function(id) {
        var marker = TnkMap.markers[id];
        TnkMap.map.panTo(marker.getLatLng());
        TnkMap.map.panDirection(0, 0.5);
        marker.openInfoWindowHtml(TnkMap.Base.createInfoWindowHtml(marker));
        TnkMap.Base.draggableMarker(marker);
    }
}
function TnkMapControl(json) {
    this.id = json['id'];
    this.name = json['name'];
    this.jname = json['name'];
    this.description = json['description'];
    this.category = json['category'];

    this.show = function() {};
    this.hide = function() {};
    this.showInformation = function() {};
    this.hideInformation = function() {};
}

TnkMap.Item = {}
TnkMap.Item.prototype = {
    id: null,
    name: "",
    ename: "",
    map: "",
    category_id: "",
    coodinatex: "",
    coodinatey: "",
    address: "",
    tel: "",
    description: "",
    marker: null,
    to_control: function() {},
    to_marker: function() {}
}

TnkMap.Base.OnLoad = function() {
    TnkMap.Base.initialize();
    TnkMap.Base.loadMarkers();
    TnkMap.Map.moveToMap(TnkMap.Base.getMapName(), 14);
    $('.link_to_dongkhoi').click(function(){TnkMap.Map.moveToMap('dongkhoi', 14);});
    $('.link_to_hanoi').click(function(){TnkMap.Map.moveToMap('hanoi', 14);});
}

