text: /** common.js By Beginner Emain:zheng_jinfan@126.com HomePage:http://www.zhengjinfan.cn */
  
  layui.define(['jquery'], function(exports) {
  
  	"use strict";
  
  	var jQuery = layui.jquery;
  
  	/**
  
  	 * jquery.citys.js 1.0
  
  	 * http://jquerywidget.com
  
  	 */
  
  	;
  
  	(function($) {
  
  		$.support.cors = true;
  
  		$.fn.citys = function(parameter, getApi) {
  
  			if(typeof parameter == 'function') { //重载
  
  				getApi = parameter;
  
  				parameter = {};
  
  			} else {
  
  				parameter = parameter || {};
  
  				getApi = getApi || function() {};
  
  			}
  
  			var defaults = {
  
  				dataUrl: 'http://passer-by.com/data_location/list.json', //数据库地址
  
  				dataType: 'json', //数据库类型:'json'或'jsonp'
  
  				provinceField: 'province', //省份字段名
  
  				cityField: 'city', //城市字段名
  
  				areaField: 'area', //地区字段名
  
  				code: 0, //地区编码
  
  				province: 0, //省份,可以为地区编码或者名称
  
  				city: 0, //城市,可以为地区编码或者名称
  
  				area: 0, //地区,可以为地区编码或者名称
  
  				required: true, //是否必须选一个
  
  				nodata: 'hidden', //当无数据时的表现形式:'hidden'隐藏,'disabled'禁用,为空不做任何处理
  
  				onChange: function() {} //地区切换时触发,回调函数传入地区数据
  
  			};
  
  			var options = $.extend({}, defaults, parameter);
  
  			return this.each(function() {
  
  				//对象定义
  
  				var _api = {};
  
  				var $this = $(this);
  
  				var $province = $this.find('select[name="' + options.provinceField + '"]'),
  
  					$city = $this.find('select[name="' + options.cityField + '"]'),
  
  					$area = $this.find('select[name="' + options.areaField + '"]');
  
  				$.ajax({
  
  					url: options.dataUrl,
  
  					type: 'GET',
  
  					crossDomain: true,
  
  					dataType: options.dataType,
  
  					jsonpCallback: 'jsonp_location',
  
  					success: function(data) {
  
  						var province, city, area, hasCity;
  
  						if(options.code) { //如果设置地区编码，则忽略单独设置的信息
  
  							var c = options.code - options.code % 1e4;
  
  							if(data[c]) {
  
  								options.province = c;
  
  							}
  
  							c = options.code - (options.code % 1e4 ? options.code % 1e2 : options.code);
  
  							if(data[c]) {
  
  								options.city = c;
  
  							}
  
  							c = options.code % 1e2 ? options.code : 0;
  
  							if(data[c]) {
  
  								options.area = c;
  
  							}
  
  						}
  
  						var updateData = function() {
  
  							province = {}, city = {}, area = {};
  
  							hasCity = false; //判断是非有地级城市
  
  							for(code in data) {
  
  								if(!(code % 1e4)) { //获取所有的省级行政单位
  
  									province[code] = data[code];
  
  									if(options.required && !options.province) {
  
  										if(options.city && !(options.city % 1e4)) { //省未填，并判断为直辖市
  
  											options.province = options.city;
  
  										} else {
  
  											options.province = code;
  
  										}
  
  									} else if(data[code].indexOf(options.province) > -1) {
  
  										options.province = isNaN(options.province) ? code : options.province;
  
  									}
  
  								} else {
  
  									var p = code - options.province;
  
  									if(options.province && p > 0 && p < 1e4) { //同省的城市或地区
  
  										if(!(code % 100)) {
  
  											hasCity = true;
  
  											city[code] = data[code];
  
  											if(options.required && !options.city) {
  
  												options.city = code;
  
  											} else if(data[code].indexOf(options.city) > -1) {
  
  												options.city = isNaN(options.city) ? code : options.city;
  
  											}
  
  										} else if(p > 9000) { //省直辖县级行政单位
  
  											city[code] = data[code];
  
  										} else if(hasCity) { //非直辖市
  
  											var c = code - options.city;
  
  											if(options.city && c > 0 && c < 100) { //同个城市的地区
  
  												area[code] = data[code];
  
  												if(options.required && !options.area) {
  
  													options.area = code;
  
  												} else if(data[code].indexOf(options.area) > -1) {
  
  													options.area = isNaN(options.area) ? code : options.area;
  
  												}
  
  											}
  
  										} else {
  
  											city[code] = data[code]; //直辖市
  
  											if(options.area) {
  
  												options.city = options.area;
  
  												options.area = '';
  
  											}
  
  											if(options.required && !options.city) {
  
  												options.city = code;
  
  											} else if(data[code].indexOf(options.city) > -1) {
  
  												options.city = isNaN(options.city) ? code : options.city;
  
  											}
  
  										}
  
  									}
  
  								}
  
  							}
  
  						};
  
  						var format = {
  
  							province: function() {
  
  								$province.empty();
  
  								if(!options.required) {
  
  									$province.append('<option value=""> - 请选择 - </option>');
  
  								}
  
  								for(i in province) {
  
  									$province.append('<option value="' + i + '">' + province[i] + '</option>');
  
  								}
  
  								if(options.province) {
  
  									$province.val(options.province);
  
  								}
  
  								this.city();
  
  							},
  
  							city: function() {
  
  								$city.empty();
  
  								if(!options.required) {
  
  									$city.append('<option value=""> - 请选择 - </option>');
  
  								}
  
  								if(options.nodata == 'disabled') {
  
  									$city.prop('disabled', $.isEmptyObject(city));
  
  								} else if(options.nodata == 'hidden') {
  
  									$city.css('display', $.isEmptyObject(city) ? 'none' : '');
  
  								}
  
  								for(i in city) {
  
  									$city.append('<option value="' + i + '">' + city[i] + '</option>');
  
  								}
  
  								if(options.city) {
  
  									$city.val(options.city);
  
  								}
  
  								this.area();
  
  							},
  
  							area: function() {
  
  								$area.empty();
  
  								if(!hasCity) {
  
  									$area.css('display', 'none');
  
  								} else {
  
  									$area.css('display', '');
  
  									if(!options.required) {
  
  										$area.append('<option value=""> - 请选择 - </option>');
  
  									}
  
  									if(options.nodata == 'disabled') {
  
  										$area.prop('disabled', $.isEmptyObject(area));
  
  									} else if(options.nodata == 'hidden') {
  
  										$area.css('display', $.isEmptyObject(area) ? 'none' : '');
  
  									}
  
  									for(i in area) {
  
  										$area.append('<option value="' + i + '">' + area[i] + '</option>');
  
  									}
  
  									if(options.area) {
  
  										$area.val(options.area);
  
  									}
  
  								}
  
  							}
  
  						};
  
  						//获取当前地理信息
  
  						_api.getInfo = function() {
  
  							var status = {
  
  								direct: !hasCity,
  
  								province: data[options.province] || '',
  
  								city: data[options.city] || '',
  
  								area: data[options.area] || '',
  
  								code: options.area || options.city || options.province
  
  							};
  
  							return status;
  
  						};
  
  						//事件绑定
  
  						$province.on('change', function() {
  
  							options.province = $(this).val();
  
  							options.city = 0;
  
  							options.area = 0;
  
  							updateData();
  
  							format.city();
  
  							options.onChange(_api.getInfo());
  
  						});
  
  						$city.on('change', function() {
  
  							options.city = $(this).val();
  
  							options.area = 0;
  
  							updateData();
  
  							format.area();
  
  							options.onChange(_api.getInfo());
  
  						});
  
  						$area.on('change', function() {
  
  							options.area = $(this).val();
  
  							options.onChange(_api.getInfo());
  
  						});
  
  						//初始化
  
  						updateData();
  
  						format.province();
  
  						getApi(_api);
  
  					}
  
  				});
  
  			});
  
  		};
  
  	})(jQuery);
  
  	exports('city', null);
  
  });