function cityCtrl(ctrl1, ctrl2)
{
    var me = this;
    me.ctrl1 = ctrl1;
    me.ctrl2 = ctrl2;
    me.selectedPIndex = -1;    // 选择的省份 index
    me.selectedCIndex = -1;    // 选择的城市 index

    me.p = new Array('北京', '上海', '天津', '重庆', '安徽', '福建', '甘肃', '广东', '广西', '贵州', '海南', '河北', '河南', '黑龙江', '湖北', '湖南', '吉林', '江苏', '江西', '辽宁', '内蒙古', '宁夏', '青海', '山东', '山西', '陕西', '四川', '西藏', '新疆', '云南', '浙江', '香港', '澳门', '台湾', '国外');

    me.c = new Array(
        new Array('朝阳', '海淀', '东城', '西城', '崇文', '宣武', '丰台', '石景山', '昌平', '通州', '顺义', '房山', '门头沟', '密云', '怀柔', '延庆', '平谷', '大兴'),
        new Array('黄浦', '徐汇', '普陀', '静安', '闸北', '卢湾', '长宁', '浦东', '虹口', '杨浦', '闵行', '南汇', '嘉定', '奉贤', '青浦', '金山', '松江', '宝山', '崇明'),
        new Array('和平', '南开', '河东', '河西', '红桥', '东丽', '西青', '北辰', '津南', '塘沽', '静海', '宁河', '汉沽', '大港', '蓟县', '宝坻', '河北', '武清'),
        new Array('万州', '涪陵', '渝中', '大渡口', '江北', '沙坪坝', '九龙坡', '南岸', '北碚', '万盛', '双桥', '渝北', '巴南', '黔江', '长寿', '江津', '合川', '永川', '南川', '綦江', '潼南', '铜梁', '大足', '荣昌', '璧山', '梁平', '城口', '丰都', '垫江', '武隆', '忠县', '开县', '云阳', '奉节', '巫山', '巫溪', '石柱', '秀山', '酉阳', '彭水'),
        new Array('安庆', '蚌埠', '亳州', '巢湖', '池州', '滁州', '阜阳', '合肥', '淮北', '淮南', '黄山', '六安', '马鞍山', '宿州', '铜陵', '芜湖', '宣城'),
        new Array('福州', '龙岩', '南平', '宁德', '莆田', '泉州', '三明', '厦门', '漳州'),
        new Array('白银', '定西', '甘南', '金昌', '酒泉', '兰州', '临夏', '陇南', '平凉', '庆阳', '天水', '武威', '张掖'),
        new Array('广州', '深圳', '珠海', '潮州', '佛山', '湛江', '惠州', '梅州', '肇庆', '茂名', '汕头', '汕尾', '清远', '河源', '江门', '揭阳', '韶关', '阳江', '云浮'),
        new Array('百色', '北海', '崇左', '防城港', '贵港', '桂林', '河池', '贺州', '来宾', '柳州', '南宁', '钦州', '梧州', '玉林'),
        new Array('安顺', '毕节地', '贵阳', '六盘水', '黔东南', '黔南', '黔西南', '铜仁地', '遵义'),
        new Array('海口'),
        new Array('保定', '沧州', '承德', '邯郸', '衡水', '廊坊', '秦皇岛', '石家庄', '唐山', '邢台', '张家口'),
        new Array('安阳', '鹤壁', '焦作', '开封', '洛阳', '漯河', '南阳', '平顶山', '濮阳', '三门峡', '商丘', '新乡', '信阳', '许昌', '郑州', '周口', '驻马店'),
        new Array('大庆', '大兴安岭', '哈尔滨', '鹤岗', '黑河', '鸡西', '佳木斯', '牡丹江', '七台河', '齐齐哈尔', '双鸭山', '绥化', '伊春'),
        new Array('鄂州', '恩施', '黄冈', '黄石', '荆门', '荆州', '十堰', '随州', '武汉', '咸宁', '襄樊', '孝感', '宜昌'),
        new Array('长沙', '常德', '郴州', '衡阳', '怀化', '娄底', '邵阳', '湘潭', '湘西', '益阳', '永州', '岳阳', '张家界', '株洲'),
        new Array('白城', '白山', '长春', '吉林', '辽源', '四平', '松原', '通化', '延边'),
        new Array('常州', '淮安', '连云港', '南京', '南通', '苏州', '宿迁', '泰州', '无锡', '徐州', '盐城', '扬州', '镇江'),
        new Array('抚州', '赣州', '吉安', '景德镇', '九江', '南昌', '萍乡', '上饶', '新余', '宜春', '鹰潭'),
        new Array('鞍山', '本溪', '朝阳', '大连', '丹东', '抚顺', '阜新', '葫芦岛', '锦州', '辽阳', '盘锦', '沈阳', '铁岭', '营口'),
        new Array('阿拉善盟', '巴彦淖尔', '包头', '赤峰', '鄂尔多斯', '呼和浩特', '呼伦贝尔', '通辽', '乌海', '乌兰察布', '锡林郭勒盟', '兴安盟'),
        new Array('固原', '石嘴山', '吴忠', '银川', '中卫'),
        new Array('果洛', '海北', '海东', '海南', '海西', '黄南', '西宁', '玉树'),
        new Array('滨州', '德州', '东营', '荷泽', '济南', '济宁', '莱芜', '聊城', '临沂', '青岛', '日照', '泰安', '威海', '潍坊', '烟台', '枣庄', '淄博'),
        new Array('长治', '大同', '晋城', '晋中', '临汾', '吕梁', '朔州', '太原', '忻州', '阳泉', '运城'),
        new Array('安康', '宝鸡', '汉中', '商洛', '铜川', '渭南', '西安', '咸阳', '延安', '榆林'),
        new Array('阿坝', '巴中', '成都', '达州', '德阳', '甘孜', '广安', '广元', '乐山', '凉山', '泸州', '眉山', '绵阳', '内江', '南充', '攀枝花', '遂宁', '雅安', '宜宾', '资阳', '自贡'),
        new Array('阿里地', '昌都地', '拉萨', '林芝地', '那曲地', '日喀则', '山南地'),
        new Array('阿克苏', '阿勒泰', '巴音郭楞', '博尔塔拉', '昌吉', '哈密地', '和田', '喀什', '克拉玛依', '克孜勒苏', '塔城地', '吐鲁番', '乌鲁木齐', '伊犁'),
        new Array('保山', '楚雄', '大理', '德宏', '迪庆', '红河', '昆明', '丽江', '临沧', '怒江', '曲靖', '思茅', '文山', '西双版纳', '玉溪', '昭通'),
        new Array('杭州', '湖州', '嘉兴', '金华', '丽水', '宁波', '衢州', '绍兴', '台州', '温州', '舟山'),
        new Array('香港'),
        new Array('澳门'),
        new Array('台湾'),
        new Array('国外')
    )

    // 加载（指定的城市名，参数可为 1 个；2 个 或 0 个）
    me.load = function(cityName, city2Name)
    {
        me.ctrl1.length = 0;
        me.ctrl2.length = 0;
        
        if (!cityName) cityName = '';
        if (!city2Name) city2Name = '';

        // 指定选择的城市
        if (cityName != '')
        {
            // 直辖市
            if ('北京,上海,天津,重庆'.indexOf(cityName) != -1)
            {
                if (cityName == '北京') me.selectedPIndex = 0;
                if (cityName == '上海') me.selectedPIndex = 1;
                if (cityName == '天津') me.selectedPIndex = 2;
                if (cityName == '重庆') me.selectedPIndex = 3;
            }
            // 指定省份及城市如 "福建, 厦门"
            else if (city2Name != '')
            {
                me.selectedPIndex = me.getPIndex(cityName);
                if (me.selectedPIndex != -1)
                {
                    me.selectedCIndex = me.getCIndex(me.selectedPIndex, city2Name);
                }
            }
            // 仅指定二级城市如仅 "福建" 或仅 "厦门"
            else
            {
                // 遍历
                for (var i=4; i<me.p.length; i++)
                {
                    if (me.p[i] == cityName)
                    {
                        me.selectedPIndex = i;          // 查找结果为省份
                    }
                    for (var j=0; j<me.c[i].length; j++)
                    {
                        if (me.c[i][j] == cityName)
                        {
                            me.selectedPIndex = i;      // 查找结果为城市
                            me.selectedCIndex = j;
                        }
                    }
                }
            }
        }

        var node = new Option('--', '');
        me.ctrl1.options.add(node);

        node = new Option('--', '');
        me.ctrl2.options.add(node);

        // 加载省份
        for (var i=0; i<me.p.length; i++)
        {
            var opt = document.createElement('OPTION');
            opt.innerHTML = me.p[i];
            opt.value = me.p[i];
            opt.setAttribute('pIndex', i);
            me.ctrl1.appendChild(opt);
        }

        // 省份的变化事件
        me.ctrl1.onchange = me.loadCity2;

        if (me.selectedPIndex != -1)
        {
            me.ctrl1.selectedIndex = me.selectedPIndex + 1;
            me.loadCity2();
        }
    }

    // 加载城市
    me.loadCity2 = function()
    {
        me.ctrl2.length = 0;

        var node = new Option('--', '');
        me.ctrl2.options.add(node);
        
        if (me.ctrl1.selectedIndex == 0) return;

        var pIndex = me.ctrl1.options[me.ctrl1.selectedIndex].getAttribute('pIndex');
        for (var i=0; i<me.c[pIndex].length; i++)
        {
            var opt = document.createElement('OPTION');
            opt.innerHTML = me.c[pIndex][i];
            opt.value = me.c[pIndex][i];
            me.ctrl2.appendChild(opt);
        }
        if (me.c[pIndex].length == 1) me.ctrl2.selectedIndex = 1;
        if (me.selectedCIndex != -1) me.ctrl2.selectedIndex = me.selectedCIndex + 1;
    }

    // 查找省份 index
    me.getPIndex = function(pName)
    {
        for (var i=0; i<me.p.length; i++)
        {
            if (me.p[i] == pName) return i;
        }
        return -1;
    }

    // 查找城市 index
    me.getCIndex = function(pIndex, cName)
    {
        for (var i=0; i<me.c[pIndex].length; i++)
        {
            if (me.c[pIndex][i] == cName) return i;
        }
        return -1;
    }
}
