动态加载数据autoComplete(mysql数据库)

/**需要jquery.autocomplete.js和jquery.js连个文件/

DbManager.java

package person;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.sql.Types;
import com.mysql.jdbc.Driver;
public class DbManager {
public static Connection getConnection() throws SQLException {
return getConnection("test", "root", "518");// 
}
public static Connection getConnection(String dbName, String userName,
String password) throws SQLException {
String url = "jdbc:mysql://localhost:3306/" + dbName
+ "?characterEncoding=utf-8";
DriverManager.registerDriver(new Driver());
return DriverManager.getConnection(url, userName, password);
}
public static void setParams(PreparedStatement preStmt, Object... params)
throws SQLException {
if (params == null || params.length == 0)
return;
for (int i = 1; i <= params.length; i++) {
Object param = params[i - 1];
if (param == null) {
preStmt.setNull(i, Types.NULL);
} else if (param instanceof Integer) {
preStmt.setInt(i, (Integer) param);
} else if (param instanceof String) {
preStmt.setString(i, (String) param);
} else if (param instanceof Double) {
preStmt.setDouble(i, (Double) param);
} else if (param instanceof Long) {
preStmt.setDouble(i, (Long) param);
} else if (param instanceof Timestamp) {
preStmt.setTimestamp(i, (Timestamp) param);
} else if (param instanceof Boolean) {
preStmt.setBoolean(i, (Boolean) param);
} else if (param instanceof Date) {
preStmt.setDate(i, (Date) param);
}
}
}


public static int executeUpdate(String sql) throws SQLException {
return executeUpdate(sql, new Object[] {});
}


public static int executeUpdate(String sql, Object... params)
throws SQLException {
Connection conn = null;
PreparedStatement preStmt = null;
try {
conn = getConnection();
preStmt = conn.prepareStatement(sql);
setParams(preStmt, params);
return preStmt.executeUpdate();
} finally {
if (preStmt != null)
preStmt.close();
if (conn != null)
conn.close();
}
}


public static int getCount(String sql) throws SQLException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
rs.next();
return rs.getInt(1);
} finally {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
}
}




citys.sql

/*
Navicat MySQL Data Transfer
Source Server         : ctl
Source Server Version : 50527
Source Host           : localhost:3306
Source Database       : test
Target Server Type    : MYSQL
Target Server Version : 50527
File Encoding         : 65001
Date: 2013-02-02 15:43:22
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `citys`
-- ----------------------------
DROP TABLE IF EXISTS `citys`;
CREATE TABLE `citys` (
  `region` varchar(8) DEFAULT NULL,
  `province` varchar(8) DEFAULT NULL,
  `city` varchar(20) NOT NULL DEFAULT '',
  `info` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- ----------------------------
-- Records of citys
-- ----------------------------
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '七台河市', '');
INSERT INTO `citys` VALUES ('华南地区', '海南', '三亚市', '');
INSERT INTO `citys` VALUES ('华东地区', '福建', '三明市', '');
INSERT INTO `citys` VALUES ('华南地区', '海南', '三沙市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '三门峡市', '');
INSERT INTO `citys` VALUES ('华东地区', '上海', '上海市', '直辖市');
INSERT INTO `citys` VALUES ('华东地区', '江西', '上饶市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '东莞市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '东营市', '');
INSERT INTO `citys` VALUES ('西北地区', '宁夏', '中卫市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '中山市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '临夏回族自治州', '');
INSERT INTO `citys` VALUES ('华北地区', '山西', '临汾市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '临沂市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '临沧市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '丹东市', '');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '丽水市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '丽江市', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '乌兰察布市', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '乌海市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '乌鲁木齐市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '乐山市', '');
INSERT INTO `citys` VALUES ('华东地区', '江西', '九江市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '云浮市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '亳州市', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '伊春市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '伊犁哈萨克自治州', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '佛山市', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '佳木斯市', '');
INSERT INTO `citys` VALUES ('华北地区', '河北', '保定市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '保山市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '信阳市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '克孜勒苏柯尔克孜自治州', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '克拉玛依市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '六安市', '');
INSERT INTO `citys` VALUES ('西南地区', '贵州', '六盘水市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '兰州市', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '兴安盟', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '内江市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '凉山彝族自治州', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '包头市', '');
INSERT INTO `citys` VALUES ('华北地区', '北京', '北京市', '直辖市');
INSERT INTO `citys` VALUES ('华南地区', '广西', '北海市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '十堰市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '南京市', '副省级');
INSERT INTO `citys` VALUES ('西南地区', '四川', '南充市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '南宁市', '');
INSERT INTO `citys` VALUES ('华东地区', '福建', '南平市', '');
INSERT INTO `citys` VALUES ('华东地区', '江西', '南昌市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '南通市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '南阳市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '博尔塔拉蒙古自治州', '');
INSERT INTO `citys` VALUES ('华东地区', '福建', '厦门市', '副省级');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '双鸭山市', '');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '台州市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '合肥市', '');
INSERT INTO `citys` VALUES ('华东地区', '江西', '吉安市', '');
INSERT INTO `citys` VALUES ('东北地区', '吉林', '吉林市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '吐鲁番地区', '');
INSERT INTO `citys` VALUES ('华北地区', '山西', '吕梁市', '');
INSERT INTO `citys` VALUES ('西北地区', '宁夏', '吴忠市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '周口市', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '呼伦贝尔市', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '呼和浩特市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '和田地区', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '咸宁市', '');
INSERT INTO `citys` VALUES ('西北地区', '陕西', '咸阳市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '哈密地区', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '哈尔滨市', '副省级');
INSERT INTO `citys` VALUES ('华北地区', '河北', '唐山市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '商丘市', '');
INSERT INTO `citys` VALUES ('西北地区', '陕西', '商洛市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '喀什地区', '');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '嘉兴市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '嘉峪关市', '');
INSERT INTO `citys` VALUES ('东北地区', '吉林', '四平市', '');
INSERT INTO `citys` VALUES ('西北地区', '宁夏', '固原市', '');
INSERT INTO `citys` VALUES ('地区', '省份', '地市州盟', '备注');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '塔城地区', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '大兴安岭地区', '');
INSERT INTO `citys` VALUES ('华北地区', '山西', '大同市', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '大庆市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '大理白族自治州', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '大连市', '副省级');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '天水市', '');
INSERT INTO `citys` VALUES ('华北地区', '天津', '天津市', '直辖市');
INSERT INTO `citys` VALUES ('华北地区', '山西', '太原市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '威海市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '娄底市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '孝感市', '');
INSERT INTO `citys` VALUES ('华东地区', '福建', '宁德市', '');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '宁波市', '副省级');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '安庆市', '');
INSERT INTO `citys` VALUES ('西北地区', '陕西', '安康市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '安阳市', '');
INSERT INTO `citys` VALUES ('西南地区', '贵州', '安顺市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '定西市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '宜宾市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '宜昌市', '');
INSERT INTO `citys` VALUES ('华东地区', '江西', '宜春市', '');
INSERT INTO `citys` VALUES ('西北地区', '陕西', '宝鸡市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '宣城市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '宿州市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '宿迁市', '');
INSERT INTO `citys` VALUES ('西南地区', '西藏', '山南地区', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '岳阳市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '崇左市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '巴中市', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '巴彦淖尔市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '巴音郭楞蒙古自治州', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '常州市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '常德市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '平凉市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '平顶山市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '广元市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '广安市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '广州市', '副省级');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '庆阳市', '');
INSERT INTO `citys` VALUES ('华北地区', '河北', '廊坊市', '');
INSERT INTO `citys` VALUES ('西北地区', '陕西', '延安市', '');
INSERT INTO `citys` VALUES ('东北地区', '吉林', '延边朝鲜族自治州', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '开封市', '');
INSERT INTO `citys` VALUES ('华北地区', '河北', '张家口市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '张家界市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '张掖市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '徐州市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '德宏傣族景颇族自治州', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '德州市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '德阳市', '');
INSERT INTO `citys` VALUES ('华北地区', '山西', '忻州市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '怀化市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '怒江傈僳族自治州', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '恩施土家族苗族自治州', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '惠州市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '成都市', '副省级');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '扬州市', '');
INSERT INTO `citys` VALUES ('华北地区', '河北', '承德市', '');
INSERT INTO `citys` VALUES ('华东地区', '江西', '抚州市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '抚顺市', '');
INSERT INTO `citys` VALUES ('西南地区', '西藏', '拉萨市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '揭阳市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '攀枝花市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '文山壮族苗族自治州', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '新乡市', '');
INSERT INTO `citys` VALUES ('华东地区', '江西', '新余市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '无锡市', '');
INSERT INTO `citys` VALUES ('西南地区', '西藏', '日喀则地区', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '日照市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '昆明市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '昌吉回族自治州', '');
INSERT INTO `citys` VALUES ('西南地区', '西藏', '昌都地区', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '昭通市', '');
INSERT INTO `citys` VALUES ('华北地区', '山西', '晋中市', '');
INSERT INTO `citys` VALUES ('华北地区', '山西', '晋城市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '普洱市', '');
INSERT INTO `citys` VALUES ('华东地区', '江西', '景德镇市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '曲靖市', '');
INSERT INTO `citys` VALUES ('华北地区', '山西', '朔州市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '朝阳市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '本溪市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '来宾市', '');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '杭州市', '副省级');
INSERT INTO `citys` VALUES ('东北地区', '吉林', '松原市', '');
INSERT INTO `citys` VALUES ('西南地区', '西藏', '林芝地区', '');
INSERT INTO `citys` VALUES ('西北地区', '青海', '果洛藏族自治州', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '枣庄市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '柳州市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '株洲市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '桂林市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '梅州市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '梧州市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '楚雄彝族自治州', '');
INSERT INTO `citys` VALUES ('西北地区', '陕西', '榆林市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '武威市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '武汉市', '副省级');
INSERT INTO `citys` VALUES ('西南地区', '贵州', '毕节市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '永州市', '');
INSERT INTO `citys` VALUES ('西北地区', '陕西', '汉中市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '汕头市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '汕尾市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '江门市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '池州市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '沈阳市', '副省级');
INSERT INTO `citys` VALUES ('华北地区', '河北', '沧州市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '河池市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '河源市', '');
INSERT INTO `citys` VALUES ('华东地区', '福建', '泉州市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '泰安市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '泰州市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '泸州市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '洛阳市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '济南市', '副省级');
INSERT INTO `citys` VALUES ('华东地区', '山东', '济宁市', '');
INSERT INTO `citys` VALUES ('西北地区', '青海', '海东地区', '');
INSERT INTO `citys` VALUES ('西北地区', '青海', '海北藏族自治州', '');
INSERT INTO `citys` VALUES ('西北地区', '青海', '海南藏族自治州', '');
INSERT INTO `citys` VALUES ('华南地区', '海南', '海口市', '');
INSERT INTO `citys` VALUES ('西北地区', '青海', '海西蒙古族藏族自治州', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '淄博市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '淮北市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '淮南市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '淮安市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '深圳市', '副省级');
INSERT INTO `citys` VALUES ('华南地区', '广东', '清远市', '');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '温州市', '');
INSERT INTO `citys` VALUES ('西北地区', '陕西', '渭南市', '');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '湖州市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '湘潭市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '湘西土家族苗族自治州', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '湛江市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '滁州市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '滨州市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '漯河市', '');
INSERT INTO `citys` VALUES ('华东地区', '福建', '漳州市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '潍坊市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '潜江市', '副地级');
INSERT INTO `citys` VALUES ('华南地区', '广东', '潮州市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '濮阳市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '烟台市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '焦作市', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '牡丹江市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '玉林市', '');
INSERT INTO `citys` VALUES ('西北地区', '青海', '玉树藏族自治州', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '玉溪市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '珠海市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '甘南藏族自治州', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '甘孜藏族自治州', '');
INSERT INTO `citys` VALUES ('东北地区', '吉林', '白城市', '');
INSERT INTO `citys` VALUES ('东北地区', '吉林', '白山市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '白银市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '百色市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '益阳市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '盐城市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '盘锦市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '眉山市', '');
INSERT INTO `citys` VALUES ('西北地区', '宁夏', '石嘴山市', '');
INSERT INTO `citys` VALUES ('华北地区', '河北', '石家庄市', '');
INSERT INTO `citys` VALUES ('华东地区', '福建', '福州市', '');
INSERT INTO `citys` VALUES ('华北地区', '河北', '秦皇岛市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '红河哈尼族彝族自治州', '');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '绍兴市', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '绥化市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '绵阳市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '聊城市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '肇庆市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '自贡市', '');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '舟山市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '芜湖市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '苏州市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '茂名市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '荆州市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '荆门市', '');
INSERT INTO `citys` VALUES ('华东地区', '福建', '莆田市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '莱芜市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '菏泽市', '');
INSERT INTO `citys` VALUES ('华东地区', '江西', '萍乡市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '营口市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '葫芦岛市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '蚌埠市', '');
INSERT INTO `citys` VALUES ('华北地区', '河北', '衡水市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '衡阳市', '');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '衢州市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '襄阳市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '西双版纳傣族自治州', '');
INSERT INTO `citys` VALUES ('西北地区', '青海', '西宁市', '');
INSERT INTO `citys` VALUES ('西北地区', '陕西', '西安市', '副省级');
INSERT INTO `citys` VALUES ('华中地区', '河南', '许昌市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '贵港市', '');
INSERT INTO `citys` VALUES ('西南地区', '贵州', '贵阳市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '贺州市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '资阳市', '');
INSERT INTO `citys` VALUES ('华东地区', '江西', '赣州市', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '赤峰市', '');
INSERT INTO `citys` VALUES ('东北地区', '吉林', '辽源市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '辽阳市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '达州市', '');
INSERT INTO `citys` VALUES ('华北地区', '山西', '运城市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '连云港市', '');
INSERT INTO `citys` VALUES ('西南地区', '云南', '迪庆藏族自治州', '');
INSERT INTO `citys` VALUES ('东北地区', '吉林', '通化市', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '通辽市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '遂宁市', '');
INSERT INTO `citys` VALUES ('西南地区', '贵州', '遵义市', '');
INSERT INTO `citys` VALUES ('华北地区', '河北', '邢台市', '');
INSERT INTO `citys` VALUES ('西南地区', '西藏', '那曲地区', '');
INSERT INTO `citys` VALUES ('华北地区', '河北', '邯郸市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '邵阳市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '郑州市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '郴州市', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '鄂尔多斯市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '鄂州市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '酒泉市', '');
INSERT INTO `citys` VALUES ('西南地区', '重庆', '重庆市', '直辖市');
INSERT INTO `citys` VALUES ('华东地区', '浙江', '金华市', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '金昌市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '钦州市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '铁岭市', '');
INSERT INTO `citys` VALUES ('西南地区', '贵州', '铜仁市', '');
INSERT INTO `citys` VALUES ('西北地区', '陕西', '铜川市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '铜陵市', '');
INSERT INTO `citys` VALUES ('西北地区', '宁夏', '银川市', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '锡林郭勒盟', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '锦州市', '');
INSERT INTO `citys` VALUES ('华东地区', '江苏', '镇江市', '');
INSERT INTO `citys` VALUES ('东北地区', '吉林', '长春市', '副省级');
INSERT INTO `citys` VALUES ('华中地区', '湖南', '长沙市', '');
INSERT INTO `citys` VALUES ('华北地区', '山西', '长治市', '');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '阜新市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '阜阳市', '');
INSERT INTO `citys` VALUES ('华南地区', '广西', '防城港市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '阳江市', '');
INSERT INTO `citys` VALUES ('华北地区', '山西', '阳泉市', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '阿克苏地区', '');
INSERT INTO `citys` VALUES ('西北地区', '新疆', '阿勒泰地区', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '阿坝藏族羌族自治州', '');
INSERT INTO `citys` VALUES ('华北地区', '内蒙古', '阿拉善盟', '');
INSERT INTO `citys` VALUES ('西南地区', '西藏', '阿里地区', '');
INSERT INTO `citys` VALUES ('西北地区', '甘肃', '陇南市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '随州市', '');
INSERT INTO `citys` VALUES ('西南地区', '四川', '雅安市', '');
INSERT INTO `citys` VALUES ('华东地区', '山东', '青岛市', '副省级');
INSERT INTO `citys` VALUES ('东北地区', '辽宁', '鞍山市', '');
INSERT INTO `citys` VALUES ('华南地区', '广东', '韶关市', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '马鞍山市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '驻马店市', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '鸡西市', '');
INSERT INTO `citys` VALUES ('华中地区', '河南', '鹤壁市', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '鹤岗市', '');
INSERT INTO `citys` VALUES ('华东地区', '江西', '鹰潭市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '黄冈市', '');
INSERT INTO `citys` VALUES ('西北地区', '青海', '黄南藏族自治州', '');
INSERT INTO `citys` VALUES ('华东地区', '安徽', '黄山市', '');
INSERT INTO `citys` VALUES ('华中地区', '湖北', '黄石市', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '黑河市', '');
INSERT INTO `citys` VALUES ('西南地区', '贵州', '黔东南苗族侗族自治州', '');
INSERT INTO `citys` VALUES ('西南地区', '贵州', '黔南布依族苗族自治州', '');
INSERT INTO `citys` VALUES ('西南地区', '贵州', '黔西南布依族苗族自治州', '');
INSERT INTO `citys` VALUES ('东北地区', '黑龙江', '齐齐哈尔市', '');
INSERT INTO `citys` VALUES ('华东地区', '福建', '龙岩市', '');









jquery.autocomplete.js

/*
 * jQuery Autocomplete plugin 1.1
 *
 * Copyright (c) 2009 Jörn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
 */


