// ================================================================
//  Copyright 2005 Masao Yamaguchi <yamaguchi@try-angle.biz>
// ================================================================
//  v0.01  2005/08/17  first release
// ================================================================




// ================================================================
//  変数詳細説明
//  
//  LOCAL_BASEURL_XMLDATA        : XMLファイルへのベースパス
//  LOCAL_BASEURL_POPUPSELECTOR  : Ajax非対応用の選択ウィンドウへのベースパス
//  LOCAL_SELFURL                : このファイルへのパス（絶対パス）
//  LOCAL_FORMNAME               : フォームの名前
//  LOCAL_SELECTNAME1            : selectの名前（都道府県）
//  LOCAL_SELECTNAME2            : selectの名前（市区町村）
//  LOCAL_X401                   : 選択された都道府県のx401データ（PHP側で定義
//  LOCAL_TYPE                   : ポップアップウィンドウのデザインを選択する
//  LOCAL_DEFAULT_X401           : 都道府県の初期値（x401での値）
//  LOCAL_DEFAULT_X402           : 市区町村の初期値（x402での値）
//  
// ================================================================



///Ajaxが使えるか否かをチェックする。
function getAjaxObj(){

     var res = false;

    if ( window.ActiveXObject ) {
    	var req;
        // IE GET
            req = new ActiveXObject( "Microsoft.XMLDOM" );
            if ( req ) {
            	res = true;
            }
            
        // IE POST
            req = new ActiveXObject( "Microsoft.XMLHTTP" );
            if ( req ) {
            	res = true;
            }
    } else if ( window.XMLHttpRequest ) {           // Firefox, Opera
        req = new XMLHttpRequest();
        if ( req ) {
        	res = true;
        }
    }

	return res;

}



//Ajaxが使えるか否か
var can_use_ajax =  getAjaxObj();




// ************************************************************************
//  市区町村選択用windowを表示する
function openLocalSelector(){

	var sobj = document.forms[LOCAL_FORMNAME][LOCAL_SELECTNAME1];
	idx = sobj.options[sobj.selectedIndex].value;
	
	// エリア未選択ならアラートを出して終了
	if (idx==0){
		alert("都道府県を選択してください");
		return;
	}
	
	url = LOCAL_BASEURL_POPUPSELECTOR + '/index.php?action=PopupSelector&pref='+idx+'&jspath='+LOCAL_SELFURL + '&type='+LOCAL_TYPE ;
	
	window.open(url , 'hensyu','scrollbars=yes,width=560,height=405');

}


// ************************************************************************
//  ポップアップウィンドウで市区町村を選択したときの処理
function setLocal(idx,local) {

	parentForm = window.opener.document.forms[LOCAL_FORMNAME];
	
	//市区町村を選択
	parentForm[LOCAL_SELECTNAME2].length = 1;
	parentForm[LOCAL_SELECTNAME2].options[0].selected = true ;
	parentForm[LOCAL_SELECTNAME2].options[0].value = idx;
	parentForm[LOCAL_SELECTNAME2].options[0].text = local;
	
	//都道府県を選択
	parentForm[LOCAL_SELECTNAME1].options[LOCAL_X401].selected = true ;
	
	window.close();
}

// ************************************************************************



