/*******************************************************************************************
 * 必须的包: WQ.js;
 * 
 * 调用方法：Address.show(arg1,arg2,arg3,arg4);
 * 参数1: 文本输入框(可选). 如 onfocus="Address.show(this)";
 * 参数2: 按钮或其它可用单击事件的HTML元素(如果使用按钮方式则必填). 
          如 onclick="Address.show(this,WQ.$(*))"  *=文本输入框名称
 * 参数3: 如果文本框没有值则使用该值初始化日历(可选). 
          如 onfocus="Address.show(this,'2008-01-01')
 * 参数4: 回调函数 callback(data,inputText,eventObj);
 		 如 onclick="Address.show(this,callback)"
 		  
 * 注: 参数顺序不分先后.  MSIE7/FireFox3.0 下测试通过 
 * 
   
*********************************如果您使用本控件 请保留该信息 谢谢! *****************************   
 * http://2003zy.com
 * Email: wenq0917@sina.com 
 * QQ: 251490789 
 * Creation Date: 2009-06-03
 * Modification Date: 2009-06-04 19:32
 * version: 1.1.0
*********************************************************************************************/

var Address = {	
	inputText : null,
	eventObj : null,
	callback : null,
	container : null,
	provinceSelect : null,
	citySelect : null,
	districtSelect : null,
	currentData : {
		province : "",
		city : "",
		district : ""
	},
	initData : {
		province : "",
		city : "",
		district : ""
	}
};
Address.config = {
	skinType : "default",
	langType : "zh_CN",
	scriptPath : "/public/Address/"
};
/**
 * 创建省选择框
 */
Address.createProvince = function () {   
	var str = '<select name="addressSel_province" id="addressSel_province" onChange="Address.getCity(this)">\n';
	str += '<option value="">'+Address.lang.select_province+'</option>\n';	
	str += '</select>';	
	return str;
};
/**
 * 创建市选择框
 */
Address.createCity = function () {   
	var str = '<select name="addressSel_city" id="addressSel_city" onChange="Address.getDistrict(this)">\n';
	str += '<option value="">'+Address.lang.select_city+'</option>\n';	
	str += '</select>';	
	return str;
};
/**
 * 创建区选择框
 */
Address.createDistrict = function () {   
	var str = '<select name="addressSel_district" id="addressSel_district" onchange="Address.changeDistrict(this)">\n';
	str += '<option value="">'+Address.lang.select_district+'</option>\n';	
	str += '</select>';	
	return str;
};
Address.initAllSelect = function () {
	Address.provinceSelect.length = 0;
	Address.provinceSelect.options[0] = new Option(Address.lang.select_province,""); // 选择省
	
	Address.citySelect.length = 0;
	Address.citySelect.options[0] = new Option(Address.lang.select_city,""); // 选择市
	
	Address.districtSelect.length = 0;
	Address.districtSelect.options[0] = new Option(Address.lang.select_district,""); // 选择区
	
};
/**
 * 初始化控件
 */
Address.create = function () {
	if (Address.container) return;
	
	var div = WQ.$$("div");
	div.id = "AddressSelection";
	div.setAttribute("Author","xqiang");
	div.style.display = "none";
	div.onselectstart = function () {return false;};
	div.oncontextmenu = function () {return false;};
	var str = '<table id="AddressSelTable" cellspacing="0" cellpadding="0">\n';
	str += '<tr><td>\n';
	str += '<table border="0" cellspacing="3" cellpadding="3">\n';
	str += '<tr>\n';
	str += '<td align="center">'+Address.createProvince()+'</td>\n';
	str += '<td align="center">'+Address.createCity()+'</td>\n';
	str += '<td align="center">'+Address.createDistrict()+'</td>\n';
	str += '</tr>\n';
	str += '</table>\n';
	str += '</td></tr>\n';
	str += '<tr>\n';
	str += '<td align="center" height="25">';
	str += '<input type="button" onClick="Address.confirm()" style="cursor:pointer;" value="\u786e\u5b9a"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'; // 确定
	str += '<input type="button" onClick="Address.clear()" style="cursor:pointer;" value="\u6e05\u9664"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'; //清除
	str += '<input type="button" onClick="Address.close()" style="cursor:pointer;" value="\u5173\u95ed"/>'; //关闭
	str += '</td>\n';
	str += '</tr>\n';
	str += '</table>';
	div.innerHTML = str;
	
	document.body.appendChild(div);
	
	Address.container = div;
	Address.provinceSelect = WQ.$("addressSel_province");
	Address.citySelect = WQ.$("addressSel_city");
	Address.districtSelect = WQ.$("addressSel_district");
};
Address.init = function (config) {
	if (typeof config == "undefined") config = {};	
	Address.config.scriptPath = (typeof config.scriptPath == "undefined") ? WQ.util.getScriptPath(/Address[\w\-\.]*\.js/) : config.scriptPath;
	Address.config.skinType = (typeof config.skinType == "undefined") ? Address.config.skinType : config.skinType;
	Address.config.langType = (typeof config.langType == "undefined") ? Address.config.langType : config.langType;
	
	WQ.util.loadStyle(Address.config.scriptPath + Address.config.skinType +'.css');
	WQ.util.loadJS(Address.config.scriptPath +"Address_data_"+Address.config.langType +'.js', "utf-8");
	WQ.util.loadJS(Address.config.scriptPath +"Address_lang_"+Address.config.langType +'.js', "utf-8");

};
Address.initProvince = function () {   
	Address.provinceSelect.length = 0;
	Address.provinceSelect.options[0] = new Option(Address.lang.select_province,""); // 选择省
	if (!Address.province.data) return;
	for (var i = 0; i < Address.province.data.length; i++) {
		var obj = Address.province.data[i];
		Address.provinceSelect.options[Address.provinceSelect.length] = new Option(obj.provinceName.trim(),obj.provinceId);			
	}
	if (Address.initData.province != "") {
		WQ.form.searchSelectItem(Address.provinceSelect,Address.initData.province,"text");
		if (Address.provinceSelect.options[Address.provinceSelect.selectedIndex].value != "") 
			Address.getCity(Address.provinceSelect);
	}
};
/**
 * 得到市
 */
