
var addressSearch = null;


function callAddressSearchFunc(srcType, addressCodeFilterFlag, objNameSuffix) {
	addressSearch = new AddressSearch(objNameSuffix, srcType);

	addressSearch.searchAddressByZipCode(addressCodeFilterFlag);
}


function callClearAddressSearchFunc(objNameSuffix) {
	addressSearch = new AddressSearch(objNameSuffix);

	addressSearch.clearZipCode();
	addressSearch.setDefaultPulldownByZipCode();
}


function callZipCodeSearchFunc(srcType, objNameSuffix) {
	addressSearch = new AddressSearch(objNameSuffix, srcType);

	addressSearch.searchZipCodeByAddress();
}


function callClearZipCodeSearchFunc(objNameSuffix) {
	addressSearch = new AddressSearch(objNameSuffix);

	addressSearch.clearZipCode();
	addressSearch.setDefaultPulldownByAddress();
}


$(document).ready(function(){
	forcePulldownClear($("#todoufuken"));
	forcePulldownClear($("#shikugun"));
	forcePulldownClear($("#ooazatoori"));
	forcePulldownClear($("#azatyoume"));
	setPleasePostNoSearchLabel($("#todoufuken"), $("#shikugun"), $("#ooazatoori"), $("#azatyoume"));
	
	forcePulldownClear($("#todoufuken2"));
	forcePulldownClear($("#shikugun2"));
	forcePulldownClear($("#ooazatoori2"));
	forcePulldownClear($("#azatyoume2"));
	setPleasePostNoSearchLabel($("#todoufuken2"), $("#shikugun2"), $("#ooazatoori2"), $("#azatyoume2"));
});
function forcePulldownClear(obj) {
	if(obj == null || obj[0] == null) return;
	if(obj[0].length == 1 && obj.val() == "" && obj.children(':selected').text() == "選択してください") {
		obj.html("");
	}
}
function setPleasePostNoSearchLabel(tdObj, skObj, oaObj, atObj) {
	if(tdObj == null || tdObj[0] == null || skObj == null || skObj[0] == null || oaObj == null || oaObj[0] == null || atObj == null || atObj[0] == null) return;
	if(tdObj[0].length == 0 && skObj[0].length == 0 && oaObj[0].length == 0 && atObj[0].length == 0) {
		var options = '<option value="">郵便番号で検索してください</option>\r\n';
		tdObj.html(options);
		skObj.html(options);
		oaObj.html(options);
		atObj.html(options);
	}
}


var AddressSearch = function(objNameSuffix, srcType) {

	this.srcType = srcType;

	this.objNameSuffix = objNameSuffix;

	if(this.objNameSuffix == null) this.objNameSuffix = "";
	this.zipCode1Obj = $("#zipCode1" + this.objNameSuffix);
	this.zipCode2Obj = $("#zipCode2" + this.objNameSuffix);
	this.todoufukenObj = $("#todoufuken" + this.objNameSuffix);
	this.shikugunObj = $("#shikugun" + this.objNameSuffix);
	this.ooazatooriObj = $("#ooazatoori" + this.objNameSuffix);
	this.azatyoumeObj = $("#azatyoume" + this.objNameSuffix);
	this.textAddressObj = $("#textAddress" + this.objNameSuffix);
	this.addressErrorMsgObj = $("#addressErrorMsg" + this.objNameSuffix);

	this.todoufuken = null;
	this.shikugun = null;
	this.ooazatoori = null;
	this.azatyoume = null;


	this.kanaFlag = $("#kanaFlag" + this.objNameSuffix).val();
}


