// 県名ボタン画像の幅
var button_width = 58;

// クリックしたときに出現するポップアップの位置
var popup_on_map_x = 20;        // 地図をクリックしたときにマウスカーソルからどれだけ右に離れて表示されるか
var popup_on_map_y = -20;        // 地図をクリックしたときにマウスカーソルからどれだけ下に離れて表示されるか
var popup_on_button_x = 4;        // ボタンをクリックしたときにボタン画像の右上からどれだけ右に離れて表示されるか
var popup_on_button_y = -3;    // ボタンをクリックしたときにボタン画像の右上からどれだけ下に離れて表示されるか

// 検索先URLと共通検索パラメータ 都道府県番号などはさらに下の都道府県データで設定する。
var search_url_all    = "/search/pref";
var all_search_default_param = "from_top=1&city%5B0%5D%5B%5D=0&job%5B%5D=0&feature%5B%5D=0&wage=0&day=0";

var search_url_area    = "/guide/area";
var area_search_default_param = "from_top=1&city%5B0%5D%5B%5D=0&job%5B%5D=0&feature%5B%5D=0&wage=0&day=0";

var search_url_map    = "/guide/map_area";

var search_url_line    = "/guide/line_area";
var line_search_default_param = "from_top=1&city%5B0%5D%5B%5D=0&job%5B%5D=0&feature%5B%5D=0&wage=0&day=0";

var search_url_nmins = "/guide/nmins.htm";

/*
 * 都道府県データ。
 * ID名,都道府県名,ボタン画像の左上y座標,検索パラメータの4つを入力。
 * "ID名" : { "pref" : "都道府県名" , "height" : "ボタン画像の左上y座標" , "params" : "検索パラメータ" },
 *
 * ID名はmap_***で、areaタグのIDと一致させる。さらに***を件名ボタンのliタグのclassと一致させる。
 * /img/front/front/map/map_***.gif にマップ画像を格納しておく。
 * 検索パラメータはkey1=value1&key2=value2&･･･の形式で。
 */

var map_data_s = {
        "map_hokkaido" : { "pref" : "北海道" , "height" : "0" , "params" : "1" },

        "map_aomori" : { "pref" : "青森県" , "height" : "20" , "params" : "2" },
        "map_iwate" : { "pref" : "岩手県" , "height" : "40" , "params" : "3" },
        "map_miyagi" : { "pref" : "宮城県" , "height" : "59" , "params" : "4" },
        "map_akita" : { "pref" : "秋田県" , "height" : "78" , "params" : "5" },
        "map_yamagata" : { "pref" : "山形県" , "height" : "97" , "params" : "6" },
        "map_fukushima" : { "pref" : "福島県" , "height" : "116" , "params" : "7" },

        "map_tokyo" : { "pref" : "東京都" , "height" : "135" , "params" : "13" },
        "map_kanagawa" : { "pref" : "神奈川県" , "height" : "155" , "params" : "14" },
        "map_chiba" : { "pref" : "千葉県" , "height" : "175" , "params" : "12" },
        "map_saitama" : { "pref" : "埼玉県" , "height" : "194" , "params" : "11" },
        "map_ibaraki" : { "pref" : "茨城県" , "height" : "213" , "params" : "8" },
        "map_tochigi" : { "pref" : "栃木県" , "height" : "232" , "params" : "9" },
        "map_gunma" : { "pref" : "群馬県" , "height" : "251" , "params" : "10" },

        "map_yamanashi" : { "pref" : "山梨県" , "height" : "270" , "params" : "19" },
        "map_nagano" : { "pref" : "長野県" , "height" : "290" , "params" : "20" },
        "map_niigata" : { "pref" : "新潟県" , "height" : "309" , "params" : "15" },
        "map_toyama" : { "pref" : "富山県" , "height" : "328" , "params" : "16" },
        "map_ishikawa" : { "pref" : "石川県" , "height" : "347" , "params" : "17" },
        "map_fukui" : { "pref" : "福井県" , "height" : "366" , "params" : "18" },

        "map_aichi" : { "pref" : "愛知県" , "height" : "385" , "params" : "23" },
        "map_shizuoka" : { "pref" : "静岡県" , "height" : "405" , "params" : "22" },
        "map_mie" : { "pref" : "三重県" , "height" : "425" , "params" : "24" },
        "map_gifu" : { "pref" : "岐阜県" , "height" : "444" , "params" : "21" },


        "map_osaka" : { "pref" : "大阪府" , "height" : "463" , "params" : "27" },
        "map_hyogo" : { "pref" : "兵庫県" , "height" : "483" , "params" : "28" },
        "map_kyoto" : { "pref" : "京都府" , "height" : "502" , "params" : "26" },
        "map_shiga" : { "pref" : "滋賀県" , "height" : "521" , "params" : "25" },
        "map_nara" : { "pref" : "奈良県" , "height" : "540" , "params" : "29" },
        "map_wakayama" : { "pref" : "和歌山県" , "height" : "559" , "params" : "30" },

        "map_ehime" : { "pref" : "愛媛県" , "height" : "578" , "params" : "38" },
        "map_kagawa" : { "pref" : "香川県" , "height" : "598" , "params" : "37" },
        "map_kohchi" : { "pref" : "高知県" , "height" : "618" , "params" : "39" },
        "map_tokushima" : { "pref" : "徳島県" , "height" : "637" , "params" : "36" },

        "map_okayama" : { "pref" : "岡山県" , "height" : "656" , "params" : "33" },
        "map_hiroshima" : { "pref" : "広島県" , "height" : "676" , "params" : "34" },
        "map_tottori" : { "pref" : "鳥取県" , "height" : "695" , "params" : "31" },
        "map_shimane" : { "pref" : "島根県" , "height" : "714" , "params" : "32" },

        "map_yamaguchi" : { "pref" : "山口県" , "height" : "733" , "params" : "35" },

        "map_fukuoka" : { "pref" : "福岡県" , "height" : "752" , "params" : "40" },
        "map_saga" : { "pref" : "佐賀県" , "height" : "772" , "params" : "41" },
        "map_nagasaki" : { "pref" : "長崎県" , "height" : "791" , "params" : "42" },
        "map_kumamoto" : { "pref" : "熊本県" , "height" : "810" , "params" : "43" },
        "map_oita" : { "pref" : "大分県" , "height" : "829" , "params" : "44" },
        "map_miyazaki" : { "pref" : "宮崎県" , "height" : "848" , "params" : "45" },
        "map_kagoshima" : { "pref" : "鹿児島県" , "height" : "867" , "params" : "46" },
        "map_okinawa" : { "pref" : "沖縄県" , "height" : "886" , "params" : "47" }
};

