/*
 * 必須
 * zdccommon.js
 * zdcmap.js
 */

/*
縮尺レベル	縮尺値	縮尺	スケールバー2.5cm
18	1,500	千5百分の1	40m
17	2,500	2千5百分の１	70m
16	3,500	3千5百分の１	100m
15	5,000	5千分の1	150m
14	7,500	7千5百分の1	230m
13	10,000	1万分の１	300m
12	15,000	1万5千分の１	450m
11	20,000	2万分の１	600m
10	50,000	5万分の1	1.5km
9	100,000	10万分の１	3.0km
8	150,000	15万分の１	4.5km
7	250,000	25万分の１	7.7km
6	500,000	50万分の1	15km
5	1,000,000	百万分の１	30km
4	1,500,000	150万分の１	45km
3	3,000,000	3百万分の１	90km
2	6,500,000	6百50万分の１	200km
1	13,000,000	千3百万分の１	400km
 */
//アイコンの幅・高さ
var BUKKEN_ICON_WIDTH = 46;  //物件アイコン　幅
var BUKKEN_ICON_HEIGHT = 48; //物件アイコン　高さ
var TENPO_ICON_WIDTH = 52;   //店舗アイコン　幅
var TENPO_ICON_HEIGHT = 59;  //店舗アイコン　高さ

/*
 * 位置を指定して地図を表示
 * @param  string   div       地図を返すdivのid
 * @param  double   posX      DMSな経度
 * @param  double   posY      DMSな緯度
 * @param  integer  scaleLvl  縮尺レベル
 * @param  object   objIcon   アイコンオブジェクト
 * @param  boolean  notCnvPos true:緯度経度を十進とみなすフラグ
 * @return object   map       地図オブジェクト
 */
function loadMapSimple(div, posX, posY, scaleLvl, objIcon, notCnvPos)
{
    var map = _loadMap(div, posX, posY, scaleLvl, 0, notCnvPos);
    
    if (map == null) return null;
    map.setWheelOff(); //Wheel不可能	
    map.dragOff();  //ドラッグ不可能
    /* ユーザレイヤを作成する */
    setIconInMap(map, posX, posY, objIcon, notCnvPos);
    
    return map;
}
/* 位置を指定して地図を表示(詳細表示・中心・スケール・ドラッグなし) */
/* 2008/12/10 依頼によりドラッグなし、座標情報表示なしになった */
function loadMapDetail(div, posX, posY, scaleLvl, objIcon)
{
    var map = _loadMap(div, posX, posY, scaleLvl, 3);
    if (map == null) return null;
    /* ユーザレイヤを作成する */
    setIconInMap(map, posX, posY, objIcon);
    map.setWheelOff(); //Wheel不可能	
    
    return map;
}

/* 位置を指定して地図を表示 */
function loadMap(div, posX, posY, scaleLvl, objIcon)
{
    var map = _loadMap(div, posX, posY, scaleLvl, 7);
    
    /* ユーザレイヤを作成する */
    setIconInMap(map, posX, posY, objIcon);
        
    return map;
}
function _loadMap(div, posX, posY, scaleLvl, widgetMode, notCnvPos)
{
    if ((posX==null || posX==0 || posX=='') && (posY==null || posY==0 || posX=='')) {
            return null;
    //デフォルト位置 (東京駅の位置)
    posX = '139.6953217';
    posY = '35.6862817';
    //DEBUG (札幌の近く)
    //posX = 141.2116662;
    //posY = 43.0358412;
    //scaleLvl = 10;
    }
    if (scaleLvl==null || (scaleLvl<1 && 18<scaleLvl)) {
        alert('スケールレベルは1から18で指定してください');
        return null;
    }
    
    var map = new ZdcMap(document.getElementById(div));
    
    //notCnvPosが定義されていたら変換しない
    if ( notCnvPos ) {
        //変換しない
        pX = posX;
        pY = posY;
    } else {
        //座標系変換
        pX = cnvZdcPoint(posX);
        pY = cnvZdcPoint(posY);
    }
    

    /* 位置と縮尺を指定する*/
    map.setMapLocation(new ZdcPoint(pX, pY), scaleLvl);

    if ((widgetMode & 1) == 1) {
        /* 中心点アイコンウィジットを追加する */
        map.addMapCenter(new ZdcMapCenter());
    }

    if ((widgetMode & 2) == 2) {
        /* スケールバーウィジットを追加する */
        map.addMapScaleBar(new ZdcScaleBar());
    }

    if ((widgetMode & 4) == 4) {	
        /* 情報ボックスを表示する */
        map.addMapCenterInfoBox(new ZdcMapCenterInfoBox());
    }
    return map;

}

