

// Gmapオブジェクト変数
var map;
// 店舗ID
var shopid;
var shop_lat;
var shop_lng;
// ショップリスト:1 ショップ詳細:2
var pageflag;
// マーカー出力PHPパス
var MARKER_PHP = 'marker_list.php';
// ショップリスト出力PHPパス
var SHOPLIST_PHP = 'loc_area.php';
// 店舗詳細出力PHPパス
var SHOPDETAIL_PHP = 'shopdetail.php';
// Google map　表示ID
var MAP_DIV = 'searchArea2';

// アイコンオブジェクト
var icon;
// アイコンオブジェクト
var mopt;

// ズーム位置

var RANGE_0 = 3;
var RANGE_1 = 10;
var RANGE_2 = 30;

var ZOOM_0 = 13;
var ZOOM_1 = 11;
var ZOOM_2 = 9;

var ZOOM = 14;

// 初期ロード時のフラグメント
var load_flag = true;

var first_load;

// 店舗リストの読み込み
function loadApp(id,pt){

    if (GBrowserIsCompatible()) {
        // ページフラグ設置 1:ショップリスト 2:ショップ詳細
        shopid = id;
        pageflag = (id==null)?1:2;
        setMap(id,pt);
    }

}

// 初期設定 店舗リスト
function setMap(id,pt){

    icon = new GIcon();
    icon.image = "../common/img/flag.png";
    icon.iconSize = new GSize(26, 34);
    icon.shadowImage = "../common/img/flag_t.png";
    icon.shadowSize = new GSize(26, 34);
    icon.iconAnchor = new GPoint(9,34);
    icon.infoWindowAnchor = new GPoint(13, 5);   //17to0

    mopt = new Object();
    mopt.icon = icon;

    first_load = true;

    // 初期座標latlng切り分け
    var pos_arr = pt.split(",");
    // Google map 描画処理
    map = new GMap2(document.getElementById(MAP_DIV));
    // 中心座標
    var point = new GLatLng(pos_arr[1],pos_arr[0]);

    // コントローラーの配置
    map.addControl(new GLargeMapControl());
    // 初期位置設定

    //スケールコントローラ(尺度定規)を付ける
    map.addControl(new GScaleControl());

    //吹き出しの影を消す
    map.getPane(G_MAP_FLOAT_SHADOW_PANE).style.display="none";

    var zoom_flag = 0;
    //alert(document.fm.shop_range.length);
    for(var p=0;p<document.fm.shop_range.length;p++){
        if(document.fm.shop_range[p].checked){
            zoom_flag = document.fm.shop_range[p].value;
            break;
        }
    }

    if(zoom_flag==0){
        map.setCenter(point, ZOOM);
    }else if(zoom_flag==RANGE_0){
        map.setCenter(point, ZOOM_0);
    }else if(zoom_flag==RANGE_1){
        map.setCenter(point, ZOOM_1);
    }else if(zoom_flag==RANGE_2){
        map.setCenter(point, ZOOM_2);
    }

    // マップのマーカーを設置する(動的)
    getMapMarker();

    if(pageflag == 1){
        // ショップリストを設置する(動的)
        getShopList();
    }else{
        //getShopDetail();
    }

    // マップ移動イベント(ドラッグ 拡大)処理されたら処理
    GEvent.addListener(map, 'dragend',
    function() {
        var pt = map.getCenter();
        document.fm.pt.value = pt.lng()+","+pt.lat();
       // マップのマーカーを設置する(動的)
       if(load_flag){
            getMapMarker();
       }
       if(pageflag == 1){
            // ショップリストを設置する(動的)
            getShopList();
       }
    });

}

// 地図のマーカー用のXMLを受取&処理リクエスト送信
function getMapMarker()
{
    var option_params = GetSelectionParams();
    new Ajax.Request(MARKER_PHP,
    {
        method: 'post',
        onSuccess: getMapMarkerResponse,
        postBody: option_params
    });

}
// 店舗リストをHTMlごと受取&処理リクエスト送信
function getShopList(){

    var option_params = GetSelectionParams_norg();
    new Ajax.Request(SHOPLIST_PHP,
    {
        method: 'post',
        onSuccess: getShopListResponse,
        postBody: option_params
    });

}