;(function($) {

$.fn.extend({
autocomplete: function(urlOrData, options) {
var isUrl = typeof urlOrData == "string";
options = $.extend({}, $.Autocompleter.defaults, {
url: isUrl ? urlOrData : null,
data: isUrl ? null : urlOrData,
delay: isUrl ? $.Autocompleter.defaults.delay : 10,
max: options && !options.scroll ? 10 : 150
}, options);

// if highlight is set to false, replace it with a do-nothing function
options.highlight = options.highlight || function(value) { return value; };

// if the formatMatch option is not specified, then use formatItem for backwards compatibility
options.formatMatch = options.formatMatch || options.formatItem;

return this.each(function() {
new $.Autocompleter(this, options);
});
},
result: function(handler) {
return this.bind("result", handler);
},
search: function(handler) {
return this.trigger("search", [handler]);
},
flushCache: function() {
return this.trigger("flushCache");
},
setOptions: function(options){
return this.trigger("setOptions", [options]);
},
unautocomplete: function() {
return this.trigger("unautocomplete");
}
});


$.Autocompleter = function(input, options) {


var KEY = {
UP: 38,
DOWN: 40,
DEL: 46,
TAB: 9,
RETURN: 13,
ESC: 27,
COMMA: 188,
PAGEUP: 33,
PAGEDOWN: 34,
BACKSPACE: 8
};


// Create $ object for input element
var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);


var timeout;
var previousValue = "";
var cache = $.Autocompleter.Cache(options);
var hasFocus = 0;
var lastKeyPressCode;
var config = {
mouseDownOnSelect: false
};
var select = $.Autocompleter.Select(options, input, selectCurrent, config);

var blockSubmit;

// prevent form submit in opera when selecting with return key
$.browser.opera && $(input.form).bind("submit.autocomplete", function() {
if (blockSubmit) {
blockSubmit = false;
return false;
}
});

// only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
// a keypress means the input has focus
// avoids issue where input had focus before the autocomplete was applied
hasFocus = 1;
// track last key pressed
lastKeyPressCode = event.keyCode;
switch(event.keyCode) {

case KEY.UP:
event.preventDefault();
if ( select.visible() ) {
select.prev();
} else {
onChange(0, true);
}
break;

case KEY.DOWN:
event.preventDefault();
if ( select.visible() ) {
select.next();
} else {
onChange(0, true);
}
break;

case KEY.PAGEUP:
event.preventDefault();
if ( select.visible() ) {
select.pageUp();
} else {
onChange(0, true);
}
break;

case KEY.PAGEDOWN:
event.preventDefault();
if ( select.visible() ) {
select.pageDown();
} else {
onChange(0, true);
}
break;

// matches also semicolon
case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
case KEY.TAB:
case KEY.RETURN:
if( selectCurrent() ) {
// stop default to prevent a form submit, Opera needs special handling
event.preventDefault();
blockSubmit = true;
return false;
}
break;

case KEY.ESC:
select.hide();
break;

default:
clearTimeout(timeout);
timeout = setTimeout(onChange, options.delay);
break;
}
}).focus(function(){
// track whether the field has focus, we shouldn't process any
// results if the field no longer has focus
hasFocus++;
}).blur(function() {
hasFocus = 0;
if (!config.mouseDownOnSelect) {
hideResults();
}
}).click(function() {
// show select when clicking in a focused field
if ( hasFocus++ > 1 && !select.visible() ) {
onChange(0, true);
}
}).bind("search", function() {
// TODO why not just specifying both arguments?
var fn = (arguments.length > 1) ? arguments[1] : null;
function findValueCallback(q, data) {
var result;
if( data && data.length ) {
for (var i=0; i < data.length; i++) {
if( data[i].result.toLowerCase() == q.toLowerCase() ) {
result = data[i];
break;
}
}
}
if( typeof fn == "function" ) fn(result);
else $input.trigger("result", result && [result.data, result.value]);
}
$.each(trimWords($input.val()), function(i, value) {
request(value, findValueCallback, findValueCallback);
});
}).bind("flushCache", function() {
cache.flush();
}).bind("setOptions", function() {
$.extend(options, arguments[1]);
// if we've updated the data, repopulate
if ( "data" in arguments[1] )
cache.populate();
}).bind("unautocomplete", function() {
select.unbind();
$input.unbind();
$(input.form).unbind(".autocomplete");
});


