//**
//** セレクトパスの国選択
//**
//** ※要jquery.js
//**

// マップの国データ
var map_countries = {'PT':0,'ES':1,'FR':2,'IT':3,'CH':4,'IE':5,'ENG':6,'SCO':7,'WAL':8,'NL':9,'BE':10,'DE':11,'DK':12,'PL':13,'CZ':14,'AT':15,'SK':16,'HU':17,'SI':18,'HR':19,'RO':20,'RS':21,'BG':22,'MZ':23,'GR':24,'TR':25,'NO':26,'SE':27,'FI':28};

// 隣国データ
var adjacent_countries = {"AT":["DE","HU","IT","CH","SIHR","CZ"]
													,"BX":["FR","DE","IE"]
													,"BG":["RO","MERS","GR"]
													,"CZ":["DE","AT"]
													,"DK":["DE","NO","SE"]
													,"FI":["DE","SE"]
													,"FR":["BX","DE","IE","IT","ES","CH"]
													,"DE":["AT","BX","DK","FI","FR","SE","CH","CZ"]
													,"GR":["IT","MERS"]
													,"HU":["AT","RO","BGCS","MERS"]
													,"IE":["BX","FR"]
													,"IT":["AT","FR","GR","CH","ES","SIHR"]
													,"NO":["DK","SE"]
													,"PT":["ES"]
													,"ES":["FR","PT","IT"]
													,"SE":["DK","FI","DE","NO"]
													,"CH":["AT","FR","DE","IT"]
													,"RO":["HU","BGCS","AT","MERS"]
													,"SIHR":["AT","IT","BGCS","HU","MERS"]
													,"BGCS":["HU","RO","SIHR","GR","MERS"]
													,"MERS":["BG","SIHR","HU","RO","GR"]
												};

//
// 複数の国選択リストをフィルタリングする
//
// * 国選択リストは同一のクラス名を付ける
//
function filter_countries(class_name, select_countries){
     $('.' + class_name).each(function(){
         //指定クラスの選択リストを順にフィルタリングする
         filter_countries_option(class_name, select_countries, $(this).attr('id'));
     });
}

//
// 国選択リストをフィルタリングする
//
// - リストは以下の候補を非表示
//   -- 他のリストで選択されている国
//   -- 他のリストで選択されている国の隣国ではない国
//   -- ただし他のリストが選択されていない場合は全て表示する
//
function filter_countries_option(class_name, select_countries, id){
    var selected_countries = {}; // 既に他で選択されている国リスト
    var adjacents = {};          // 他で選択されている国の隣国リスト
    var selected_count = 0;
    var jid = '#' + id;
    var v = '';
    // 既に選択されている国リストを生成
    $('.' + class_name).each(function(){
        if($(this).attr('id') != id){
            v = $(this).val() + '';
            if(v.length > 0){
                selected_countries[v] = 1;
                selected_count++;
            }
        }
    });
    // 選択されている国の隣国リストを生成
    for(var cd in selected_countries){
        if(!!adjacent_countries[cd]){
            var ads = adjacent_countries[cd];
            for(var i = 0; i < ads.length; i++){
                var a = ads[i];
                adjacents[a] = 1;
            }
        }
    }
    // 選択されていないリストをフィルタリング
    // 現在の値を取得
    v = $(jid).val() + '';
    // いったん全てを削除
    $(jid).children('option').remove();
    $(jid).append($('<option>').attr({ value: '' }).text(' '));
    if(selected_count == 0){
        //他に選択されていない場合は全て表示
        for(var i = 0; i < select_countries.length; i++){
            var opt = select_countries[i];
            $(jid).append($('<option>').attr({ value: opt.country_code }).text(opt.country_name_ja));
        }
    }else{
        for(var i = 0; i < select_countries.length; i++){
            var opt = select_countries[i];
            var ov = opt.country_code;
            var add = true;
            if(v != ov){
                if(!!selected_countries[ov]){
                    // 他で選択されているため非表示
                    add = false;
                }
                if(!!adjacents[ov]){
                }else{
                    // 他で選択されている国の隣国でないため非表示
                    add = false;
                }
            }
            if(add){
                $(jid).append($('<option>').attr({ value: opt.country_code }).text(opt.country_name_ja));
            }
        }
    }
    $(jid).width();         // for IE
    if(v.length > 0){
        // 元の選択値を再選択
        $(jid).val(v);
    }
}