// ************************************************************************
//  XMLファイルを読み込んでJSONデータを表示する（Ajax使用）
//  idx  : 都道府県コードX401
//  sync : 同期の場合TRUE、非同期の場合FALSE
function load_xml ( idx , sync ) {

	//Ajaxが使えなければ何もしないで終了
	if(can_use_ajax == false){ return null;}
	
	//引数チェック（都道府県コードのチェック
	if( idx == null || idx == "" || idx < 1 || idx > 48 ){
		return null;
	}
	
	
	var sobj1 = document.forms[LOCAL_FORMNAME][LOCAL_SELECTNAME1];//都道府県選択用SELECT
	var sobj2 = document.forms[LOCAL_FORMNAME][LOCAL_SELECTNAME2];//市区町村選択用SELECT
	
	
		
    // XMLファイル名を指定する 
    
    var url = "" ;
    
    if( 0 < idx && idx < 10 ){
    	url = "0"+idx;
    }else if( 9 < idx && idx < 48 ){
    	url = idx;
    }else{
    	//要素の設定
    	sobj2.length = 1;
    	sobj2.options[0].text = "市区町村を選択"; 
		sobj2.options[0].value = 0;
		
		
    	//初期状態として第一要素を設定する
    	sobj1.options[0].selected = true;
    	sobj2.options[0].selected = true;
    	

    }
    ;
    url = LOCAL_BASEURL_XMLDATA + "/local_" + url + ".xml";

	
	//////////解析用関数の定義
	var func = function ( data ){

	//データ組み立て
	var size = data['items']['item'].length;  //市区町村の数
	var list = data['items']['item'];//選択した都道府県の市区町村データの配列
	
	var sobj1 = document.forms[LOCAL_FORMNAME][LOCAL_SELECTNAME1];//都道府県選択用SELECT
	var sobj2 = document.forms[LOCAL_FORMNAME][LOCAL_SELECTNAME2];//市区町村選択用SELECT
	
	
		//OPTIONのリセット
		sobj2.length=size+1;//要素の数をセット
		sobj1.options[idx].selected = true;//都道府県SELECTで、指定されたものを選択状態にする（予備）
		sobj2.options[0].selected = true;//市区町村の選択をリセットする

		//弟１要素の設定
		sobj2.options[0].text = "市区町村を選択"; 
		sobj2.options[0].value = 0;
		
		//各要素の設定
		var t = "";
	    for ( var i = 0 ; i < size ; i++ ) {
    	
			sobj2.options[i+1].text = list[i]['label'];
			sobj2.options[i+1].value= list[i]['x402'];
			
			//debug
			//t = t + "["+sobj2.options[i+1].text+"("+(sobj2.options[i+1].value)+")]  ";
    	} 
    	//debug
    	//document.getElementById( "parsed2" ).innerHTML = t;
    	
	}
	
	
	if( sync == true ){
		//読み込み・解析（POST 非同期の場合
		var xml = new JKL.ParseXML( url, null );
		xml.setOutputArrayAuto();
		xml.async( func ); 
    

		// JSON形式に解析する
		xml.parse();
    
	}else{
	
		//読み込み・解析（GET 同期の場合
		var xml = new JKL.ParseXML( url, null );
	
		// JSON形式に解析する
		xml.setOutputArrayAuto();
		var data = xml.parse();
		
		func(data);
	
	}
	
}

// ************************************************************************
//  初期値を設定する

function setDefault () {

	if(can_use_ajax){
		//Ajaxが利用できるとき
		
		//都道府県選択用SELECT
		var sobj1 = document.forms[LOCAL_FORMNAME][LOCAL_SELECTNAME1];
		for(i=0;i<sobj1.options.length;i++){
			if( sobj1.options[i].value == LOCAL_DEFAULT_X401 ){
				//VALUEが同じOPTIONを選択状態にする
				sobj1.options[i].selected = true;
			}
		
		}
		
		//指定都道府県データの読み込み(同期にする)
		load_xml(LOCAL_DEFAULT_X401 , false );
	
		//市区町村選択用SELECT
		var sobj2 = document.forms[LOCAL_FORMNAME][LOCAL_SELECTNAME2];
		for(i=0;i<sobj2.options.length;i++){
		
			if( sobj2.options[i].value == LOCAL_DEFAULT_X402 ){
				//VALUEが同じOPTIONを選択状態にする
				sobj2.options[i].selected = true;
			}
		
		}
	}else{
		//Ajaxが利用できないとき
		//Defaultだけ設定しておく
	
		//都道府県選択用SELECT
		var sobj1 = document.forms[LOCAL_FORMNAME][LOCAL_SELECTNAME1];
		for(i=0;i<sobj1.options.length;i++){
			if( sobj1.options[i].value == LOCAL_DEFAULT_X401 ){
				//VALUEが同じOPTIONを選択状態にする
				sobj1.options[i].selected = true;
			}
			
		}
	
		//市区町村選択用SELECT
		var sobj2 = document.forms[LOCAL_FORMNAME][LOCAL_SELECTNAME2];
		sobj2.length = 1;
		sobj2.options[0].selected = true;
		
		//初期値が指定されている場合、それを挿入
		if( LOCAL_DEFAULT_X402 != 0 ){
			sobj2.options[0].value = LOCAL_DEFAULT_X402;
			sobj2.options[0].text = LOCAL_DEFAULT_X402_LABEL;
		}

	}
	
}