function selectCurrent() {
var selected = select.selected();
if( !selected )
return false;

var v = selected.result;
previousValue = v;

if ( options.multiple ) {
var words = trimWords($input.val());
if ( words.length > 1 ) {
var seperator = options.multipleSeparator.length;
var cursorAt = $(input).selection().start;
var wordAt, progress = 0;
$.each(words, function(i, word) {
progress += word.length;
if (cursorAt <= progress) {
wordAt = i;
return false;
}
progress += seperator;
});
words[wordAt] = v;
// TODO this should set the cursor to the right position, but it gets overriden somewhere
//$.Autocompleter.Selection(input, progress + seperator, progress + seperator);
v = words.join( options.multipleSeparator );
}
v += options.multipleSeparator;
}

$input.val(v);
hideResultsNow();
$input.trigger("result", [selected.data, selected.value]);
return true;
}

function onChange(crap, skipPrevCheck) {
if( lastKeyPressCode == KEY.DEL ) {
select.hide();
return;
}

var currentValue = $input.val();

if ( !skipPrevCheck && currentValue == previousValue )
return;

previousValue = currentValue;

currentValue = lastWord(currentValue);
if ( currentValue.length >= options.minChars) {
$input.addClass(options.loadingClass);
if (!options.matchCase)
currentValue = currentValue.toLowerCase();
request(currentValue, receiveData, hideResultsNow);
} else {
stopLoading();
select.hide();
}
};

