var ZIP_SCRIPT_URL = "zip.php";
var form_obj;
var zip_field_name;
var pref_field_name;
var address1_field_name;
var address2_field_name;

/**
 * HTTPリクエスト
 */
var scriptTag = null;
function openHttpRequest(method, url, send_text, callback) {
	var head    = document.getElementsByTagName('head')[0];
	if(scriptTag) {
		head.removeChild(scriptTag);
	}
	scriptTag  = document.createElement( 'script' );
	scriptTag.type = 'text/javascript';
	scriptTag.src  = url + "?" + send_text + "&callback=" + callback;
	head.appendChild(scriptTag);
}

/**
 * HTTPリクエスト イベントハンドラ
 */
function httpEventHandler(j) {
	if(j.error) {
		setFieldValue(form_obj, pref_field_name, '');
		setFieldValue(form_obj, address1_field_name, '');
		setFieldValue(form_obj, address2_field_name, '');
		alert('住所情報が見つかりませんでした。');
	}
	else {
		//setFieldValue(form_obj, zip_field_name, j.zip);
		setFieldValue(form_obj, pref_field_name, j.pref);
		if(address1_field_name == address2_field_name) {
			setFieldValue(form_obj, address1_field_name, j.address1 + ""+ j.address2);
		}
		else {
			setFieldValue(form_obj, address1_field_name, j.address1);
			setFieldValue(form_obj, address2_field_name, j.address2);
		}
		if (findAddressByZipCallback != null) {
			findAddressByZipCallback();
		}
	}
	form_obj.desabled = 1;
}

/**
 * ファイルをHTTPリクエストにより取得
 */
var findAddressByZipCallback = null;
function findAddressByZip(form, zip, pref, address1, address2, callback) {
	form_obj = form;
	zip_field_name = zip;
	pref_field_name = pref;
	address1_field_name = address1;
	address2_field_name = address2;
	var zip_code = getFieldValue(form, zip);
	if(!zip_code.match(/^\s*$/)) {
		zip_code = zip_code.replace(/[^\d]/g, "");
		if(zip_code.match(/^\d{7}$/)) {
			form_obj.desabled = 1;
			findAddressByZipCallback = callback;
			openHttpRequest('POST', ZIP_SCRIPT_URL, 'zip='+escape(zip_code), "httpEventHandler");
			return;
		}
		else {
			setFieldValue(form_obj, pref_field_name, '');
			setFieldValue(form_obj, address1_field_name, '');
			setFieldValue(form_obj, address2_field_name, '');
			alert("郵便番号:7桁の半角数字を入力してください。");
		}
	}
}
/**
 * Formフィールドに値を格納
 */
function setFieldValue(form, name, value) {
	// 比較関数
	function valueCmp(value1, value2) {
		if(value2.length) {
			for(var i = 0; i < value2.length; i++)
				if(value1 == value2[i]) return true;
		}
		return (value1 == value2);
	}
	// フィールドオブジェクトを取り出す
	var field = form.elements[name];
	if (!field) {
		return;
	}
	var field_list;
	if(field.length) {
		field_list = field;
		field = field_list[0];
	}
	var tagname = field.tagName.toLowerCase();
	// input タグ
	if(tagname == "input") {
		var type = field.type.toLowerCase();
		if(type == "text" || type == "password" || type == "hidden") {
			field.value = value;
		}
		else if(type =="checkbox" || type =="radio") {
			for(var i = 0; i < field_list.length; i++)
				field_list[i].checked = valueCmp(field_list[i].value, value);
		}
	}
	// select タグ
	else if(tagname == "option") {
		for(var i = 0; i < field_list.length; i++)
			field_list[i].selected = valueCmp(field_list[i].value, value);
	}
	// textarea タグ
	else if(tagname == "textarea") {
		field.value = value;
	}
}
/**
 * Formフィールドの値を取得
 */
function getFieldValue(form, name) {
	// フィールドオブジェクトを取り出す
	var field = form.elements[name];
	if (!field) {
		return null;
	}
	var field_list;
	if(field.length) {
		field_list = field;
		field = field_list[0];
	}
	var tagname = field.tagName.toLowerCase();

	// input タグ
	if(tagname == "input") {
		var type = field.type.toLowerCase();
		if(type == "text" || type == "password" || type == "hidden") {
			return field.value;
		}
		else if(type=="checkbox") {
			var values = new Array();
			for(var i = 0; i < field_list.length; i++)
				if(field_list[i].checked) values.push(field_list[i].value);
			return values;
		}
		else if(type=="radio") {
			for(var i = 0; i < field_list.length; i++)
				if(field_list[i].checked) return field_list[i].value;
			return null;
		}
	}
	// select タグ
	else if(tagname == "option") {
		if(field_list.multiple) {
			var values = new Array();
			for(var i = 0; i < field_list.length; i++)
				if(field_list[i].selected) values.push(field_list[i].value);
			return values;
		}
		else {
			return field_list[field_list.selectedIndex].value;
		}
	}
	// textarea タグ
	else if(tagname== "textarea") {
		return field.value;
	}
}

