// JavaScript Document
// 地図ロードエラー回避用カウント関数
var $toCount = 0;

/**
 * イベント発生
 */
$(document).ready(function() {
    // 詳細検索条件表示
    $("#detailFilter").hide();

/*
    // TOPページ用検索タブ
    
    $("#searchMethodTab").tabs();

    $("#searchMethodTab").click(function(){
        $("#address").focus();
    });

    // 路線検索用アコーディオン
    $("#lineListAccordion").accordion({
        collapsible: true,
        autoHeight: false
    });

    $("#filterOpen").click(function () {
        $("#detailFilter").show();
        return false;
    });

    $(".filterClose").click(function () {
        $("#detailFilter").hide();
        return false;
    });

    // 町名選択用アコーディオン
    $("#townListAccordion").accordion({
        collapsible: true,
        autoHeight: false
    });

    $("#townListAccordion div").click(function() {
        $townListTop = $("#townList").position().top;

        $browserTop = getYPosition();

        if ($browserTop > $townListTop) {
            $("html,body").scrollTop($townListTop);
        }
    });
*/

    // リンクを新規ウインドウで開く
    openNewWindow();

    // リンクを新規ウインドウで開く(メニューバーetc無し)
    $(".newSimpleWindow").click(function () {
        window.open($(this).attr('href'), null, 'menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no,width=800');

        return false;
    });

    // 郵便番号から、住所を取得
    $("#zip").keyup(function () {
        var $error = false;
        var $inputZip = $(this).val();

        if ($inputZip.length == 7) {
            var $check1 = $inputZip.match(/^\d{7}$/);

            if ($check1) {
                var $zip = $inputZip;
            } else {
                $error = true;
            }
        } else if ($inputZip.length == 8) {
            var $check2 = $inputZip.match(/^\d{3}-\d{4}$/);

            if ($check2) {
                var $zip = $inputZip.replace("-", "");
            } else {
                $error = true;
            }
        } else {
            return false;
        }

        if ($error) {
            return false;
        }

        if ($zip.length != 7) {
            return false;
        }

        /**
         * 最初の3桁毎のファイルになっているので、ファイル名特定し、住所データ取得
         */
        var $zip3 = $zip.substr(0,3);

        // JSON取得用URL
        var $url = "http://"+document.domain+"/json/zip/"+$zip3+".json";

        // callback関数定義
        var jsonCallback = function ($data) {
            if (!$data) return;

            setAddressData($data);
        };

        $.getJSON($url, jsonCallback);

        /**
         * 住所を取得し、埋め込む
         */
        var setAddressData = function ($data) {
            var $array = $data[$zip];

            // Opera対策
            var $opera = ($zip-0+0xff000000)+"";

            if (!$array && $data[$opera]) {
                $array = $data[$opera];
            }

            if (!$array) {
                return false;
            }

            if (!$array[0]) {
            } else {
                $("#address").val($array[1] + $array[2]);
                $("#address1").val($array[2]);
                $("#prefecturalId").val($array[0]);
            }
        };
    });

    /**
     * 検索条件設定ボックスを表示
     */
    $("#searchBox").hide();

    $("#openClose").click(function () {
        //$("#searchBox").show();
        controlOption($("#detailFilter"), $("#openClose"));
    });

/*
    $("#filterClose").click(function () {
        //$("#searchBox").hide();
    });
*/

    // テキストフォーカス時に全選択にする
    $(":input").focus(function () {
        $(this).select();
    });

    // 数字のみの入力欄では、数字以外をはじく
    $(".digit, .tel, .fax, #zip").blur(function () {
        $char = $(this).val();

        if ($char.match(/[^0-9,.-]/g)) {
            $target = $(this).css({
                                    backgroundColor: "#FF0000",
                                    filter: "alpha(opacity=70)",
                                    mozOpacity:"0.7",
                                    opacity:"0.7",
                                    border:"1px solid #999999"
                                  });

            alert("半角数字のみで入力してください");
        } else {
            $target = $(this).css({
                                    backgroundColor: "#FFFFFF",
                                    filter: "alpha(opacity=100)",
                                    mozOpacity:"1",
                                    opacity:"1",
                                    border:"1px solid #999999"
                                  });
        }
    });

    if ($("div").is("#map")) {
        $cityName   = $(":hidden[name=cityName]").val();
        $address    = $(":hidden[name=address]").val();
        $lat        = $(":hidden[name=centerLat]").val();
        $lng        = $(":hidden[name=centerLng]").val();
        
        $circleFlag = $(":hidden[name=circleFlag]").val();
        $prefecturalId = $(":hidden[name=prefecturalId]").val();

        if ($(":hidden[name=zoomLevel]").val() == "") {
            $zoomLevel = 16;
        } else {
            $zoomLevel = $(":hidden[name=zoomLevel]").val();
        }

        loadSearchMap($address, $lat, $lng, $zoomLevel, $circleFlag, $cityName);
    }

    $("#searchButton").click(function () {
        $feeFrom = $("select[name=feeFrom]").val();
        $feeTo   = $("select[name=feeTo]").val();

        if (parseInt($feeFrom) > parseInt($feeTo)) {
            alert("賃料を正しく設定してください。");

            return false;
        }
    });

    if ($("div").is("#smallMap")) {
        $lat = $("#smallMap #lat").text();
        $lng = $("#smallMap #lng").text();

        loadSmallMap($lat, $lng);
    }

    if ($("div").is("#corporateMap")) {
        loadCorporateMap();
    }

    $("#addBookmark").click(function() {
        if (window.sidebar) {
            window.sidebar.addPanel("【Parking Point】月極駐車場検索のパーキングポイント", "http://parking-point.net", "");
        } else {
            window.external.AddFavorite("http://parking-point.net", "【Parking Point】月極駐車場検索のパーキングポイント");
        }
    });

    // 契約条件の選択状態により、年齢・国籍と社判の入力表示を切り替える
    if ($(":radio[name=contract_conditions]:checked").val() == 2) {
        $(".personalContract").hide();
        $(".corporateContract").show();
    } else {
        $(".personalContract").show();
        $(".corporateContract").hide();
    }

    $(":radio[name=contract_conditions]").click(function () {
        if ($(this).val() == 2) {
            $(".personalContract").hide();
            $(".corporateContract").show();
        } else {
            $(".personalContract").show();
            $(".corporateContract").hide();
        }
    });

    if ($(":radio[name=pp_1]:checked").val() == "個人") {
        $("#pp_3isMust").hide();
    } else {
        $("#pp_3isMust").show();
    }

    $(":radio[name=pp_1]").click(function () {
        if ($(this).val() == "個人") {
            $("#pp_3isMust").hide();
        } else {
            $("#pp_3isMust").show();
        }
    });

    // 職業の選択状態により、勤務先情報の入力表示を切り替える
    if ($(":radio[name=contract_conditions]:checked").val() == 2) {
        $(".workData").hide();
    } else {
        if ($(":radio[name=job]:checked").val() != 2) {
            $(".workData").show();
        } else {
            $(".workData").hide();
        }
    }
    
    
    $(":radio[name=job]").click(function () {
        if ($(this).val() == 2) {
            $(".workData").hide();
        } else {
            $(".workData").show();
        }
    });

    // 区画詳細へリンク
    toStallDetail();

    // お気に入り操作
    addFavorite();
    deleteFavorite();

    $(window).unload(function() {
        if (typeof GUnload == 'function') {
            GUnload();
        }
    });
    
    try{
        window.addEventListener("load",initRollovers,false);
    }catch(e){
        window.attachEvent("onload",initRollovers);
    }
    
});

