/**
 * Zip Dialog Class
 * 
 * @copyright	Copyright (c) 2008 Global Network Core Co.,Ltd. All rights reserved. 
 * @license	BSD license
 * @since		2008/11/10
 * @version	1.0.0
 */
function ZipDialogClass() {
	this.initialize.apply(this, arguments);
};
ZipDialogClass.prototype = {
	initialize:function(callback) {
		if(document.getElementById("__zip_dialog"))
			this.closeDialog();
		_show = false;
		_callback = callback;
		_title = "Address List";
		_popup = null;
		_frame = null;
		_REMOVE_ELEM = this._removeElem;
		_EXEC_CALLBACK = this._execCallback;
	},
	setTitle:function(title) {
		_title = title;
	},
	showDialog:function(container, response) {
		if(response.error) {
			var text = "";
			var errors = response.errors;
//			for(var idx in errors)
//				text += errors[idx].id + " " + errors[idx].message + "\r\n";
			for(var i = 0; i < errors.length; i++)
				text += errors[i].id + " " + errors[i].message + "\r\n";
			alert(text);
		}
		else {
			_data = response.data;
			if (!_data || _data.length == 0) {
				alert("該当データが見つかりませんでした。");
				return;
			}
			if (_data.length == 1) {
				this._execCallback(0);
				return;
			}
			if (_show) 
				return;
			_show = true;
			_container = typeof(container) != "object" ? document.getElementById(container) : container;
			this._createDialog();
		}
	},
	closeDialog:function() {
		if(_popup != null)
			_REMOVE_ELEM(_popup);
		if(_frame != null)
			_REMOVE_ELEM(_frame);
		_REMOVE_ELEM(_dlg);
		_show = false;
	},
	_createDialog:function() {
		_dlg = document.createElement("div");
		_dlg.className = "zip_dialog";
		_dlg.id = "__zip_dialog";
		var title = document.createElement("div");
		title.innerHTML = _title;
		title.className = "zip_dialog_title";
		var dlgClose = document.createElement("span");
		dlgClose.innerHTML = "&times;";
		dlgClose.className = "zip_dialog_close"
		this._addEvent(dlgClose, "click", this.closeDialog);
		title.appendChild(dlgClose);
		_dlg.appendChild(title);
		var ul = this._createList();
		_dlg.appendChild(ul);
		_container.appendChild(_dlg);
		if(_data.length > 10) {
			var height = document.getElementById("zip_dialog_list_0").offsetHeight;
			height = height * 10;
			ul.style.height = height + "px";
		}
		if(typeof document.body.style.maxHeight == "undefined") {
			_frame = document.createElement("iframe");
			_frame.frameBorder = 0;
			_frame.src = "/dummy.html";
			_frame.width = _dlg.offsetWidth;
			_frame.height = _dlg.offsetHeight;
			_frame.className = "zip_dialog_iframe";
			_container.insertBefore(_frame, _container.firstChild);
		}
	},
	_createList:function() {
		var ul = document.createElement("ul");
//		for(var idx in _data) {
//			var li = document.createElement("li");
//			li.id = "zip_dialog_list_" + idx;
//			var zip = _data[idx].zip;
//			var address = !_data[idx].name
//						? _data[idx].adrs1 + _data[idx].adrs2 + _data[idx].adrs3 + _data[idx].adrs4
//						: _data[idx].name;
//			li.innerHTML = zip + " " + address;
//			this._addEvent(li, "mouseover", this._mouseOverList);
//			this._addEvent(li, "mouseout", this._mouseOutList);
//			this._addEvent(li, "click", this._setResponse);
//			this._addEvent(li, "click", this.closeDialog);
//			ul.appendChild(li);
//		}
		for (var i = 0; i < _data.length; i++) {
			var li = document.createElement("li");
			li.id = "zip_dialog_list_" + i;
			var zip = _data[i].zip;
			var address = !_data[i].name
						? _data[i].adrs1 + _data[i].adrs2 + _data[i].adrs3 + _data[i].adrs4
						: _data[i].name;
			li.innerHTML = zip + " " + address;
			this._addEvent(li, "mouseover", this._mouseOverList);
			this._addEvent(li, "mouseout", this._mouseOutList);
			this._addEvent(li, "click", this._setResponse);
			this._addEvent(li, "click", this.closeDialog);
			ul.appendChild(li);
		}
		return ul;
	},
	_setResponse:function(e) {
		var id = e.srcElement ? e.srcElement.id : e.target.id;
		id = id.replace("zip_dialog_list_", "");
		_EXEC_CALLBACK(id);
	},
	_execCallback:function(idx) {
		var res = _data[idx];
		res.adrs1 = res.adrs1.replace("以下に掲載がない場合", "");
		res.adrs2 = res.adrs2.replace("以下に掲載がない場合", "");
		res.adrs3 = res.adrs3.replace("以下に掲載がない場合", "");
		res.adrs4 = res.adrs4.replace("以下に掲載がない場合", "");
		_callback(res);
	},
	_mouseOverList:function(e) {
		var id = e.srcElement ? e.srcElement.id : e.target.id;
		var li = document.getElementById(id);
		li.className = "zip_list_hover";
		id = id.replace("zip_dialog_list_", "");
		if(_data[id]) {
			if(_data[id].name) {
				_popup = document.createElement("div");
				_popup.innerHTML = _data[id].adrs1 + _data[id].adrs2 + _data[id].adrs3 + _data[id].adrs4;
				var x = e.pageX ? e.pageX : event.clientX + document.body.scrollLeft;
				var y = e.pageY ? e.pageY : event.clientY + document.body.scrollTop;
				_popup.style.left = x + 15 + "px";
				_popup.style.top = y - 18 + "px"
				_popup.className = "zip_popup";
				document.body.appendChild(_popup);
			}
		}
	},
	_mouseOutList:function(e) {
		var id = e.srcElement ? e.srcElement.id : e.target.id;
		var li = document.getElementById(id);
		li.className = "";
		if(_popup != null) {
			_REMOVE_ELEM(_popup);
			_popup = null;
		}
	},
	_addEvent:function(elem, event, func) {
		if(elem.addEventListener) {
			elem.addEventListener(event, func, false);
		}
		else if(elem.attachEvent) {
			elem.attachEvent("on" + event, func);
		}
	},
	_removeElem:function(elem) {
		elem = typeof(elem) == "string" ? document.getElementById(elem) : elem;
		elem.parentNode.removeChild(elem);
		return elem;
	}
}
