// ---------------------------------------------------------------- //
//  ajax で郵便番号検索を行う
// ---------------------------------------------------------------- //

var lastZip = "";       // 最後に検索した郵便番号
function getAddress( formid, argz1, argz2, argp, arga, arga2, arga3, argsa ) {
	var jklform = new JKL.Form( formid );
    var zip1 = jklform.getValue( argz1 )
    var zip2 = jklform.getValue( argz2 )
    var zip = zip1 + zip2;

    if ( zip.length >= 7 && lastZip != zip ) {
        lastZip = zip;          // 最後に検索した郵便番号を保存
        var http1 = newXMLHttpRequest();
        if ( ! http1 ) return false;
		var url = '../../ajaxzip.php?zip=' + escape(zip);
		// GET メソッド、URL 指定、非同期(=true)
        http1.open('GET', url, true);
        // 無名関数をハンドラとする
        http1.onreadystatechange = function () {
            handle_setAddress ( http1, jklform, argz1, argp, arga, arga2, arga3, argsa );
        };
        http1.send(null);
    }
	return true;
}



var lastAddr = "";
function setAddress( formid, newJpref, newAddr, newAddr2, newAddr3, argp, arga, arga2, arga3, argsa ) {
	var jklform = new JKL.Form( formid );

		// 現在の住所を取り出す
        var oldAddr = jklform.getValue( arga3 );

        if ( newJpref && (oldAddr == lastAddr || oldAddr == '') ) {
            // 都道府県名でマッチングする
            jklform.setValue( argp, newJpref );
            // 都道府県コードでマッチングする
            // jklform.setValue( argp, newPrefCD );
            // 住所を記入する
            jklform.setValue( arga, newAddr );
            // 住所を記入する
            jklform.setValue( arga2, newAddr2 );
            // 住所を記入する
            jklform.setValue( arga3, newAddr3 );

            lastAddr = newAddr3;
        }
		var select_addr=getDivFromName(argsa);
		var html = '';
		writeDivHTML(select_addr, html);
		setDivVisibility(select_addr, false);

	return true;
}




// ---------------------------------------------------------------- //
//  newXMLHttpRequest ---- XMLHttpRequest オブジェクトの生成
// ---------------------------------------------------------------- //

function newXMLHttpRequest () {
    if ( typeof ActiveXObject!="undefined" ) {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } else if ( typeof XMLHttpRequest!="undefined" ) {
        return new XMLHttpRequest();
    } else{
        return null;
    }
}

// ---------------------------------------------------------------- //
//  ajax 通信完了後に呼び出されるハンドラ
// ---------------------------------------------------------------- //
//  0 = uninitialized
//  1 = loading
//  2 = loaded
//  3 = interactive
//  4 = complete
// ---------------------------------------------------------------- //

function handle_setAddress( http1, jklform, argz1, argp, arga, arga2, arga3, argsa ) {

    if (http1.readyState == 4 && http1.status == 200) {
        var newJpref = "";
        var newPrefCD  = "";
        var newAddr = "";
        var newAddr2 = "";
        var newAddr3 = "";

        var resXML = http1.responseXML;
        if ( resXML.documentElement ) {
            var items = resXML.documentElement.getElementsByTagName('item');
            if ( items && items.length > 0 ) {
				var html = '';
				for (i = 0;i < items.length; i++)
				{
	                var item1 = items[i];
	                var xprefj = item1.getElementsByTagName('jpref');
	                var xcity  = item1.getElementsByTagName('jcity');
	                var xcity2  = item1.getElementsByTagName('jcity2');
	                var xlocal = item1.getElementsByTagName('jlocal');
	                var jcity  = "";
	                var jcity2  = "";
	                var jlocal = "";
	                if ( xprefj  != null ) newJpref = xprefj[0].firstChild.data;
	                if ( xcity  != null ) jcity = xcity[0].firstChild.data;
	                if ( xcity2 != null ) jcity2 = xcity2[0].firstChild.data;
	                if ( xlocal != null ) jlocal = xlocal[0].firstChild.data;

	                if ( jcity2 == '-' ) jcity2 = '';

	                newAddr = jcity;
	                newAddr2 = jcity2;
	                newAddr3 = jlocal;
//					html += "<a href=\"#\" onClick=\"setAddress('"+jklform.getFormId()+"','"+newJpref+"','"+newAddr+"','"+argp+"','"+arga+"','"+argsa+"');\">"+newJpref+newAddr+'</a><br />';
					html += "<a href=\"#\" onClick=\"setAddress('"+jklform.getFormId()+"','"+newJpref+"','"+newAddr+"','"+newAddr2+"','"+newAddr3+"','"+argp+"','"+arga+"','"+arga2+"','"+arga3+"','"+argsa+"');return false;\">"+newJpref+newAddr+newAddr2+newAddr3+'</a><br />';
                }
				html += '';

				if (items.length > 1)
				{
					var select_addr=getDivFromName(argsa);
					writeDivHTML(select_addr, html);
					setDivVisibility(select_addr, true);

					var el_arga=getDivFromName(argz1);
					var r = getAbsolutePos(el_arga);
					var height = getDivHeight(el_arga);
					moveDivTo(select_addr,r.x,r.y + height);
				}
				else
				{
					setAddress(jklform.getFormId(),newJpref,newAddr,newAddr2,newAddr3,argp,arga,arga2,arga3,argsa);
				}
            }
        }

    }
}

// ---------------------------------------------------------------- //



// レイヤ名からレイヤオブジェクトを得る 
function getDivFromName(nm){
  // IE5+, Mozilla, Opera
  if(document.getElementById) return document.getElementById(nm); 
  if(document.all) return document.all(nm); // IE4
  if(document.layers){ // NN4
    var s='';
    for(var i=1; i<arguments.length; i++)
      s+='document.layers.'+arguments[i]+'.';
    return eval(s+'document.layers.'+nm);
  }
  return null;
}


// レイヤを絶対値で移動する 
function moveDivTo(div,left,top){
  if(document.layers){ div.moveTo(left,top); return; } // NN4
  // IE5+, Mozilla, Opera 7
  if(typeof div.style.left!="undefined"&& typeof div.style.left=="string"){ 
    div.style.left=left+'px';
    div.style.top =top +'px';
  }
  else if(typeof div.style.pixelLeft!="undefined"){ // IE4, Opera 6
    div.style.pixelLeft=left;
    div.style.pixelTop =top;
  }
}


// レイヤに HTMLを書く // Opera 7以上
function writeDivHTML(div,html){ 
   if(document.layers){ // NN4
    div.document.open();
    div.document.write(html);
    div.document.close();
   }
   else if(typeof div.innerHTML!="undefined"){ // IE, Mozilla, Opera
    div.innerHTML=html;
   }
}





// レイヤのサイズ（高さ）の取得 
function getDivHeight(div){
  return document.layers?
         div.clip.height:(div.offsetHeight||div.style.pixelHeight||0);
}


// レイヤの表示／非表示の設定 
function setDivVisibility(div,visible){
  (div.style||div).visibility=(visible)?
   ((window.opera && !document.documentElement)?'visible':'inherit'):'hidden';
  (div.style||div).display=(visible)?
   ((window.opera && !document.documentElement)?'block':'block'):'none';
}



function getAbsolutePos(el) {
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp = getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
};

