// $Header: /var/cvs/doshisha/www/js/Customer/ajaxzip.js,v 1.4 2007/12/05 09:19:10 otsu_k Exp $
// Ajaxを使用した機能

// 郵便番号から住所を求める関数(検索はサーバで行う)
// 使用法: getAddress(prefix)
//   getAddress2(prefix+'ZipCode1',prefix+'ZipCode2'
//              ,prefix+'Address',prefix+'AddressKana') 。
// 使用法: getAddress2(z1,z2,a1,a2)
//   要素名(ID)が z1 と z2 である inputから郵便番号を取り出してサーバで検索
//   し、結果(住所と住所カナ)を要素名(ID)が a1 と a2 である inputに設定する
// 注:要素名はページ全体(他のフレームを含む)から探す(MM_findObj関数の仕様)ので、
//    異なるフォームでも同じ名前またはIDの要素があると正しく動作しない。
   
function getAddress(prefix) {
    return getAddress2
   (prefix+'ZipCode1',prefix+'ZipCode2',prefix+'Address',prefix+'AddressKana');
}

function getAddress2(z1,z2,a1,a2) {
    var xmlHttp = getXmlHttpObject();
    var Zip1     = MM_findObj(z1).value;
    var Zip2     = MM_findObj(z2).value;
    var Zip      = Zip1 + Zip2;
    if (Zip1.length != 3 || Zip2.length != 4) return false;
    xmlHttp.open
        ('GET', '?act=Customer_Js_ChangeZipAddress&z=' + escape(Zip), true);
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            var xmlDoc = xmlHttp.responseXML;
            if (xmlDoc.documentElement) {
                var AddressKana =
                 xmlDoc.getElementsByTagName('AddressKana').item(0).firstChild;
                var Address =
                 xmlDoc.getElementsByTagName('Address').item(0).firstChild;
                if (  Address     != null && a1 != ''
                   && (i = MM_findObj(a1)) != null) {
                    i.value = Address.data;
                }
                if (  AddressKana != null && a2 != ''
                   && (i = MM_findObj(a2)) != null) {
                    i.value = AddressKana.data;
                }
            } else {
                document.getElementById(AddressKanaName).value = '';
                document.getElementById(AddressName).value = '';
            }
        }
    }
    xmlHttp.send('');
    return false;
}

/**
 * XMLHttpRequestオブジェクトのインスタンスを作成して返す
 *  注: 並行動作しない保証がある場合以外、1回のサーバ問い合わせごとに
 *      1つずつインスタンスを作って使うべきである。
 */
function getXmlHttpObject() {
    var xmlhttp;
    /*@cc_on
    @if (@_jscript_version >= 5)
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (E) {
                xmlhttp = false;
            }
        }
    @else
        xmlhttp = false;
    @end @*/
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
            xmlhttp.overrideMimeType("text/xml"); 
        } catch (e) {
            xmlhttp = false;
        }
    }
    return xmlhttp;
}