/***********************************************************
 * 店舗アイコンをセットしたアイコンオブジェクトを返す
 * @param  string   gIconPath
 * @param  boolean  isReverseIcon
 * @return ZdcIcon  icon
 ***********************************************************/
function createShopIcon(gIconPath, isReverseIcon)
{
    var icon = new ZdcIcon();
    if (typeof(isReverseIcon) == 'undefined') {
        isReverseIcon = false;
    }

    //カスタムアイコン
    iconName = gIconPath + (isReverseIcon ? 'icon_store_up' : 'icon_store');
    icon.image = iconName + ".png"; //通常
    icon.changeimage = iconName + '_a.png'; //アクティブ
    icon.size = new ZdcSize(TENPO_ICON_WIDTH, TENPO_ICON_HEIGHT);
    icon.changesize = new ZdcSize(TENPO_ICON_WIDTH, TENPO_ICON_HEIGHT);
    icon.offset = isReverseIcon ? new ZdcPixel(-27, 0) : new ZdcPixel(-27, -59);
    //icon.changeoffset = new ZdcPixel(-27, -59);
    
    return icon;
}

/***********************************************************
 * 物件アイコンをセットしたアイコンオブジェクトを返す
 * @param  string   gIconPath
 * @return ZdcIcon  icon
 ***********************************************************/
function createBukkenIcon(gIconPath)
{
    var icon = new ZdcIcon();
    
    //カスタムアイコン
    iconName = gIconPath + 'icon_article1';
    icon.image = iconName + ".png"; //通常
    icon.changeimage = iconName + '_a.png'; //アクティブ
    icon.size = new ZdcSize(BUKKEN_ICON_WIDTH, BUKKEN_ICON_HEIGHT);
    icon.changesize = new ZdcSize(BUKKEN_ICON_WIDTH, BUKKEN_ICON_HEIGHT);
    icon.offset = new ZdcPixel(-23, -24);
    
    return icon;
}

/***********************************************************
 * スポットのアイコン
 * @param  string   gIconPath
 * @return object   ZdcIcon
 ***********************************************************/
function createSpotIcon(gIconPath){
    var icon = new ZdcIcon();
    
//    //カスタムアイコン
//    iconName = gIconPath + 'icon_article1';
//    icon.image = iconName + ".png"; //通常
//    icon.changeimage = iconName + '_a.png'; //アクティブ
//    icon.size = new ZdcSize(BUKKEN_ICON_WIDTH, BUKKEN_ICON_HEIGHT);
//    icon.changesize = new ZdcSize(BUKKEN_ICON_WIDTH, BUKKEN_ICON_HEIGHT);
//    icon.offset = new ZdcPixel(-23, -24);
    
    return icon;
}

/***********************************************************
 * マップにアイコンをセットする
 * 中でレイヤーを生成する
 * 
 * @param  ZdcMap  map       ZdcMapオブジェクト
 * @param  string  posX      DMSな経度
 * @param  string  posY      DMSな緯度
 * @param  ZdcIcon objIcon   ZdcIconオブジェクト
 * @param  boolean notCnvPos true:緯度経度を十進とみなす
 * @return void
 ***********************************************************/
function setIconInMap(map, posX, posY, objIcon, notCnvPos)
{
    /* ユーザレイヤを作成する */
    var userlay = new ZdcUserLayer();
    userlay.setLayerScale(1,18); // レイヤを指定スケールで動作させる
    //userlay.setLayerType('auto'); // 縮尺レベル変更時にレイヤを自動削除する
    
    /* アイコンを生成する */
    var icon = objIcon; // ディフォルトのアイコンを利用する
    if ( icon ){
        var iconPt = {};
        //緯度経度をDMS→十進にコンバートするかどうか
        if ( notCnvPos ) {
            iconPt = new ZdcPoint( posX, posY );
        } else {
            iconPt = new ZdcPoint( cnvZdcPoint(posX), cnvZdcPoint(posY));
        }
       
        /* マーカで緯度経度とアイコンを紐付ける */
        var mark = new ZdcMarker(iconPt, icon);
        /* ユーザレイヤにマーカを追加する */
        userlay.addMarker(mark);
        /* 地図にユーザレイヤを追加する */
        map.thisUserLayerID = map.addUserLayer(userlay);
    }
}