// GoogleMap用
var $mapMarker = new Object();


/**
 * 指定の住所or緯度経度を中心として、地図を表示し、地図中にある施設一覧を表示
 *
 * @param string $address
 * @param float  $lat
 * @param float  $lng
 * @param int    $zoomLevel
 * @param string $circleFlag
 * @param string $cityName
 */
function loadSearchMap($address, $lat, $lng, $zoomLevel, $circleFlag, $cityName) {
    
	// 処理順1
    $address = $address;
    $zoomLevel = parseInt($zoomLevel);
    $circleFlag = true;
    $setZoom = false;
    
    // 地図検索の使い方
    displayHowtoMapBox();

    if (GBrowserIsCompatible()) {
        var $map = new GMap2(document.getElementById("map"));
        
        showCenterPoint($map);

        $map.addControl(new GMapTypeControl());
        $map.addControl(new GLargeMapControl());

        // 住所にマーカー表示
        var $geocoder = new GClientGeocoder();
        var $point;

        if ($lat != "" && $lng != "") {
            // 処理順B2-1
            $map.clearOverlays();
            // getPremiseListを独自にコールするときのみzoomLevelをあらかじめセットする
            // それ以外はaddListnerでzoomendを監視するため後でコールする

            // 処理順B2-2
            if ($(":hidden[name=type]").val() == "around") {
                $map.setCenter(new GLatLng($lat, $lng), $zoomLevel);
                
                var $marker;
                var $centerPoint = $map.getCenter();

                $marker = putCenterPoint($map, $lat, $lng, $(":hidden[name=premiseId]").val())

                $(":hidden[name=centerLat]").val($lat);
                $(":hidden[name=centerLng]").val($lng);

                $map.addOverlay($marker);

                $(":hidden[name=zoomLevel]").val($zoomLevel);

                // page無し、位置変更なし
                getPremiseList($map, null, false);
            }
            // 処理順B2-3
            var $area = $map.getBounds();

            var $northEast = $area.getNorthEast();
            var $southWest = $area.getSouthWest();

            // hiddenへ埋め込み
            $(":hidden[name=centerLat]").val($lat);
            $(":hidden[name=centerLng]").val($lng);
            $(":hidden[name=northEastLat]").val($northEast.lat());
            $(":hidden[name=northEastLng]").val($northEast.lng());
            $(":hidden[name=southWestLat]").val($southWest.lat());
            $(":hidden[name=southWestLng]").val($southWest.lng());
            $(":hidden[name=zoomLevel]").val($zoomLevel);
            // 処理順B2-4
            if ($(":hidden[name=type]").val() != "around") {
                $setZoom = true;
            }
        } else {
            // 処理順4-1A
            var $timeout = 1000; // 1秒待ち * 5回まで
            if ($geocoder) {
                // 処理順4-2A
                // getLocationsでステータスを確認する
                $geocoder.getLocations($address, function($addresses) {
                    // 処理順4-3A
                    if ($addresses.Status.code == 200) {
                        // Statusが正常の場合
                        $timeout = 0;
                    } else if ($addresses.Status.code == 620 || $addresses.Status.code == 602) {
                        $toCount += 1;
                    }
                    if ($toCount > 5) {
                        $("#totalCount").text(0);
                        getPremiseListError();
                        return false;
                    }
                    // 座標取得
                    // 処理順4-4A
                    $geocoder.getLatLng(
                        $address,
                        function ($point) {
                            // 処理順4-5A
                            if (!$point) {
                                if ($cityName == "") {
                                    var $address = $address.substring(0, $address.length - 1);
                                } else {
                                    var $address = $cityName;
                                }
                                // 座標が取得できない
                                if ($timeout != '0') {
                                    setTimeout('loadSearchMap($address, $lat, $lng, $zoomLevel, $circleFlag, $cityName)', $timeout);
                                } else {
                                    loadSearchMap($address, $lat, $lng, $zoomLevel, $circleFlag, $cityName);
                                }
                            } else {
                                // 処理順4-6A
                                $map.clearOverlays();
                                if ($lat == "" || $lng == "") {
                                    $lat = $point.lat();
                                    $lng = $point.lng();
                                }
                                // 処理順4-7A
                                $map.setCenter(new GLatLng($lat, $lng), $zoomLevel);
                                // getPremiseListの後処理順6-1
                                // DOMの生成タイミング？
                                // 処理順6-1A
                                if ($(":hidden[name=type]").val() == "around") {
                                    var $marker;
                                    var $centerPoint = $map.getCenter();
                                    
                                    $marker = putCenterPoint($map, $lat, $lng, $(":hidden[name=premiseId]").val())
                                    
                                    $(":hidden[name=centerLat]").val($lat);
                                    $(":hidden[name=centerLng]").val($lng);
                                    
                                    $map.addOverlay($marker);
                                    
                                    $(":hidden[name=zoomLevel]").val($zoomLevel);
                                    
                                    // page無し、位置変更なし
                                    getPremiseList($map, null, false);
                                }
                                // 処理順6-2A
                                var $area = $map.getBounds();
                                
                                var $northEast = $area.getNorthEast();
                                var $southWest = $area.getSouthWest();
                                
                                // 処理順6-3
                                // hiddenへ埋め込み
                                $(":hidden[name=centerLat]").val($lat);
                                $(":hidden[name=centerLng]").val($lng);
                                $(":hidden[name=northEastLat]").val($northEast.lat());
                                $(":hidden[name=northEastLng]").val($northEast.lng());
                                $(":hidden[name=southWestLat]").val($southWest.lat());
                                $(":hidden[name=southWestLng]").val($southWest.lng());
                                $(":hidden[name=zoomLevel]").val($zoomLevel);
                                // 処理順6-3
                            }
                        }
                    );
                });
            }
        }
        
        // 処理順2-1
        GEvent.addListener($map, "zoomend", function ($oldLevel, $newLevel) {
			// 処理順3-1
			// 処理順5はgetPremiseList
/*            if ($(":hidden[name=type]").val() == "around") {
            } else {
*/
            // 周辺の地図も同様に再表示の仕様に変更
            $map.clearOverlays();

            var $marker;
            var $centerPoint = $map.getCenter();

//            $marker = putPushpin($map, $centerPoint.lat(), $centerPoint.lng());

            // 周辺の地図対象物件
            if ($(":hidden[name=type]").val() == "around") {
                var $aroundMarker = new GLatLng($(":hidden[name=aroundLat]").val(), $(":hidden[name=aroundLng]").val());
                
                $params = new Array();
                $params['id'] = $(":hidden[name=premiseId]").val();
                $params['campaign_flag'] = 0;
                $params['around_flag'] = 1;
                
                var $aMarker = createMarker($aroundMarker, $params);
                $map.addOverlay($aMarker);
            }

            if ($(":hidden[name=centerLat]").val() != ""
                && $(":hidden[name=centerLat]").val() != ""
                    && ($centerPoint.lat() != $(":hidden[name=centerLat]").val()
                        || $centerPoint.lng() != $(":hidden[name=centerLng]").val())) {
                $changeCenter = true;
            } else {
                $changeCenter = false;
            }

            $(":hidden[name=centerLat]").val($centerPoint.lat());
            $(":hidden[name=centerLng]").val($centerPoint.lng());

            var $area = $map.getBounds();

            var $northEast = $area.getNorthEast();
            var $southWest = $area.getSouthWest();

            $(":hidden[name=northEastLat]").val($northEast.lat());
            $(":hidden[name=northEastLng]").val($northEast.lng());
            $(":hidden[name=southWestLat]").val($southWest.lat());
            $(":hidden[name=southWestLng]").val($southWest.lng());

//            $map.addOverlay($marker);

            $(":hidden[name=zoomLevel]").val($newLevel);

            // page無し、位置変更フラグ次第
            // 処理順3-2
            
            getPremiseList($map, null, $changeCenter);
            //}
        });

        GEvent.addListener($map, "dragend", function () {
            /*
            if ($(":hidden[name=type]").val() == "around") {
            } else {
            */
            // 周辺の地図も同様に再表示の仕様に変更
            $map.clearOverlays();

            var $marker;
            var $centerPoint = $map.getCenter();

//            $marker = putPushpin($map, $centerPoint.lat(), $centerPoint.lng());
            
            // 周辺の地図対象物件
            if ($(":hidden[name=type]").val() == "around") {
                var $aroundMarker = new GLatLng($(":hidden[name=aroundLat]").val(), $(":hidden[name=aroundLng]").val());
                
                $params = new Array();
                $params['id'] = $(":hidden[name=premiseId]").val();
                $params['campaign_flag'] = 0;
                $params['around_flag'] = 1;
                
                var $aMarker = createMarker($aroundMarker, $params);
                $map.addOverlay($aMarker);
            }

            $(":hidden[name=centerLat]").val($centerPoint.lat());
            $(":hidden[name=centerLng]").val($centerPoint.lng());

            var $area = $map.getBounds();

            var $northEast = $area.getNorthEast();
            var $southWest = $area.getSouthWest();

            $(":hidden[name=northEastLat]").val($northEast.lat());
            $(":hidden[name=northEastLng]").val($northEast.lng());
            $(":hidden[name=southWestLat]").val($southWest.lat());
            $(":hidden[name=southWestLng]").val($southWest.lng());

//            $map.addOverlay($marker);

            // page無し、位置変更あり
            getPremiseList($map, null, true);
            //}
        });

        //$("#result > .pager > a, #searchButton > input").live("click", function() {
        $("#result > .pager > ul > li > a, #searchButton > a#searchSubmit").live("click", function() {
            $map.clearOverlays();

            var $marker;
            var $centerPoint = $map.getCenter();

/*
            if ($(":hidden[name=type]").val() == "around") {
                $marker = putCenterPoint($map, $(":hidden[name=centerLat]").val(), $(":hidden[name=centerLng]").val(), $(":hidden[name=premiseId]").val());
            } else {
*/
            // 毎回地図中心は中心点表示
//            $marker = putPushpin($map, $centerPoint.lat(), $centerPoint.lng());

            $(":hidden[name=centerLat]").val($centerPoint.lat());
            $(":hidden[name=centerLng]").val($centerPoint.lng());
            
//            }

            // 周辺地図は別途マーカーをセット
            if ($(":hidden[name=type]").val() == "around") {
                var $aroundMarker = new GLatLng($(":hidden[name=aroundLat]").val(), $(":hidden[name=aroundLng]").val());
                
                $params = new Array();
                $params['id'] = $(":hidden[name=premiseId]").val();
                $params['campaign_flag'] = 0;
                $params['around_flag'] = 1;
                
                var $aMarker = createMarker($aroundMarker, $params);
                $map.addOverlay($aMarker);
            }
            var $area = $map.getBounds();

            var $northEast = $area.getNorthEast();
            var $southWest = $area.getSouthWest();

            $(":hidden[name=northEastLat]").val($northEast.lat());
            $(":hidden[name=northEastLng]").val($northEast.lng());
            $(":hidden[name=southWestLat]").val($southWest.lat());
            $(":hidden[name=southWestLng]").val($southWest.lng());
            
            // $map.addOverlay($marker);

            if ($(this).attr('href') != null && $(this).attr('href') != undefined) {
                $url = "http://" + location.hostname;

                $page = $(this).attr('href').replace($url, "");
            } else {
                $page = null;
            }

            // pageあり、位置変更無し
            getPremiseList($map, $page, false);

            return false;
        });
        
        if ($setZoom) {
            // セットするとzoomendのイベントリスナーでコールされる
            $map.setCenter(new GLatLng($lat, $lng), $zoomLevel);
        }
    }
}