// 初期化
Event.observe(window,"load",init);
function init(){
    // すべてのマップIDにマウスーバー、マウスアウト、クリックイベントを登録
    for(var id in map_data_s){
        Event.observe($(id),"mouseover",OnMouseOverMap);
        Event.observe($(id),"mouseout",OnMouseOutMap);
        Event.observe($(id),"click",OnClickMap);

        pref = id.replace(/^map_(.+)$/,"$1");
        e_s = $$("#map li."+pref+" a");

        // 都道府県名ボタンにもマウスーバー、マウスアウト、クリックイベントを登録
        if(e_s[0]){
            Event.observe(e_s[0],"mouseover",OnMouseOverPrefButton);
            Event.observe(e_s[0],"mouseout",OnMouseOutPrefButton);
            Event.observe(e_s[0],"click",OnClickPrefButton);
        }
    }

    // 閉じるボタンが押されたときのイベントを登録
    Event.observe($("map_popup_close"),"click",OnClickMapPopupClose);

    $("search_area").onclick = OnClickSearchByArea;
    $("search_line").onclick = OnClickSearchByLine;
    $("search_nmins").onclick = OnClickSearchByNmins;
    $("search_map").onclick = OnClickSearchByMap;
    //Event.observe($("search_all"),"click",OnClickSearchByAll);
    //Event.observe($("search_area"),"click",OnClickSearchByArea);
    //Event.observe($("search_line"),"click",OnClickSearchByLine);
}

//id(map_***) → 都道府県名
function getPrefNameByID(id){
    for(var id_tmp in map_data_s){
        if(id == id_tmp){
            return map_data_s[id]["pref"];
        }
    }
}

// 都道府県名 → id(map_***)
function getIDByPrefName(PrefName){
    for(var id in map_data_s){
        if(PrefName == map_data_s[id]["pref"]){
            return id;
        }
    }
}

// 地図上マウスオーバーイベント
function OnMouseOverMap(e){
    focusPref(Event.element(e).id);
}

// 地図上マウスアウトイベント
function OnMouseOutMap(e){
    blurPref(Event.element(e).id);
}