function trimWords(value) {
if (!value)
return [""];
if (!options.multiple)
return [$.trim(value)];
return $.map(value.split(options.multipleSeparator), function(word) {
return $.trim(value).length ? $.trim(word) : null;
});
}

function lastWord(value) {
if ( !options.multiple )
return value;
var words = trimWords(value);
if (words.length == 1) 
return words[0];
var cursorAt = $(input).selection().start;
if (cursorAt == value.length) {
words = trimWords(value)
} else {
words = trimWords(value.replace(value.substring(cursorAt), ""));
}
return words[words.length - 1];
}

// fills in the input box w/the first match (assumed to be the best match)
// q: the term entered
// sValue: the first matching result
function autoFill(q, sValue){
// autofill in the complete box w/the first match as long as the user hasn't entered in more data
// if the last user key pressed was backspace, don't autofill
if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
// fill in the value (keep the case the user has typed)
$input.val($input.val() + sValue.substring(lastWord(previousValue).length));
// select the portion of the value not typed by the user (so the next character will erase)
$(input).selection(previousValue.length, previousValue.length + sValue.length);
}
};


function hideResults() {
clearTimeout(timeout);
timeout = setTimeout(hideResultsNow, 200);
};


function hideResultsNow() {
var wasVisible = select.visible();
select.hide();
clearTimeout(timeout);
stopLoading();
if (options.mustMatch) {
// call search and run callback
$input.search(
function (result){
// if no value found, clear the input box
if( !result ) {
if (options.multiple) {
var words = trimWords($input.val()).slice(0, -1);
$input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
}
else {
$input.val( "" );
$input.trigger("result", null);
}
}
}
);
}
};


function receiveData(q, data) {
if ( data && data.length && hasFocus ) {
stopLoading();
select.display(data, q);
autoFill(q, data[0].value);
select.show();
} else {
hideResultsNow();
}
};


function request(term, success, failure) {
if (!options.matchCase)
term = term.toLowerCase();
var data = cache.load(term);
// recieve the cached data
if (data && data.length) {
success(term, data);
// if an AJAX url has been supplied, try loading the data now
} else if( (typeof options.url == "string") && (options.url.length > 0) ){

var extraParams = {
timestamp: +new Date()
};
$.each(options.extraParams, function(key, param) {
extraParams[key] = typeof param == "function" ? param() : param;
});

$.ajax({
// try to leverage ajaxQueue plugin to abort previous requests
mode: "abort",
// limit abortion to this input
port: "autocomplete" + input.name,
dataType: options.dataType,
url: options.url,
data: $.extend({
q: lastWord(term),
limit: options.max
}, extraParams),
success: function(data) {
var parsed = options.parse && options.parse(data) || parse(data);
cache.add(term, parsed);
success(term, parsed);
}
});
} else {
// if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
select.emptyList();
failure(term);
}
};

function parse(data) {
var parsed = [];
var rows = data.split("\n");
for (var i=0; i < rows.length; i++) {
var row = $.trim(rows[i]);
if (row) {
row = row.split("|");
parsed[parsed.length] = {
data: row,
value: row[0],
result: options.formatResult && options.formatResult(row, row[0]) || row[0]
};
}
}
return parsed;
};


function stopLoading() {
$input.removeClass(options.loadingClass);
};


};


$.Autocompleter.defaults = {
inputClass: "ac_input",
resultsClass: "ac_results",
loadingClass: "ac_loading",
minChars: 1,
delay: 400,
matchCase: false,
matchSubset: true,
matchContains: false,
cacheLength: 10,
max: 100,
mustMatch: false,
extraParams: {},
selectFirst: true,
formatItem: function(row) { return row[0]; },
formatMatch: null,
autoFill: false,
width: 0,
multiple: false,
multipleSeparator: ", ",
highlight: function(value, term) {
return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "$1");
},
    scroll: true,
    scrollHeight: 180
};


$.Autocompleter.Cache = function(options) {


var data = {};
var length = 0;

function matchSubset(s, sub) {
if (!options.matchCase) 
s = s.toLowerCase();
var i = s.indexOf(sub);
if (options.matchContains == "word"){
i = s.toLowerCase().search("\\b" + sub.toLowerCase());
}
if (i == -1) return false;
return i == 0 || options.matchContains;
};

function add(q, value) {
if (length > options.cacheLength){
flush();
}
if (!data[q]){ 
length++;
}
data[q] = value;
}

function populate(){
if( !options.data ) return false;
// track the matches
var stMatchSets = {},
nullData = 0;


// no url was specified, we need to adjust the cache length to make sure it fits the local data store
if( !options.url ) options.cacheLength = 1;

// track all options for minChars = 0
stMatchSets[""] = [];

// loop through the array and create a lookup structure
for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
var rawValue = options.data[i];
// if rawValue is a string, make an array otherwise just reference the array
rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;

var value = options.formatMatch(rawValue, i+1, options.data.length);
if ( value === false )
continue;

var firstChar = value.charAt(0).toLowerCase();
// if no lookup array for this character exists, look it up now
if( !stMatchSets[firstChar] ) 
stMatchSets[firstChar] = [];


// if the match is a string
var row = {
value: value,
data: rawValue,
result: options.formatResult && options.formatResult(rawValue) || value
};

// push the current match into the set list
stMatchSets[firstChar].push(row);


// keep track of minChars zero items
if ( nullData++ < options.max ) {
stMatchSets[""].push(row);
}
};


// add the data items to the cache
$.each(stMatchSets, function(i, value) {
// increase the cache size
options.cacheLength++;
// add to the cache
add(i, value);
});
}

// populate any existing data
setTimeout(populate, 25);

function flush(){
data = {};
length = 0;
}