/**
 * 検索された住所の中心地を表示
 * @param object $map
 * @param double $lat
 * @param double $lng
 *
 * 仕様変更：常にマーカーを表示するため、
 * マーカの生成・表示はコメントアウトした。
 */
function putPushpin($map, $lat, $lng) {
    var $markerIcon = new GIcon();

//    $markerIcon.image = "http://maps.google.co.jp/mapfiles/ms/icons/blue-pushpin.png";
//    $markerIcon.shadow = "http://maps.google.co.jp/mapfiles/ms/icons/pushpin_shadow.png";
	$markerIcon.image = "/img/mapCenter.gif";
//	$markerIcon.shadow = "http://maps.google.co.jp/mapfiles/ms/icons/pushpin_shadow.png";
//    $markerIcon.iconSize = new GSize(32, 32);
    $markerIcon.iconSize = new GSize(46, 46);
//    $markerIcon.iconAnchor=new GPoint(16,32);
    $markerIcon.iconAnchor=new GPoint(23, 23);
    $markerIcon.infoWindowAnchor = new GPoint(16, 0);

    return new GMarker(new GLatLng($lat, $lng), {icon:$markerIcon});
}

/**
 * 検索された住所の中心地を表示
 * @param object $map
 * @param double $lat
 * @param double $lng
 */
