jQuery.noConflict();
jQuery(document).ready(function ($) {

var g_map;
var g_mapclick_lsn;
var g_mapiwcc_lsn;
var g_sv_marker;
var g_sv_ol;
var g_sv_client;
var g_sv_pano;
var g_is_open_iw = false;
var g_custom_iw;

// 物件マーカー設定
var b_icon = new GIcon();
b_icon.image = '/images/room/icn_room.png';
b_icon.iconSize = new GSize(22, 36);
b_icon.iconAnchor = new GPoint(11, 36);
b_icon.shadow = '/images/room/icn_room_shadow.png';
b_icon.shadowSize = new GSize(48, 36);
var g_bmk_opt = new Object();
g_bmk_opt.clickable = false;
g_bmk_opt.draggable = false;
g_bmk_opt.icon = b_icon;

// ストリートビューマーカー設定
var sv_icon = new GIcon();
sv_icon.image = '/images/room/icn_eye.png';
sv_icon.iconSize = new GSize(22, 22);
sv_icon.iconAnchor = new GPoint(11, 11);
sv_icon.shadow = '/images/room/icn_eye_shadow.png';
sv_icon.shadowSize = new GSize(30, 21);
var g_svmk_opt = new Object();
g_svmk_opt.clickable = false;
g_svmk_opt.draggable = false;
g_svmk_opt.icon = sv_icon;

// カスタムinfoWindow設定
var g_iw_width = 280;
var g_iw_height = 200;
var g_iw_padding = 10;
var g_custom_iw;

var CustomIW = function () {};
CustomIW.prototype = new GOverlay();
CustomIW.prototype.initialize = function (map) {
    $("#iWindow").css({
        'padding' : g_iw_padding+'px'
    });
    $("#svArea").css({
        'width' : g_iw_width+'px',
        'height' : g_iw_height+'px'
    });
    $("#btnCloseIW").click(closeInfoWindow);
};
CustomIW.prototype.remove = function () {
    $("#svArea").empty();
    $("#iWindow").css({'display' : 'none'});
};
CustomIW.prototype.copy = function () {
    return new CustomIW();
};
CustomIW.prototype.redraw = function (force) {};

// 地図表示
function showMap() {
    if (!GBrowserIsCompatible()) {
        return false;
    }

    var bldg_lat = $("#bldg_lat").val();
    var bldg_lng = $("#bldg_lng").val();
    var sv_lat = $("#sv_lat").val();
    var sv_lng = $("#sv_lng").val();
    var sv_yaw = $("#sv_yaw").val();
    var sv_pitch = $("#sv_pitch").val();
    var sv_zoom = $("#sv_zoom").val();

    if (bldg_lat == '' || bldg_lat == 0 || bldg_lng == '' || bldg_lng == 0) {
        return false;
    }

    var blatlng = new GLatLng(parseFloat(bldg_lat), parseFloat(bldg_lng));

    // 地図生成
    g_map = new GMap2($("#map").get(0));
    g_map.addControl(new GLargeMapControl());
    g_map.addControl(new GMapTypeControl());

    // ストリートビュー
    if ($("#no_sv").val() != 1) {
        var svlatlng = new GLatLng(parseFloat(sv_lat), parseFloat(sv_lng));
        g_map.setCenter(svlatlng, parseInt($("#map_zoom").val()));
        // マーカー表示
        if (!g_sv_marker) {
            g_sv_marker = new GMarker(svlatlng, g_svmk_opt);
            g_map.addOverlay(g_sv_marker);
        }
        addStreetViewOverlay();
    } else {
        g_map.setCenter(blatlng, parseInt($("#map_zoom").val()));
        if (g_mapclick_lsn) GEvent.removeListener(g_mapclick_lsn);
    }

    // マーカー表示
    var b_marker = new GMarker(blatlng, g_bmk_opt);
    g_map.addOverlay(b_marker);

    // マーカーを含む階層にカスタムinfoWindowを配置
    var m_pane = g_map.getPane(G_MAP_MARKER_PANE);
    m_pane.id = 'b_marker';
    $("#b_marker").append($("#iWindow").get(0));

    // ストリートビュー表示
    if ($("#no_sv").val() != 1 && sv_lat != '' && sv_lat != 0 && sv_lng != '' && sv_lng != 0 && sv_yaw != '' && sv_pitch != '' && sv_zoom != '') {
        showStreetView(new GLatLng(parseFloat(sv_lat), parseFloat(sv_lng)), parseFloat(sv_yaw), parseFloat(sv_pitch), parseInt(sv_zoom));
    }
}

// ストリートビューオーバーレイ表示
function addStreetViewOverlay() {
    // ストリートビュー
    if (!g_sv_ol) {
        g_sv_ol = new GStreetviewOverlay();
        g_map.addOverlay(g_sv_ol);
    }

    // 地図クリック時の動作設定
    if (!g_mapclick_lsn) {
        g_mapclick_lsn = GEvent.addListener(g_map, 'click', function (overlay, latlng) {
            if (latlng) {
                if (g_is_open_iw) {
                    var c_pixel = g_map.fromLatLngToDivPixel(latlng);
                    var iw_pos = $("#iWindow").position();
                    if (c_pixel.x >= iw_pos.left && c_pixel.x <= iw_pos.left + g_iw_width + g_iw_padding * 2
                    && c_pixel.y >= iw_pos.top && c_pixel.y <= iw_pos.top + g_iw_height + g_iw_padding * 2) {
                        return false;
                    }
                }
                if (g_is_open_iw) closeInfoWindow();
                g_map.panTo(latlng);
                getStreetView(latlng);
            }
        });
    }
}

// ストリートビューデータ取得＆表示
function getStreetView(clatlng) {
    if (!g_sv_client) {
        g_sv_client = new GStreetviewClient();
    }
    g_sv_client.getNearestPanoramaLatLng(clatlng, function (svlatlng) {
        if (svlatlng) {
            g_sv_marker.setLatLng(svlatlng);
            showStreetView(svlatlng, 0, 0, 0);
        }
    });
}

// ストリートビュー表示
function showStreetView(svlatlng, sv_yaw, sv_pitch, sv_zoom) {
    g_sv_pano = new GStreetviewPanorama($("#svArea").get(0), {latlng:svlatlng, pov:{yaw:sv_yaw, pitch:sv_pitch, zoom:sv_zoom}});
    GEvent.addListener(g_sv_pano, 'error', errorNoFlash);

    g_map.removeOverlay(g_custom_iw);
    var m_pixel = g_map.fromLatLngToDivPixel(svlatlng);
    $("#iWindow").css('top', m_pixel.y - g_iw_height/2 + 'px');
    $("#iWindow").css('left', m_pixel.x - g_iw_width/2 + 'px');
    $("#iWindow").css('display', 'block');
    g_map.addOverlay(g_custom_iw);
    g_map.disableDragging();
    g_is_open_iw = true;
}

// カスタムinfoWindowを閉じる
function closeInfoWindow() {
    if (g_sv_pano) {
        GEvent.clearInstanceListeners(g_sv_pano);
        g_sv_pano.remove();
        g_sv_pano = null;
    }
    g_map.removeOverlay(g_custom_iw);
    g_map.enableDragging();
    g_is_open_iw = false;
}

// FLASH未対応エラー
function errorNoFlash(error_code) {
    if (error_code == FLASH_UNAVAILABLE) {
        alert('ストリートビューの閲覧にはFLASHプラグインが必要です。');
        return false;
    }
}

$(function () {
    $(window).unload(GUnload);
    g_custom_iw = new CustomIW();
    showMap();
});

});