return {
flush: flush,
add: add,
populate: populate,
load: function(q) {
if (!options.cacheLength || !length)
return null;
/* 
* if dealing w/local data and matchContains than we must make sure
* to loop through all the data collections looking for matches
*/
if( !options.url && options.matchContains ){
// track all matches
var csub = [];
// loop through all the data grids for matches
for( var k in data ){
// don't search through the stMatchSets[""] (minChars: 0) cache
// this prevents duplicates
if( k.length > 0 ){
var c = data[k];
$.each(c, function(i, x) {
// if we've got a match, add it to the array
if (matchSubset(x.value, q)) {
csub.push(x);
}
});
}
}
return csub;
} else 
// if the exact item exists, use it
if (data[q]){
return data[q];
} else
if (options.matchSubset) {
for (var i = q.length - 1; i >= options.minChars; i--) {
var c = data[q.substr(0, i)];
if (c) {
var csub = [];
$.each(c, function(i, x) {
if (matchSubset(x.value, q)) {
csub[csub.length] = x;
}
});
return csub;
}
}
}
return null;
}
};
};


$.Autocompleter.Select = function (options, input, select, config) {
var CLASSES = {
ACTIVE: "ac_over"
};

var listItems,
active = -1,
data,
term = "",
needsInit = true,
element,
list;

// Create results
function init() {
if (!needsInit)
return;
element = $("")
.hide()
.addClass(options.resultsClass)
.css("position", "absolute")
.appendTo(document.body);

list = $("

    ").appendTo(element).mouseover( function(event) {
    if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
               active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
       $(target(event)).addClass(CLASSES.ACTIVE);            
           }
    }).click(function(event) {
    $(target(event)).addClass(CLASSES.ACTIVE);
    select();
    // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
    input.focus();
    return false;
    }).mousedown(function() {
    config.mouseDownOnSelect = true;
    }).mouseup(function() {
    config.mouseDownOnSelect = false;
    });

    if( options.width > 0 )
    element.css("width", options.width);

    needsInit = false;


    function target(event) {
    var element = event.target;
    while(element && element.tagName != "LI")
    element = element.parentNode;
    // more fun with IE, sometimes event.target is empty, just ignore it then
    if(!element)
    return [];
    return element;
    }


    function moveSelect(step) {
    listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
    movePosition(step);
            var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
            if(options.scroll) {
                var offset = 0;
                listItems.slice(0, active).each(function() {
    offset += this.offsetHeight;
    });
                if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
                    list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
                } else if(offset < list.scrollTop()) {
                    list.scrollTop(offset);
                }
            }
    };

    function movePosition(step) {
    active += step;
    if (active < 0) {
    active = listItems.size() - 1;
    } else if (active >= listItems.size()) {
    active = 0;
    }
    }

    function limitNumberOfItems(available) {
    return options.max && options.max < available
    ? options.max
    : available;
    }

    function fillList() {
    list.empty();
    var max = limitNumberOfItems(data.length);
    for (var i=0; i < max; i++) {
    if (!data[i])
    continue;
    var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
    if ( formatted === false )
    continue;
    var li = $("
  • ").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
    $.data(li, "ac_data", data[i]);
    }
    listItems = list.find("li");
    if ( options.selectFirst ) {
    listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
    active = 0;
    }
    // apply bgiframe if available
    if ( $.fn.bgiframe )
    list.bgiframe();
    }

    return {
    display: function(d, q) {
    init();
    data = d;
    term = q;
    fillList();
    },
    next: function() {
    moveSelect(1);
    },
    prev: function() {
    moveSelect(-1);
    },
    pageUp: function() {
    if (active != 0 && active - 8 < 0) {
    moveSelect( -active );
    } else {
    moveSelect(-8);
    }
    },
    pageDown: function() {
    if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
    moveSelect( listItems.size() - 1 - active );
    } else {
    moveSelect(8);
    }
    },
    hide: function() {
    element && element.hide();
    listItems && listItems.removeClass(CLASSES.ACTIVE);
    active = -1;
    },
    visible : function() {
    return element && element.is(":visible");
    },
    current: function() {
    return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
    },
    show: function() {
    var offset = $(input).offset();
    element.css({
    width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
    top: offset.top + input.offsetHeight,
    left: offset.left
    }).show();
                if(options.scroll) {
                    list.scrollTop(0);
                    list.css({
    maxHeight: options.scrollHeight,
    overflow: 'auto'
    });

                    if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
    var listHeight = 0;
    listItems.each(function() {
    listHeight += this.offsetHeight;
    });
    var scrollbarsVisible = listHeight > options.scrollHeight;
                        list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
    if (!scrollbarsVisible) {
    // IE doesn't recalculate width when scrollbar disappears
    listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
    }
                    }
                    
                }
    },
    selected: function() {
    var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
    return selected && selected.length && $.data(selected[0], "ac_data");
    },
    emptyList: function (){
    list && list.empty();
    },
    unbind: function() {
    element && element.remove();
    }
    };
    };


    $.fn.selection = function(start, end) {
    if (start !== undefined) {
    return this.each(function() {
    if( this.createTextRange ){
    var selRange = this.createTextRange();
    if (end === undefined || start == end) {
    selRange.move("character", start);
    selRange.select();
    } else {
    selRange.collapse(true);
    selRange.moveStart("character", start);
    selRange.moveEnd("character", end);
    selRange.select();
    }
    } else if( this.setSelectionRange ){
    this.setSelectionRange(start, end);
    } else if( this.selectionStart ){
    this.selectionStart = start;
    this.selectionEnd = end;
    }
    });
    }
    var field = this[0];
    if ( field.createTextRange ) {
    var range = document.selection.createRange(),
    orig = field.value,
    teststring = "<->",
    textLength = range.text.length;
    range.text = teststring;
    var caretAt = field.value.indexOf(teststring);
    field.value = orig;
    this.selection(caretAt, caretAt + textLength);
    return {
    start: caretAt,
    end: caretAt + textLength
    }
    } else if( field.selectionStart !== undefined ){
    return {
    start: field.selectionStart,
    end: field.selectionEnd
    }
    }
    };
    })(jQuery);





    jquery.js

    (function(){
    /*
     * jQuery 1.2.6 - New Wave Javascript
     *
     * Copyright (c) 2008 John Resig (jquery.com)
     * Dual licensed under the MIT (MIT-LICENSE.txt)
     * and GPL (GPL-LICENSE.txt) licenses.
     *
     * $Date: 2008-05-27 21:17:26 +0200 (Di, 27 Mai 2008) $
     * $Rev: 5700 $
     */


    // Map over jQuery in case of overwrite
    var _jQuery = window.jQuery,
    // Map over the $ in case of overwrite
    _$ = window.$;


    var jQuery = window.jQuery = window.$ = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context );
    };


    // A simple way to check for HTML strings or ID strings
    // (both of which we optimize for)
    var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,


    // Is it a simple selector
    isSimple = /^.[^:#\[\.]*$/,


    // Will speed up references to undefined, and allows munging its name.
    undefined;


    jQuery.fn = jQuery.prototype = {
    init: function( selector, context ) {
    // Make sure that a selection was provided
    selector = selector || document;


    // Handle $(DOMElement)
    if ( selector.nodeType ) {
    this[0] = selector;
    this.length = 1;
    return this;
    }
    // Handle HTML strings
    if ( typeof selector == "string" ) {
    // Are we dealing with HTML string or an ID?
    var match = quickExpr.exec( selector );


    // Verify a match, and that no context was specified for #id
    if ( match && (match[1] || !context) ) {


    // HANDLE: $(html) -> $(array)
    if ( match[1] )
    selector = jQuery.clean( [ match[1] ], context );


    // HANDLE: $("#id")
    else {
    var elem = document.getElementById( match[3] );


    // Make sure an element was located
    if ( elem ){
    // Handle the case where IE and Opera return items
    // by name instead of ID
    if ( elem.id != match[3] )
    return jQuery().find( selector );


    // Otherwise, we inject the element directly into the jQuery object
    return jQuery( elem );
    }
    selector = [];
    }


    // HANDLE: $(expr, [context])
    // (which is just equivalent to: $(content).find(expr)
    } else
    return jQuery( context ).find( selector );


    // HANDLE: $(function)
    // Shortcut for document ready
    } else if ( jQuery.isFunction( selector ) )
    return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );


    return this.setArray(jQuery.makeArray(selector));
    },


    // The current version of jQuery being used
    jquery: "1.2.6",


    // The number of elements contained in the matched element set
    size: function() {
    return this.length;
    },


    // The number of elements contained in the matched element set
    length: 0,


    // Get the Nth element in the matched element set OR
    // Get the whole matched element set as a clean array
    get: function( num ) {
    return num == undefined ?


    // Return a 'clean' array
    jQuery.makeArray( this ) :


    // Return just the object
    this[ num ];
    },


    // Take an array of elements and push it onto the stack
    // (returning the new matched element set)
    pushStack: function( elems ) {
    // Build a new jQuery matched element set
    var ret = jQuery( elems );


    // Add the old object onto the stack (as a reference)
    ret.prevObject = this;


    // Return the newly-formed element set
    return ret;
    },


    // Force the current matched set of elements to become
    // the specified array of elements (destroying the stack in the process)
    // You should use pushStack() in order to do this, but maintain the stack
    setArray: function( elems ) {
    // Resetting the length to 0, then using the native Array push
    // is a super-fast way to populate an object with array-like properties
    this.length = 0;
    Array.prototype.push.apply( this, elems );


    return this;
    },


    // Execute a callback for every element in the matched set.
    // (You can seed the arguments with an array of args, but this is
    // only used internally.)
    each: function( callback, args ) {
    return jQuery.each( this, callback, args );
    },


    // Determine the position of an element within
    // the matched set of elements
    index: function( elem ) {
    var ret = -1;


    // Locate the position of the desired element
    return jQuery.inArray(
    // If it receives a jQuery object, the first element is used
    elem && elem.jquery ? elem[0] : elem
    , this );
    },


    attr: function( name, value, type ) {
    var options = name;


    // Look for the case where we're accessing a style value
    if ( name.constructor == String )
    if ( value === undefined )
    return this[0] && jQuery[ type || "attr" ]( this[0], name );


    else {
    options = {};
    options[ name ] = value;
    }


    // Check to see if we're setting style values
    return this.each(function(i){
    // Set all the styles
    for ( name in options )
    jQuery.attr(
    type ?
    this.style :
    this,
    name, jQuery.prop( this, options[ name ], type, i, name )
    );
    });
    },


    css: function( key, value ) {
    // ignore negative width and height values
    if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
    value = undefined;
    return this.attr( key, value, "curCSS" );
    },


    text: function( text ) {
    if ( typeof text != "object" && text != null )
    return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );


    var ret = "";


    jQuery.each( text || this, function(){
    jQuery.each( this.childNodes, function(){
    if ( this.nodeType != 8 )
    ret += this.nodeType != 1 ?
    this.nodeValue :
    jQuery.fn.text( [ this ] );
    });
    });


    return ret;
    },


    wrapAll: function( html ) {
    if ( this[0] )
    // The elements to wrap the target around
    jQuery( html, this[0].ownerDocument )
    .clone()
    .insertBefore( this[0] )
    .map(function(){
    var elem = this;


    while ( elem.firstChild )
    elem = elem.firstChild;


    return elem;
    })
    .append(this);


    return this;
    },


    wrapInner: function( html ) {
    return this.each(function(){
    jQuery( this ).contents().wrapAll( html );
    });
    },


    wrap: function( html ) {
    return this.each(function(){
    jQuery( this ).wrapAll( html );
    });
    },


    append: function() {
    return this.domManip(arguments, true, false, function(elem){
    if (this.nodeType == 1)
    this.appendChild( elem );
    });
    },


    prepend: function() {
    return this.domManip(arguments, true, true, function(elem){
    if (this.nodeType == 1)
    this.insertBefore( elem, this.firstChild );
    });
    },


    before: function() {
    return this.domManip(arguments, false, false, function(elem){
    this.parentNode.insertBefore( elem, this );
    });
    },


    after: function() {
    return this.domManip(arguments, false, true, function(elem){
    this.parentNode.insertBefore( elem, this.nextSibling );
    });
    },


    end: function() {
    return this.prevObject || jQuery( [] );
    },


    find: function( selector ) {
    var elems = jQuery.map(this, function(elem){
    return jQuery.find( selector, elem );
    });


    return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ?
    jQuery.unique( elems ) :
    elems );
    },


    clone: function( events ) {
    // Do the clone
    var ret = this.map(function(){
    if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) {
    // IE copies events bound via attachEvent when
    // using cloneNode. Calling detachEvent on the
    // clone will also remove the events from the orignal
    // In order to get around this, we use innerHTML.
    // Unfortunately, this means some modifications to
    // attributes in IE that are actually only stored
    // as properties will not be copied (such as the
    // the name attribute on an input).
    var clone = this.cloneNode(true),
    container = document.createElement("div");
    container.appendChild(clone);
    return jQuery.clean([container.innerHTML])[0];
    } else
    return this.cloneNode(true);
    });


    // Need to set the expando to null on the cloned set if it exists
    // removeData doesn't work here, IE removes it from the original as well
    // this is primarily for IE but the data expando shouldn't be copied over in any browser
    var clone = ret.find("*").andSelf().each(function(){
    if ( this[ expando ] != undefined )
    this[ expando ] = null;
    });


    // Copy the events from the original to the clone
    if ( events === true )
    this.find("*").andSelf().each(function(i){
    if (this.nodeType == 3)
    return;
    var events = jQuery.data( this, "events" );


    for ( var type in events )
    for ( var handler in events[ type ] )
    jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data );
    });


    // Return the cloned set
    return ret;
    },


    filter: function( selector ) {
    return this.pushStack(
    jQuery.isFunction( selector ) &&
    jQuery.grep(this, function(elem, i){
    return selector.call( elem, i );
    }) ||


    jQuery.multiFilter( selector, this ) );
    },


    not: function( selector ) {
    if ( selector.constructor == String )
    // test special case where just one selector is passed in
    if ( isSimple.test( selector ) )
    return this.pushStack( jQuery.multiFilter( selector, this, true ) );
    else
    selector = jQuery.multiFilter( selector, this );


    var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
    return this.filter(function() {
    return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
    });
    },


    add: function( selector ) {
    return this.pushStack( jQuery.unique( jQuery.merge(
    this.get(),
    typeof selector == 'string' ?
    jQuery( selector ) :
    jQuery.makeArray( selector )
    )));
    },


    is: function( selector ) {
    return !!selector && jQuery.multiFilter( selector, this ).length > 0;
    },


    hasClass: function( selector ) {
    return this.is( "." + selector );
    },


    val: function( value ) {
    if ( value == undefined ) {


    if ( this.length ) {
    var elem = this[0];


    // We need to handle select boxes special
    if ( jQuery.nodeName( elem, "select" ) ) {
    var index = elem.selectedIndex,
    values = [],
    options = elem.options,
    one = elem.type == "select-one";


    // Nothing was selected
    if ( index < 0 )
    return null;


    // Loop through all the selected options
    for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
    var option = options[ i ];


    if ( option.selected ) {
    // Get the specifc value for the option
    value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value;


    // We don't need an array for one selects
    if ( one )
    return value;


    // Multi-Selects return an array
    values.push( value );
    }
    }


    return values;


    // Everything else, we just grab the value
    } else
    return (this[0].value || "").replace(/\r/g, "");


    }


    return undefined;
    }


    if( value.constructor == Number )
    value += '';


    return this.each(function(){
    if ( this.nodeType != 1 )
    return;


    if ( value.constructor == Array && /radio|checkbox/.test( this.type ) )
    this.checked = (jQuery.inArray(this.value, value) >= 0 ||
    jQuery.inArray(this.name, value) >= 0);


    else if ( jQuery.nodeName( this, "select" ) ) {
    var values = jQuery.makeArray(value);


    jQuery( "option", this ).each(function(){
    this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
    jQuery.inArray( this.text, values ) >= 0);
    });


    if ( !values.length )
    this.selectedIndex = -1;


    } else
    this.value = value;
    });
    },


    html: function( value ) {
    return value == undefined ?
    (this[0] ?
    this[0].innerHTML :
    null) :
    this.empty().append( value );
    },


    replaceWith: function( value ) {
    return this.after( value ).remove();
    },


    eq: function( i ) {
    return this.slice( i, i + 1 );
    },


    slice: function() {
    return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
    },


    map: function( callback ) {
    return this.pushStack( jQuery.map(this, function(elem, i){
    return callback.call( elem, i, elem );
    }));
    },


    andSelf: function() {
    return this.add( this.prevObject );
    },


    data: function( key, value ){
    var parts = key.split(".");
    parts[1] = parts[1] ? "." + parts[1] : "";


    if ( value === undefined ) {
    var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);


    if ( data === undefined && this.length )
    data = jQuery.data( this[0], key );


    return data === undefined && parts[1] ?
    this.data( parts[0] ) :
    data;
    } else
    return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
    jQuery.data( this, key, value );
    });
    },


    removeData: function( key ){
    return this.each(function(){
    jQuery.removeData( this, key );
    });
    },


    domManip: function( args, table, reverse, callback ) {
    var clone = this.length > 1, elems;


    return this.each(function(){
    if ( !elems ) {
    elems = jQuery.clean( args, this.ownerDocument );


    if ( reverse )
    elems.reverse();
    }


    var obj = this;


    if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) )
    obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );


    var scripts = jQuery( [] );


    jQuery.each(elems, function(){
    var elem = clone ?
    jQuery( this ).clone( true )[0] :
    this;


    // execute all scripts after the elements have been injected
    if ( jQuery.nodeName( elem, "script" ) )
    scripts = scripts.add( elem );
    else {
    // Remove any inner scripts for later evaluation
    if ( elem.nodeType == 1 )
    scripts = scripts.add( jQuery( "script", elem ).remove() );


    // Inject the elements into the document
    callback.call( obj, elem );
    }
    });


    scripts.each( evalScript );
    });
    }
    };


    // Give the init function the jQuery prototype for later instantiation
    jQuery.fn.init.prototype = jQuery.fn;


    function evalScript( i, elem ) {
    if ( elem.src )
    jQuery.ajax({
    url: elem.src,
    async: false,
    dataType: "script"
    });


    else
    jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );


    if ( elem.parentNode )
    elem.parentNode.removeChild( elem );
    }


    function now(){
    return +new Date;
    }


    jQuery.extend = jQuery.fn.extend = function() {
    // copy reference to target object
    var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;


    // Handle a deep copy situation
    if ( target.constructor == Boolean ) {
    deep = target;
    target = arguments[1] || {};
    // skip the boolean and the target
    i = 2;
    }


    // Handle case when target is a string or something (possible in deep copy)
    if ( typeof target != "object" && typeof target != "function" )
    target = {};


    // extend jQuery itself if only one argument is passed
    if ( length == i ) {
    target = this;
    --i;
    }


    for ( ; i < length; i++ )
    // Only deal with non-null/undefined values
    if ( (options = arguments[ i ]) != null )
    // Extend the base object
    for ( var name in options ) {
    var src = target[ name ], copy = options[ name ];


    // Prevent never-ending loop
    if ( target === copy )
    continue;


    // Recurse if we're merging object values
    if ( deep && copy && typeof copy == "object" && !copy.nodeType )
    target[ name ] = jQuery.extend( deep, 
    // Never move original objects, clone them
    src || ( copy.length != null ? [ ] : { } )
    , copy );


    // Don't bring in undefined values
    else if ( copy !== undefined )
    target[ name ] = copy;


    }


    // Return the modified object
    return target;
    };


    var expando = "jQuery" + now(), uuid = 0, windowData = {},
    // exclude the following css properties to add px
    exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
    // cache defaultView
    defaultView = document.defaultView || {};


    jQuery.extend({
    noConflict: function( deep ) {
    window.$ = _$;


    if ( deep )
    window.jQuery = _jQuery;


    return jQuery;
    },


    // See test/unit/core.js for details concerning this function.
    isFunction: function( fn ) {
    return !!fn && typeof fn != "string" && !fn.nodeName &&
    fn.constructor != Array && /^[\s[]?function/.test( fn + "" );
    },


    // check if an element is in a (or is an) XML document
    isXMLDoc: function( elem ) {
    return elem.documentElement && !elem.body ||
    elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
    },


    // Evalulates a script in a global context
    globalEval: function( data ) {
    data = jQuery.trim( data );


    if ( data ) {
    // Inspired by code by Andrea Giammarchi
    // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
    var head = document.getElementsByTagName("head")[0] || document.documentElement,
    script = document.createElement("script");


    script.type = "text/javascript";
    if ( jQuery.browser.msie )
    script.text = data;
    else
    script.appendChild( document.createTextNode( data ) );


    // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
    // This arises when a base node is used (#2709).
    head.insertBefore( script, head.firstChild );
    head.removeChild( script );
    }
    },


    nodeName: function( elem, name ) {
    return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
    },


    cache: {},


    data: function( elem, name, data ) {
    elem = elem == window ?
    windowData :
    elem;


    var id = elem[ expando ];


    // Compute a unique ID for the element
    if ( !id )
    id = elem[ expando ] = ++uuid;


    // Only generate the data cache if we're
    // trying to access or manipulate it
    if ( name && !jQuery.cache[ id ] )
    jQuery.cache[ id ] = {};


    // Prevent overriding the named cache with undefined values
    if ( data !== undefined )
    jQuery.cache[ id ][ name ] = data;


    // Return the named cache data, or the ID for the element
    return name ?
    jQuery.cache[ id ][ name ] :
    id;
    },


    removeData: function( elem, name ) {
    elem = elem == window ?
    windowData :
    elem;


    var id = elem[ expando ];


    // If we want to remove a specific section of the element's data
    if ( name ) {
    if ( jQuery.cache[ id ] ) {
    // Remove the section of cache data
    delete jQuery.cache[ id ][ name ];


    // If we've removed all the data, remove the element's cache
    name = "";


    for ( name in jQuery.cache[ id ] )
    break;


    if ( !name )
    jQuery.removeData( elem );
    }


    // Otherwise, we want to remove all of the element's data
    } else {
    // Clean up the element expando
    try {
    delete elem[ expando ];
    } catch(e){
    // IE has trouble directly removing the expando
    // but it's ok with using removeAttribute
    if ( elem.removeAttribute )
    elem.removeAttribute( expando );
    }


    // Completely remove the data cache
    delete jQuery.cache[ id ];
    }
    },


    // args is for internal usage only
    each: function( object, callback, args ) {
    var name, i = 0, length = object.length;


    if ( args ) {
    if ( length == undefined ) {
    for ( name in object )
    if ( callback.apply( object[ name ], args ) === false )
    break;
    } else
    for ( ; i < length; )
    if ( callback.apply( object[ i++ ], args ) === false )
    break;


    // A special, fast, case for the most common use of each
    } else {
    if ( length == undefined ) {
    for ( name in object )
    if ( callback.call( object[ name ], name, object[ name ] ) === false )
    break;
    } else
    for ( var value = object[0];
    i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
    }


    return object;
    },


    prop: function( elem, value, type, i, name ) {
    // Handle executable functions
    if ( jQuery.isFunction( value ) )
    value = value.call( elem, i );


    // Handle passing in a number to a CSS property
    return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ?
    value + "px" :
    value;
    },


    className: {
    // internal only, use addClass("class")
    add: function( elem, classNames ) {
    jQuery.each((classNames || "").split(/\s+/), function(i, className){
    if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
    elem.className += (elem.className ? " " : "") + className;
    });
    },


    // internal only, use removeClass("class")
    remove: function( elem, classNames ) {
    if (elem.nodeType == 1)
    elem.className = classNames != undefined ?
    jQuery.grep(elem.className.split(/\s+/), function(className){
    return !jQuery.className.has( classNames, className );
    }).join(" ") :
    "";
    },


    // internal only, use hasClass("class")
    has: function( elem, className ) {
    return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
    }
    },


    // A method for quickly swapping in/out CSS properties to get correct calculations
    swap: function( elem, options, callback ) {
    var old = {};
    // Remember the old values, and insert the new ones
    for ( var name in options ) {
    old[ name ] = elem.style[ name ];
    elem.style[ name ] = options[ name ];
    }


    callback.call( elem );


    // Revert the old values
    for ( var name in options )
    elem.style[ name ] = old[ name ];
    },


    css: function( elem, name, force ) {
    if ( name == "width" || name == "height" ) {
    var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];


    function getWH() {
    val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
    var padding = 0, border = 0;
    jQuery.each( which, function() {
    padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
    border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
    });
    val -= Math.round(padding + border);
    }


    if ( jQuery(elem).is(":visible") )
    getWH();
    else
    jQuery.swap( elem, props, getWH );


    return Math.max(0, val);
    }


    return jQuery.curCSS( elem, name, force );
    },


    curCSS: function( elem, name, force ) {
    var ret, style = elem.style;


    // A helper method for determining if an element's values are broken
    function color( elem ) {
    if ( !jQuery.browser.safari )
    return false;


    // defaultView is cached
    var ret = defaultView.getComputedStyle( elem, null );
    return !ret || ret.getPropertyValue("color") == "";
    }


    // We need to handle opacity special in IE
    if ( name == "opacity" && jQuery.browser.msie ) {
    ret = jQuery.attr( style, "opacity" );


    return ret == "" ?
    "1" :
    ret;
    }
    // Opera sometimes will give the wrong display answer, this fixes it, see #2037
    if ( jQuery.browser.opera && name == "display" ) {
    var save = style.outline;
    style.outline = "0 solid black";
    style.outline = save;
    }


    // Make sure we're using the right name for getting the float value
    if ( name.match( /float/i ) )
    name = styleFloat;


    if ( !force && style && style[ name ] )
    ret = style[ name ];


    else if ( defaultView.getComputedStyle ) {


    // Only "float" is needed here
    if ( name.match( /float/i ) )
    name = "float";


    name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();


    var computedStyle = defaultView.getComputedStyle( elem, null );


    if ( computedStyle && !color( elem ) )
    ret = computedStyle.getPropertyValue( name );


    // If the element isn't reporting its values properly in Safari
    // then some display: none elements are involved
    else {
    var swap = [], stack = [], a = elem, i = 0;


    // Locate all of the parent display: none elements
    for ( ; a && color(a); a = a.parentNode )
    stack.unshift(a);


    // Go through and make them visible, but in reverse
    // (It would be better if we knew the exact display type that they had)
    for ( ; i < stack.length; i++ )
    if ( color( stack[ i ] ) ) {
    swap[ i ] = stack[ i ].style.display;
    stack[ i ].style.display = "block";
    }


    // Since we flip the display style, we have to handle that
    // one special, otherwise get the value
    ret = name == "display" && swap[ stack.length - 1 ] != null ?
    "none" :
    ( computedStyle && computedStyle.getPropertyValue( name ) ) || "";


    // Finally, revert the display styles back
    for ( i = 0; i < swap.length; i++ )
    if ( swap[ i ] != null )
    stack[ i ].style.display = swap[ i ];
    }


    // We should always get a number back from opacity
    if ( name == "opacity" && ret == "" )
    ret = "1";


    } else if ( elem.currentStyle ) {
    var camelCase = name.replace(/\-(\w)/g, function(all, letter){
    return letter.toUpperCase();
    });


    ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];


    // From the awesome hack by Dean Edwards
    // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291


    // If we're not dealing with a regular pixel number
    // but a number that has a weird ending, we need to convert it to pixels
    if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
    // Remember the original values
    var left = style.left, rsLeft = elem.runtimeStyle.left;


    // Put in the new values to get a computed value out
    elem.runtimeStyle.left = elem.currentStyle.left;
    style.left = ret || 0;
    ret = style.pixelLeft + "px";


    // Revert the changed values
    style.left = left;
    elem.runtimeStyle.left = rsLeft;
    }
    }


    return ret;
    },


    clean: function( elems, context ) {
    var ret = [];
    context = context || document;
    // !context.createElement fails in IE with an error but returns typeof 'object'
    if (typeof context.createElement == 'undefined')
    context = context.ownerDocument || context[0] && context[0].ownerDocument || document;


    jQuery.each(elems, function(i, elem){
    if ( !elem )
    return;


    if ( elem.constructor == Number )
    elem += '';


    // Convert html string into DOM nodes
    if ( typeof elem == "string" ) {
    // Fix "XHTML"-style tags in all browsers
    elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
    return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
    all :
    front + ">";
    });


    // Trim whitespace, otherwise indexOf won't work as expected
    var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div");


    var wrap =
    // option or optgroup
    !tags.indexOf(" [ 1, "" ] ||


    !tags.indexOf(" [ 1, "

    ", "
    " ] ||


    tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
    [ 1, "", "
    " ] ||


    !tags.indexOf(" [ 2, "", "
    " ] ||


    // matched above
    (!tags.indexOf(" [ 3, "", "
    " ] ||


    !tags.indexOf(" [ 2, "", "
    " ] ||


    // IE can't serialize and


    href="css/jquery.autocomplete.css" />



    <%
    Connection conn = DbManager.getConnection();
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    String sql = "select * from citys";
    pstmt = conn.prepareStatement(sql);
    rs = pstmt.executeQuery();
    %>
    <%
    StringBuffer sb = new StringBuffer();
    while (rs.next()) {
    //int id = rs.getInt("id"); // 整形类型
    String city = rs.getString("city"); // 字符串类型
    if (sb.length() == 0) {
    sb.append(city);
    } else {
    sb.append("," + city);
    }
    }
    %>


    <%
    rs.close();
    pstmt.close();
    conn.close();
    %>


    <%
    String ss = sb.toString();
    %>
    <%=ss%>









     















      本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

    相关文章

    立即
    投稿

    微信公众账号

    微信扫一扫加关注

    返回
    顶部