function putCenterPoint($map, $lat, $lng, $id) {
    var $markerIcon = new GIcon();

    $markerIcon.image = "/images/parking-only.png";
    $markerIcon.iconSize = new GSize(27, 40);
    $markerIcon.iconAnchor = new GPoint(13.5, 40);
    $markerIcon.infoWindowAnchor = new GPoint(13.5, 0);

    var $marker = new GMarker(new GLatLng($lat, $lng), {icon:$markerIcon});

    GEvent.addListener($marker, "click", function() {
        displayDetailInfoBox($id);
    });

    return $marker;
}

/**
 * 施設一覧のマーカーとhtmlを取得
 * @param object $map
 */
function getPremiseList($map, $page, $changeCenter) {
    // 処理順5-1
    var $centerPoint = $map.getCenter();
    var $area = $map.getBounds();
    
    var $northEast = $area.getNorthEast();
    var $southWest = $area.getSouthWest();
    // 検索条件の値
    var $query     = $("input, select").serialize();
//    alert($("input[name=availability]:checked").val());

    var $params = "/northEastLat/" + $northEast.lat()
                    + "/northEastLng/" + $northEast.lng()
                    + "/southWestLat/" + $southWest.lat()
                    + "/southWestLng/" + $southWest.lng()
                    + "/centerLat/" + $centerPoint.lat()
                    + "/centerLng/" + $centerPoint.lng()
                    + "?" + $query;

    var $getJsonUrl;
    var $getHtmlUrl;

    var $focus = null;
    if ($page === null) {
        $getJsonUrl = "/search/premise-list/format/json" + $params;
        $getHtmlUrl = "/search/premise-list/format/html" + $params;
    } else {
        if ($page.match(/#.*$/)) {
            $page  = $page.replace(/#.*$/, '');
            $focus = true;
        }
        $getJsonUrl = "/search/premise-list/format/json" + $page + "?" + $query;
        $getHtmlUrl = "/search/premise-list/format/html" + $page + "?" + $query;
    }

    var $data;
    // 処理順5-2
    $.ajaxSetup({scriptCharset:'utf-8'});
    $("#main").block({message: '<h3><img src="/img/loading.gif" /></h3>'});
    $("#result").load($getHtmlUrl, null, function () { 
    	setPremiseListInfo($map, $getJsonUrl, $changeCenter, $centerPoint, $focus); 
    });
    // 検索結果HTMLが確実に表示されるよう関数化
}

/**
 * 座標特定不可の際のhtmlを取得
 */
function getPremiseListError() {
    // 検索条件の値
    var $query     = $("input, select").serialize();
//    alert($("input[name=availability]:checked").val());

    var $params = "/northEastLat/0"
                    + "/northEastLng/0"
                    + "/southWestLat/0"
                    + "/southWestLng/0"
                    + "/centerLat/0"
                    + "/centerLng/0"
                    + "?" + $query;
    var $getJsonUrl;
    var $getHtmlUrl;
    var $focus = null;
    $getJsonUrl = "/search/premise-list/format/json" + "?" + $query;
    $getHtmlUrl = "/search/premise-list/format/html" + "?" + $query;

    var $data;
    $.ajaxSetup({scriptCharset:'utf-8'});
    $("#main").block({message: '<h3><img src="/img/loading.gif" /></h3>'});
    $("#result").load($getHtmlUrl, null, function () {
    setPremiseListInfoError($getJsonUrl); 
    });
}

/**
 * 緯度経度から、ポインタを表示
 * @param $lat
 * @param $lng
 */
function loadSmallMap($lat, $lng) {
    var $marker = "";

    if (GBrowserIsCompatible()) {
        //地図を作成
        var $map = new GMap2(document.getElementById("smallMap"));
        $map.addControl(new GSmallMapControl());
        $map.addControl(new GMapTypeControl(true));

        $map.clearOverlays();
        $map.setCenter(new GLatLng($lat, $lng), 18);

        //マーカーを作成
        $marker = putCenterPoint($map, $lat, $lng, null);

        //マーカーを地図上に配置
        $map.addOverlay($marker);
    }
}

function displayDetailInfoBox($id) {
    $("html,body").animate({scrollTop: 200}, 'show');
    $("div#map").block({message: '<h3><img src="/img/loading.gif" /></h3>'});
    var $url = "/detail/index/premiseId/" + $id;
    if ($('span#distance' + $id).html()) {
        $url += '?distance=' + encodeURIComponent($('span#distance' + $id).html());
    }
    $("#detailInfoBox").load($url, null, function($data) {
        $('div#map').unblock();
        $("div#map").block({message: $data, css: {width: '740px'}});

        $("#closeInfo").click(function(){
                                            $('div#map').unblock();
                                            return false;
                                        });
    });
}

/**
 * 地図検索の使い方
 */
function displayHowtoMapBox() {
    $(".mapTitleHelp > a").live("click", function() {
        $("div#map").block({message: '<h3><img src="/img/loading.gif" /></h3>'});
        $("#howtoMapBox").load('/search/howto-map', null, function($data) {
            $('div#map').unblock();
            $("div#map").block({message: $data, css: {width: '800px'}});

            $("#ok").click(function(){ $('div#map').unblock();
                                       return false;
                                      });
        });
        return false;
    });
}

/**
 * マーカーを作成
 * @param string $markerPoint
 * @param array $params
 */
function createMarker($markerPoint, $params) {
    var $markerIcon = new GIcon();

    if ($params['type'] == 0) {
        $markerIcon.image = "/img/points/green/" + $params['no'] + ".png";
    } else if ($params['type'] == 1) {
        $markerIcon.image = "/img/points/orange/" + $params['no'] + ".png";
    }
    if ($params['campaign_flag'] >= 1) {
        $markerIcon.image = "/img/points/campaign/" + $params['no'] + ".png";
    }
    if ($params['around_flag'] == 1) {
        $markerIcon.image = "/images/parking-only.png";
    }

    $markerIcon.iconSize = new GSize(27, 40);
    $markerIcon.iconAnchor = new GPoint(13.5, 40);
    $markerIcon.infoWindowAnchor = new GPoint(13.5, 0);

    var $marker = new GMarker($markerPoint, {icon:$markerIcon});

    GEvent.addListener($marker, "click", function() {
        displayDetailInfoBox($params['id']);
    });

    return $marker;
}

/**
 * AjaxでHTMLロード完了後にデータを設定する
 * ロードに時間が掛かるので、関数内から退避
 *
 * @param $map			地図オブジェクト
 * @param $getJsonUrl	Ajax生成URL
 * @param $changeCenter	地図ドラッグフラグ
 * @param $centerPoint	中心座標
 *
 */
function setPremiseListInfo($map, $getJsonUrl, $changeCenter, $centerPoint, $focus)
{
    $.ajax({
            url: $getJsonUrl,
            dataType: 'json',
            // 出力テンプレートをJsonとして取得し、取得できたら細かな調整を加える
            success: function($data) {
                $premiseList = $data['premiseList'];
                $totalCount = $data['totalCount'];
                $totalCountDisp = $data['totalCountDisp'];
                
                // 中心地点の住所を地図から取得する
                if ($changeCenter) {
                    // 中心の住所取得
                    var $geocoder = new GClientGeocoder();
                    var $addresses;
                    $geocoder.getLocations($centerPoint, function($addresses) {
//                        alert($addresses);
                        // エラー時は何もしない
                        if ($addresses.Status.code != 200) {
                            //alert($addresses.Status.code);
                            return;
                        }
                        if ($addresses.Placemark[0].AddressDetails.Country.AdministrativeArea 
                            && $addresses.Placemark[0].AddressDetails.Country.AdministrativeArea.Locality 
                                && $addresses.Placemark[0].AddressDetails.Country.AdministrativeArea.Locality.LocalityName) {
                            var $result = $addresses.Placemark[0].AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
                            $(".centerAddress").text($result);
                        }
                    });
                    //$(".centerAddress").text($data['centerAddress']);
                }

                $("#totalCount").text($totalCountDisp);

                if ($totalCount == 0) {
                    //$(".countLeft").hide();
                    $("#main").unblock();

                    $("#map").block({message: $("#noDataBox"), css: {width: '700px'}});
                    $("#ok").click(function() {
                                                $('#map').unblock();
                                              });

                    // スクロール位置取得
                    if ($focus != null) {
                        $pos = $('#premiseResult').offset();
                        $('html, body').animate({scrollTop: $pos.top});
                    }
                    
                    return false;
                } else {
                    var $list = new Array();
                    for ($i=$premiseList.length-1; $i>=0; $i--) {
                        var $array = $premiseList[$i];

                        var $markerPoint = new GLatLng($array['lat'], $array['lng']);
                        
                        // 距離をセット
                        $fromPoint = new GLatLng($centerPoint.y, $centerPoint.x);
                        var $distance = $fromPoint.distanceFrom($markerPoint);
                        //$list[$array['id']] = Math.round($distance) + 'm';
                        $('#distance' + $array['id']).text(Math.round($distance) + 'm');

                        $params = new Array();

                        $params['id'] = $array['id'];
                        $params['no'] = $i + 1;
                        $params['type'] = $array['type'];
                        $params['campaign_flag'] = $array['s_campaignFlag'];
                        
                        var $marker = createMarker($markerPoint, $params);
                        $map.addOverlay($marker);
                    }

                    $(".countLeft").show();
                    $(".offset").text($data['offset']);
                    $(".limit").text($data['limit']);
                    

                    $("#main").unblock();
                    
                    /*
                    for ($i in $list) {
                        // 距離をセット
                        $('#distance' + $i).text($list[$i]);
                    }
                    */
                    
                    // スクロール位置取得
                    if ($focus != null) {
                        $pos = $('#premiseResult').offset();
                        $('html, body').animate({scrollTop: $pos.top});
                    }
                }
            },
            complete: function() {
            },
            error: function() {
            }
    });
}

/**
 * AjaxでHTMLロード完了後にデータを設定する
 * ロードに時間が掛かるので、関数内から退避
 * 座標特定不可時の関数（エラー用のhtmlを返却する）
 *
 * @param $getJsonUrl	Ajax生成URL
 */
function setPremiseListInfoError($getJsonUrl)
{
    $.ajax({
            url: $getJsonUrl,
            dataType: 'json',
            // 出力テンプレートをJsonとして取得し、取得できたら細かな調整を加える
            success: function($data) {

                //$(".countLeft").hide();
                $("#main").unblock();
                $("#map").block({message: $("#noMapDataBox"), css: {width: '700px'}});
                /* MAP表示(閉じるボタン)は使用しない為コメントアウト
                $("#ok").click(function() {
                                            $('#map').unblock();
                                          });
                */
                return false;
            },
            complete: function() {
            },
            error: function() {
            }
    });
}

/**
 * pseudoGCircle （擬似-円描画）
 * @param point   中心地 google.maps.LatLng
 * @param radius  半径 km
 * @param color   google.maps.Polylineに渡される（省略可）
 * @param weight  google.maps.Polylineに渡される（省略可）
 * @param opacity google.maps.Polylineに渡される（省略可）
 * @return google.maps.Polyline
 */
function createCircle($point, $radius, $color, $weight, $opacity) {
    // 頂点の数
    var $vertex = 120;

    // 赤道半径 (m)
    var $equatorialRadius = 6378137;

    // 扁平率の逆数
    var $f = 298.257223563;

    // 離心率の２乗
    var $e = ((2 * $f) -1) / Math.pow($f, 2);

    // π * 赤道半径
    var $equatorialRadiusPi = Math.PI * $equatorialRadius;

    // 1 - e^2 sin^2 (θ)
    var $tmp = 1 - $e * Math.pow(Math.sin($point.latRadians()), 2);

    // 経度１度あたりの長さ(m)
    var $arcLat = ($equatorialRadiusPi * (1 - $e)) / (180 * Math.pow($tmp, 3/2));

    // 緯度１度あたりの長さ(m)
    var $arcLng = ($equatorialRadiusPi * Math.cos($point.latRadians())) / (180 * Math.pow($tmp, 1/2));

    // 半径をｍ単位に
    var $r = $radius * 1000;

    var $points = new Array($vertex);

    for ($i = 0; $i <= $vertex; $i++) {
        var $rad = ($i / ($vertex / 2)) * Math.PI;
        var $lat = ($r / $arcLat) * Math.sin($rad) + $point.lat();
        var $lng = ($r / $arcLng) * Math.cos($rad) + $point.lng();

        $points[$i] = new GLatLng($lat, $lng);
    }

    return new GPolyline($points, $color, $weight, $opacity);
}


/**
 * 会社の地図を表示
 */
function loadCorporateMap() {
    var $address = "東京都練馬区貫井２丁目３－５";
    var $marker;
    var $point;

    if (GBrowserIsCompatible()) {
        //地図を作成
        var $map = new GMap2(document.getElementById("corporateMap"));
        $map.addControl(new GSmallMapControl());
        $map.addControl(new GMapTypeControl());

        var $geocoder = new GClientGeocoder();

        if ($geocoder) {
            $geocoder.getLatLng($address, function($point) {
                if (!$point) {
                    return false;
                } else {
                    $map.clearOverlays();
                    $map.setCenter($point, 17);

                    //マーカーを作成
                    $marker = new GMarker($point);

                    $map.addOverlay($marker);
                }
            });
        }
    }
}

/**
 * 金額を、3桁区切りのカンマ表示
 */
function setGroupSeparator($inputMoney) {
    var $money = new String($inputMoney).replace(/,/g, "");
    while ($money != ($money = $money.replace(/^(-?\d+)(\d{3})/, "$1,$2")));

    return $money;
}

/**
 * 新規ウインドウで開く
 */
function openNewWindow() {
    $(".newWindow").click(function () {
        window.open($(this).attr('href'), null, 'width=1024,height=600,resizable=yes,menubar=yes,location=yes,directories=yes,toolbar=yes,scrollbars=yes');

        return false;
    });
}

/**
 * 区画詳細を開く
 */
function toStallDetail() {
    $(".toStallDetail").click(function () {
        location.href="/detail/stall/stallId/" + $(this).attr('id');

        return false;
    });
}


/**
 * お気に入り追加
 */
function addFavorite() {
    $(".addFavorite > a").live("click", function() {
        $.ajax({
            url: $(this).attr("href"),
            beforeSend: function() {
                $.blockUI({message: '<h3><img src="/img/loading.gif" /></h3>'});
            },
            success: function($data) {
                $.unblockUI();
                $.blockUI({message: $data, css: {
                                                    width: '600px',
                                                    left: ($(window).width() - 600) /2 + 'px'
                                                }
                });
            },
            complete: function() {
                $("body").click(function(){
                    $.unblockUI();
                });
            }
        });
        return false;
    });
    
    $(".addFavoriteDetail > a").live("click", function() {
        $.ajax({
            url: $(this).attr("href"),
            beforeSend: function() {
                $('#map').unblock();
                $("#main").block({message: '<h3><img src="/img/loading.gif" /></h3>'});
            },
            success: function($data) {
                $('#main').unblock();
                $("#main").block({message: $data, css: {width: '600px',left: ($(window).width() - 600) /2 + 'px'} });
            },
            complete: function() {
                $("body").click(function(){
                    $('#main').unblock();
                });
            }
        });
        return false;
    });
}

/**
 * お気に入り削除
 */
function deleteFavorite() {
    $("#favoriteList .delete > a").live("click", function() {
        $.ajax({
            url: $(this).attr("href"),
            beforeSend: function() {
                $.blockUI({message: '<h3><img src="/img/loading.gif" /></h3>'});
            },
            success: function($data) {
                $.unblockUI();
                $.blockUI({message: $data, css: {
                                                    width: '600px',
                                                    left: ($(window).width() - 600) /2 + 'px'
                                                }
                });
            },
            complete: function() {
                $("body").click(function(){
                    $.unblockUI();
                    location.reload();
                    return false;
                });
            }
        });
        return false;
    });
}

/**
 * 現在のブラウザ表示位置の上端の値を取得
 */
function getYPosition() {
    var $y1 = document.documentElement.scrollTop;
    var $y2 = document.body.scrollTop;

    if ($y1 > $y2) {
        $y = $y1
    } else {
        $y = $y2
    }

    return $y
}

/**
 * ポップアップウィンドウ
 * Ajax内コンテンツ用
 */
function popupNewWindow(url){
	// リンクを新規ウインドウで開く(メニューバーetc無し)
    window.open(url, null, 'menubar=no,resizable=yes,scrollbars=no,status=no,toolbar=no,width=620,height=420');
    return false;
}

/**
 * 検索オプション切り替え
 * スクリプト
 */
function controlOption(option, trigger){
    if (option.is(":hidden")){
        trigger.removeClass("searchMore1");
        trigger.addClass("searchClose1");
        $('#openCloseLink').text('絞り込み条件を閉じる');
        option.slideDown("slow");
    }
    else{
        trigger.removeClass("searchClose1");
        trigger.addClass("searchMore1");
        $('#openCloseLink').text('さらに細かく条件を設定して絞り込む');
        option.slideUp("slow");
    }
}

/**
 * デバッグ用
 */
function printfire()
{
    if (document.createEvent)
    {
        printfire.args = arguments;
        var ev = document.createEvent("Events");
        ev.initEvent("printfire", false, true);
        dispatchEvent(ev);
    }
}

/**
 * 中心点を常に表示する
 */
function showCenterPoint($map)
{
    // 中心座標のエレメントを設定    
    var $size = 46;
    
    var $pin = document.createElement('div');
    var $img = document.createElement('img');
    $img.src = '/img/mapCenter.gif';
    $pin.appendChild($img);
    
    // 地図のサイズ取得：954px * 450px + border分
    var $mapSize = $map.getSize();
    var $left = $mapSize.width / 2 - $size / 2;
    var $top  = $mapSize.height / 2 - $size / 2;
    
    var $pinSize = new GSize($left, $top);
    var $position = new GControlPosition(G_ANCHOR_TOP_LEFT, $pinSize);
    $position.apply($pin);
    $map.getContainer().appendChild($pin);
}

