/*
 * 郵便番号検索クラス
 */
var Zipsearch = function() {
	// 値はzipCodeSearchメソッドの中でセット
	this.prefectureObj;
	this.address1Obj;
	this.address2Obj;
	this.zipErrorMsgObj;
}

/*
 * 郵便番号検索クラスのメソッド
 */
Zipsearch.prototype = {
	/* 郵便番号検索処理
	 * flagの説明：
	 * 　2入力欄の場合trueを、1入力欄の場合falseを指定
	 * arg1とarg2の説明：
	 * 　2入力欄の場合、arg1に前入力欄を、arg2に後入力欄を指定
	 * 　1入力欄の場合、arg1に入力欄を、
	 * 　arg2には同画面に複数の郵便番号検索がある場合のみエラーメッセージObjを指定
	 */
	zipCodeSearch : function(flag,pre,ad1,ad2,arg1,arg2) {
		// 郵便番号の値を取得
		var zipCode = '';
		if (flag) {
			var zip1Obj = arg1;
			var zip2Obj = arg2;
			zipCode = zip1Obj.value + zip2Obj.value;
		} else {
			var zipCodeObj = arg1;
			zipCode = zipCodeObj.value;
		}
		// 引数で渡されたobjectをインスタンス変数にセット
		setAddresInfoObjects(pre,ad1,ad2,flag,arg2);
		// 入力チェックでエラーがない場合
		if (!hasInputError(zipCode)){
			// 全角数字を半角数字に変換しセット
			if (flag) {
				zip1Obj.value = convertNumberHankaku(zip1Obj.value);
				zip2Obj.value = convertNumberHankaku(zip2Obj.value);
				zipCode = zip1Obj.value + zip2Obj.value;
			} else {
				zipCodeObj.value = convertNumberHankaku(zipCode);
				zipCode = zipCodeObj.value
			}
			// Ajax用の郵便番号検索クラスを呼ぶ
			Kumu.Ajax.executeTeedaAjax(zipCodeSearchAjax_process, [zipCode], Kumu.Ajax.RESPONSE_TYPE_JSON);
		}
	},
	/* 郵便番号検索ボタン表示切り替え処理
	 * pageNameの説明：
	 * 　管理者＞受注修正画面から呼び出す場合は「orderChange」を指定
	 * 　その他の画面から呼び出す場合は引数なし
	 */	switchZipCodeButton : function(pageName) {
		if (pageName == 'orderChange') {
			var buttonOObj = document.getElementById('doZipCodeSearchToOrder');
			var ajaxButtonOObj = document.getElementById('doZipCodeSearchToOrderAjax'); 
			var buttonRObj = document.getElementById('doZipCodeSearchToReceiver');
			var ajaxButtonRObj = document.getElementById('doZipCodeSearchToReceiverAjax');
			if (buttonOObj != null && ajaxButtonOObj != null
				&& buttonRObj != null && ajaxButtonRObj != null) {
			    buttonOObj.style.display = 'none';
			    ajaxButtonOObj.style.display = 'inline';
			    buttonRObj.style.display = 'none';
			    ajaxButtonRObj.style.display = 'inline';
			}
		
		} else {
			var buttonObj = document.getElementById('doZipCodeSearch');
			var ajaxButtonObj = document.getElementById('doZipCodeSearchAjax');
			if (buttonObj != null && ajaxButtonObj != null) {
			    buttonObj.style.display = 'none';
			    ajaxButtonObj.style.display = 'inline';
			}
		}
	}
};

/* Ajax用の郵便番号検索クラスの戻り値をhtmlにセットします */
function zipCodeSearchAjax_process(response) {
	// エラーメッセージがない場合、各住所入力欄に値をセット、エラーをクリア
	if (response.zipErrorMsg == null) {
		zipsearch.prefectureObj.value = response.prefecture;
		zipsearch.address1Obj.value = response.address1;
		zipsearch.address2Obj.value = response.address2;
		zipsearch.zipErrorMsgObj.innerHTML = '';
	// エラーメッセージがある場合、エラーメッセージをセット
	} else {
		zipsearch.zipErrorMsgObj.innerHTML  = '<span style="color:red">' + response.zipErrorMsg + '</span>';
	}
}

/* 入力チェックをします　true...エラーあり、false...エラーなし */
function hasInputError(zipCode){
	// 必須チェック
	if (zipCode == '') {
		zipsearch.zipErrorMsgObj.innerHTML = '<span style="color:red">郵便番号を入力してください。<br /></span>';
		return true;
	}
	// 7桁数字チェック
	if (zipCode.search(/[0-9０-９]{7}/) == -1) {
		zipsearch.zipErrorMsgObj.innerHTML = '<span style="color:red">郵便番号が不正です。<br /></span>';
		return true;
	}
	return false;
}

/* 全角数字を半角数字に変換して返します */
function convertNumberHankaku(str){
	str = str.replace(/０/g,"0");
	str = str.replace(/１/g,"1");
	str = str.replace(/２/g,"2");
	str = str.replace(/３/g,"3");
	str = str.replace(/４/g,"4");
	str = str.replace(/５/g,"5");
	str = str.replace(/６/g,"6");
	str = str.replace(/７/g,"7");
	str = str.replace(/８/g,"8");
	str = str.replace(/９/g,"9");
	return str;
}

/* 住所入力欄とエラーメッセージのobjectをインスタンス変数セット */
function setAddresInfoObjects(pre,ad1,ad2,flag,arg2){
	zipsearch.prefectureObj=pre;
	zipsearch.address1Obj=ad1;
	zipsearch.address2Obj=ad2;
	if (flag || arg2 == undefined) {
		zipsearch.zipErrorMsgObj=document.getElementById('zipErrorMsg');
	} else {
		zipsearch.zipErrorMsgObj=arg2;
	}
}