// ボタンマウスオーバーイベント
function OnMouseOverPrefButton(e){
    focusPref(getIDByPrefName(Event.element(e).previousSibling.data));
}

// ボタンマウスアウトイベント
function OnMouseOutPrefButton(e){
    blurPref(getIDByPrefName(Event.element(e).previousSibling.data));
}

// 地図クリックイベント
function OnClickMap(e){

    id = Event.element(e).id;

    // クリック位置の取得
    if(e.layerX){
        x = e.layerX;
        y = e.layerY;
    } else {
        x = e.offsetX;
        y = e.offsetY;
    }

    // マウスカーソル付近にポップアップ表示
    x += popup_on_map_x;
    y += popup_on_map_y;
    showPopup(x,y,id);
}

// ボタンクリックイベント
function OnClickPrefButton(e){

    // クリックされた要素からidと座標を取得
    id = getIDByPrefName(Event.element(e).previousSibling.data);
    pref = id.replace(/^map_(.+)$/,"$1");
    var e_s = $$("#map li."+pref);    // #実はEvent.element(e)をそのまま使えたかも？

    // ボタン付近にポップアップ表示
    x = e_s[0].offsetLeft + button_width + popup_on_button_x;
    y = e_s[0].offsetTop + popup_on_button_y;
    showPopup(x,y,id);
}

var selected_id = null;

// 閉じるボタンクリックイベント
function OnClickMapPopupClose(e){
    //ポップアップ非表示
    $("map_popup").style.display = "none";

    selected_id = null;
}


// 都道府県名と対応する地図上の場所を光らせる
function focusPref(id){

    // 地図画像を切り替えて光っているように見せる。
    $("japan_map_image").src = "/img/front/home/map/" + id + ".gif";

    pref = id.replace(/^map_(.+)$/,"$1");
    var e_s = $$("#map li."+pref+" a span");
    e_s[0].style.backgroundPosition = "-" + button_width + "px -" + map_data_s[id]["height"] + "px";
}

// 光っていた部分を元に戻す
function blurPref(id){

    $("japan_map_image").src = "/img/front/home/map/map.gif";

    pref = id.replace(/^map_(.+)$/,"$1");
    var e_s = $$("#map li."+pref+" a span");
    e_s[0].style.backgroundPosition = "0px -" + map_data_s[id]["height"] + "px";
}

// ポップアップの表示
function showPopup(x,y,id){
    if($("pref_name")){
        $("pref_name").innerHTML = map_data_s[id]["pref"];
    }
    $("map_popup").style.top = y + "px";
    $("map_popup").style.left = x + "px";
    $("map_popup").style.display = "block";

    selected_id = id;
}

function OnClickSearchByAll(e){
    if(selected_id){
        //location.href = search_url_all + "?" + all_search_default_param + "&" + map_data_s[id]["params"];
        location.href = search_url_all + map_data_s[id]["params"] + '.htm';
    }
    return false;
}

function OnClickSearchByArea(e){
    if(selected_id){
        location.href = search_url_area + map_data_s[id]["params"] + '.htm';
    }
    return false;
}

function OnClickSearchByLine(e){
    if(selected_id){
        location.href = search_url_line + map_data_s[id]["params"] + '.htm';
    }
    return false;
}

function OnClickSearchByNmins(e) {
    if (selected_id) {
        location.href = search_url_nmins;
    }
    return false;
}

function OnClickSearchByMap(e) {
    if (selected_id) {
        location.href = search_url_map + map_data_s[id]["params"] + '.htm';
    }
    return false;
}

//ページトップへ
function backToTop() {
  var x1 = x2 = x3 = 0;
  var y1 = y2 = y3 = 0;
  if (document.documentElement) {
      x1 = document.documentElement.scrollLeft || 0;
      y1 = document.documentElement.scrollTop || 0;
  }
  if (document.body) {
      x2 = document.body.scrollLeft || 0;
      y2 = document.body.scrollTop || 0;
  }
  x3 = window.scrollX || 0;
  y3 = window.scrollY || 0;
  var x = Math.max(x1, Math.max(x2, x3));
  var y = Math.max(y1, Math.max(y2, y3));
  window.scrollTo(Math.floor(x / 2), Math.floor(y / 2));
  if (x > 0 || y > 0) {
      window.setTimeout("backToTop()", 25);
  }
}