function getShopDetail(){

    var option_params = GetSelectionParams();
    new Ajax.Request(SHOPDETAIL_PHP,
    {
        method: 'post',
        onSuccess: getShopDetailResponse,
        postBody: option_params
    });

}

// POSTパラメーターの生成
function GetSelectionParams(){

    // 検索オプションのパラメーター出力
    var and='';
    var params='';

    // 中心座標
    var pt = map.getCenter();
    params += 'pt='+pt.lng()+","+pt.lat();
    //params += '&rg=999';

    // 店舗リスト
    if(pageflag == 1){

        var str = Form.serialize('fm');
        params += '&'+str;

    // 店舗詳細
    }else if(pageflag == 2){
        params += '&id='+shopid;
    }

    return params;
}

// POSTパラメーターの生成
function GetSelectionParams_norg(){

    // 検索オプションのパラメーター出力
    var and='';
    var params='';

    // 中心座標
    var pt = map.getCenter();
    params += 'pt='+pt.lng()+","+pt.lat();

    // 店舗リスト
    if(pageflag == 1){

        var str = Form.serialize('fm');
        params += '&'+str;

    // 店舗詳細
    }else if(pageflag == 2){

        var str = Form.serialize('fm');
        params += '&'+str;
        params += '&id='+shopid;

    }

    return params;
}


// 地図用マーカーXMLデータをパースしてマーカー表示
function getMapMarkerResponse(req)
{

    // 戻りのXMLをパース
    var xml = XMLParser.parse(req.responseXML.documentElement);
    //$('result').innerHTML = xml.dumpHTML(); // 2

    var shopdata = xml.$marker.$shop;

    //alert(xml.$marker);
    map.clearOverlays();

    if(shopdata == undefined){
        if(first_load){
            var range = xml.$marker.getAttribute('range').value;

            if(range==RANGE_0){
                moveSetCenter(ZOOM_0);
            }else if(range==RANGE_1){
                moveSetCenter(ZOOM_1);
            }else if(range==RANGE_2){
                moveSetCenter(ZOOM_2);
            }
        }
        first_load = false;
        return false;
    }

    if(shopdata.length>0){

        for(i=0;i<shopdata.length;i++){
            var shopname = shopdata[i].value;
            var id = shopdata[i].getAttribute('id').value;
            var pt = shopdata[i].getAttribute('pt').value.split(',');
            var address = shopdata[i].getAttribute('address').value;
            var tel = shopdata[i].getAttribute('tel').value;
            var holiday = shopdata[i].getAttribute('holiday').value;
            var shoptimeTitle = shopdata[i].getAttribute('shoptimetitle').value;
            var shoptime = shopdata[i].getAttribute('shoptime').value;
            var cyouzaitimeTitle = shopdata[i].getAttribute('cyouzaitimetitle').value;
            var cyouzaitime = shopdata[i].getAttribute('cyouzaitime').value;
            var lng = pt[0];
            var lat = pt[1];
            if( (shopid>0 && shopid == id) || shopid==null){
                var marker = createMarker(new GLatLng(lat,lng), shopname, address, id, tel, holiday, shoptimeTitle, shoptime, cyouzaitimeTitle, cyouzaitime);
                map.addOverlay(marker);
                if(shopid>0 && load_flag){
                    shop_lat = lat;
                    shop_lng = lng;
                    map.setCenter(new GLatLng(lat,lng), ZOOM);
                    load_flag = false;
                }
            }

        }

    }else if(shopdata.value!=""){

            var shopname = shopdata.value;
            var id = shopdata.getAttribute('id').value;
            var pt = shopdata.getAttribute('pt').value.split(',');
            var address = shopdata.getAttribute('address').value;
            var tel = shopdata.getAttribute('tel').value;
            var holiday = shopdata.getAttribute('holiday').value;
            var shoptimetitle = shopdata.getAttribute('shoptimetitle').value;
            var shoptime = shopdata.getAttribute('shoptime').value;
            var cyouzaitimeTitle = shopdata.getAttribute('cyouzaitimetitle').value;
            var cyouzaitime = shopdata.getAttribute('cyouzaitime').value;
            var lng = pt[0];
            var lat = pt[1];
            if( (shopid>0 && shopid == id) || shopid==null){
                var marker = createMarker(new GLatLng(lat,lng), shopname, address, id, tel, holiday, shoptimetitle, shoptime, cyouzaitimeTitle, cyouzaitime);
                map.addOverlay(marker);
                if(shopid>0 && load_flag){
                    shop_lat = lat;
                    shop_lng = lng;
                    map.setCenter(new GLatLng(lat,lng), ZOOM);
                    load_flag = false;

                }
            }

    }

    // 検索押したときとはじめてのアクセスのときにあったら名古屋3km処理
    if(first_load == true && (shopdata.length>0 || shopdata.value!="")){

        first_load = false;

        var range = xml.$marker.getAttribute('range').value;

        //2009.10.05 Modify 店舗リスト　店舗詳細　縮尺変更処理
        if(pageflag == 1){
            if(range==RANGE_0){
                moveSetCenter(ZOOM_0);
            }else if(range==RANGE_1){
                moveSetCenter(ZOOM_1);
            }else if(range==RANGE_2){
                moveSetCenter(ZOOM_2);
            }
        } else if(pageflag == 2){
                moveSetCenter(ZOOM);
        }

    }

    // 初期のロード時のみ行わせる動作用
    first_load = false;
}