AddressSearch.prototype = {

	searchAddressByZipCode : function(addressCodeFilterFlag) {

		var zipCode = this.getZipCode();
		

		if(this.hasInputError(zipCode)) {
			return;
		}
		

		if(this.checkNullValue()) {
			return;
		}
		

		this.todoufuken = (addressCodeFilterFlag && this.todoufukenObj.val() != null) ? this.todoufukenObj.val() : "";
		this.shikugun = (addressCodeFilterFlag && this.shikugunObj.val() != null) ? this.shikugunObj.val() : "";
		this.ooazatoori = (addressCodeFilterFlag && this.ooazatooriObj.val() != null) ? this.ooazatooriObj.val() : "";
		this.azatyoume = (addressCodeFilterFlag && this.azatyoumeObj.val() != null) ? this.azatyoumeObj.val() : "";


		this.clearAddressValue();


		Kumu.Ajax.executeTeedaAjax(addressSearchAjax_searchByZipCode, 
			[this.srcType, zipCode, this.todoufuken, this.shikugun, this.ooazatoori, this.azatyoume, this.kanaFlag, this.objNameSuffix], 
			Kumu.Ajax.RESPONSE_TYPE_JSON);

		this.addressErrorMsgObj.html("");
	},
	

	searchZipCodeByAddress : function() {

		var zipCode = this.getZipCode();


		if(zipCode != "") {
			if(this.hasInputError(zipCode)) {
				return;
			}
		}
		

		if(this.checkNullValue()) {
			return;
		}
		
		

		this.todoufuken = (this.todoufukenObj.val() != null) ? this.todoufukenObj.val() : "";
		this.shikugun = (this.shikugunObj.val() != null) ? this.shikugunObj.val() : "";
		this.ooazatoori = (this.ooazatooriObj.val() != null) ? this.ooazatooriObj.val() : "";
		this.azatyoume = (this.azatyoumeObj.val() != null) ? this.azatyoumeObj.val() : "";


		this.clearAddressValue();


		Kumu.Ajax.executeTeedaAjax(addressSearchAjax_searchByAddress, 
			[this.srcType, zipCode, this.todoufuken, this.shikugun, this.ooazatoori, this.azatyoume, this.kanaFlag, this.objNameSuffix], 
			Kumu.Ajax.RESPONSE_TYPE_JSON);


		this.addressErrorMsgObj.html("");
	},


	clearZipCode : function() {
		this.addressErrorMsgObj.html("");
		this.zipCode1Obj.val("");
		this.zipCode2Obj.val("");
	},
	

	clearAddressValue : function() {
		if(this.srcType == "azatyoume") return;
		this.azatyoume = "";
		if(this.srcType == "ooazatoori") return;
		this.ooazatoori = "";
		if(this.srcType == "shikugun") return;
		this.shikugun = "";
		if(this.srcType == "todoufuken") return;
		this.todoufuken = "";
	},
	

	clearAddressPulldown : function() {
		if(this.srcType == "azatyoume") return;
		this.azatyoumeObj.html("");
		if(this.srcType == "ooazatoori") return;
		this.ooazatooriObj.html("");
		if(this.srcType == "shikugun") return;
		this.shikugunObj.html("");
		if(this.srcType == "todoufuken") return;
		this.todoufukenObj.html("");
	},


	setDefaultPulldownByZipCode : function() {
		var options = '<option value="">郵便番号で検索してください</option>\r\n';
		this.todoufukenObj.html(options);
		this.shikugunObj.html(options);
		this.ooazatooriObj.html(options);
		this.azatyoumeObj.html(options);
		this.textAddressObj.val("");
		

		Kumu.Ajax.executeTeedaAjax(addressSearchAjax_setDefaultPulldownByZipCode,　
			[this.objNameSuffix],　
			Kumu.Ajax.RESPONSE_TYPE_JSON);
	},


	setDefaultPulldownByAddress : function() {
		this.todoufukenObj.html("");
		this.shikugunObj.html("");
		this.ooazatooriObj.html("");
		this.azatyoumeObj.html("");
		this.textAddressObj.val("");


		Kumu.Ajax.executeTeedaAjax(addressSearchAjax_setDefaultPulldownByAddress,　
			[this.objNameSuffix],　
			Kumu.Ajax.RESPONSE_TYPE_JSON);
	},
	

	setAddressPulldown : function(obj, list, count) {

		obj.html("");

		var options = "";
		if(count > 1) {
			options = '<option value="">選択してください</option>';
		}

		for(var code in list) {
			var addressName = list[code];
			if(addressName == '') addressName = "当てはまらない";
			options += '<option value="' + code + '">' + addressName + '</option>\r\n';
		}
		obj.html(options);
	},


	getZipCode : function() {

		var zipCode1 = this.zipCode1Obj.val();
		zipCode1 = zipCode1.replace(/^[ 　\t\r\n]+|[ 　\t\r\n]+$/g, "");
		var zipCode2 = this.zipCode2Obj.val();
		zipCode2 = zipCode2.replace(/^[ 　\t\r\n]+|[ 　\t\r\n]+$/g, "");


		zipCode1 = convertNumberHankaku(zipCode1);
		zipCode2 = convertNumberHankaku(zipCode2);


		this.zipCode1Obj.val(zipCode1);
		this.zipCode2Obj.val(zipCode2);


		var zipCode = zipCode1 + zipCode2;

		return zipCode;
	},
	

	checkNullValue : function() {
		if(this.srcType == "azatyoume" && this.azatyoumeObj.val() == '') return true;
		if(this.srcType == "ooazatoori" && this.ooazatooriObj.val() == '') return true;
		if(this.srcType == "shikugun" && this.shikugunObj.val() == '') return true;
		if(this.srcType == "todoufuken" && this.todoufukenObj.val() == '') return true;
		return false;
	},
	

	hasInputError : function(zipCode){

		if (zipCode == '') {
			this.addressErrorMsgObj.html('<span style="color:red">郵便番号を入力してください。<br /></span>');
			return true;
		}

		if (zipCode.search(/[0-9０-９]{7}/) == -1) {
			this.addressErrorMsgObj.html('<span style="color:red">郵便番号が不正です。<br /></span>');
			return true;
		}
		return false;
	}
};