Address.getCity = function (obj) {
	var provinceId = obj.options[obj.selectedIndex].value;
	Address.currentData.province = (provinceId != "") ? obj.options[obj.selectedIndex].text : '';
	Address.currentData.city = '';
	Address.currentData.district = '';
	
	Address.districtSelect.length = 0;
	Address.districtSelect.options[0] = new Option(Address.lang.select_district,""); // 选择区
	
	Address.citySelect.length = 0;
	Address.citySelect.options[0] = new Option(Address.lang.select_city,""); // 选择市
	if (!Address.city.g[provinceId]) return;
	for (var i = 0; i < Address.city.g[provinceId].length; i++) {
		var obj = Address.city.g[provinceId][i];
		Address.citySelect.options[Address.citySelect.length] = new Option(obj.cityName.trim(),obj.cityId);			
	}
	if (Address.initData.city != "") {
		WQ.form.searchSelectItem(Address.citySelect,Address.initData.city,"text");
		if (Address.citySelect.options[Address.citySelect.selectedIndex].value != "") 
			Address.getDistrict(Address.citySelect);
	}
};
/**
 * 得到区
 */
Address.getDistrict = function (obj) {
	var cityId = obj.options[obj.selectedIndex].value;
	Address.currentData.city = (cityId != "") ? obj.options[obj.selectedIndex].text : '';
	Address.currentData.district = '';
	
	Address.districtSelect.length = 0;
	Address.districtSelect.options[0] = new Option(Address.lang.select_district,""); // 选择区
	if (!Address.district.g[cityId]) return;
	for (var i = 0; i < Address.district.g[cityId].length; i++) {
		var obj = Address.district.g[cityId][i];
		Address.districtSelect.options[Address.districtSelect.length] = new Option(obj.districtName.trim(),obj.districtId);			
	}
	if (Address.initData.district != "") {
		WQ.form.searchSelectItem(Address.districtSelect,Address.initData.district,"text");
	}
};
Address.changeDistrict = function (obj) {
	var districtId = obj.options[obj.selectedIndex].value;
	Address.currentData.district = (districtId != "") ? obj.options[obj.selectedIndex].text : '';
};
Address.bindDate = function (data) {
	Address.initData.province = '';
	Address.initData.city = '';
	Address.initData.district = '';
	if (data && data.trim() != "") {
		var tmpArr = data.split(" ");
		if (tmpArr.length >= 1) Address.initData.province = tmpArr[0].trim();
		if (tmpArr.length >= 2) Address.initData.city = tmpArr[1].trim();
		if (tmpArr.length >= 3) Address.initData.district = tmpArr[2].trim();
	}
	Address.currentData.province = '';
	Address.currentData.city = '';
	Address.currentData.district = '';

	Address.initAllSelect();
	Address.initProvince();
};
Address.show = function () {
	if (arguments.length >  4  || arguments.length === 0) {
		alert("Parameter invalid.");
		return;
	}
	var _date = null;
	var _evObj = null;
	var _initValue = null;  
	
	for (var i = 0; i < arguments.length; i++) {
		if (typeof(arguments[i]) == "object" && arguments[i].type == "text") {
			_date = arguments[i];
		} else if (typeof(arguments[i]) == "object") {
			_evObj = arguments[i];
		} else if (typeof(arguments[i]) == "string") {
			_initValue = arguments[i];
		} else if (typeof arguments[i] == "function") {
			Address.callback = arguments[i];
		}
	}		
	_evObj = _evObj || _date;
	if (!_evObj) {
		alert("Parameter invalid."); 
		return;
	}
	Address.eventObj = _evObj;
	if (_date) {
		Address.inputText = _date;
		_date = _date.value;
	} else {
		_date = "";
	}
	if(_date == "" && _initValue) _date = _initValue; 

	Address.create();	
	
	this.bindDate(_date);
	
	var _target = WQ.util.getPosition(_evObj);   
	var _obj = Address.container;		
	_obj.style.display = ""; 
	
	_obj.style.left = _target.x + 'px';
	if ((document.body.clientHeight - (_target.y + _evObj.clientHeight)) >= _obj.clientHeight) {        
	  _obj.style.top = (_target.y + _evObj.clientHeight) + 'px';
	} else {	  
	   _obj.style.top = (_target.y - _obj.clientHeight) + 'px';
	}
};
Address.confirm = function () {
	var _data = "";
	if (Address.currentData.province != "") {
		_data += Address.currentData.province;
		if (Address.currentData.city != "") {
			_data += " "+Address.currentData.city;
			if (Address.currentData.district != "") {
				_data += " "+Address.currentData.district;
			}
		}
	}
	if (Address.inputText) Address.inputText.value = _data;
	if (Address.callback) {
		(Address.callback).apply(this,[_data,Address.inputText,Address.eventObj]);
	}
	Address.close();
};
Address.close = function () {
	Address.container.style.display = "none"; 
};
Address.clear = function () {
	if (Address.inputText) Address.inputText.value = "";
	if (Address.callback) {
		(Address.callback).apply(this,["",Address.inputText,Address.eventObj]);
	}
	Address.close();
	Address.initAllSelect();
};

Address.init();