function moveSetCenter(zoom){
    map.setCenter(map.getCenter(), zoom);
}

// 店舗リストのデータ受け取る(HTML)
function getShopListResponse(req){
    $('box_shoplist').innerHTML = req.responseText;
}

function getShopDetailResponse(req){
    $('box_shopdetail').innerHTML = req.responseText;
}

// マーカー・吹き出し生成
function createMarker(pos, message ,address,id, tel, holiday, shoptimeTitle, shoptime, cyouzaitimeTitle, cyouzaitime){

    //マーカーを作成する
    var marker = new GMarker(pos,mopt);

    //マーカーをクリックで詳細に移動
    GEvent.addListener(marker, "click", function () {

        var pt = map.getCenter();
        var pt_str = pt.lng()+','+pt.lat();
        var href = 'shop.php?id=' + id + '&pt=' + pt_str;

        location.href = href;
    });

    //マーカーにマウスオーバーで吹き出しを表示する
    GEvent.addListener(marker, "mouseover", function () {

        var pt = map.getCenter();
        var pt_str = pt.lng()+','+pt.lat();
        var href = '#';

        if(pageflag==1)
        {
            href = 'shop.php?id=' + id + '&pt=' + pt_str;
        }

        var html = '<div style="font-size:12px; line-height:20px; "><a href="' + href + '">' + message + '</a><br/ >';
        if(''!=shoptimeTitle || ''!=shoptime){
            html += shoptimeTitle + ':' + shoptime + '<br/ >';
        }
        if(''!=cyouzaitimeTitle || ''!=cyouzaitime){
            html += cyouzaitimeTitle + ':' + cyouzaitime + '<br/ >';
        }

        html += '店休日:' + holiday + '</div>';

        marker.openInfoWindowHtml(html);

    });


    return marker;
}

// 店舗リスト検索ボタン
function searchShopList(){

    first_load = true;
    getMapMarker();
    getShopList();
}

// 店舗詳細画面のみ変更用
function chgShopDetail(id){

    shopid = id;
    getShopDetail();
}

// 店舗リストへ戻るボタン
function returnShopList(){

    var pt = map.getCenter();
    var pt_str = pt.lng()+','+pt.lat();
    document.fm.action = "loc_shop.php";
    document.fm.method = "post";
    document.fm.pt.value = pt_str;
    document.fm.submit();

}

// 店舗リストへ移るボタン
function goStationList(pr){

//  var pt = map.getCenter();
//  var pt_str = pt.lng()+','+pt.lat();
    document.fm.action = "loc_station.php?"+pr;
    document.fm.method = "post";
//  document.fm.pt.value = pt_str;
    document.fm.submit();

}