function addressSearchAjax_searchByZipCode(response) {

	if(response.count.todoufukenCount == 0) {
		addressSearch.addressErrorMsgObj.html('<span style="color:red">郵便番号に該当する住所がありません。<br /></span>');
	}
	

	addressSearch.clearAddressPulldown();
	

	createAddressPulldown(response);
};


function addressSearchAjax_searchByAddress(response) {

	if(response.count.todoufukenCount == 0) {
		addressSearch.addressErrorMsgObj.html('<span style="color:red">郵便番号に該当する住所がありません。<br /></span>');
	}


	if(response.zipCode != null) {
		if(response.zipCode.zipCode1 == "ERROR") {
			addressSearch.zipCode1Obj.val("");
			addressSearch.zipCode2Obj.val("");
		} else {
			if(response.zipCode.zipCode1 != null) {
				addressSearch.zipCode1Obj.val(response.zipCode.zipCode1);
			}
			if(response.zipCode.zipCode2 != null) {
				addressSearch.zipCode2Obj.val(response.zipCode.zipCode2);
			}
		}
	}
	

	addressSearch.clearAddressPulldown();
	

	createAddressPulldown(response);
};


function createAddressPulldown(response) {

	var todoufukenList = response.todoufuken;
	var shikugunList = response.shikugun;
	var ooazatooriList = response.ooazatoori;
	var azatyoumeList = response.azatyoume;
	

	if(response.count.todoufukenCount > 1 || addressSearch.todoufukenObj.val() == null) {
		addressSearch.setAddressPulldown(addressSearch.todoufukenObj, todoufukenList, response.count.todoufukenCount);
	}

	if(response.count.todoufukenCount > 1) return;
	

	if(response.count.shikugunCount > 1 || addressSearch.shikugunObj.val() == null) {	
		addressSearch.setAddressPulldown(addressSearch.shikugunObj, shikugunList, response.count.shikugunCount);
	}


	if(response.count.shikugunCount > 1) return;


	if(response.count.ooazatooriCount > 1 || addressSearch.ooazatooriObj.val() == null) {
		addressSearch.setAddressPulldown(addressSearch.ooazatooriObj, ooazatooriList, response.count.ooazatooriCount);
	}

	if(response.count.ooazatooriCount > 1) return;


	if(response.count.azatyoumeCount > 1 || addressSearch.azatyoumeObj.val() == null) {
		addressSearch.setAddressPulldown(addressSearch.azatyoumeObj, azatyoumeList, response.count.azatyoumeCount);
	}
};


function addressSearchAjax_setDefaultPulldownByZipCode(response) {

}


function addressSearchAjax_setDefaultPulldownByAddress(response) {

	var todoufukenCode = addressSearch.todoufukenObj.val();
	if(todoufukenCode != null) {
		for(var code in response) {
			if(code == todoufukenCode) {
				var addressName = response[code];
				options = '<option value="' + code + '">' + addressName + '</option>\r\n';
			}
		}
	} else {

		addressSearch.todoufukenObj.html("");
		options = '<option value="">選択してください</option>';
		for(var code in response) {
			var addressName = response[code];
			options += '<option value="' + code + '">' + addressName + '</option>\r\n';
		}
	}
	addressSearch.todoufukenObj.html(options);
	addressSearch.todoufukenObj.val(todoufukenCode);
}


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;
}


