[
  {
    "path": ".classpath",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<classpath>\n\t<classpathentry kind=\"src\" output=\"target/classes\" path=\"src/main/java\">\n\t\t<attributes>\n\t\t\t<attribute name=\"optional\" value=\"true\"/>\n\t\t\t<attribute name=\"maven.pomderived\" value=\"true\"/>\n\t\t</attributes>\n\t</classpathentry>\n\t<classpathentry excluding=\"**\" kind=\"src\" output=\"target/classes\" path=\"src/main/resources\">\n\t\t<attributes>\n\t\t\t<attribute name=\"maven.pomderived\" value=\"true\"/>\n\t\t</attributes>\n\t</classpathentry>\n\t<classpathentry kind=\"src\" output=\"target/test-classes\" path=\"src/test/java\">\n\t\t<attributes>\n\t\t\t<attribute name=\"optional\" value=\"true\"/>\n\t\t\t<attribute name=\"maven.pomderived\" value=\"true\"/>\n\t\t</attributes>\n\t</classpathentry>\n\t<classpathentry excluding=\"**\" kind=\"src\" output=\"target/test-classes\" path=\"src/test/resources\">\n\t\t<attributes>\n\t\t\t<attribute name=\"maven.pomderived\" value=\"true\"/>\n\t\t</attributes>\n\t</classpathentry>\n\t<classpathentry kind=\"con\" path=\"org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 8 [1.8.0_25]\">\n\t\t<attributes>\n\t\t\t<attribute name=\"maven.pomderived\" value=\"true\"/>\n\t\t</attributes>\n\t</classpathentry>\n\t<classpathentry kind=\"con\" path=\"org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER\">\n\t\t<attributes>\n\t\t\t<attribute name=\"maven.pomderived\" value=\"true\"/>\n\t\t</attributes>\n\t</classpathentry>\n\t<classpathentry kind=\"output\" path=\"target/classes\"/>\n</classpath>\n"
  },
  {
    "path": ".gitignore",
    "content": "/target/\n"
  },
  {
    "path": ".project",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<projectDescription>\r\n\t<name>hr</name>\r\n\t<comment></comment>\r\n\t<projects>\r\n\t</projects>\r\n\t<buildSpec>\r\n\t\t<buildCommand>\r\n\t\t\t<name>org.eclipse.wst.common.project.facet.core.builder</name>\r\n\t\t\t<arguments>\r\n\t\t\t</arguments>\r\n\t\t</buildCommand>\r\n\t\t<buildCommand>\r\n\t\t\t<name>org.eclipse.jdt.core.javabuilder</name>\r\n\t\t\t<arguments>\r\n\t\t\t</arguments>\r\n\t\t</buildCommand>\r\n\t\t<buildCommand>\r\n\t\t\t<name>org.eclipse.m2e.core.maven2Builder</name>\r\n\t\t\t<arguments>\r\n\t\t\t</arguments>\r\n\t\t</buildCommand>\r\n\t</buildSpec>\r\n\t<natures>\r\n\t\t<nature>org.eclipse.jdt.core.javanature</nature>\r\n\t\t<nature>org.eclipse.m2e.core.maven2Nature</nature>\r\n\t\t<nature>org.eclipse.wst.common.project.facet.core.nature</nature>\r\n\t</natures>\r\n</projectDescription>\r\n"
  },
  {
    "path": ".settings/org.eclipse.core.resources.prefs",
    "content": "eclipse.preferences.version=1\r\nencoding//src/main/java/com/lcore/core/datamng/BaseDataMng.java=UTF-8\r\nencoding/<project>=UTF-8\r\n"
  },
  {
    "path": ".settings/org.eclipse.jdt.core.prefs",
    "content": "eclipse.preferences.version=1\r\norg.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\r\norg.eclipse.jdt.core.compiler.compliance=1.6\r\norg.eclipse.jdt.core.compiler.problem.forbiddenReference=warning\r\norg.eclipse.jdt.core.compiler.source=1.6\r\n"
  },
  {
    "path": ".settings/org.eclipse.m2e.core.prefs",
    "content": "activeProfiles=\r\neclipse.preferences.version=1\r\nresolveWorkspaceProjects=true\r\nversion=1\r\n"
  },
  {
    "path": "README.md",
    "content": "# 前言\n&nbsp;&nbsp;&nbsp;&nbsp;最近想做一个业务简单的系统,夯实下基础(前端+后端)。人力资源系统业务上较为简单,也比较独立,适合个人练手项目。人力资源系统包括一些核心的人力资源管理业务功能如:**考勤管理**、**薪酬管理**、**绩效管理**、**员工管理**、**加班申请**、**出差申请**等模块。\n\n# 开发环境\n&nbsp;&nbsp;&nbsp;&nbsp;**JDK1.6 + Eclipse + MySQL + Maven**\n\n&nbsp;&nbsp;&nbsp;&nbsp;本项目作为业余研究,后端使用spring mvc进行开发,前端主要使用bootstrap也是初学,完成整个项目的过程,也是一个学习的过程,下面是项目中使用到的相关知识点:\n\n# 前端技术\n\n&nbsp;&nbsp;&nbsp;&nbsp;**1. jQuery:js库**\n\n&nbsp;&nbsp;&nbsp;&nbsp;**2. Bootstrap:**前端界面框架(学习中)\n\n&nbsp;&nbsp;&nbsp;&nbsp;**3. BootstrapTable:**表格扩展插件\n\n&nbsp;&nbsp;&nbsp;&nbsp;**4. Velocity:**基于java的模板引擎(放在前端貌似不恰当)\n\n&nbsp;&nbsp;&nbsp;&nbsp;**5. ...**\n\n\n# 后端技术\n\n&nbsp;&nbsp;&nbsp;&nbsp;**1. Hibernate:**ORM框架,底层封装BaseDataMng数据库操作接口\n\n&nbsp;&nbsp;&nbsp;&nbsp;**2. Spring:**轻量级的IOC(控制反转)、AOP(面向切面)的容器框架\n\n&nbsp;&nbsp;&nbsp;&nbsp;**3. SpringMVC:**MVC框架\n\n&nbsp;&nbsp;&nbsp;&nbsp;**4. Activiti:**工作流引擎\n\n&nbsp;&nbsp;&nbsp;&nbsp;**5. ...**\n\n# 项目进度\n\n##登录模块\n&nbsp;&nbsp;&nbsp;&nbsp;密码密文存储、设置了拦截器(不登录返回登录界面)、登录、退出系统.\n\n<center>![登录界面](http://img.my.csdn.net/uploads/201506/11/1434011044_4098.png)</center>\n\n##权限管理\n&nbsp;&nbsp;&nbsp;&nbsp;主要包含角色、用户基础信息的管理(CRUD)、用户角色的分配、模块的管理(CRUD),模块授权.\n\n###角色管理\n&nbsp;&nbsp;&nbsp;&nbsp;角色的增、删、查、改、模糊搜索功能.\n<center>![角色管理](http://img.my.csdn.net/uploads/201508/28/1440726632_2964.png)</center>\n\n###用户管理\n&nbsp;&nbsp;&nbsp;&nbsp;用户的增、删、查、改、模糊搜索功能(密码的密文保存MD5加密).\n<center>![用户管理](http://img.my.csdn.net/uploads/201508/28/1440726808_2619.png)</center>"
  },
  {
    "path": "pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\r\n\t<modelVersion>4.0.0</modelVersion>\r\n\t<groupId>com.lcore.hr</groupId>\r\n\t<artifactId>hr</artifactId>\r\n\t<version>0.0.1-SNAPSHOT</version>\r\n\t<packaging>war</packaging>\r\n\t<build>\r\n\t\t<sourceDirectory>src</sourceDirectory>\r\n\t\t<plugins>\r\n\t\t\t<plugin>\r\n\t\t\t\t<groupId>org.apache.tomcat.maven</groupId>\r\n\t\t\t\t<artifactId>tomcat7-maven-plugin</artifactId>\r\n\t\t\t\t<version>2.0-beta-1</version>\r\n\t\t\t\t<configuration>\r\n\t\t\t\t\t<path>/hr</path>\r\n\t\t\t\t\t<port>9999</port>\r\n\t\t\t\t\t<contextReloadable>false</contextReloadable>\r\n\t\t\t\t</configuration>\r\n\t\t\t</plugin>\r\n\t\t\t<plugin>\r\n\t\t\t\t<artifactId>maven-compiler-plugin</artifactId>\r\n\t\t\t\t<version>2.3.2</version>\r\n\t\t\t\t<configuration>\r\n\t\t\t\t\t<source>1.6</source>\r\n\t\t\t\t\t<target>1.6</target>\r\n\t\t\t\t\t<encoding>utf8</encoding>\r\n\t\t\t\t</configuration>\r\n\t\t\t</plugin>\r\n\t\t</plugins>\r\n\t</build>\r\n\t<dependencies>\r\n\t\t<!-- spring-mvc -->\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.springframework</groupId>\r\n\t\t\t<artifactId>spring-webmvc</artifactId>\r\n\t\t\t<version>3.1.2.RELEASE</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.springframework</groupId>\r\n\t\t\t<artifactId>spring-orm</artifactId>\r\n\t\t\t<version>3.1.2.RELEASE</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.springframework</groupId>\r\n\t\t\t<artifactId>spring-test</artifactId>\r\n\t\t\t<version>3.1.2.RELEASE</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.springframework</groupId>\r\n\t\t\t<artifactId>spring-context</artifactId>\r\n\t\t\t<version>3.1.2.RELEASE</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.springframework</groupId>\r\n\t\t\t<artifactId>spring-tx</artifactId>\r\n\t\t\t<version>3.1.2.RELEASE</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.springframework</groupId>\r\n\t\t\t<artifactId>spring-mock</artifactId>\r\n\t\t\t<version>2.0.8</version>\r\n\t\t</dependency>\r\n\r\n\t\t<!-- hibernate -->\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.hibernate</groupId>\r\n\t\t\t<artifactId>hibernate-c3p0</artifactId>\r\n\t\t\t<version>3.6.0.Final</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.hibernate</groupId>\r\n\t\t\t<artifactId>hibernate-ehcache</artifactId>\r\n\t\t\t<version>3.6.10.Final</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.hibernate</groupId>\r\n\t\t\t<artifactId>hibernate-core</artifactId>\r\n\t\t\t<version>3.5.6-Final</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.hibernate</groupId>\r\n\t\t\t<artifactId>hibernate-annotations</artifactId>\r\n\t\t\t<version>3.5.6-Final</version>\r\n\t\t</dependency>\r\n\r\n\t\t<!-- velocity -->\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.apache.velocity</groupId>\r\n\t\t\t<artifactId>velocity</artifactId>\r\n\t\t\t<version>1.7</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.apache.velocity</groupId>\r\n\t\t\t<artifactId>velocity-tools</artifactId>\r\n\t\t\t<version>2.0</version>\r\n\t\t</dependency>\r\n\t\t<!-- Jersey -->\r\n\t\t<dependency>\r\n\t\t\t<groupId>com.sun.jersey</groupId>\r\n\t\t\t<artifactId>jersey-server</artifactId>\r\n\t\t\t<version>1.17</version>\r\n\t\t</dependency>\r\n\r\n\t\t<!-- rest webservice -->\r\n\t\t<dependency>\r\n\t\t\t<groupId>com.sun.jersey</groupId>\r\n\t\t\t<artifactId>jersey-json</artifactId>\r\n\t\t\t<version>1.17</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>com.sun.jersey.contribs</groupId>\r\n\t\t\t<artifactId>jersey-multipart</artifactId>\r\n\t\t\t<version>1.17</version>\r\n\t\t</dependency>\r\n\t\t<!-- <dependency> -->\r\n\t\t<!-- <groupId>com.alibaba</groupId> -->\r\n\t\t<!-- <artifactId>fastjson</artifactId> -->\r\n\t\t<!-- <version>1.1.39</version> -->\r\n\t\t<!-- </dependency> -->\r\n\t\t<!-- 工作流 -->\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.activiti</groupId>\r\n\t\t\t<artifactId>activiti-engine</artifactId>\r\n\t\t\t<version>5.15.1</version>\r\n\t\t</dependency>\r\n\r\n\t\t<!-- spring junit -->\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.springframework</groupId>\r\n\t\t\t<artifactId>spring-test</artifactId>\r\n\t\t\t<version>3.1.2.RELEASE</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>junit</groupId>\r\n\t\t\t<artifactId>junit</artifactId>\r\n\t\t\t<version>4.10</version>\r\n\t\t</dependency>\r\n\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.slf4j</groupId>\r\n\t\t\t<artifactId>slf4j-log4j12</artifactId>\r\n\t\t\t<version>1.7.2</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>mysql</groupId>\r\n\t\t\t<artifactId>mysql-connector-java</artifactId>\r\n\t\t\t<version>5.1.21</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>jstl</groupId>\r\n\t\t\t<artifactId>jstl</artifactId>\r\n\t\t\t<version>1.2</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>taglibs</groupId>\r\n\t\t\t<artifactId>standard</artifactId>\r\n\t\t\t<version>1.1.2</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>commons-lang</groupId>\r\n\t\t\t<artifactId>commons-lang</artifactId>\r\n\t\t\t<version>2.5</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>cglib</groupId>\r\n\t\t\t<artifactId>cglib</artifactId>\r\n\t\t\t<version>2.1_3</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>javassist</groupId>\r\n\t\t\t<artifactId>javassist</artifactId>\r\n\t\t\t<version>3.4.GA</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.codehaus.jackson</groupId>\r\n\t\t\t<artifactId>jackson-core-asl</artifactId>\r\n\t\t\t<version>1.9.8</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.codehaus.jackson</groupId>\r\n\t\t\t<artifactId>jackson-mapper-asl</artifactId>\r\n\t\t\t<version>1.9.8</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>com.fasterxml.jackson.core</groupId>\r\n\t\t\t<artifactId>jackson-core</artifactId>\r\n\t\t\t<version>2.1.0</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>com.fasterxml.jackson.core</groupId>\r\n\t\t\t<artifactId>jackson-databind</artifactId>\r\n\t\t\t<version>2.1.0</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>com.fasterxml.jackson.core</groupId>\r\n\t\t\t<artifactId>jackson-annotations</artifactId>\r\n\t\t\t<version>2.1.0</version>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>javax.servlet</groupId>\r\n\t\t\t<artifactId>servlet-api</artifactId>\r\n\t\t\t<version>2.4</version>\r\n\t\t\t<scope>provided</scope>\r\n\t\t</dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>commons-dbcp</groupId>\r\n\t\t\t<artifactId>commons-dbcp</artifactId>\r\n\t\t\t<version>1.2.2</version>\r\n\t\t</dependency>\r\n\r\n\t\t<!-- date -->\r\n\t\t<dependency>\r\n\t\t\t<groupId>joda-time</groupId>\r\n\t\t\t<artifactId>joda-time</artifactId>\r\n\t\t\t<version>2.8</version>\r\n\t\t</dependency>\r\n\r\n\t\t<!-- Shiro -->\r\n\t\t<dependency>\r\n\t\t\t<groupId>commons-collections</groupId>\r\n\t\t\t<artifactId>commons-collections</artifactId>\r\n\t\t\t<version>3.2.1</version>\r\n\t\t</dependency>\r\n\r\n\t\t<dependency>\r\n\t\t\t<groupId>net.sf.ehcache</groupId>\r\n\t\t\t<artifactId>ehcache-core</artifactId>\r\n\t\t\t<version>2.6.9</version>\r\n\t\t</dependency>\r\n\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.apache.shiro</groupId>\r\n\t\t\t<artifactId>shiro-spring</artifactId>\r\n\t\t\t<version>1.2.3</version>\r\n\t\t</dependency>\r\n\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.apache.shiro</groupId>\r\n\t\t\t<artifactId>shiro-ehcache</artifactId>\r\n\t\t\t<version>1.2.3</version>\r\n\t\t</dependency>\r\n\r\n\t\t<dependency>  \r\n\t\t\t<groupId>org.apache.shiro</groupId>\r\n\t\t\t<artifactId>shiro-quartz</artifactId>\r\n\t\t\t<version>1.2.3</version>\r\n\t\t</dependency>\r\n\r\n\r\n\t</dependencies>\r\n</project>\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/datamng/BaseDataMng.java",
    "content": "package com.lcore.hr.core.datamng;\r\n\r\n\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\n/**\r\n * 封装底层数据访问\r\n * @author lcore\r\n *\r\n */\r\npublic interface BaseDataMng {\r\n\r\n\t/**\r\n\t * 保存对象\r\n\t * @param root\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\tpublic abstract String saveObj(Root root) throws Exception;\r\n\r\n\t/**\r\n\t * 保存或者更新对象\r\n\t * @param root\r\n\t * @throws Exception\r\n\t */\r\n\tpublic abstract void saveOrUpdate(Root root) throws Exception;\r\n\r\n\t/**\r\n\t * 更新对象\r\n\t * @param root\r\n\t * @throws Exception\r\n\t */\r\n\tpublic abstract void updateObj(Root root) throws Exception;\r\n\r\n\t/**\r\n\t * 通过id和实体名字获取对象\r\n\t * @param id\r\n\t * @param className\r\n\t * @return\r\n\t */\r\n\tpublic abstract Root getObj(String className, String id);\r\n\t\r\n\t/**\r\n\t * 通过id和实体获取对象\r\n\t * @param id\r\n\t * @param className\r\n\t * @return\r\n\t */\r\n\tpublic abstract Root getObj(Class<?> className,String id);\r\n\t\r\n\t/**\r\n\t * 通过id和实体名字删除纪录\r\n\t * @param id\r\n\t * @param className\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\tpublic abstract void deleteObj(String className,String id) throws Exception;\r\n\t\r\n\t/**\r\n\t * 通过id和实体删除对象\r\n\t * @param id\r\n\t * @param className\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\tpublic abstract void deleteObj(Class<?> className,String id) throws Exception;\r\n\t\r\n\t/**\r\n\t * 根据条件表达式和实体名得到单条纪录\r\n\t * @param className\r\n\t * @param condition\r\n\t * @return\r\n\t */\r\n\tpublic abstract Root getObjByCondition(String className,String condition);\r\n\t\r\n\t/**\r\n\t * 根据条件表达式和实体得到单条纪录\r\n\t * @param className\r\n\t * @param condition\r\n\t * @return\r\n\t */\r\n\tpublic abstract Root getObjByCondition(Class<?> className,String condition);\r\n\t\r\n\t/**\r\n\t * 根据条件表达式和实体名得到集合纪录\r\n\t * @param className\r\n\t * @param condition\r\n\t * @return\r\n\t */\r\n\tpublic abstract List<Root> getObjListByCondition(String className,String condition);\r\n\t\r\n\t/**\r\n\t * 根据条件表达式和实体得到集合纪录\r\n\t * @param className\r\n\t * @param condition\r\n\t * @return\r\n\t */\r\n\tpublic abstract List<Root> getObjListByCondition(Class<?> className,String condition);\r\n\r\n\t/**\r\n\t * 根据条件得到分页纪录\r\n\t * @param className\r\n\t * @param condition\r\n\t * @param firstRow\r\n\t * @param pageSize\r\n\t * @return\r\n\t */\r\n    public abstract List<Root> getPagedObjListWithCondition(String className,String condition,int firstRow,int pageSize);\r\n\r\n    /**\r\n     * 根据查询条件得到分页纪录\r\n     * @param className\r\n     * @param condition\r\n     * @param firstRow\r\n     * @param pageSize\r\n     * @return\r\n     */\r\n    public abstract List<Root> getPagedObjListWithCondition(Class<?> className,String condition,int firstRow,int pageSize);\r\n    \r\n    /**\r\n     * 根据查询条件得到查询总数\r\n     * @param className\r\n     * @param condition\r\n     * @return\r\n     */\r\n    public abstract long getCountByCondition(String className,String condition);\r\n    \r\n    public List<Map<String,Object>> querySql(String sql,List<Object> param);\r\n    \r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/datamng/impl/BaseDataMngImpl.java",
    "content": "package com.lcore.hr.core.datamng.impl;\r\n\r\nimport java.util.Date;\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimport org.apache.shiro.SecurityUtils;\r\nimport org.apache.shiro.subject.Subject;\r\nimport org.hibernate.Query;\r\nimport org.hibernate.Session;\r\nimport org.springframework.orm.hibernate3.HibernateTemplate;\r\nimport org.springframework.stereotype.Repository;\r\nimport org.springframework.transaction.annotation.Transactional;\r\n\r\nimport com.lcore.hr.core.datamng.BaseDataMng;\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.core.utils.TemplateFactory;\r\nimport com.lcore.hr.utils.Env;\r\nimport com.lcore.hr.utils.GlobalConfigHolder;\r\n\r\n\r\n@Repository(\"baseDataMng\")\r\n@Transactional\r\npublic class BaseDataMngImpl implements BaseDataMng {\r\n\r\n\tpublic BaseDataMngImpl() {\r\n\r\n\t}\r\n\r\n\tprotected HibernateTemplate getHibernateTemplate() {\r\n\t\treturn TemplateFactory.getHibernateTemplateById(\"hibernateTemplate\");\r\n\t}\r\n\r\n\tprotected Session getSession() {\r\n\t\treturn getHibernateTemplate().getSessionFactory().getCurrentSession();\r\n\t}\r\n\r\n\tpublic String saveObj(Root root) throws Exception {\r\n\t\t//压入创建时间,更新时间\r\n\t\troot.setCreateTime(new Date());    \r\n\t\troot.setUpdateTime(new Date());\r\n\t\t//压入创建人,更新人\r\n\t\tEnv env = GlobalConfigHolder.getEnv();\r\n\t\troot.setCreater(env.getUser().getUserName());\r\n\t\troot.setUpdater(env.getUser().getUserName());\r\n\t\treturn (String) getHibernateTemplate().save(root);\r\n\t}\r\n\r\n\tpublic void saveOrUpdate(Root root) throws Exception {\r\n        getHibernateTemplate().saveOrUpdate(root);\r\n\t}\r\n\r\n\tpublic void updateObj(Root root) throws Exception {\r\n\t\t//压入更新时间\r\n\t\troot.setUpdateTime(new Date());\r\n\t\t//压入更新人\r\n\t\tEnv env = GlobalConfigHolder.getEnv();\r\n\t\troot.setUpdater(env.getUser().getUserName());\r\n        getHibernateTemplate().update(root);\r\n\t}\r\n\r\n\tpublic Root getObj(String className, String id) {\r\n\t\treturn (Root) getHibernateTemplate().get(className, id);\r\n\t}\r\n\tpublic Root getObj(Class<?> className, String id) {\r\n\t\treturn (Root)getHibernateTemplate().get(className, id);\r\n\t}\r\n\r\n\tpublic void deleteObj(String className, String id) throws Exception {\r\n\t\tRoot root = getObj(className, id);\r\n\t    getHibernateTemplate().delete(root);\r\n\t}\r\n\r\n\tpublic void deleteObj(Class<?> className, String id) throws Exception {\r\n\t\tRoot root = getObj(className, id);\r\n\t\tgetHibernateTemplate().delete(root);\r\n\t}\r\n\r\n\tpublic Root getObjByCondition(String className, String condition) {\r\n        List<Root> list = getObjListByCondition(className, condition);\r\n        return  (list!=null&&list.size()>0?list.get(0):null);\r\n\t}\r\n\r\n\tpublic Root getObjByCondition(Class<?> className, String condition) {\r\n\t\treturn getObjByCondition(className.getSimpleName(), condition);\r\n\t}\r\n\t@SuppressWarnings(\"unchecked\")\r\n\tpublic List<Root> getObjListByCondition(String className, String condition) {\r\n\t\tString queryString = \"\";\r\n\t\tif(condition!=null&&!condition.trim().isEmpty()){\r\n\t\t\tqueryString = (new StringBuffer(\" from \")).append(className)\r\n\t\t\t\t\t.append(\" as obj where 1=1 and ( \").append(condition)\r\n\t\t\t\t\t.append(\" )\").toString();\r\n\t\t}else\r\n\t\t\tqueryString  +=  \"from \"+className+\" as obj where 1=1\";\r\n\t\tQuery query = getSession().createQuery(queryString);\r\n\t\treturn query.list();\r\n\t}\r\n\r\n\tpublic List<Root> getObjListByCondition(Class<?> className, String condition) {\r\n\t\treturn getObjListByCondition(className.getSimpleName(),condition);\r\n\t}\r\n\r\n\t/**\r\n\t * HQL\r\n\t */\r\n\tpublic List<Root> getPagedObjListWithCondition(String className,\r\n\t\t\tString condition, int firstRow, int pageSize) {\r\n\t\tString queryString = \"\";\r\n\t\tif(condition!=null&&!condition.trim().isEmpty()){\r\n\t\t\tqueryString = (new StringBuffer(\" from \")).append(className)\r\n\t\t\t\t\t.append(\" as obj where 1=1 and  \").append(condition).toString();\r\n\t\t}\r\n\t\telse\r\n\t\t\tqueryString  +=  \"from \"+className+\" as obj where 1=1\";\r\n \t\tQuery query = getSession().createQuery(queryString);\r\n\t\tif(pageSize!=-1) {\r\n\t\t  query.setMaxResults(pageSize);\r\n\t\t  query.setFirstResult(firstRow);\r\n\t\t}\r\n\t\treturn query.list();\r\n\t}\r\n\r\n\tpublic List<Root> getPagedObjListWithCondition(Class<?> className,\r\n\t\t\tString condition, int firstRow, int pageSize) {\r\n\t\treturn getPagedObjListWithCondition(className.getClass().getSimpleName(), condition, firstRow, pageSize);\r\n\t}\r\n\t\r\n\tpublic long getCountByCondition(String className,String condition){\r\n\t\treturn getObjListByCondition(className, condition).size();\r\n\t}\r\n\r\n\t@Override\r\n\tpublic List<Map<String, Object>> querySql(String sql, List<Object> param) {\r\n\t\tSession session = getSession();\r\n\t\tQuery hqlQuery = session.createQuery(sql);\r\n\t\tif(param!=null){\r\n\t\t\tfor(int i=0;i<param.size();i++){\r\n\t\t\t\thqlQuery.setParameter(i, param.get(i));\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn hqlQuery.list();\r\n\t}\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/entity/Module.java",
    "content": "package com.lcore.hr.core.entity;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.Inheritance;\r\nimport javax.persistence.InheritanceType;\r\nimport javax.persistence.Table;\r\n\r\n/**\r\n * 模块:菜单\r\n * \r\n * @author LCore\r\n *\r\n */\r\n@Entity\r\n@Table(name = \"auth_module\")\r\n@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r\npublic class Module extends Root {\r\n\tprivate Integer indexNum;\r\n\tprivate String moduleName;\r\n\tprivate String name;\r\n\tprivate String parentId;\r\n\r\n\tpublic Integer getIndexNum() {\r\n\t\treturn indexNum;\r\n\t}\r\n\r\n\tpublic void setIndexNum(Integer indexNum) {\r\n\t\tthis.indexNum = indexNum;\r\n\t}\r\n\r\n\tpublic String getModuleName() {\r\n\t\treturn moduleName;\r\n\t}\r\n\r\n\tpublic void setModuleName(String moduleName) {\r\n\t\tthis.moduleName = moduleName;\r\n\t}\r\n\r\n\tpublic String getName() {\r\n\t\treturn name;\r\n\t}\r\n\r\n\tpublic void setName(String name) {\r\n\t\tthis.name = name;\r\n\t}\r\n\r\n\tpublic String getParentId() {\r\n\t\treturn parentId;\r\n\t}\r\n\r\n\tpublic void setParentId(String parentId) {\r\n\t\tthis.parentId = parentId;\r\n\t}\r\n\r\n\tpublic String getTarget() {\r\n\t\treturn target;\r\n\t}\r\n\r\n\tpublic void setTarget(String target) {\r\n\t\tthis.target = target;\r\n\t}\r\n\r\n\tprivate String target;\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/entity/Role.java",
    "content": "package com.lcore.hr.core.entity;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.GeneratedValue;\r\nimport javax.persistence.Id;\r\nimport javax.persistence.Inheritance;\r\nimport javax.persistence.InheritanceType;\r\nimport javax.persistence.Table;\r\n\r\nimport org.hibernate.annotations.GenericGenerator;\r\n\r\n@Entity\r\n@Table(name = \"t_role\")\r\n@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r\npublic class Role extends Root {\r\n\r\n\tprivate String name;\r\n\tprivate String remark;\r\n\t\r\n\tpublic String getName() {\r\n\t\treturn name;\r\n\t}\r\n\tpublic void setName(String name) {\r\n\t\tthis.name = name;\r\n\t}\r\n\tpublic String getRemark() {\r\n\t\treturn remark;\r\n\t}\r\n\tpublic void setRemark(String remark) {\r\n\t\tthis.remark = remark;\r\n\t}\r\n\r\n}"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/entity/RoleToUserRel.java",
    "content": "package com.lcore.hr.core.entity;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.Inheritance;\r\nimport javax.persistence.InheritanceType;\r\nimport javax.persistence.Table;\r\n\r\n@Entity\r\n@Table(name = \"role_user_rel\")\r\n@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r\npublic class RoleToUserRel extends Root{\r\n    private String userId;\r\n    private String roleId;\r\n\tpublic String getUserId() {\r\n\t\treturn userId;\r\n\t}\r\n\tpublic void setUserId(String userId) {\r\n\t\tthis.userId = userId;\r\n\t}\r\n\tpublic String getRoleId() {\r\n\t\treturn roleId;\r\n\t}\r\n\tpublic void setRoleId(String roleId) {\r\n\t\tthis.roleId = roleId;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/entity/Root.java",
    "content": "package com.lcore.hr.core.entity;\r\n\r\nimport java.util.Date;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.GeneratedValue;\r\nimport javax.persistence.Id;\r\nimport javax.persistence.Inheritance;\r\nimport javax.persistence.InheritanceType;\r\nimport javax.persistence.Table;\r\n\r\nimport org.hibernate.annotations.GenericGenerator;\r\nimport org.springframework.format.annotation.DateTimeFormat;\r\n\r\n@Entity\r\n@Table(name = \"T_ROOT\")\r\n@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r\npublic class Root {\r\n\tprivate String id;\r\n\t@DateTimeFormat(pattern=\"yyyy-MM-dd\")\r\n\tprivate Date createTime;\r\n\t@DateTimeFormat(pattern=\"yyyy-MM-dd\")\r\n\tprivate Date updateTime;\r\n\tprivate String creater;\r\n\tprivate String updater;\r\n\t\r\n\t@Id\r\n\t@GeneratedValue(generator = \"systemUUid\")   \r\n\t@GenericGenerator(name = \"systemUUid\", strategy = \"uuid\")\r\n\tpublic String getId() {\r\n\t\treturn id;\r\n\t}\r\n\r\n\tpublic void setId(String id) {\r\n\t\tthis.id = id;\r\n\t}\r\n\tpublic Date getCreateTime() {\r\n\t\treturn createTime;\r\n\t}\r\n\r\n\tpublic void setCreateTime(Date createTime) {\r\n\t\tthis.createTime = createTime;\r\n\t}\r\n\r\n\tpublic Date getUpdateTime() {\r\n\t\treturn updateTime;\r\n\t}\r\n\r\n\tpublic void setUpdateTime(Date updateTime) {\r\n\t\tthis.updateTime = updateTime;\r\n\t}\r\n\r\n\tpublic String getCreater() {\r\n\t\treturn creater;\r\n\t}\r\n\r\n\tpublic void setCreater(String creater) {\r\n\t\tthis.creater = creater;\r\n\t}\r\n\r\n\tpublic String getUpdater() {\r\n\t\treturn updater;\r\n\t}\r\n\r\n\tpublic void setUpdater(String updater) {\r\n\t\tthis.updater = updater;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/entity/User.java",
    "content": "package com.lcore.hr.core.entity;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.GeneratedValue;\r\nimport javax.persistence.Id;\r\nimport javax.persistence.Inheritance;\r\nimport javax.persistence.InheritanceType;\r\nimport javax.persistence.Table;\r\n\r\nimport org.hibernate.annotations.GenericGenerator;\r\n\r\n@Entity\r\n@Table(name = \"t_user\")\r\n@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r\npublic class User extends Root {\r\n\r\n\tprivate String userName;\r\n\tprivate String password;\r\n\tprivate String gender;\r\n\r\n\tpublic String getUserName() {\r\n\t\treturn userName;\r\n\t}\r\n\r\n\tpublic void setUserName(String userName) {\r\n\t\tthis.userName = userName;\r\n\t}\r\n\r\n\tpublic String getPassword() {\r\n\t\treturn password;\r\n\t}\r\n\r\n\tpublic void setPassword(String password) {\r\n\t\tthis.password = password;\r\n\t}\r\n\r\n\tpublic String getGender() {\r\n\t\treturn gender;\r\n\t}\r\n\r\n\tpublic void setGender(String gender) {\r\n\t\tthis.gender = gender;\r\n\t}\r\n\r\n}"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/utils/HibernateTemplateManger.java",
    "content": "package com.lcore.hr.core.utils;\r\n\r\nimport org.hibernate.SessionFactory;\r\nimport org.springframework.orm.hibernate3.HibernateTemplate;\r\n\r\npublic class HibernateTemplateManger{\r\n\t\r\n\tprivate HibernateTemplateManger(){\r\n\t\t\r\n\t}\r\n\t\r\n\tpublic static HibernateTemplateManger getInstance(){\r\n\t\tif(templateManger == null){\r\n\t\t\ttemplateManger = new HibernateTemplateManger();\r\n\t\t}\r\n\t\treturn templateManger;\r\n\t}\r\n\t\r\n\tprotected HibernateTemplate getHibernateTemplate(String templateId){\r\n\t\tcacheHibernateTemplate(templateId);\r\n\t\treturn template;\r\n\t}\r\n\r\n\tprivate synchronized void cacheHibernateTemplate(String templateName) {\r\n\t\tHibernateTemplate ht = (HibernateTemplate) SpringFactory.getObject(templateName);\r\n\t\ttemplate = ht;\r\n\t}\r\n\tprivate static HibernateTemplateManger templateManger = null;\r\n\tprivate static HibernateTemplate template = null;\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/utils/JDBCTemplateManager.java",
    "content": "package com.lcore.hr.core.utils;\r\n\r\nimport javax.sql.DataSource;\r\n\r\nimport org.springframework.jdbc.core.JdbcTemplate;\r\n\r\npublic class JDBCTemplateManager {\r\n   private JDBCTemplateManager(){\r\n\t   \r\n   }\r\n   \r\n   public static JDBCTemplateManager getInstance(){\r\n\t   if(jdbcTemplateManager == null){\r\n\t\t   jdbcTemplateManager = new JDBCTemplateManager();\r\n\t   }\r\n\t   return jdbcTemplateManager;\r\n   }\r\n   \r\n   private synchronized JdbcTemplate createTemplate(String templateId) {\r\n\t\tJdbcTemplate jdbcTemplate = new JdbcTemplate();\r\n\t\tString dataSourceName = templateId;\r\n\t\tDataSource dataSource =  (DataSource) SpringFactory.getObject(dataSourceName);\r\n\t\tjdbcTemplate.setDataSource(dataSource);\r\n\t\treturn jdbcTemplate;\r\n\t}\r\n   \r\n   protected JdbcTemplate getTemplate(String templateId){\r\n\t  return createTemplate(templateId);\r\n   }\r\n   \r\n   private static JDBCTemplateManager jdbcTemplateManager= null;\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/utils/SpringFactory.java",
    "content": "package com.lcore.hr.core.utils;\r\n\r\nimport org.springframework.beans.BeansException;\r\nimport org.springframework.context.ApplicationContext;\r\nimport org.springframework.context.ApplicationContextAware;\r\n\r\npublic class SpringFactory implements ApplicationContextAware{\r\n\tpublic SpringFactory() {\r\n\t}\r\n\r\n\tpublic void setApplicationContext(ApplicationContext applicationContext)\r\n\t\t\tthrows BeansException {\r\n\t\tcontext = applicationContext;\r\n\t}\r\n\r\n\tpublic static Object getObject(String id) {\r\n\t\tObject object = null;\r\n\t\tobject = context.getBean(id);\r\n\t\treturn object;\r\n\t}\r\n\r\n\tpublic static ApplicationContext getApplicationContext() {\r\n\t\treturn context;\r\n\t}\r\n\r\n\tprivate static ApplicationContext context;\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/core/utils/TemplateFactory.java",
    "content": "package com.lcore.hr.core.utils;\r\n\r\nimport org.springframework.jdbc.core.JdbcTemplate;\r\nimport org.springframework.orm.hibernate3.HibernateTemplate;\r\n\r\npublic class TemplateFactory {\r\n\t\r\n   private TemplateFactory(){\r\n\t   \r\n   }\r\n   \r\n   public static HibernateTemplate getHibernateTemplateById(String templateId){\r\n\t   return  HibernateTemplateManger.getInstance().getHibernateTemplate(templateId);\r\n   }\r\n   \r\n   public static JdbcTemplate getJDBCTemplateById(String templateId) {\r\n\t\treturn JDBCTemplateManager.getInstance().getTemplate(templateId);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/entity/Organization.java",
    "content": "package com.lcore.hr.entity;\r\n\r\nimport java.util.Date;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.Inheritance;\r\nimport javax.persistence.InheritanceType;\r\nimport javax.persistence.Table;\r\n\r\nimport org.springframework.format.annotation.DateTimeFormat;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\n\r\n@Entity\r\n@Table(name = \"Organization_info\")\r\n@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r\npublic class Organization extends Root{\r\n\tprivate String ouName;\r\n\t@DateTimeFormat(pattern=\"yyyy-MM-dd\")\r\n\tprivate Date startTime;\r\n\t@DateTimeFormat(pattern=\"yyyy-MM-dd\")\r\n\tprivate Date endTime;\r\n\tprivate String addressId;\r\n\tprivate String ouTypeId;\r\n\r\n\tpublic String getOuName() {\r\n\t\treturn ouName;\r\n\t}\r\n\r\n\tpublic void setOuName(String ouName) {\r\n\t\tthis.ouName = ouName;\r\n\t}\r\n\r\n\tpublic Date getStartTime() {\r\n\t\treturn startTime;\r\n\t}\r\n\r\n\tpublic void setStartTime(Date startTime) {\r\n\t\tthis.startTime = startTime;\r\n\t}\r\n\r\n\tpublic Date getEndTime() {\r\n\t\treturn endTime;\r\n\t}\r\n\r\n\tpublic void setEndTime(Date endTime) {\r\n\t\tthis.endTime = endTime;\r\n\t}\r\n\r\n\tpublic String getAddressId() {\r\n\t\treturn addressId;\r\n\t}\r\n\r\n\tpublic void setAddressId(String addressId) {\r\n\t\tthis.addressId = addressId;\r\n\t}\r\n\r\n\tpublic String getOuTypeId() {\r\n\t\treturn ouTypeId;\r\n\t}\r\n\r\n\tpublic void setOuTypeId(String ouTypeId) {\r\n\t\tthis.ouTypeId = ouTypeId;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/entity/OrganizationAddr.java",
    "content": "package com.lcore.hr.entity;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.Inheritance;\r\nimport javax.persistence.InheritanceType;\r\nimport javax.persistence.Table;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\n\r\n@Entity\r\n@Table(name = \"Organization_addr\")\r\n@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r\npublic class OrganizationAddr extends Root{\r\n\r\n\tprivate String place;\r\n\tprivate String address;\r\n\tprivate Boolean isInside;\r\n\tprivate String address_in;\r\n\tpublic String getPlace() {\r\n\t\treturn place;\r\n\t}\r\n\tpublic void setPlace(String place) {\r\n\t\tthis.place = place;\r\n\t}\r\n\tpublic String getAddress() {\r\n\t\treturn address;\r\n\t}\r\n\tpublic void setAddress(String address) {\r\n\t\tthis.address = address;\r\n\t}\r\n\tpublic Boolean getIsInside() {\r\n\t\treturn isInside;\r\n\t}\r\n\tpublic void setIsInside(Boolean isInside) {\r\n\t\tthis.isInside = isInside;\r\n\t}\r\n\tpublic String getAddress_in() {\r\n\t\treturn address_in;\r\n\t}\r\n\tpublic void setAddress_in(String address_in) {\r\n\t\tthis.address_in = address_in;\r\n\t}\r\n\t\r\n\t\r\n\t\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/entity/OrganizationCategroy.java",
    "content": "package com.lcore.hr.entity;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.Inheritance;\r\nimport javax.persistence.InheritanceType;\r\nimport javax.persistence.Table;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\n\r\n@Entity\r\n@Table(name = \"Organization_categroy\")\r\n@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r\npublic class OrganizationCategroy extends Root{\r\n\tprivate String name;\r\n\tprivate Boolean isEnable;\r\n\r\n\tpublic String getName() {\r\n\t\treturn name;\r\n\t}\r\n\r\n\tpublic void setName(String name) {\r\n\t\tthis.name = name;\r\n\t}\r\n\r\n\tpublic Boolean getIsEnable() {\r\n\t\treturn isEnable;\r\n\t}\r\n\r\n\tpublic void setIsEnable(Boolean isEnable) {\r\n\t\tthis.isEnable = isEnable;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/entity/OrganizationType.java",
    "content": "package com.lcore.hr.entity;\r\n\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.Inheritance;\r\nimport javax.persistence.InheritanceType;\r\nimport javax.persistence.Table;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\n\r\n@Entity\r\n@Table(name = \"Organization_type\")\r\n@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)\r\npublic class OrganizationType extends Root{\r\n\tprivate String name;\r\n\tprivate Boolean isEnable;\r\n\r\n\tpublic String getName() {\r\n\t\treturn name;\r\n\t}\r\n\r\n\tpublic void setName(String name) {\r\n\t\tthis.name = name;\r\n\t}\r\n\r\n\tpublic Boolean getIsEnable() {\r\n\t\treturn isEnable;\r\n\t}\r\n\r\n\tpublic void setIsEnable(Boolean isEnable) {\r\n\t\tthis.isEnable = isEnable;\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/interceptor/SecurityInterceptor.java",
    "content": "package com.lcore.hr.interceptor;\r\n\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\nimport javax.servlet.http.HttpSession;\r\n\r\nimport org.springframework.web.servlet.HandlerInterceptor;\r\nimport org.springframework.web.servlet.ModelAndView;\r\n\r\nimport com.lcore.hr.utils.Env;\r\nimport com.lcore.hr.utils.GlobalConfigHolder;\r\n\r\n/**\r\n * \r\n *  安全拦截器:当用户为空的时候\r\n *     也就是session为null的时候是不能\r\n *  直接访问功能模块的(页面资源的)，必须返回进行登录\r\n */\r\npublic class SecurityInterceptor implements HandlerInterceptor{\r\n\r\n\tprivate static final String BASE_PATH=\"/hr\";\r\n\tpublic void afterCompletion(HttpServletRequest req,\r\n\t\t\tHttpServletResponse res, Object arg2, Exception arg3)\r\n\t\t\tthrows Exception {\r\n        \r\n\t\t\r\n\t}\r\n\r\n\tpublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,\r\n\t\t\tObject arg2, ModelAndView arg3) throws Exception {\r\n\t\t\r\n\t}\r\n\r\n\tpublic boolean preHandle(HttpServletRequest req, HttpServletResponse res,\r\n\t\t\tObject arg2) throws Exception {\r\n\t\t HttpSession httpSession = req.getSession(true);\r\n\t\t //1、请求到登录页面 放行  \r\n\t\t if(req.getServletPath().equals(\"\")||req.getServletPath().equals(\"/\")||req.getServletPath().endsWith(\"login\")) {  \r\n\t\t        return true;  \r\n\t\t }  \r\n\t\t //2、TODO:游客,登出\r\n\t\t //3、用户已经登录,放行\r\n         Object object = httpSession.getAttribute(\"user\");\r\n         if(object != null&&GlobalConfigHolder.getEnv().user!=null)\r\n         {\r\n        \t return true;\r\n         }\r\n         \r\n         //4、非法登录\r\n         res.sendRedirect(req.getContextPath() + \"/\");  \r\n\t\t return false;\r\n         \r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/auth/controller/ModuleController.java",
    "content": "package com.lcore.hr.menu.auth.controller;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.HashMap;\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimport javax.annotation.Resource;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport org.springframework.stereotype.Controller;\r\nimport org.springframework.web.bind.annotation.RequestMapping;\r\nimport org.springframework.web.bind.annotation.RequestParam;\r\nimport org.springframework.web.bind.annotation.ResponseBody;\r\nimport org.springframework.web.servlet.ModelAndView;\r\n\r\nimport com.lcore.hr.core.entity.Module;\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.menu.auth.service.ModuleService;\r\nimport com.lcore.hr.utils.GeneralBeanOrMapUtils;\r\nimport com.lcore.hr.view.ModelView;\r\n\r\n@Controller\r\n@RequestMapping(\"/auth/module\")\r\npublic class ModuleController extends ModelView {\r\n\r\n\t@Resource\r\n\tModuleService moduleService;\r\n\r\n\t@RequestMapping(\"/addModule\")\r\n\t@ResponseBody\r\n\tpublic String addModule(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response, Module module) throws Exception {\r\n\t\tmoduleService.addModule(module);\r\n\t\treturn \"success\";\r\n\t}\r\n\r\n\t@RequestMapping(\"/deleteModule\")\r\n\t@ResponseBody\r\n\tpublic String deleteModule(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response,@RequestParam String[] ids) throws Exception {\r\n\t\tList<String> list = new ArrayList<String>();\r\n\t\tfor(String id:ids){\r\n\t\t\tlist.add(id);\r\n\t\t}\r\n\t\tmoduleService.deleteModule(list);\r\n        return \"sucess\";\r\n\t}\r\n\t\r\n\t\r\n\t@RequestMapping(\"/getModuleListDropDown\")\r\n\t@ResponseBody\r\n\tpublic List<Map<String,Object>> getModuleListDropDown(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) throws Exception {\r\n\t\tList<Map<String,Object>> result = moduleService.getModuleList(0, -1, null, null);\r\n\t\treturn result;\r\n\t}\r\n\t@RequestMapping(\"/getModuleList\")\r\n\t@ResponseBody\r\n\tpublic Map<String, Object> getModuleList(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) throws Exception {\r\n\t\tMap<String, Object> map = new HashMap<String, Object>();\r\n\t\tList<Map<String,Object>> result = moduleService.getModuleList(0, -1, null, null);\r\n\t\tmap.put(\"rows\", result);\r\n\t\tmap.put(\"total\", result.size());\r\n\t\treturn map;\r\n\t}\r\n\r\n\t@RequestMapping(\"/updateModule\")\r\n\t@ResponseBody\r\n\tpublic String updateModule(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response, Module module) throws Exception {\r\n\t\tmoduleService.updateModule(module);\r\n\t\treturn \"success\";\r\n\t}\r\n\r\n\t@RequestMapping(\"/listView\")\r\n\tpublic ModelAndView moduleList(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) {\r\n\t\treturn createLayoutView(\"auth/module/moduleList\", request, response);\r\n\t}\r\n\r\n\t@RequestMapping(\"/addModuleView\")\r\n\tpublic ModelAndView addModuleView(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) {\r\n\t\treturn createSingleView(\"auth/module/addModule\", request, response);\r\n\t}\r\n\r\n\t@RequestMapping(\"/updateModuleView\")\r\n\tpublic ModelAndView updateModuleView(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) {\r\n\t\treturn createSingleView(\"auth/module/updateModule\", request, response);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/auth/controller/RoleController.java",
    "content": "package com.lcore.hr.menu.auth.controller;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.HashMap;\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimport javax.annotation.Resource;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport org.springframework.stereotype.Controller;\r\nimport org.springframework.web.bind.annotation.RequestMapping;\r\nimport org.springframework.web.bind.annotation.RequestParam;\r\nimport org.springframework.web.bind.annotation.ResponseBody;\r\nimport org.springframework.web.servlet.ModelAndView;\r\n\r\nimport com.lcore.hr.core.entity.Role;\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.menu.auth.service.RoleService;\r\nimport com.lcore.hr.menu.auth.service.UserService;\r\nimport com.lcore.hr.utils.GeneralBeanOrMapUtils;\r\nimport com.lcore.hr.view.ModelView;\r\n\r\n@Controller\r\n@RequestMapping(\"/auth/role\")\r\npublic class RoleController extends ModelView {\r\n\r\n\t@Resource\r\n\tprivate RoleService roleService;\r\n\t\r\n\t@Resource\r\n\tprivate UserService userService;\r\n\r\n\t/**\r\n\t * 得到角色列表\r\n\t * \r\n\t * @param request\r\n\t * @param response\r\n\t * @param limit\r\n\t * @param offset\r\n\t * @param search\r\n\t * @param order\r\n\t * @param sort\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/getRoleList\")\r\n\t@ResponseBody\r\n\tpublic Map<String, Object> getRoleList(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response, @RequestParam int limit,\r\n\t\t\t@RequestParam int offset, @RequestParam String search,\r\n\t\t\t@RequestParam String order, @RequestParam String sort)\r\n\t\t\tthrows Exception {\r\n\t\tMap<String, Object> map = new HashMap<String,Object>();\r\n\t\tList<Root> list = roleService.getRoleList(offset, limit, sort, order,\r\n\t\t\t\tsearch);\r\n\t\tmap.put(\"total\", roleService.getRoleList(0, -1, sort, order, search)\r\n\t\t\t\t.size());\r\n\t\tmap.put(\"rows\", list);\r\n\t\treturn map;\r\n\t}\r\n\r\n\t\r\n\t/**\r\n\t * 得到角色列表(角色分配)\r\n\t * \r\n\t * @param request\r\n\t * @param response\r\n\t * @param search\r\n\t * @param order\r\n\t * @param sort\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/roleList\")\r\n\t@ResponseBody\r\n\tpublic List<Map<String, Object>> roleList(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response,  @RequestParam String search,\r\n\t\t\t@RequestParam String order, @RequestParam String sort)\r\n\t\t\tthrows Exception {\r\n\t\tMap<String, Object> map = new HashMap<String,Object>();\r\n\t\tList<Root> list = roleService.getRoleList(0, -1, sort, order,\r\n\t\t\t\tsearch);\r\n\t\tList<Map<String, Object>> result = new ArrayList<Map<String,Object>>();\r\n\t\tfor(Root root:list){\r\n\t\t\tresult.add(GeneralBeanOrMapUtils.convertBean2Map(root));\r\n\t\t}\r\n\t\treturn result;\r\n\t}\r\n\t\r\n\t/**\r\n\t * \r\n\t * @param request\r\n\t * @param response\r\n\t * @param roleId\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/getUserListByRoleId\")\r\n\t@ResponseBody\r\n\tpublic Map<String,Object> getUserListByRoleId(HttpServletRequest request,HttpServletResponse response,\r\n\t\t\t@RequestParam int limit,@RequestParam int offset,@RequestParam String search,\r\n\t\t\t@RequestParam String order,@RequestParam String sort,\r\n\t\t    String roleId) throws Exception {\r\n\t\tMap<String,Object> map = new HashMap<String,Object>();\r\n\t\tList<Root> list = userService.getUserList(offset, limit, sort, order, null);\r\n\t\tList<Map<String,Object>> result = new ArrayList<Map<String,Object>>();\r\n\t\tList<String> userIds = roleService.getUserIdsByRoleId(roleId);\r\n\t\tfor(Root root:list){\r\n\t\t\tMap<String,Object> mapUser = GeneralBeanOrMapUtils.convertBean2Map(root);\r\n\t\t\tif(userIds!=null&&userIds.contains(mapUser.get(\"id\").toString())){\r\n\t\t\t\tmapUser.put(\"selected\", true);\r\n\t\t\t}else\r\n\t\t\t\tmapUser.put(\"selected\", false);\r\n\t\t\tresult.add(mapUser);\r\n\t\t}\r\n\t\tmap.put(\"rows\", result);\r\n\t\tmap.put(\"total\", userService.getUserList(0, -1, sort, order, null).size());\r\n\t\treturn map;\r\n\t}\r\n\t/**\r\n\t * 添加角色\r\n\t * \r\n\t * @param request\r\n\t * @param response\r\n\t * @param role\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/addRole\")\r\n\t@ResponseBody\r\n\tpublic String addRole(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response, Role role) throws Exception {\r\n\t\troleService.addRole(role);\r\n\t\treturn \"success\";\r\n\t}\r\n\r\n\t/**\r\n\t * 删除角色\r\n\t * \r\n\t * @param request\r\n\t * @param response\r\n\t * @param ids\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/deleteRole\")\r\n\t@ResponseBody\r\n\tpublic String deleteRole(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response, @RequestParam String ids)\r\n\t\t\tthrows Exception {\r\n\t\tString[] idA = ids.split(\",\");\r\n\t\tList<String> idList = new ArrayList<String>();\r\n\t\tfor (int i = 0; i < idA.length; i++) {\r\n\t\t\tidList.add(idA[i]);\r\n\t\t}\r\n\t\troleService.deleteRole(idList);\r\n\t\treturn \"success\";\r\n\t}\r\n\r\n\t/**\r\n\t * 更新角色\r\n\t * @param request\r\n\t * @param response\r\n\t * @param role\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/updateRole\")\r\n\t@ResponseBody\r\n\tpublic String updateRole(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response,Role role) throws Exception {\r\n\t\troleService.updateRole(role);\r\n\t\treturn \"success\";\r\n\t}\r\n\t\r\n\t\r\n\t@RequestMapping(\"/updateRoleToUserRel\")\r\n\t@ResponseBody\r\n\tpublic String updateRoleToUserRel(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response,@RequestParam String roleId,\r\n\t\t\t@RequestParam String[] userIds) throws Exception {\r\n\t\troleService.updateRoleToUserRel(roleId, userIds);\r\n\t\treturn \"success\";\r\n\t}\r\n\t\r\n\t/**\r\n\t * 跳转到角色列表页面\r\n\t * \r\n\t * @param request\r\n\t * @param response\r\n\t * @return\r\n\t */\r\n\t@RequestMapping(\"/listView\")\r\n\tpublic ModelAndView roleList(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) {\r\n\t\treturn createLayoutView(\"auth/role/roleList\", request, response);\r\n\t}\r\n\r\n\t/**\r\n\t * 跳转到添加角色界面\r\n\t * @param request\r\n\t * @param response\r\n\t * @return\r\n\t */\r\n\t@RequestMapping(\"/addRoleView\")\r\n\tpublic ModelAndView addRoleView(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) {\r\n\t\treturn createSingleView(\"auth/role/addRole\", request, response);\r\n\t}\r\n\t\r\n\t/**\r\n\t * 跳转到更新角色界面\r\n\t * @param request\r\n\t * @param response\r\n\t * @return\r\n\t */\r\n\t\r\n\t@RequestMapping(\"/updateRoleView\")\r\n\tpublic ModelAndView updateRoleView(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) {\r\n\t\treturn createSingleView(\"auth/role/updateRole\",request,response);\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * 跳转到角色分配界面\r\n\t * @param request\r\n\t * @param response\r\n\t * @return\r\n\t */\r\n\t@RequestMapping(\"/roleAllocationView\")\r\n\tpublic ModelAndView roleAllocation(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) {\r\n\t\treturn createLayoutView(\"auth/role/roleAllocation\", request, response);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/auth/controller/UserController.java",
    "content": "package com.lcore.hr.menu.auth.controller;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimport javax.annotation.Resource;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport org.apache.commons.collections.map.HashedMap;\r\nimport org.springframework.stereotype.Controller;\r\nimport org.springframework.web.bind.annotation.RequestMapping;\r\nimport org.springframework.web.bind.annotation.RequestParam;\r\nimport org.springframework.web.bind.annotation.ResponseBody;\r\nimport org.springframework.web.servlet.ModelAndView;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.core.entity.User;\r\nimport com.lcore.hr.menu.auth.service.UserService;\r\nimport com.lcore.hr.view.ModelView;\r\n\r\n@Controller\r\n@RequestMapping(\"/auth/user\")\r\npublic class UserController extends ModelView{\r\n\t\r\n\t@Resource\r\n\tprivate UserService userService;\r\n\t\r\n\t/**\r\n\t * 得到人员列表\r\n\t * @param request\r\n\t * @param response\r\n\t * @param limit\r\n\t * @param offset\r\n\t * @param search\r\n\t * @param order\r\n\t * @param sort\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/getUserList\")\r\n\t@ResponseBody\r\n\tpublic Map<String,Object>  getUserList(HttpServletRequest request,HttpServletResponse response,\r\n\t\t\t@RequestParam int limit,@RequestParam int offset,@RequestParam String search,\r\n\t\t\t@RequestParam String order,@RequestParam String sort) throws Exception{\r\n\t\tMap<String,Object> map = new HashedMap();\r\n\t\tList<Root> list = userService.getUserList(offset,limit,sort,order,search);\r\n\t\tmap.put(\"total\", userService.getUserList(0, -1, sort, order, search).size());\r\n\t\tmap.put(\"rows\",list);\r\n\t\treturn map;\r\n\t}\r\n\t\r\n\t@RequestMapping(\"/addUser\")\r\n\t@ResponseBody\r\n\tpublic String addUser(HttpServletRequest request,HttpServletResponse response,\r\n\t\t\tUser user) throws Exception{\r\n\t    userService.addUser(user);\r\n\t    return \"success\";\r\n\t}\r\n\t\r\n\t@RequestMapping(\"/deleteUser\")\r\n\t@ResponseBody\r\n\tpublic String deleteOu(HttpServletRequest request,HttpServletResponse response,\r\n\t\t\t@RequestParam String ids) throws Exception{\r\n\t\tString[] idA = ids.split(\",\");\r\n\t\tList<String> idList = new ArrayList<String>();\r\n\t\tfor(int i=0;i<idA.length;i++){\r\n\t\t\tidList.add(idA[i]);\r\n\t\t}\r\n        userService.deleteUser(idList);\r\n        return \"success\";\r\n\t}\r\n\t@RequestMapping(\"/updateUser\")\r\n\t@ResponseBody\r\n\tpublic String deleteOu(HttpServletRequest request,HttpServletResponse response,\r\n\t\t\t User user) throws Exception{\r\n        userService.updateUser(user);\r\n        return \"success\";\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * 跳转到人员管理界面\r\n\t * @param request\r\n\t * @param response\r\n\t * @return\r\n\t */\r\n\t@RequestMapping(\"/listView\")\r\n    public ModelAndView userList(HttpServletRequest request,HttpServletResponse response){\r\n    \treturn createLayoutView(\"auth/user/userList\", request, response);\r\n    }\r\n\t\r\n\t/**\r\n\t * 跳转到添加用户页面\r\n\t * @param request\r\n\t * @param response\r\n\t * @param user\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/addUserView\")\r\n\tpublic ModelAndView addUserView(HttpServletRequest request,HttpServletResponse response) throws Exception{\r\n       return createSingleView(\"auth/user/addUser\", request, response);\r\n\t}\r\n\t\r\n\t/**\r\n\t * 跳转到更新用户页面\r\n\t * @param request\r\n\t * @param response\r\n\t * @param user\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/updateUserView\")\r\n\tpublic ModelAndView updateUserView(HttpServletRequest request,HttpServletResponse response) throws Exception{\r\n       return createSingleView(\"auth/user/updateUser\", request, response);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/auth/service/ModuleService.java",
    "content": "package com.lcore.hr.menu.auth.service;\r\n\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimport com.lcore.hr.core.entity.Module;\r\n\r\npublic interface ModuleService {\r\n\tpublic abstract void addModule(Module module) throws Exception;\r\n\tpublic abstract List<Map<String,Object>> getModuleList(int offset,int limit,String sort,String order) throws Exception;\r\n\tpublic abstract void deleteModule(List<String> ids) throws Exception;\r\n\tpublic abstract void updateModule(Module module) throws Exception;\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/auth/service/RoleService.java",
    "content": "package com.lcore.hr.menu.auth.service;\r\n\r\nimport java.util.List;\r\n\r\nimport com.lcore.hr.core.entity.Role;\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.core.entity.User;\r\n\r\npublic interface RoleService {\r\n\t/**\r\n\t * 查询角色列表\r\n\t * @param offset      firstRow\r\n\t * @param limit       pageSize:-1表示不分頁\r\n\t * @param sort\r\n\t * @param order\r\n\t * @param key         模糊搜索关键字\r\n\t * @return\r\n\t */\r\n    public abstract List<Root> getRoleList(int offset,int limit,String sort,String order,String key);\r\n    /**\r\n     * 添加角色\r\n     * @param org\r\n     * @throws Exception\r\n     */\r\n    public abstract void addRole(Role role) throws Exception;\r\n    /**\r\n     * 批量删除角色\r\n     * @param ids\r\n     * @throws Exception\r\n     */\r\n    public abstract void deleteRole(List<String> ids) throws Exception;\r\n    \r\n    /**\r\n     * 更新角色\r\n     * @param org\r\n     * @throws Exception\r\n     */\r\n    public abstract void updateRole(Role role) throws Exception;\r\n    \r\n    /**\r\n     * 根据角色id得到用户id列表\r\n     * @param roleId\r\n     * @return\r\n     * @throws Exception\r\n     */\r\n    public List<String> getUserIdsByRoleId(String roleId) throws Exception;\r\n    \r\n    /**\r\n     * 根据roleId删除关系\r\n     * @param roleId\r\n     * @throws Exception\r\n     */\r\n    public void deleteUserIdsByRoleId(String roleId) throws Exception;\r\n    \r\n    /**\r\n     * 批量维护角色和用户的关系\r\n     * @param roleId\r\n     * @param userIds\r\n     * @throws Exception\r\n     */\r\n    public void updateRoleToUserRel(String roleId,String[] userIds) throws Exception;\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/auth/service/UserService.java",
    "content": "package com.lcore.hr.menu.auth.service;\r\n\r\nimport java.util.List;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.core.entity.User;\r\nimport com.lcore.hr.menu.base.service.BaseService;\r\n\r\npublic interface UserService extends BaseService{\r\n\t/**\r\n\t * 查询用户列表\r\n\t * @param offset      firstRow\r\n\t * @param limit       pageSize:-1表示不分頁\r\n\t * @param sort\r\n\t * @param order\r\n\t * @param key         模糊搜索关键字\r\n\t * @return\r\n\t */\r\n    public abstract List<Root> getUserList(int offset,int limit,String sort,String order,String key);\r\n    /**\r\n     * 添加组织\r\n     * @param org\r\n     * @throws Exception\r\n     */\r\n    public abstract void addUser(User user) throws Exception;\r\n    /**\r\n     * 批量删除用户\r\n     * @param ids\r\n     * @throws Exception\r\n     */\r\n    public abstract void deleteUser(List<String> ids) throws Exception;\r\n    \r\n    /**\r\n     * 更新用户\r\n     * @param org\r\n     * @throws Exception\r\n     */\r\n    public abstract void updateUser(User user) throws Exception;\r\n    \r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/auth/service/impl/ModuleServiceImpl.java",
    "content": "package com.lcore.hr.menu.auth.service.impl;\r\n\r\nimport java.beans.IntrospectionException;\r\nimport java.lang.reflect.InvocationTargetException;\r\nimport java.util.ArrayList;\r\nimport java.util.HashMap;\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimport org.springframework.stereotype.Service;\r\nimport org.springframework.transaction.annotation.Transactional;\r\n\r\nimport com.lcore.hr.core.entity.Module;\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.menu.auth.service.ModuleService;\r\nimport com.lcore.hr.menu.base.service.impl.BaseServiceImpl;\r\nimport com.lcore.hr.utils.GeneralBeanOrMapUtils;\r\n\r\n@Service(\"moduleService\")\r\n@Transactional\r\npublic class ModuleServiceImpl extends BaseServiceImpl implements ModuleService{\r\n\r\n\t@Override\r\n\tpublic void addModule(Module module) throws Exception {\r\n        this.save(module);\t\t\r\n\t}\r\n\r\n\t@Override\r\n\tpublic List<Map<String,Object>> getModuleList(int offset, int limit, String sort,\r\n\t\t\tString order) throws Exception {\r\n\t\tList<Root> roots =  this.getObjListByCondition(Module.class.getName(), null);\r\n\t\tList<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>();\r\n\t\tString pId =\"\";\r\n\t\tMap<String,Object> temp = new HashMap<String, Object>();\r\n\t\tfor(Root root:roots) {\r\n\t\t\ttemp = GeneralBeanOrMapUtils.convertBean2Map(root);\r\n\t\t\tpId = temp.get(\"parentId\")==null?\"\":temp.get(\"parentId\").toString();\r\n\t\t\tif(pId!=null&&!\"\".equals(pId)){\r\n\t\t\t\tModule r = (Module)this.getObjById(Module.class.getName(), pId);\r\n\t\t\t\ttemp.put(\"parentName\", r.getModuleName());\r\n\t\t\t}\r\n\t\t\tresultList.add(temp);\r\n\t\t}\r\n\t\treturn resultList;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void deleteModule(List<String> ids) throws Exception {\r\n\t\tfor (String id : ids) {\r\n\t\t\tif (id != null && !\"\".equals(id.trim()))\r\n\t\t\t\tthis.delete(Module.class.getName(), id);\r\n\t\t}\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void updateModule(Module module) throws Exception {\r\n\t\tthis.update(module);\r\n\t}\r\n \r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/auth/service/impl/RoleServiceImpl.java",
    "content": "package com.lcore.hr.menu.auth.service.impl;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\nimport org.springframework.stereotype.Service;\r\nimport org.springframework.transaction.annotation.Transactional;\r\n\r\nimport com.lcore.hr.core.entity.Role;\r\nimport com.lcore.hr.core.entity.RoleToUserRel;\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.core.entity.User;\r\nimport com.lcore.hr.menu.auth.service.RoleService;\r\nimport com.lcore.hr.menu.auth.service.UserService;\r\nimport com.lcore.hr.menu.base.service.impl.BaseServiceImpl;\r\n\r\n@Service(\"roleService\")\r\n@Transactional\r\npublic class RoleServiceImpl extends BaseServiceImpl implements RoleService{\r\n\r\n\t@Override\r\n\tpublic List<Root> getRoleList(int offset, int limit, String sort,\r\n\t\t\tString order, String key) {\r\n\t\tString condition = \" 1=1 \";\r\n\t\tif (key != null && !\"\".equals(key)) {\r\n\t\t\tcondition += \" and (obj.name like '%\" + key + \"%' or obj.remark like '%\"+key+\"%')\";\r\n\t\t}\r\n\t\tif (null != sort && !\"\".equals(sort))\r\n\t\t\tcondition += \" order by \" + \" obj.\" + sort + \"\" + \"  \" + order;\r\n\t\treturn this.getPagedObjListWithCondition(Role.class.getSimpleName(),\r\n\t\t\t\tcondition, offset, limit);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void addRole(Role role) throws Exception {\r\n\t\tthis.save(role);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void deleteRole(List<String> ids) throws Exception {\r\n\t\tfor (String id : ids) {\r\n\t\t\tif (id != null && !\"\".equals(id.trim()))\r\n\t\t\t\tthis.delete(Role.class.getName(), id);\r\n\t\t}\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void updateRole(Role role) throws Exception {\r\n\t\tthis.update(role);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic List<String> getUserIdsByRoleId(String roleId) throws Exception {\r\n\t    String condition = \" 1=1 \";\r\n\t    if(roleId == null ||roleId.trim().equals(\"\")){\r\n\t    \treturn null;\r\n\t    }\r\n\t    condition += \" and obj.roleId = '\"+roleId+\"'\";\r\n\t    List<Root> list = this.getObjListByCondition(RoleToUserRel.class.getSimpleName(), condition);\r\n\t    List<String> resultList = new ArrayList<String>();\r\n\t    for(Root root:list){\r\n\t    \tRoleToUserRel rel = (RoleToUserRel) root;\r\n\t    \tresultList.add(rel.getUserId());\r\n\t    }\r\n\t\treturn resultList;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void updateRoleToUserRel(String roleId, String[] userIds)\r\n\t\t\tthrows Exception {\r\n\t\t//1、删除以前的关系\r\n\t\tdeleteUserIdsByRoleId(roleId);\r\n\t\t//2、批量添加关系\r\n\t\tfor(String str:userIds){\r\n\t\t\tRoleToUserRel tmp = new RoleToUserRel();\r\n\t\t\ttmp.setRoleId(roleId);\r\n\t\t\ttmp.setUserId(str);\r\n\t\t\tthis.save(tmp);\r\n\t\t}\r\n\t\t\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void deleteUserIdsByRoleId(String roleId) throws Exception {\r\n\t\tList<Root> roots = this.getObjListByCondition(RoleToUserRel.class.getSimpleName(), \" obj.roleId ='\"+roleId+\"'\");\r\n\t\tfor(Root root:roots){\r\n\t\t\tthis.delete(RoleToUserRel.class.getName(), root.getId());\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/auth/service/impl/UserServiceImpl.java",
    "content": "package com.lcore.hr.menu.auth.service.impl;\r\n\r\nimport java.util.List;\r\n\r\nimport org.springframework.stereotype.Service;\r\nimport org.springframework.transaction.annotation.Transactional;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.core.entity.User;\r\nimport com.lcore.hr.menu.auth.service.UserService;\r\nimport com.lcore.hr.menu.base.service.impl.BaseServiceImpl;\r\n\r\n@Service(\"userService\")\r\n@Transactional\r\npublic class UserServiceImpl extends BaseServiceImpl implements UserService {\r\n\r\n\t@Override\r\n\tpublic List<Root> getUserList(int offset, int limit, String sort,\r\n\t\t\tString order, String key) {\r\n\r\n\t\tString condition = \" 1=1 \";\r\n\t\tif (key != null && !\"\".equals(key)) {\r\n\t\t\tcondition += \" and obj.userName like '%\" + key + \"%'\";\r\n\t\t}\r\n\t\tif (null != sort && !\"\".equals(sort))\r\n\t\t\tcondition += \" order by \" + \" obj.\" + sort + \"\" + \"  \" + order;\r\n\t\treturn this.getPagedObjListWithCondition(User.class.getName(),\r\n\t\t\t\tcondition, offset, limit);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void addUser(User user) throws Exception {\r\n\t\tthis.save(user);\r\n\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void deleteUser(List<String> ids) throws Exception {\r\n\t\tfor (String id : ids) {\r\n\t\t\tif (id != null && !\"\".equals(id.trim()))\r\n\t\t\t\tthis.delete(User.class.getName(), id);\r\n\t\t}\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void updateUser(User user) throws Exception {\r\n\t\tthis.update(user);\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/base/controller/BaseController.java",
    "content": "package com.lcore.hr.menu.base.controller;\r\n\r\nimport java.util.Locale;\r\n\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport org.springframework.context.i18n.LocaleContextHolder;\r\nimport org.springframework.stereotype.Controller;\r\nimport org.springframework.web.bind.annotation.RequestMapping;\r\nimport org.springframework.web.bind.annotation.ResponseBody;\r\nimport org.springframework.web.servlet.ModelAndView;\r\nimport org.springframework.web.servlet.i18n.CookieLocaleResolver;\r\nimport org.springframework.web.servlet.i18n.SessionLocaleResolver;\r\n\r\nimport com.lcore.hr.view.ModelView;\r\n\r\n@Controller\r\npublic class BaseController extends ModelView{\r\n\t\r\n\t@RequestMapping(\"/\")\r\n\tpublic ModelAndView login(HttpServletRequest request,HttpServletResponse response){\r\n\t\tModelAndView view = createSingleView(\"login/login\", request, response);\r\n\t\treturn view;\r\n\t}\r\n\t\r\n\t@RequestMapping(\"/index\")\r\n\tpublic ModelAndView index(HttpServletRequest request,HttpServletResponse response){\r\n\t\tModelAndView view = createLayoutView(\"admin/index\", request, response);\r\n\t\treturn view;\r\n\t}\r\n\t\r\n\t@RequestMapping(\"/lang\")\r\n    @ResponseBody\r\n    public String lang(HttpServletRequest request,HttpServletResponse response) {\r\n        String langType = request.getParameter(\"langType\");\r\n        if (langType.equals(\"zh\")) {\r\n            Locale locale = new Locale(\"zh\", \"CN\");\r\n            //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);\r\n            new CookieLocaleResolver().setLocale(request, response, locale);\r\n        } else if (langType.equals(\"en\")) {\r\n            Locale locale = new Locale(\"en\", \"US\");\r\n            //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);\r\n            new CookieLocaleResolver().setLocale(request, response, locale);\r\n        } else\r\n        \tnew CookieLocaleResolver().setLocale(request, response, LocaleContextHolder.getLocale());\r\n            //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, LocaleContextHolder.getLocale());\r\n        return null;\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/base/controller/LoginController.java",
    "content": "package com.lcore.hr.menu.base.controller;\r\n\r\nimport javax.annotation.Resource;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport org.apache.shiro.SecurityUtils;\r\nimport org.apache.shiro.authc.AuthenticationInfo;\r\nimport org.apache.shiro.authc.SimpleAuthenticationInfo;\r\nimport org.apache.shiro.authc.UsernamePasswordToken;\r\nimport org.apache.shiro.session.Session;\r\nimport org.apache.shiro.subject.Subject;\r\nimport org.springframework.stereotype.Controller;\r\nimport org.springframework.web.bind.annotation.RequestMapping;\r\nimport org.springframework.web.bind.annotation.RequestParam;\r\nimport org.springframework.web.bind.annotation.ResponseBody;\r\nimport org.springframework.web.servlet.ModelAndView;\r\n\r\nimport com.lcore.hr.core.entity.User;\r\nimport com.lcore.hr.menu.base.service.BaseService;\r\nimport com.lcore.hr.utils.Env;\r\nimport com.lcore.hr.utils.GlobalConfigHolder;\r\nimport com.lcore.hr.view.ModelView;\r\n\r\n@Controller\r\npublic class LoginController extends ModelView{\r\n\t@Resource\r\n\tprivate BaseService baseService;\r\n\t@RequestMapping(\"/login\")\r\n\t@ResponseBody\r\n\tpublic Boolean login(HttpServletRequest request,HttpServletResponse response,\r\n\t\t\t@RequestParam String userName,@RequestParam String password,Boolean isRemeberMe){\r\n\t\tUsernamePasswordToken token = new UsernamePasswordToken(userName, password);  \r\n\t\tSubject subject = SecurityUtils.getSubject(); \r\n\t\ttry {\r\n\t\t\tsubject.login(token);\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\r\n\t\tif(null!=isRemeberMe&&isRemeberMe)\r\n\t\t\t token.setRememberMe(true);  \r\n\t\tif(subject.isAuthenticated()){\r\n\t\t\t AuthenticationInfo info = new SimpleAuthenticationInfo(userName,password,userName);\r\n\t\t\t Subject currentUser = SecurityUtils.getSubject(); \r\n\t\t\t Session session = currentUser.getSession();\r\n\t\t\t User user = new User();\r\n\t\t\t user.setUserName(userName);\r\n\t\t\t user.setPassword(password);\r\n\t\t\t Env env = new Env();\r\n\t\t\t env.setUser(user);\r\n\t\t\t session.setAttribute(\"env\",env);\r\n\t\t\t GlobalConfigHolder.setEnv(env);\r\n\t\t\t return true;\r\n\t\t}else\r\n            return false;\r\n\t}\r\n\t\t\r\n\t@RequestMapping(\"/logout\")\r\n\tpublic ModelAndView logout(HttpServletRequest request,HttpServletResponse response) throws Exception{\r\n\t\trequest.getSession().removeAttribute(\"env\");\r\n\t\tGlobalConfigHolder.setEnv(null);\r\n\t\tSubject  subject = SecurityUtils.getSubject();\r\n\t\tsubject.logout();\r\n\t\treturn createSingleView(\"login/login\", request, response);\r\n\t}\r\n\t\r\n\t@RequestMapping(\"/loginSYS\")\r\n\tpublic ModelAndView loginSYS(HttpServletRequest request,HttpServletResponse response) throws Exception{\r\n\t\tModelAndView view = createLayoutView(\"admin/index\", request, response);\r\n\t\treturn view;\r\n\t}\r\n\t\r\n\t@RequestMapping(\"/loginUrl\")\r\n\tpublic ModelAndView loginUrl(HttpServletRequest request,HttpServletResponse response) throws Exception{\r\n\t\treturn createSingleView(\"login/login\", request, response);\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/base/service/BaseService.java",
    "content": "package com.lcore.hr.menu.base.service;\r\n\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\n\r\npublic interface BaseService {\r\n\t/**\r\n\t * 保存对象\r\n\t * @param root\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\tpublic abstract String save(Root root) throws Exception;\r\n\r\n\t/**\r\n\t * 保存或者更新对象\r\n\t * @param root\r\n\t * @throws Exception\r\n\t */\r\n\tpublic abstract void saveOrUpdate(Root root) throws Exception;\r\n\r\n\t/**\r\n\t * 更新对象\r\n\t * @param root\r\n\t * @throws Exception\r\n\t */\r\n\tpublic abstract void update(Root root) throws Exception;\r\n\r\n\t/**\r\n\t * 通过id和实体名字获取对象\r\n\t * @param id\r\n\t * @param className\r\n\t * @return\r\n\t */\r\n\tpublic abstract Root getObjById(String className, String id);\r\n\t\r\n\t/**\r\n\t * 通过id和实体获取对象\r\n\t * @param id\r\n\t * @param className\r\n\t * @return\r\n\t */\r\n\tpublic abstract Root getObjById(Class<?> className,String id);\r\n\t\r\n\t/**\r\n\t * 通过id和实体名字删除纪录\r\n\t * @param id\r\n\t * @param className\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\tpublic abstract void delete(String className,String id) throws Exception;\r\n\t\r\n\t/**\r\n\t * 通过id和实体删除对象\r\n\t * @param id\r\n\t * @param className\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\tpublic abstract void delete(Class<?> className,String id) throws Exception;\r\n\t\r\n\t/**\r\n\t * 根据条件表达式和实体名得到单条纪录\r\n\t * @param className\r\n\t * @param condition\r\n\t * @return\r\n\t */\r\n\tpublic abstract Root getObjByCondition(String className,String condition);\r\n\t\r\n\t/**\r\n\t * 根据条件表达式和实体得到单条纪录\r\n\t * @param className\r\n\t * @param condition\r\n\t * @return\r\n\t */\r\n\tpublic abstract Root getObjByCondition(Class<?> className,String condition);\r\n\t\r\n\t/**\r\n\t * 根据条件表达式和实体名得到集合纪录\r\n\t * @param className\r\n\t * @param condition\r\n\t * @return\r\n\t */\r\n\tpublic abstract List<Root> getObjListByCondition(String className,String condition);\r\n\t\r\n\t/**\r\n\t * 根据条件表达式和实体得到集合纪录\r\n\t * @param className\r\n\t * @param condition\r\n\t * @return\r\n\t */\r\n\tpublic abstract List<Root> getObjListByCondition(Class<?> className,String condition);\r\n\r\n\t/**\r\n\t * 根据条件得到分页纪录\r\n\t * @param className\r\n\t * @param condition\r\n\t * @param firstRow\r\n\t * @param pageSize\r\n\t * @return\r\n\t */\r\n    public abstract List<Root> getPagedObjListWithCondition(String className,String condition,int firstRow,int pageSize);\r\n\r\n    /**\r\n     * 根据查询条件得到分页纪录\r\n     * @param className\r\n     * @param condition\r\n     * @param firstRow\r\n     * @param pageSize\r\n     * @return\r\n     */\r\n    public abstract List<Root> getPagedObjListWithCondition(Class<?> className,String condition,int firstRow,int pageSize);\r\n    \r\n    /**\r\n     * 根据查询条件获取总的条数\r\n     * @param className\r\n     * @param condition\r\n     * @return\r\n     */\r\n    public long getCountByCondition(String className,String condition);\r\n    \r\n    /**\r\n     * 根据hql语句查询\r\n     * @param hql\r\n     * @param objs\r\n     * @return\r\n     */\r\n    public abstract List<Root> getObjListByHql(String hql,List<Object> objs);\r\n    \r\n    /**\r\n     * 根据hql语句查询(分页)\r\n     * @param hql\r\n     * @param objs\r\n     * @param firstRow\r\n     * @param pageSize\r\n     * @return\r\n     */\r\n    public abstract List<Root> getObjListByHql(String hql,List<Object> objs,int firstRow,int pageSize);\r\n    \r\n    /**\r\n     * 根据sql语句查询\r\n     * @param sql\r\n     * @param objs\r\n     * @return\r\n     */\r\n    public abstract List<Map<String,Object>> getObjListBySql(String sql,List<Object> objs);\r\n    \r\n    /**\r\n     * 根据sql语句查询(分页)\r\n     * @param sql\r\n     * @param objs\r\n     * @param firstRow\r\n     * @param pageSize\r\n     * @return\r\n     */\r\n    public abstract List<Map<String,Object>> getObjListBySql(String sql,List<Object> objs,int firstRow,int pageSize);\r\n    \r\n    /**\r\n     * 根据sql语句更新\r\n     * @param sql\r\n     * @param objs\r\n     * @throws Exception\r\n     */\r\n    public void updateBySql(String sql,List<Object> objs) throws Exception; \r\n    \r\n    /**\r\n     * 根据sql语句删除\r\n     * @param sql\r\n     * @param objs\r\n     * @throws Exception\r\n     */\r\n    public void deleteBySql(String sql, List<Object> objs) throws Exception;\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/base/service/impl/BaseServiceImpl.java",
    "content": "package com.lcore.hr.menu.base.service.impl;\r\n\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimport javax.annotation.Resource;\r\n\r\nimport org.springframework.stereotype.Service;\r\nimport org.springframework.transaction.annotation.Transactional;\r\n\r\nimport com.lcore.hr.core.datamng.BaseDataMng;\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.menu.base.service.BaseService;\r\n\r\n@Service(\"baseService\")\r\n@Transactional\r\npublic class BaseServiceImpl implements BaseService{\r\n\r\n\t@Resource\r\n\tprivate BaseDataMng baseDataMng;\r\n\t@Override\r\n\tpublic String save(Root root) throws Exception {\r\n\t\treturn baseDataMng.saveObj(root);\r\n\t}\r\n\t@Override\r\n\tpublic void saveOrUpdate(Root root) throws Exception {\r\n\t\tbaseDataMng.saveOrUpdate(root);\r\n\t}\r\n\t@Override\r\n\tpublic void update(Root root) throws Exception {\r\n\t\tbaseDataMng.updateObj(root);\r\n\t}\r\n\t@Override\r\n\tpublic Root getObjById(String className, String id) {\r\n\t\treturn baseDataMng.getObj(className, id);\r\n\t}\r\n\t@Override\r\n\tpublic Root getObjById(Class<?> className, String id) {\r\n\t\treturn baseDataMng.getObj(className, id);\r\n\t}\r\n\t@Override\r\n\tpublic void delete(String className, String id) throws Exception {\r\n\t\tbaseDataMng.deleteObj(className, id);\r\n\t}\r\n\t@Override\r\n\tpublic void delete(Class<?> className, String id) throws Exception {\r\n\t\tbaseDataMng.deleteObj(className, id);\r\n\t}\r\n\t@Override\r\n\tpublic Root getObjByCondition(String className, String condition) {\r\n\t\treturn baseDataMng.getObjByCondition(className, condition);\r\n\t}\r\n\t@Override\r\n\tpublic Root getObjByCondition(Class<?> className, String condition) {\r\n\t\treturn baseDataMng.getObjByCondition(className, condition);\r\n\t}\r\n\t@Override\r\n\tpublic List<Root> getObjListByCondition(String className, String condition) {\r\n\t\t// TODO Auto-generated method stub\r\n\t\treturn baseDataMng.getObjListByCondition(className, condition);\r\n\t}\r\n\t@Override\r\n\tpublic List<Root> getObjListByCondition(Class<?> className, String condition) {\r\n\t\treturn baseDataMng.getObjListByCondition(className, condition);\r\n\t}\r\n\t@Override\r\n\tpublic List<Root> getPagedObjListWithCondition(String className,\r\n\t\t\tString condition, int firstRow, int pageSize) {\r\n\t\treturn baseDataMng.getPagedObjListWithCondition(className, condition, firstRow, pageSize);\r\n\t}\r\n\t@Override\r\n\tpublic List<Root> getPagedObjListWithCondition(Class<?> className,\r\n\t\t\tString condition, int firstRow, int pageSize) {\r\n\t\treturn baseDataMng.getPagedObjListWithCondition(className, condition, firstRow, pageSize);\r\n\t}\r\n\t@Override\r\n\tpublic long getCountByCondition(String className, String condition) {\r\n\t\t// TODO Auto-generated method stub\r\n\t\treturn baseDataMng.getCountByCondition(className, condition);\r\n\t}\r\n\t@Override\r\n\tpublic List<Root> getObjListByHql(String hql, List<Object> objs) {\r\n\t\t// TODO Auto-generated method stub\r\n\t\treturn null;\r\n\t}\r\n\t@Override\r\n\tpublic List<Root> getObjListByHql(String hql, List<Object> objs,\r\n\t\t\tint firstRow, int pageSize) {\r\n\t\t// TODO Auto-generated method stub\r\n\t\treturn null;\r\n\t}\r\n\t@Override\r\n\tpublic List<Map<String, Object>> getObjListBySql(String sql,\r\n\t\t\tList<Object> objs) {\r\n\t\t// TODO Auto-generated method stub\r\n\t\treturn null;\r\n\t}\r\n\t@Override\r\n\tpublic List<Map<String, Object>> getObjListBySql(String sql,\r\n\t\t\tList<Object> objs, int firstRow, int pageSize) {\r\n\t\t// TODO Auto-generated method stub\r\n\t\treturn null;\r\n\t}\r\n\t@Override\r\n\tpublic void updateBySql(String sql, List<Object> objs) throws Exception {\r\n\t\t// TODO Auto-generated method stub\r\n\t\t\r\n\t}\r\n\t@Override\r\n\tpublic void deleteBySql(String sql, List<Object> objs) throws Exception {\r\n\t\t// TODO Auto-generated method stub\r\n\t\t\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/organization/controller/OrganizationController.java",
    "content": "package com.lcore.hr.menu.organization.controller;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\nimport javax.annotation.Resource;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport org.apache.commons.collections.map.HashedMap;\r\nimport org.springframework.stereotype.Controller;\r\nimport org.springframework.web.bind.annotation.RequestMapping;\r\nimport org.springframework.web.bind.annotation.RequestParam;\r\nimport org.springframework.web.bind.annotation.ResponseBody;\r\nimport org.springframework.web.servlet.ModelAndView;\r\n\r\nimport com.lcore.hr.entity.Organization;\r\nimport com.lcore.hr.menu.organization.service.OrganizationService;\r\nimport com.lcore.hr.view.ModelView;\r\n\r\n@Controller\r\n@RequestMapping(\"/ou\")\r\npublic class OrganizationController extends ModelView{\r\n\t@Resource\r\n\tprivate OrganizationService organizationService;\r\n\t\r\n\t@RequestMapping(\"/getOuList\")\r\n\t@ResponseBody\r\n\tpublic Map<String,Object>  getOuList(HttpServletRequest request,HttpServletResponse response,\r\n\t\t\t@RequestParam int limit,@RequestParam int offset,@RequestParam String search,\r\n\t\t\t@RequestParam String order,@RequestParam String sort) throws Exception{\r\n\t\tMap<String,Object> map = new HashedMap();\r\n\t\tList list = organizationService.getOuList(offset,limit,sort,order,search);\r\n\t\tmap.put(\"total\", organizationService.getOuList(0, -1, sort, order, search).size());\r\n\t\tmap.put(\"rows\",list);\r\n\t\treturn map;\r\n\t}\r\n\t@RequestMapping(\"/addOu\")\r\n\t@ResponseBody\r\n\tpublic String addOu(HttpServletRequest request,HttpServletResponse response,\r\n\t\t\tOrganization org) throws Exception{\r\n\t    organizationService.addOu(org);\r\n\t    return \"success\";\r\n\t}\r\n\t@RequestMapping(\"/deleteOu\")\r\n\t@ResponseBody\r\n\tpublic String deleteOu(HttpServletRequest request,HttpServletResponse response,\r\n\t\t\t@RequestParam String ids) throws Exception{\r\n\t\tString[] idA = ids.split(\",\");\r\n\t\tList<String> idList = new ArrayList<String>();\r\n\t\tfor(int i=0;i<idA.length;i++){\r\n\t\t\tidList.add(idA[i]);\r\n\t\t}\r\n        organizationService.deleteOu(idList);\r\n        return \"success\";\r\n\t}\r\n\t@RequestMapping(\"/updateOu\")\r\n\t@ResponseBody\r\n\tpublic String deleteOu(HttpServletRequest request,HttpServletResponse response,\r\n\t\t\t Organization org) throws Exception{\r\n        organizationService.updateOu(org);\r\n        return \"success\";\r\n\t}\r\n\t\r\n\t/**\r\n\t * 跳转到组织管理界面\r\n\t * @param request\r\n\t * @param response\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/list\")\r\n\tpublic ModelAndView list(HttpServletRequest request,HttpServletResponse response) throws Exception{\r\n\t   return createLayoutView(\"ou/ouList\", request, response);\r\n\t}\r\n\t/**\r\n\t * 跳转到添加组织界面\r\n\t * @param request\r\n\t * @param response\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/addOuView\")\r\n\tpublic ModelAndView addOuView(HttpServletRequest request,HttpServletResponse response) throws Exception{\r\n\t   return createSingleView(\"ou/addOu\", request, response);\r\n\t}\r\n\t\r\n\t/**\r\n\t * 跳转到更新组织界面\r\n\t * @param request\r\n\t * @param response\r\n\t * @return\r\n\t * @throws Exception\r\n\t */\r\n\t@RequestMapping(\"/updateOuView\")\r\n\tpublic ModelAndView updateOuView(HttpServletRequest request,HttpServletResponse response) throws Exception{\r\n\t   return createSingleView(\"ou/updateOu\", request, response);\r\n\t}\r\n\t\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/organization/service/OrganizationService.java",
    "content": "package com.lcore.hr.menu.organization.service;\r\n\r\nimport java.util.List;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.entity.Organization;\r\nimport com.lcore.hr.menu.base.service.BaseService;\r\n\r\npublic interface OrganizationService extends BaseService{\r\n\t/**\r\n\t * 查询组织列表\r\n\t * @param offset      firstRow\r\n\t * @param limit       pageSize:-1表示不分頁\r\n\t * @param sort\r\n\t * @param order\r\n\t * @param key         模糊搜索关键字\r\n\t * @return\r\n\t */\r\n    public abstract List<Root> getOuList(int offset,int limit,String sort,String order,String key);\r\n    /**\r\n     * 添加组织\r\n     * @param org\r\n     * @throws Exception\r\n     */\r\n    public abstract void addOu(Organization org) throws Exception;\r\n    /**\r\n     * 批量删除组织\r\n     * @param ids\r\n     * @throws Exception\r\n     */\r\n    public abstract void deleteOu(List<String> ids) throws Exception;\r\n    \r\n    /**\r\n     * 更新组织\r\n     * @param org\r\n     * @throws Exception\r\n     */\r\n    public abstract void updateOu(Organization org) throws Exception;\r\n    \r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/menu/organization/service/impl/OrganizationServiceImpl.java",
    "content": "package com.lcore.hr.menu.organization.service.impl;\r\n\r\nimport java.util.Date;\r\nimport java.util.List;\r\n\r\nimport org.springframework.stereotype.Service;\r\nimport org.springframework.transaction.annotation.Transactional;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.entity.Organization;\r\nimport com.lcore.hr.menu.base.service.impl.BaseServiceImpl;\r\nimport com.lcore.hr.menu.organization.service.OrganizationService;\r\n\r\n@Service(\"organizationService\")\r\n@Transactional\r\npublic class OrganizationServiceImpl extends BaseServiceImpl implements\r\n\t\tOrganizationService {\r\n\r\n\t@Override\r\n\tpublic List<Root> getOuList(int offset, int limit, String sort,\r\n\t\t\tString order, String key) {\r\n\t\t// 构造查询条件:所有字段模糊匹配\r\n\t\tString condition = \" 1=1 \";\r\n\t\tif (key != null && !key.equals(\"\")) {\r\n\t\t\tcondition = \" (obj.createTime like '%\" + key + \"%' \";\r\n\t\t\tcondition += \" or obj.updateTime like '%\" + key + \"%' \";\r\n\t\t\tcondition += \" or obj.startTime like '%\" + key + \"%' \";\r\n\t\t\tcondition += \" or obj.endTime like '%\" + key + \"%' \";\r\n\t\t\tcondition += \" or obj.ouName like '%\" + key + \"%' \";\r\n\t\t\tcondition += \" or obj.updater like '%\" + key + \"%' \";\r\n\t\t\tcondition += \" or obj.creater like '%\" + key + \"%' )\";\r\n\t\t}\r\n\t\tif (null != sort && !\"\".equals(sort))\r\n\t\t\tcondition += \" order by \" + \" obj.\" + sort + \"\" + \"  \" + order;\r\n\t\treturn this.getPagedObjListWithCondition(\r\n\t\t\t\tOrganization.class.getSimpleName(), condition, offset, limit);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void addOu(Organization org) throws Exception {\r\n\t\torg.setStartTime(new Date());\r\n\t\tthis.save(org);\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void deleteOu(List<String> ids) throws Exception {\r\n\t\tfor (String id : ids) {\r\n\t\t\tif (id != null && !\"\".equals(id.trim()))\r\n\t\t\t\tthis.delete(Organization.class.getName(), id);\r\n\t\t}\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void updateOu(Organization org) throws Exception {\r\n\t\tthis.update(org);\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/module/listener/StartupListener.java",
    "content": "package com.lcore.hr.module.listener;\r\n\r\nimport java.io.IOException;\r\n\r\nimport javax.servlet.ServletContext;\r\nimport javax.servlet.ServletContextEvent;\r\nimport javax.servlet.ServletContextListener;\r\n\r\nimport com.lcore.hr.utils.GlobalConfigHolder;\r\n\r\n/**\r\n * @author LCore\r\n */\r\npublic class StartupListener implements ServletContextListener {\r\n\r\n\tpublic void contextDestroyed(ServletContextEvent event) {}\r\n\r\n\tpublic void contextInitialized(ServletContextEvent event) {\r\n\t\tServletContext context = event.getServletContext();\r\n\t\ttry {\r\n\t\t\tinitSys();\r\n\t\t} catch ( Exception e ) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate void initSys() throws IOException {\r\n\t\tGlobalConfigHolder.init();\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/utils/Env.java",
    "content": "package com.lcore.hr.utils;\r\n\r\nimport com.lcore.hr.core.entity.User;\r\n\r\npublic class Env {\r\n\tpublic  User user;\r\n\tpublic User getUser() {\r\n\t\treturn user;\r\n\t}\r\n\r\n\tpublic void setUser(User user) {\r\n\t\tthis.user = user;\r\n\t}\r\n\r\n\r\n\r\n\tpublic Env() {\r\n\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/utils/GeneralBeanOrMapUtils.java",
    "content": "package com.lcore.hr.utils;\r\n\r\nimport java.beans.BeanInfo;\r\nimport java.beans.IntrospectionException;\r\nimport java.beans.Introspector;\r\nimport java.beans.PropertyDescriptor;\r\nimport java.lang.reflect.InvocationTargetException;\r\nimport java.lang.reflect.Method;\r\nimport java.util.HashMap;\r\nimport java.util.Map;\r\n\r\n/**\r\n * JavaBean和map相互转换\r\n */\r\npublic class GeneralBeanOrMapUtils {\r\n    /**\r\n     * 将一个 Map 对象转化为一个 JavaBean\r\n     * \r\n     * @param <T>\r\n     * \r\n     * @param clazz\r\n     *            要转化的类型\r\n     * @param map\r\n     *            包含属性值的 map\r\n     * @return 转化出来的 JavaBean 对象\r\n     * @throws IntrospectionException\r\n     *             如果分析类属性失败\r\n     * @throws IllegalAccessException\r\n     *             如果实例化 JavaBean 失败\r\n     * @throws InstantiationException\r\n     *             如果实例化 JavaBean 失败\r\n     * @throws InvocationTargetException\r\n     *             如果调用属性的 setter 方法失败\r\n     */\r\n    public static <T> T convertMap2Bean(Class<T> clazz, Map map) throws IntrospectionException, IllegalAccessException,\r\n            InstantiationException, InvocationTargetException {\r\n\r\n        BeanInfo beanInfo = Introspector.getBeanInfo(clazz); // 获取类属性\r\n        T obj = (T) clazz.newInstance(); // 创建 JavaBean 对象\r\n\r\n        // 给 JavaBean 对象的属性赋值\r\n        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();\r\n        for (int i = 0; i < propertyDescriptors.length; i++) {\r\n            PropertyDescriptor descriptor = propertyDescriptors[i];\r\n            String propertyName = descriptor.getName();\r\n\r\n            if (map.containsKey(propertyName)) {\r\n                Object value = map.get(propertyName);\r\n\r\n                Object[] args = new Object[1];\r\n                args[0] = value;\r\n\r\n                descriptor.getWriteMethod().invoke(obj, args);\r\n            }\r\n        }\r\n        return obj;\r\n    }\r\n\r\n    /**\r\n     * 将Map转换为bean\r\n     * \r\n     * @param className\r\n     *            要转换的类型名称（注意，需要加上包路径）\r\n     * @param map\r\n     *            包含属性值的 map\r\n     * @return 转化出来的 JavaBean 对象\r\n     * @throws IllegalAccessException\r\n     * @throws InstantiationException\r\n     * @throws InvocationTargetException\r\n     * @throws ClassNotFoundException\r\n     * @throws IntrospectionException\r\n     */\r\n    public static Object convertMap2Bean(String className, Map map) throws IllegalAccessException, InstantiationException,\r\n            InvocationTargetException, ClassNotFoundException, IntrospectionException {\r\n        Class clazz = Class.forName(className);\r\n        Object obj = convertMap2Bean(clazz, map);\r\n        return obj;\r\n    }\r\n\r\n    /**\r\n     * 将一个 JavaBean 对象转化为一个 Map\r\n     * \r\n     * @param bean\r\n     *            要转化的JavaBean 对象\r\n     * @return 转化出来的 Map 对象\r\n     * @throws IntrospectionException\r\n     *             如果分析类属性失败\r\n     * @throws IllegalAccessException\r\n     *             如果实例化 JavaBean 失败\r\n     * @throws InvocationTargetException\r\n     *             如果调用属性的 setter 方法失败\r\n     */\r\n    public static Map convertBean2Map(Object bean) throws IntrospectionException, IllegalAccessException, InvocationTargetException {\r\n        Class clazz = bean.getClass();\r\n        Map returnMap = new HashMap();\r\n        BeanInfo beanInfo = Introspector.getBeanInfo(clazz);\r\n\r\n        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();\r\n        for (int i = 0; i < propertyDescriptors.length; i++) {\r\n            PropertyDescriptor descriptor = propertyDescriptors[i];\r\n            String propertyName = descriptor.getName();\r\n            if (!propertyName.equals(\"class\")) {\r\n                Method readMethod = descriptor.getReadMethod();\r\n                Object result = readMethod.invoke(bean, new Object[0]);\r\n                if (result != null) {\r\n                    returnMap.put(propertyName, result);\r\n                } else {\r\n                    returnMap.put(propertyName, null);\r\n                }\r\n            }\r\n        }\r\n        return returnMap;\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/utils/GlobalConfigHolder.java",
    "content": "package com.lcore.hr.utils;\r\n\r\nimport java.io.IOException;\r\nimport java.io.InputStream;\r\nimport java.util.HashMap;\r\nimport java.util.Map;\r\nimport java.util.Properties;\r\n\r\npublic class GlobalConfigHolder {\r\n\r\n    private static Map<String, String> propertiesMap = new HashMap<String, String>();\r\n\r\n    private static Env env = null;\r\n\r\n    public static Env getEnv() {\r\n\t\treturn env;\r\n\t}\r\n\r\n\tpublic static void setEnv(Env env) {\r\n\t\tGlobalConfigHolder.env = env;\r\n\t}\r\n\r\n\tpublic static void init() throws IOException {\r\n        InputStream inputStream = GlobalConfigHolder.class.getClassLoader().getResourceAsStream(\"sys.properties\");\r\n        Properties p = new Properties();\r\n        p.load(inputStream);\r\n        for (Object key : p.keySet()) {\r\n            GlobalConfigHolder.setProperty((String) key, (String) p.get(key));\r\n        }\r\n    }\r\n\r\n    public static Map<String, String> getPropertiesMap() {\r\n        return propertiesMap;\r\n    }\r\n\r\n    public static void setPropertiesMap(Map<String, String> propertiesMap) {\r\n        GlobalConfigHolder.propertiesMap = propertiesMap;\r\n    }\r\n\r\n    public static void setProperty(String name, String object) {\r\n        propertiesMap.put(name, object);\r\n    }\r\n\r\n    public static String getProperty(String name) {\r\n        return propertiesMap.get(name);\r\n    }\r\n}\r\n"
  },
  {
    "path": "src/main/java/com/lcore/hr/view/ModelView.java",
    "content": "package com.lcore.hr.view;\r\n\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport org.springframework.web.servlet.ModelAndView;\r\n\r\nimport com.lcore.hr.core.entity.User;\r\nimport com.lcore.hr.utils.Env;\r\nimport com.lcore.hr.utils.GlobalConfigHolder;\r\n\r\n/**\r\n * 视图model\r\n * @author LCore\r\n *\r\n */\r\npublic class ModelView {\r\n\t/**\r\n\t * 单页视图model\r\n\t * @param fileName\r\n\t * @param request\r\n\t * @param response\r\n\t * @return\r\n\t */\r\n\tprotected ModelAndView createSingleView(String fileName,\r\n\t\t\tHttpServletRequest request, HttpServletResponse response) {\r\n\t\tModelAndView view = new ModelAndView();\r\n\t\tview.addObject(\"basePath\",GlobalConfigHolder.getProperty(\"basePath\"));\r\n\t\tview.setViewName(fileName);\r\n\t\tview.addObject(\"Env\",GlobalConfigHolder.getEnv());\r\n\t\treturn view;\r\n\t}\r\n\r\n\t/**\r\n\t * 布局页视图model\r\n\t * @param fileName\r\n\t * @param layout\r\n\t * @param request\r\n\t * @param response\r\n\t * @return\r\n\t */\r\n\tprotected ModelAndView createLayoutView(String fileName, String layout,\r\n\t\t\tHttpServletRequest request, HttpServletResponse response) {\r\n\t\tModelAndView view = new ModelAndView();\r\n\t\tif (layout != null && !layout.equals(\"\")) {\r\n\t\t\tview.setViewName(layout);\r\n\t\t} else\r\n\t\t\tview.setViewName(\"common/layout\");\r\n\t\tview.addObject(\"header_path\", \"common/header.vm\");\r\n\t\tview.addObject(\"left_path\", \"common/left.vm\");\r\n\t\tview.addObject(\"content_path\", fileName + \".vm\");\r\n\t\tString path = GlobalConfigHolder.getProperty(\"basePath\");\r\n\t\tview.addObject(\"basePath\",GlobalConfigHolder.getProperty(\"basePath\"));\r\n\t\tview.addObject(\"Env\",GlobalConfigHolder.getEnv());\r\n\t\treturn view;\r\n\t}\r\n\r\n\tprotected ModelAndView createLayoutView(String fileName,\r\n\t\t\tHttpServletRequest request, HttpServletResponse response) {\r\n\t\treturn createLayoutView(fileName, null, request, response);\r\n\t}\r\n}\r\n"
  },
  {
    "path": "src/main/resources/i18n/messages_en.properties",
    "content": "#System\r\nsystem.name=HR-ADMIN\r\n\r\n#Login\r\nlogin.button.login=Login\r\nlogin.forgetPassword=Forget Password?\r\nlogin.remember=Remember me\r\nlogin.third=Third-Login\r\n\r\n#Header\r\nheader.message=Message\r\nheader.to-list=ToDo-List\r\nheader.language=Language\r\nheader.zh_CH=Chinese\r\nheader.en=English\r\n\r\n################Module####################\r\n#Home\r\nhome=Home\r\nhome.dashboard=Dashboard\r\nhome.framework=Framework&Technology"
  },
  {
    "path": "src/main/resources/i18n/messages_zh.properties",
    "content": "#System\r\nsystem.name=\\u4EBA\\u529B\\u8D44\\u6E90\\u7BA1\\u7406\r\n\r\n#Login\r\nlogin.button.login=\\u767B\\u5F55\r\nlogin.forgetPassword=\\u5FD8\\u8BB0\\u5BC6\\u7801?\r\nlogin.remember=\\u8BB0\\u4F4F\\u5BC6\\u7801\r\nlogin.third=\\u7B2C\\u4E09\\u65B9\\u767B\\u5F55\r\n\r\n#Header\r\nheader.message=\\u6D88\\u606F\r\nheader.to-list=\\u5F85\\u529E\\u4E8B\\u5B9C\r\nheader.language=\\u8BED\\u8A00\r\nheader.zh_CH=\\u4E2D\\u6587\r\nheader.en=\\u82F1\\u6587\r\n\r\n################Module####################\r\n#Home\r\nhome=\\u9996\\u9875\r\nhome.dashboard=\\u4EEA\\u8868\\u76D8\r\nhome.framework=\\u6846\\u67B6\\u6280\\u672F\\u4ECB\\u7ECD"
  },
  {
    "path": "src/main/resources/jdbc.properties",
    "content": "jdbc.driver=com.mysql.jdbc.Driver\r\njdbc.url=jdbc:mysql://localhost/hr\r\njdbc.username=root\r\njdbc.password=root"
  },
  {
    "path": "src/main/resources/log4j.properties",
    "content": "# Rules reminder:\n# DEBUG < INFO < WARN < ERROR < FATAL\n\n# Global logging configuration\nlog4j.rootLogger=info, stdout,DefLog\n\n# My logging configuration...\nlog4j.logger.org.mybatis.jpetstore=INFO\n\n## Console output...\nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender\nlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout\nlog4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n\n\n## File output...\nog4j.appender.DefLog=org.apache.log4j.RollingFileAppender   \nlog4j.appender.DefLog.File=${catalina.home}/logs/flow.log   \nlog4j.appender.DefLog.DatePattern='.'yyyy-MM-dd'.log'  \nlog4j.appender.DefLog.maxBackupIndex=10  \nlog4j.appender.DefLog.maxFileSize=10MB   \nlog4j.appender.DefLog.Append=true  \nlog4j.appender.DefLog.layout=org.apache.log4j.PatternLayout   \nlog4j.appender.DefLog.layout.ConversionPattern=%5p [%t] [%d] (%c) - %m%n  "
  },
  {
    "path": "src/main/resources/spring-common.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:context=\"http://www.springframework.org/schema/context\"\r\n\txmlns:p=\"http://www.springframework.org/schema/p\" xmlns:tx=\"http://www.springframework.org/schema/tx\"\r\n\txsi:schemaLocation=\"http://www.springframework.org/schema/beans \r\n\t    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd\r\n\t\thttp://www.springframework.org/schema/context \r\n\t\thttp://www.springframework.org/schema/context/spring-context-3.1.xsd\r\n\t\thttp://www.springframework.org/schema/tx \r\n\t\thttp://www.springframework.org/schema/tx/spring-tx-3.1.xsd\"\r\n\tdefault-autowire=\"byName\">\r\n\r\n\t<bean id=\"springContextHelper\" class=\"com.lcore.hr.core.utils.SpringFactory\">\r\n\t</bean>\r\n\t<context:property-placeholder location=\"classpath:jdbc.properties\" />\r\n\t<context:component-scan base-package=\"com.lcore.hr\" />\r\n\r\n\t<bean id=\"dataSource\" class=\"org.apache.commons.dbcp.BasicDataSource\"\r\n\t\tp:driverClassName=\"${jdbc.driver}\" p:url=\"${jdbc.url}\" p:username=\"${jdbc.username}\"\r\n\t\tp:password=\"${jdbc.password}\" />\r\n\r\n\t<bean id=\"sessionFactory\"\r\n\t\tclass=\"org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean\">\r\n\t\t<property name=\"dataSource\" ref=\"dataSource\" />\r\n\t\t<property name=\"hibernateProperties\">\r\n\t\t\t<props>\r\n\t\t\t\t<prop key=\"hibernate.dialect\">org.hibernate.dialect.MySQLDialect</prop>\r\n\t\t\t\t<!-- <prop key=\"hibernate.current_session_context_class\">thread</prop> -->\r\n\t\t\t\t<prop key=\"hibernate.hbm2ddl.auto\">update</prop>\r\n\t\t\t\t<prop key=\"hibernate.show_sql\">true</prop>\r\n\t\t\t\t<prop key=\"hibernate.format_sql\">false</prop>\r\n\t\t\t</props>\r\n\t\t</property>\r\n\t\t<property name=\"packagesToScan\">\r\n\t\t\t<list>\r\n\t\t\t\t<value>com.lcore.hr.core.entity</value>\r\n\t\t\t\t<value>com.lcore.hr.entity</value>\r\n\t\t\t</list>\r\n\t\t</property>\r\n\t</bean>\r\n\r\n\t<!-- JDBC模板 -->\r\n\t<bean id=\"jdbcTemplate\" class=\"org.springframework.jdbc.core.JdbcTemplate\">\r\n\t\t<property name=\"dataSource\" ref=\"dataSource\" />\r\n\t</bean>\r\n\r\n\t<!-- Hibernate模板 -->\r\n\t<bean id=\"hibernateTemplate\" class=\"org.springframework.orm.hibernate3.HibernateTemplate\">\r\n\t\t<property name=\"sessionFactory\" ref=\"sessionFactory\" />\r\n\t</bean>\r\n\t<!-- 配置事务 -->\r\n\t<bean id=\"transactionManager\"\r\n\t\tclass=\"org.springframework.orm.hibernate3.HibernateTransactionManager\">\r\n\t\t<property name=\"sessionFactory\" ref=\"sessionFactory\" />\r\n\t</bean>\r\n\t<!-- 配置注解性事务 -->\r\n\t<tx:annotation-driven transaction-manager=\"transactionManager\"></tx:annotation-driven>\r\n\r\n\t<!-- 国际化配置 -->\r\n\t<bean id=\"messageSource\"\r\n\t\tclass=\"org.springframework.context.support.ResourceBundleMessageSource\">\r\n\t\t<!-- 国际化信息资源文件所在的目录 -->\r\n\t\t<property name=\"basename\" value=\"i18n.messages\" />\r\n\t\t<!-- 找不到对应的代码信息,就用这个代码作为标识 -->\r\n\t\t<property name=\"useCodeAsDefaultMessage\" value=\"true\" />\r\n\t</bean>\r\n\r\n\t<!-- 数据库保存的密码是使用MD5算法加密的，所以这里需要配置一个密码匹配对象 -->\r\n\t<bean id=\"credentialsMatcher\" class=\"org.apache.shiro.authc.credential.Md5CredentialsMatcher\"></bean>\r\n\r\n\t<!-- 缓存管理 -->\r\n\t<bean id=\"cacheManager\" class=\"org.apache.shiro.cache.MemoryConstrainedCacheManager\"></bean>\r\n\r\n\t<!-- 使用Shiro自带的JdbcRealm类 指定密码匹配所需要用到的加密对象 指定存储用户、角色、权限许可的数据源及相关查询语句 -->\r\n\t<bean id=\"jdbcRealm\" class=\"org.apache.shiro.realm.jdbc.JdbcRealm\">\r\n\t\t<property name=\"credentialsMatcher\" ref=\"credentialsMatcher\"></property>\r\n\t\t<property name=\"permissionsLookupEnabled\" value=\"true\"></property>\r\n\t\t<property name=\"dataSource\" ref=\"dataSource\"></property>\r\n\t\t<property name=\"authenticationQuery\"\r\n\t\t\tvalue=\"SELECT password,id FROM t_user WHERE userName = ?\"></property>\r\n\t\t<property name=\"userRolesQuery\"\r\n\t\t\tvalue=\"SELECT role_name from sec_user_role left join sec_role using(role_id) left join sec_user using(user_id) WHERE user_name = ?\"></property>\r\n\t\t<property name=\"permissionsQuery\"\r\n\t\t\tvalue=\"SELECT permission_name FROM sec_role_permission left join sec_role using(role_id) left join sec_permission using(permission_id) WHERE role_name = ?\">\r\n\t\t</property>\r\n\t</bean>\r\n\t<bean id=\"sessionIdCookie\" class=\"org.apache.shiro.web.servlet.SimpleCookie\">\r\n\t\t<constructor-arg value=\"sid\" />\r\n\t\t<property name=\"httpOnly\" value=\"true\" />\r\n\t\t<property name=\"maxAge\" value=\"-1\" />\r\n\t</bean>\r\n\r\n\t<!-- remenberMe配置 -->\r\n\t<bean id=\"rememberMeCookie\" class=\"org.apache.shiro.web.servlet.SimpleCookie\">\r\n\t\t<constructor-arg value=\"rememberMe\" />\r\n\t\t<property name=\"httpOnly\" value=\"true\" />\r\n\t\t<!-- 默认记住7天（单位：秒） -->\r\n\t\t<property name=\"maxAge\" value=\"604800\" />\r\n\t</bean>\r\n\t<!-- rememberMe管理器 -->\r\n\t<bean id=\"rememberMeManager\" class=\"org.apache.shiro.web.mgt.CookieRememberMeManager\">\r\n\t\t<property name=\"cipherKey\"\r\n\t\t\tvalue=\"#{T(org.apache.shiro.codec.Base64).decode('4AvVhmFLUs0KTA3Kprsdag==')}\" />\r\n\t\t<property name=\"cookie\" ref=\"rememberMeCookie\" />\r\n\t</bean>\r\n\r\n\t<!-- Shiro安全管理器 -->\r\n\t<bean id=\"securityManager\" class=\"org.apache.shiro.web.mgt.DefaultWebSecurityManager\">\r\n\t\t<property name=\"realm\" ref=\"jdbcRealm\"></property>\r\n\t\t<property name=\"cacheManager\" ref=\"cacheManager\"></property>\r\n\t\t<property name=\"rememberMeManager\" ref=\"rememberMeManager\" />\r\n\t</bean>\r\n\r\n\t<!-- Shiro主过滤器本身功能十分强大，其强大之处就在于它支持任何基于URL路径表达式的、自定义的过滤器的执行 Web应用中，Shiro可控制的Web请求必须经过Shiro主过滤器的拦截，Shiro对基于Spring的Web应用提供了完美的支持 -->\r\n\t<bean id=\"shiroFilter\" class=\"org.apache.shiro.spring.web.ShiroFilterFactoryBean\">\r\n\t\t<!-- Shiro的核心安全接口，这个属性是必须的 -->\r\n\t\t<property name=\"securityManager\" ref=\"securityManager\"></property>\r\n\t\t<!-- 要求登录时的链接(登录页面地址)，非必须的属性，默认会自动寻找Web工程根 目录下的\"/login.jsp\"页面 -->\r\n\t\t<property name=\"loginUrl\" value=\"/\"></property>\r\n\t\t<!-- 登录成功后要跳转的连接(本例中此属性用不到，因为登录成功后的处理逻辑在LoginController里硬编码) -->\r\n\t\t<!-- <property name=\"successUrl\" value=\"/\" ></property> -->\r\n\t\t<!-- 用户访问未对其授权的资源时，所显示的连接 -->\r\n\t\t<property name=\"unauthorizedUrl\" value=\"/\"></property>\r\n\t\t<property name=\"filterChainDefinitions\">\r\n\t\t\t<value>\r\n\t\t\t\t/auth/** = authc\r\n\t\t\t</value>\r\n\t\t</property>\r\n\t</bean>\r\n\r\n\t<!-- 开启Shiro的注解(如@RequiresRoles，@RequiresPermissions)，需借助SpringAOP扫描使用Shiro注解的类， \r\n\t\t并在必要时进行安全逻辑验证 -->\r\n\t<!-- <bean class=\"org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator\"></bean> \r\n\t\t<bean class=\"org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor\"> \r\n\t\t<property name=\"securityManager\" ref=\"securityManager\"></property> </bean> -->\r\n\r\n\r\n\t<!-- shiro生命周期管理 -->\r\n\t<bean id=\"lifecycleBeanPostProcessor\" class=\"org.apache.shiro.spring.LifecycleBeanPostProcessor\"></bean>\r\n\r\n</beans>\r\n"
  },
  {
    "path": "src/main/resources/spring-mvc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:context=\"http://www.springframework.org/schema/context\"\r\n\txmlns:mvc=\"http://www.springframework.org/schema/mvc\"\r\n\txsi:schemaLocation=\"http://www.springframework.org/schema/beans \r\n\thttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd\r\n\thttp://www.springframework.org/schema/context\r\n\thttp://www.springframework.org/schema/context/spring-context-3.1.xsd\r\n\thttp://www.springframework.org/schema/mvc\r\n\thttp://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd\">\r\n\r\n\t<!-- 注解扫描包 -->\r\n\t<context:component-scan base-package=\"com.lcore.hr.menu.*.controller\" />\r\n\t<!-- 启动spring mvc的注解功能，完成请求和注解POJO的映射 -->\r\n\t<bean\r\n\t\tclass=\"org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter\">\r\n\t\t<!-- 配置信息转换，将用@responsebody注解的返回值转换为json返回前台，编码为utf-8 -->\r\n\t\t<property name=\"messageConverters\">\r\n\t\t\t<list>\r\n\t\t\t</list>\r\n\t\t</property>\r\n\t</bean>\r\n\t<mvc:annotation-driven>\r\n\t\t<!-- 处理responseBody 里面日期类型 -->\r\n\t\t<mvc:message-converters>\r\n\t\t\t<bean\r\n\t\t\t\tclass=\"org.springframework.http.converter.json.MappingJackson2HttpMessageConverter\">\r\n\t\t\t\t<property name=\"objectMapper\">\r\n\t\t\t\t\t<bean class=\"com.fasterxml.jackson.databind.ObjectMapper\">\r\n\t\t\t\t\t\t<property name=\"dateFormat\">\r\n\t\t\t\t\t\t\t<bean class=\"java.text.SimpleDateFormat\">\r\n\t\t\t\t\t\t\t\t<constructor-arg type=\"java.lang.String\" value=\"yyyy-MM-dd\" />\r\n\t\t\t\t\t\t\t</bean>\r\n\t\t\t\t\t\t</property>\r\n\t\t\t\t\t</bean>\r\n\t\t\t\t</property>\r\n\t\t\t</bean>\r\n\t\t</mvc:message-converters>\r\n\t</mvc:annotation-driven>\r\n\t<!-- 静态资源(js/image)的访问 -->\r\n\t<mvc:resources mapping=\"/static/**\" location=\"/static/\" />\r\n\t<!-- 国际化配置 -->\r\n\t<bean id=\"localeResolver\"\r\n\t\tclass=\"org.springframework.web.servlet.i18n.CookieLocaleResolver\">\r\n\t\t<!-- 设置cookieName名称，可以根据名称通过js来修改设置，默认的名称为 类名+.LOCALE如上图 -->\r\n<!-- \t\t<property name=\"cookieName\" value=\"lang\" /> -->\r\n\t\t<!-- 设置最大有效时间，如果是-1，则不存储，浏览器关闭后即失效，默认为Integer.MAX_INT -->\r\n<!-- \t\t<property name=\"cookieMaxAge\" value=\"100000\" /> -->\r\n\t\t<!-- 设置cookie可见的地址，默认是“/”即对网站所有地址都是可见的，如果设为其它地址，则只有该地址或其后的地址才可见 -->\r\n\t\t<property name=\"cookiePath\" value=\"/\" />\r\n\t</bean>\r\n<!-- \t<mvc:interceptors> -->\r\n<!-- \t\t<bean class=\"org.springframework.web.servlet.i18n.LocaleChangeInterceptor\" /> -->\r\n<!-- \t\t<mvc:interceptor> -->\r\n<!-- \t\t\t<mvc:mapping path=\"/index\" /> -->\r\n<!-- \t\t\t<mvc:mapping path=\"/ou/*\" /> -->\r\n<!-- \t\t\t<mvc:mapping path=\"/auth/*/*\" /> -->\r\n<!-- \t\t\t<bean class=\"com.lcore.hr.interceptor.SecurityInterceptor\" /> -->\r\n<!-- \t\t</mvc:interceptor> -->\r\n<!-- \t</mvc:interceptors> -->\r\n\t<!-- 定义视图解析器 -->\r\n\t<!-- 配置velocity引擎处理请求 -->\r\n\t<bean id=\"velocityConfigurer\"\r\n\t\tclass=\"org.springframework.web.servlet.view.velocity.VelocityConfigurer\">\r\n\t\t<!-- <property name=\"configLocation\"> <value>/WEB-INF/toolbox.xml</value> \r\n\t\t\t</property> -->\r\n\t\t<property name=\"resourceLoaderPath\">\r\n\t\t\t<value>/WEB-INF/views/</value>\r\n\t\t</property>\r\n\t\t<property name=\"velocityProperties\">\r\n\t\t\t<props>\r\n\t\t\t\t<prop key=\"input.encoding\">UTF-8</prop>\r\n\t\t\t\t<prop key=\"output.encoding\">UTF-8</prop>\r\n\t\t\t</props>\r\n\t\t</property>\r\n\t</bean>\r\n\r\n\t<!-- 配置velocity视图解析器 -->\r\n\t<bean id=\"viewResolver\"\r\n\t\tclass=\"org.springframework.web.servlet.view.velocity.VelocityViewResolver\">\r\n\t\t<property name=\"suffix\">\r\n\t\t\t<value>.vm</value>\r\n\t\t</property>\r\n\t\t<property name=\"contentType\" value=\"text/html;charset=UTF-8\"></property>\r\n\t</bean>\r\n</beans>\r\n"
  },
  {
    "path": "src/main/resources/sys.properties",
    "content": "basePath=/hr"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/admin/index.vm",
    "content": "<ol class=\"breadcrumb\" style=\"margin-bottom:2px;\">\r\n    <li><a href=\"#\">#springMessage(\"home\")</a>\r\n    </li>\r\n    <li><a href=\"#\">#springMessage(\"home.framework\")</a>\r\n    </li>\r\n</ol>\r\n<div style=\"margin-left:20px;margin-right:10px;\">\r\n<div class=\"portal\">\r\n<h3>前端</h3>\r\n<div class=\"portalPanel\">\r\n  <h3>jQuery</h3>\r\n</div>\r\n<div class=\"portalPanel\">\r\n  <h3>Bootstrap</h3>\r\n</div>\r\n<div class=\"portalPanel\">\r\n  <h3>EasyUI</h3>\r\n</div>\r\n<div class=\"portalPanel\">\r\n  <h3>BootstrapTable</h3>\r\n</div>\r\n<div class=\"portalPanel\">\r\n  <h3>Velocity</h3>\r\n</div>\r\n<div class=\"portalPanel\">\r\n  <h3>插件</h3>\r\n</div>\r\n<div class=\"portalPanel\">\r\n  <h3>...</h3>\r\n</div>\r\n</div>\r\n<div class=\"portal\">\r\n<h3>后端</h3>\r\n<div class=\"portalPanel\">\r\n  <h3>Hibernate(ORM)</h3>\r\n</div>\r\n<div class=\"portalPanel\">\r\n  <h3>Spring(IOC容器)</h3>\r\n</div>\r\n<div class=\"portalPanel\">\r\n  <h3>Spring MVC(MVC框架)</h3>\r\n</div>\r\n<div class=\"portalPanel\">\r\n  <h3>Activiti(工作流引擎)</h3>\r\n</div>\r\n<div class=\"portalPanel\">\r\n  <h3>待续</h3>\r\n</div>\r\n</div>\r\n</div>\r\n\r\n"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/module/addModule.vm",
    "content": "<style>\r\n    .ctable {\r\n        border: 0px;\r\n    }\r\n    .ctable tr {\r\n        border: 0px;\r\n    }\r\n    .ctable td {\r\n        text-align: right;\r\n        padding: 5px;\r\n        border: 0px;\r\n    }\r\n</style>\r\n<div class=\"modal-dialog\" style=\"display: inline-block; width: auto;\">\r\n    <div class=\"modal-content\">\r\n        <div class=\"modal-header text-left\">\r\n            <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span>\r\n            </button>\r\n            <h4 class=\"modal-title\" id=\"addModuleModalLabel\">添加模块</h4>\r\n        </div>\r\n        <div class=\"modal-body\">\r\n            <table class=\"ctable\">\r\n                <tr>\r\n                    <td>\r\n                        <label for=\"addModuleName\">模块名</label>\r\n                        <input type=\"text\" id=\"addModuleName\">\r\n                    </td>\r\n                    <td>\r\n                        <label for=\"addName\">名称(国际化)</label>\r\n                        <input type=\"text\" id=\"addName\">\r\n                    </td>\r\n                    <td>\r\n                        <label for=\"addModuleParent\">父模块</label>\r\n                        <input type=\"text\" id=\"addModuleParent\">\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td>\r\n                        <label for=\"addModuleTarget\">Target</label>\r\n                        <input type=\"text\" id=\"addModuleTarget\">\r\n                    </td>\r\n                    <td>\r\n                        <label for=\"addIndexNum\">序号</label>\r\n                        <input type=\"text\" id=\"addIndexNum\">\r\n                    </td>\r\n                    <td>\r\n                    </td>\r\n                </tr>\r\n            </table>\r\n        </div>\r\n        <div class=\"modal-footer\">\r\n            <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\">关闭</button>\r\n            <button type=\"submit\" class=\"btn btn-success\" id=\"addModule\">确定</button>\r\n        </div>\r\n    </div>\r\n\r\n</div>\r\n\r\n<script>\r\n    $(function() {\r\n\t\r\n\t    $(\"#addModuleParent\").combobox({\r\n\t\t        url:'${basePath}/auth/module/getModuleListDropDown',\r\n\t\t        valueField: 'id',\r\n\t\t        textField: 'moduleName',\r\n\t\t        panelMaxHeight: 360,\r\n\t\t        panelHeight: 'auto',\r\n\t\t        height: 30,\r\n\t\t        width: 155\r\n\t    });\r\n        $(\"#addModule\").on(\"click\", function() {\r\n            var obj = new Object();\r\n            obj.moduleName = $(\"#addModuleName\").val();\r\n            obj.name = $(\"#addName\").val();\r\n            obj.target = $(\"#addModuleTarget\").val();\r\n            obj.parentId = $(\"#addModuleParent\").combobox(\"getValue\");\r\n            obj.indexNum = $(\"#addIndexNum\").val();\r\n            $.ajax({\r\n                url: '${basePath}/auth/module/addModule',\r\n                data: obj,\r\n                method: 'post',\r\n                dataType: 'json',\r\n                complete: function(jqXHR, textStatus) {\r\n                    $(\"#addModuleModal\").modal(\"hide\");\r\n                }\r\n            });\r\n        });\r\n    });\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/module/moduleList.easyui.vm",
    "content": "<ol class=\"breadcrumb\" style=\"margin-bottom:2px;\">\r\n    <li><a href=\"#\">首页</a>\r\n    </li>\r\n\t<li><a href=\"#\">权限管理</a>\r\n    </li>\r\n    <li><a href=\"#\">模块管理</a>\r\n    </li>\r\n    \r\n\r\n</ol>\r\n\r\n<!-- Modal -->\r\n<div class=\"modal fade text-center\" id=\"addModuleModal\"></div>\r\n<div class=\"modal fade text-center\" id=\"updateModuleModal\"></div>\r\n<div id=\"toolbar\" class=\"toolbuttonbar\">\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"save\">\r\n        <i class=\"glyphicon glyphicon-floppy-save\"></i>\r\n    </button>\r\n    <button class=\"btn btn-default\" id=\"add\" data-backdrop=\"false\" data-url=\"${basePath}/auth/module/addModuleView\" href=\"#addModuleModal\" data-toggle=\"modal\">\r\n        <i class=\"glyphicon glyphicon-plus\"></i>\r\n    </button>\r\n    <button class=\"btn btn-default\" id=\"edit\" data-backdrop=\"false\" data-url=\"${basePath}/auth/module/updateModuleView\" href=\"#updateModuleModal\" data-toggle=\"modal\">\r\n        <i class=\"glyphicon glyphicon-edit\"></i>\r\n    </button>\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"delete\">\r\n        <i class=\"glyphicon glyphicon-remove-circle\"></i>\r\n    </button>\r\n</div>\r\n<table id=\"moduleList\">\r\n</table>\r\n\r\n<script>\r\n    $(function() {\r\n    \r\n       /****************右方树型表格**************************/\r\n\t\t$('#moduleList').treegrid({\r\n\t\t\turl:\"${basePath}/auth/module/getModuleList\",\r\n\t\t\tmethod: 'post',\r\n\t\t\twidth: '100%',\r\n\t\t\theight: 500,\r\n\t\t\tnowrap: true,\r\n\t\t\tidField: 'id',\r\n\t\t\ttreeField: 'moduleName',\r\n\t\t\tsingleSelect: true,\r\n\t\t\ttoolbar:'#toolbar',\r\n\t\t\tcolumns: [[\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle:'模块名称', \r\n\t\t\t\t \tfield:'moduleName',\r\n\t\t\t\t \twidth: \"15%\",\r\n\t\t\t\t \thalign:'center'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle:'indexNum', \r\n\t\t\t\t\tfield:'indexNum', \r\n\t\t\t\t\twidth: \"15%\",\r\n\t\t\t\t\thalign:'center'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle:'target', \r\n\t\t\t\t\tfield:'target', \r\n\t\t\t\t\twidth: \"10%\",\r\n\t\t\t\t\thalign:'center'\r\n\t\t\t\t},\r\n\t\t\t\t{\r\n\t\t\t\t\ttitle:'name', \r\n\t\t\t\t\tfield:'name', \r\n\t\t\t\t\twidth: \"10%\",\r\n\t\t\t\t\thalign:'center'\r\n\t\t\t\t}\r\n\t\t\t]]\r\n\t\t});\r\n    })\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/module/moduleList.vm",
    "content": "<ol class=\"breadcrumb\" style=\"margin-bottom:2px;\">\r\n    <li><a href=\"#\">首页</a>\r\n    </li>\r\n\t<li><a href=\"#\">权限管理</a>\r\n    </li>\r\n    <li><a href=\"#\">模块管理</a>\r\n    </li>\r\n    \r\n</ol>\r\n\r\n<!-- Modal -->\r\n<div class=\"modal fade text-center\" id=\"addModuleModal\"></div>\r\n<div class=\"modal fade text-center\" id=\"updateModuleModal\"></div>\r\n<div id=\"toolbar\" class=\"btn-group\">\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"save\">\r\n        <i class=\"glyphicon glyphicon-floppy-save\"></i>\r\n    </button>\r\n    <button class=\"btn btn-default\" id=\"add\" data-backdrop=\"false\" data-url=\"${basePath}/auth/module/addModuleView\" href=\"#addModuleModal\" data-toggle=\"modal\">\r\n        <i class=\"glyphicon glyphicon-plus\"></i>\r\n    </button>\r\n    <button class=\"btn btn-default\" id=\"edit\" data-backdrop=\"false\" data-url=\"${basePath}/auth/module/updateModuleView\" href=\"#updateModuleModal\" data-toggle=\"modal\">\r\n        <i class=\"glyphicon glyphicon-edit\"></i>\r\n    </button>\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"delete\">\r\n        <i class=\"glyphicon glyphicon-remove-circle\"></i>\r\n    </button>\r\n</div>\r\n<table id=\"moduleList\" data-toggle=\"table\" data-url=\"${basePath}/auth/module/getModuleList\" data-show-header=\"true\" data-show-refresh=\"true\" data-show-columns=\"false\" data-pagination=\"true\" data-side-pagination=\"server\" data-height=\"520\" data-show-export=\"true\"  data-show-paginationSwitch=\"true\" data-pagination-detail-h-align=\"left\" data-pagination-h-align=\"right\" data-click-to-select=\"true\"\r\ndata-toolbar=\"#toolbar\">\r\n    <thead>\r\n        <tr>\r\n            <th data-field=\"state\" data-checkbox=\"true\"></th>\r\n            <th data-field=\"id\" data-visible=\"false\">id</th>\r\n            <th data-field=\"parentId\" data-visible=\"false\">parentId</th>\r\n            <th data-field=\"moduleName\" data-sortable=\"true\" data-editable=\"false\">模块名称</th>\r\n            <th data-field=\"name\" data-sortable=\"false\">名称(国际化)</th>\r\n            <th data-field=\"indexNum\" data-sortable=\"false\">序号</th>\r\n            <th data-field=\"target\" data-sortable=\"false\">Target</th>\r\n\t\t\t<th data-field=\"parentName\">父模块名称</th>\r\n\t\t\t<th data-field=\"creater\" data-sortable=\"false\" >创建人</th>\r\n            <th data-field=\"createTime\" data-sortable=\"false\" >创建日期</th>\r\n            <th data-field=\"updater\" data-sortable=\"false\">更新人</th>\r\n            <th data-field=\"updateTime\" data-sortable=\"false\">更新日期</th>\r\n        </tr>\r\n    </thead>\r\n</table>\r\n\r\n<script>\r\n\r\n    $(\"#moduleList\").bootstrapTable({\r\n       height:$(window).height()-130\r\n    });\r\n    $(function() {\r\n        \r\n        //排序事件\r\n        $(\"#moduleList\").on('sort.bs.table', function(name, order) {\r\n            $(this).bootstrapTable(\"getOptions\").pageNumber = 1; //默认排序从第一页开始\r\n        });\r\n\r\n        //添加模块\r\n        $(\"#add\").on(\"click\",function(){\r\n\t\t    $(\"#addModuleModal\").load($(this).attr(\"data-url\"));\r\n\t\t    $('#addModuleModal').on('hidden.bs.modal', function (e) {\r\n\t\t\t   search();\r\n\t\t\t})\r\n        });\r\n        \r\n        //更新模块\r\n        $(\"#edit\").on(\"click\", function() {\r\n            var data = $(\"#moduleList\").bootstrapTable(\"getSelections\");\r\n            if (data.length > 1||data.length<1) {\r\n                new $.flavr({\r\n                    animateEntrance: \"rollIn\",\r\n                    animateClosing: \"rollOut\",\r\n                    content: '请选择一条记录',\r\n                    autoclose: true,\r\n                    timeout: 3000\r\n                });\r\n                $('#updateModuleModal').modal({backdrop:false});//去掉蒙板\r\n                return;\r\n            }else{\r\n                $(\"#updateModuleModal\").load($(this).attr(\"data-url\"));\r\n\t\t\t    $('#updateModuleModal').on('hidden.bs.modal', function (e) {\r\n\t\t\t\t   search();\r\n\t\t\t\t});\r\n            }\r\n        });\r\n        \r\n        //删除模块\r\n        $(\"#delete\").on(\"click\", function() {\r\n            var datas = $(\"#moduleList\").bootstrapTable(\"getSelections\");\r\n            var ids = \"\";\r\n            var i = 0;\r\n            if (datas.length < 1) {\r\n                new $.flavr({\r\n                    animateEntrance: \"rollIn\",\r\n                    animateClosing: \"rollOut\",\r\n                    content: '请选择一条记录',\r\n                    autoclose: true,\r\n                    timeout: 3000\r\n                });\r\n                return;\r\n            }\r\n            for (i = 0; i < datas.length; i++) {\r\n                ids += datas[i].id + \",\";\r\n            }\r\n            $.ajax({\r\n                url: '${basePath}/auth/module/deleteModule?ids=' + ids,\r\n                method: 'post',\r\n                dataType: 'json',\r\n                complete: function(jqXHR, textStatus) {\r\n                    search();\r\n                }\r\n            });\r\n        });\r\n    })\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/module/updateModule.vm",
    "content": "<style>\r\n    .utable {\r\n        border: 0px;\r\n    }\r\n    .utable tr {\r\n        border: 0px;\r\n    }\r\n    .utable td {\r\n        text-align: right;\r\n        padding: 5px;\r\n        border: 0px;\r\n    }\r\n</style>\r\n<div class=\"modal-dialog\" style=\"display: inline-block; width: auto;\">\r\n    <div class=\"modal-content\">\r\n        <div class=\"modal-header text-left\">\r\n            <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span>\r\n            </button>\r\n            <h4 class=\"modal-title\" id=\"updateModuleModalLabel\">更新模块</h4>\r\n        </div>\r\n        <div class=\"modal-body\">\r\n            <table class=\"utable\">\r\n                <tr style=\"border: 0px;\">\r\n                    <td>\r\n                        <label for=\"updateModuleName\">模块名</label>\r\n                        <input type=\"text\" id=\"updateModuleName\">\r\n                    </td>\r\n                    <td>\r\n                        <label for=\"updateName\">名称(国际化)</label>\r\n                        <input type=\"text\" id=\"updateName\">\r\n                    </td>\r\n                    <td>\r\n                        <label for=\"updateModuleParent\">父模块</label>\r\n                        <input type=\"text\" id=\"updateModuleParent\">\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td>\r\n                        <label for=\"updateModuleTarget\">Target</label>\r\n                        <input type=\"text\" id=\"updateModuleTarget\">\r\n                    </td>\r\n                    <td>\r\n                        <label for=\"updateIndexNum\">序号</label>\r\n                        <input type=\"text\" id=\"updateIndexNum\">\r\n                    </td>\r\n                    <td>\r\n                    \r\n                    </td>\r\n                </tr>\r\n            </table>\r\n        </div>\r\n        <div class=\"modal-footer\">\r\n            <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\">关闭</button>\r\n            <button type=\"submit\" class=\"btn btn-success\" id=\"updateModule\">确定</button>\r\n        </div>\r\n    </div>\r\n\r\n</div>\r\n\r\n<script>\r\n    $(function() {\r\n\t    var data = $(\"#moduleList\").bootstrapTable(\"getSelections\")[0];\r\n\t    $(\"#updateModuleName\").val(data.moduleName);\r\n\t    $(\"#updateName\").val(data.name);\r\n\t    $(\"#updateModuleTarget\").val(data.target);\r\n\t    $(\"#updateIndexNum\").val(data.indexNum);\r\n\t    $(\"#updateModuleParent\").combobox({\r\n\t\t        url:'${basePath}/auth/module/getModuleListDropDown',\r\n\t\t        valueField: 'id',\r\n\t\t        textField: 'moduleName',\r\n\t\t        panelMaxHeight: 360,\r\n\t\t        panelHeight: 'auto',\r\n\t\t        height: 30,\r\n\t\t        width: 155,\r\n\t\t        disabled:true,\r\n\t\t        editable:false,\r\n\t\t        onLoadSuccess:function(){\r\n\t\t            $(this).combobox(\"setValue\",data.parentId);\r\n\t\t        }\r\n\t    });\r\n        $(\"#updateModule\").on(\"click\", function() {\r\n            var obj = new Object();\r\n            obj.moduleName = $(\"#updateModuleName\").val();\r\n            obj.name = $(\"#updateName\").val();\r\n            obj.target = $(\"#updateModuleTarget\").val();\r\n            obj.parentId = $(\"#updateModuleParent\").combobox(\"getValue\");\r\n            obj.indexNum = $(\"#updateIndexNum\").val();\r\n            var data = $(\"#moduleList\").bootstrapTable(\"getSelections\")[0];\r\n            obj.id = data.id;\r\n            $.ajax({\r\n                url: '${basePath}/auth/module/updateModule',\r\n                data: obj,\r\n                method: 'post',\r\n                dataType: 'json',\r\n                complete: function(jqXHR, textStatus) {\r\n                    $(\"#updateModuleModal\").modal(\"hide\");\r\n                }\r\n            });\r\n        });\r\n    });\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/role/addRole.vm",
    "content": "   <div class=\"modal-dialog\" style=\"display: inline-block; width: auto;\">\r\n            <div class=\"modal-content\">\r\n                <div class=\"modal-header text-left\">\r\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span>\r\n                    </button>\r\n                    <h4 class=\"modal-title\" id=\"addRoleModalLabel\">添加角色</h4>\r\n                </div>\r\n                <div class=\"modal-body\">\r\n                    <form class=\"form-inline\">\r\n                        <div class=\"form-group\">\r\n                            <label for=\"addRoleName\">角色名</label>\r\n                            <input type=\"text\" class=\"form-control\" id=\"addRoleName\" btvd-type=\"mail\" btvd-class='btvdclass' btvd-err=\"data-邮箱格式不正确！\">\r\n                        </div>\r\n                        <div class=\"form-group\">\r\n                            <label for=\"addRoleRemark\">角色描述</label>\r\n                            <input type=\"text\" class=\"form-control\" id=\"addRoleRemark\" btvd-type=\"mail\" btvd-class='btvdclass' btvd-err=\"data-邮箱格式不正确！\">\r\n                        </div>\r\n                    </form>\r\n                </div>\r\n                <div class=\"modal-footer\">\r\n                    <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\">关闭</button>\r\n                    <button type=\"submit\" class=\"btn btn-success\" id=\"addRole\">添加</button>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <script>\r\n            $(function() {\r\n                $(\"#addRole\").on(\"click\", function() {\r\n                    var obj = new Object();\r\n                    obj.name = $(\"#addRoleName\").val();\r\n                    obj.remark = $(\"#addRoleRemark\").val();\r\n                    $.ajax({\r\n                        url: '${basePath}/auth/role/addRole',\r\n                        data: obj,\r\n                        method: 'post',\r\n                        dataType: 'json',\r\n                        complete: function(jqXHR, textStatus) {\r\n                            $(\"#addRoleModal\").modal(\"hide\");\r\n                        }\r\n                    });\r\n                });\r\n            });\r\n        </script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/role/roleAllocation.vm",
    "content": "<ol class=\"breadcrumb\" style=\"margin-bottom:2px;\">\r\n    <li><a href=\"#\">首页</a>\r\n    </li>\r\n    <li><a href=\"#\">权限管理</a>\r\n    </li>\r\n    <li><a href=\"#\">角色分配</a>\r\n    </li>\r\n</ol>\r\n<div class=\"container-fluid\">\r\n    <div class=\"row\">\r\n        <div class=\"col-md-4\">\r\n           <table id=\"roleList\" data-cache=\"false\" data-toggle=\"table\" data-url=\"${basePath}/auth/role/getRoleList?search\" data-sort-name=\"name\" data-sort-order=\"desc\" data-show-header=\"true\" data-pagination=\"true\" data-side-pagination=\"server\" data-page-list=\"[10,20]\" data-height=\"test()\" data-show-export=\"false\" data-show-paginationSwitch=\"true\" data-pagination-detail-h-align=\"left\" data-pagination-h-align=\"right\" data-click-to-select=\"true\" data-single-select=\"true\">\r\n                <thead>\r\n                    <tr>\r\n                        <th data-field=\"state\" data-checkbox=\"true\"></th>\r\n                        <th data-field=\"id\" data-visible=\"false\">id</th>\r\n                        <th data-field=\"name\" data-sortable=\"true\" data-editable=\"false\">角色名</th>\r\n                        <th data-field=\"remark\" data-sortable=\"true\" data-editable=\"false\">描述</th>\r\n                    </tr>\r\n                </thead>\r\n            </table>\r\n            <div style=\"margin-top:10px;text-align:right\">\r\n                <button class=\"btn btn-success\" id=\"save\" data-backdrop=\"false\" data-url=\"${basePath}/auth/role/updateRoleView\" href=\"#updateRoleModal\" data-toggle=\"modal\">\r\n                    确定\r\n                </button>\r\n                <button class=\"btn btn-info\" id=\"edit\" data-backdrop=\"false\" data-url=\"${basePath}/auth/role/updateRoleView\" href=\"#updateRoleModal\" data-toggle=\"modal\">\r\n                    重置\r\n                </button>\r\n            </div>\r\n\r\n        </div>\r\n        <div class=\"col-md-8\">\r\n            <table id=\"userList\" data-cache=\"false\" data-toggle=\"table\" data-url=\"${basePath}/auth/role/getUserListByRoleId?search=\" data-response-handler=\"responseHandler\" data-sort-name=\"userName\" data-sort-order=\"desc\" data-show-header=\"true\" data-pagination=\"true\" data-side-pagination=\"server\" data-page-list=\"[10,20]\" data-height=\"500\" data-show-paginationSwitch=\"true\" data-pagination-detail-h-align=\"left\" data-pagination-h-align=\"right\" data-click-to-select=\"true\">\r\n                <thead>\r\n                    <tr>\r\n                        <th data-field=\"state\" data-checkbox=\"true\"></th>\r\n                        <th data-field=\"id\" data-visible=\"false\">id</th>\r\n                        <th data-field=\"userName\" data-sortable=\"true\" data-editable=\"false\">用户名</th>\r\n                        <th data-field=\"gender\" data-sortable=\"true\" data-formatter=\"formatGender\">性别</th>\r\n                        <th data-field=\"creater\" data-sortable=\"true\">创建人</th>\r\n                        <th data-field=\"createTime\" data-sortable=\"true\">创建日期</th>\r\n                        <th data-field=\"updater\" data-sortable=\"true\">更新人</th>\r\n                        <th data-field=\"updateTime\" data-sortable=\"true\">更新日期</th>\r\n                    </tr>\r\n                </thead>\r\n            </table>\r\n        </div>\r\n    </div>\r\n</div>\r\n<script>\r\n    \r\n    var $table = $('#userList');\r\n    var selections = new Array();;\r\n    $(function() {\r\n\r\n        $(\"#roleList\").bootstrapTable().on(\"click-row.bs.table\", function(e, row, $element) {\r\n            var options = $(\"#userList\").bootstrapTable(\"getOptions\");\r\n            selections = new Array();\r\n            options.pageNumber = 1;\r\n            options.url = \"${basePath}/auth/role/getUserListByRoleId?search=&roleId=\" + row.id;\r\n            $(\"#userList\").bootstrapTable(\"refresh\", {\r\n                query: {\r\n                    offset: 0\r\n                }\r\n            });\r\n        });\r\n        \r\n        $(\"#userList\").bootstrapTable().on(\"load-success.bs.table\", function(e, data) {\r\n            var roleId = $(\"#roleList\").bootstrapTable(\"getSelections\");\r\n            if (!roleId || roleId.length == 0) {\r\n                return;\r\n            }\r\n            var rows = data.rows;\r\n            for (var index = 0; index < rows.length; index++) {\r\n                if (rows[index].selected == true) {\r\n                    $(\"#userList\").bootstrapTable(\"check\", index)\r\n                }\r\n            }\r\n\r\n        });\r\n        $(\"#userList\").bootstrapTable().on(\"check.bs.table check-all.bs.table\",function(){\r\n            selections = $.merge(selections,getIdSelections());\r\n            selections.sort();\r\n            selections = $.unique(selections);\r\n        });\r\n        \r\n    });\r\n\r\n    $(\"#save\").on(\"click\", function() {\r\n\r\n        var roleId = $(\"#roleList\").bootstrapTable(\"getSelections\")[0].id;\r\n        if (!roleId) {\r\n            return;\r\n        }\r\n        var userList = $(\"#userList\").bootstrapTable(\"getSelections\");\r\n        var userIds = new Array();\r\n        for (var i = 0; i < userList.length; i++) {\r\n            userIds.push(userList[i].id);\r\n        }\r\n        $.ajax({\r\n            url: '${basePath}/auth/role/updateRoleToUserRel?roleId=' + roleId + \"&userIds=\" + selections,\r\n            method: 'post',\r\n            dataType: 'json',\r\n            complete: function(jqXHR, textStatus) {\r\n                new $.flavr({\r\n                    animateEntrance: \"rollIn\",\r\n                    animateClosing: \"rollOut\",\r\n                    content: '分配成功',\r\n                    autoclose: true,\r\n                    timeout: 3000\r\n                });\r\n            $(\"#roleList\").bootstrapTable(\"refresh\"); \r\n            //clear\r\n            selections = new Array();\r\n            var options = $(\"#userList\").bootstrapTable(\"getOptions\");\r\n            options.pageNumber = 1;\r\n            options.url = \"${basePath}/auth/role/getUserListByRoleId?search=&roleId=\";\r\n            $(\"#userList\").bootstrapTable(\"refresh\");\r\n            }\r\n        });\r\n\r\n    });\r\n\r\n    function getIdSelections() {\r\n        return $.map($table.bootstrapTable('getSelections'), function(row) {\r\n            return row.id\r\n        });\r\n    }\r\n\r\n    function responseHandler(res) {\r\n        $.each(res.rows, function(i, row) {\r\n            row.state = $.inArray(row.id, selections) !== -1;\r\n        });\r\n        return res;\r\n    }\r\n     $(\"#roleList\").bootstrapTable({\r\n\t       height:$(window).height()-240\r\n\t });\r\n     $(\"#userList\").bootstrapTable({\r\n\t       height:$(window).height()-160\r\n\t });\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/role/roleList.vm",
    "content": "<ol class=\"breadcrumb\" style=\"margin-bottom:2px;\">\r\n    <li><a href=\"#\">首页</a>\r\n    </li>\r\n    <li><a href=\"#\">权限管理</a>\r\n    </li>\r\n    <li><a href=\"#\">角色管理</a>\r\n    </li>\r\n    \r\n\r\n</ol>\r\n\r\n<!-- Modal -->\r\n<div class=\"modal fade text-center\" id=\"addRoleModal\"></div>\r\n<div class=\"modal fade text-center\" id=\"updateRoleModal\"></div>\r\n<div id=\"toolbar\" class=\"btn-group\">\r\n    <input class=\"form-\" type=\"text\" placeholder=\"角色名/描述\" style=\"float:left\" id=\"searchBox\" />\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"search\" style=\"margin-left:5px;\">\r\n        <i class=\"glyphicon glyphicon-search\"></i>\r\n    </button>\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"save\">\r\n        <i class=\"glyphicon glyphicon-floppy-save\"></i>\r\n    </button>\r\n    <button class=\"btn btn-default\" id=\"add\" data-backdrop=\"false\" data-url=\"${basePath}/auth/role/addRoleView\" href=\"#addRoleModal\" data-toggle=\"modal\">\r\n        <i class=\"glyphicon glyphicon-plus\"></i>\r\n    </button>\r\n    <button class=\"btn btn-default\" id=\"edit\" data-backdrop=\"false\" data-url=\"${basePath}/auth/role/updateRoleView\" href=\"#updateRoleModal\" data-toggle=\"modal\">\r\n        <i class=\"glyphicon glyphicon-edit\"></i>\r\n    </button>\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"delete\">\r\n        <i class=\"glyphicon glyphicon-remove-circle\"></i>\r\n    </button>\r\n</div>\r\n<table id=\"roleList\" data-cache=\"false\" data-toggle=\"table\" data-url=\"${basePath}/auth/role/getRoleList?search\" data-sort-name=\"name\" data-sort-order=\"desc\" data-show-header=\"true\" data-show-refresh=\"true\" data-show-columns=\"true\" data-pagination=\"true\" data-side-pagination=\"server\" data-page-list=\"[10,20]\" data-page-size=\"20\" data-height=\"test()\" data-show-export=\"false\" data-toolbar=\"#toolbar\" data-show-paginationSwitch=\"true\" data-pagination-detail-h-align=\"left\" data-pagination-h-align=\"right\" data-click-to-select=\"true\">\r\n    <thead>\r\n        <tr>\r\n            <th data-field=\"state\" data-checkbox=\"true\"></th>\r\n            <th data-field=\"id\" data-visible=\"false\">id</th>\r\n            <th data-field=\"name\" data-sortable=\"true\" data-editable=\"false\">角色名</th>\r\n            <th data-field=\"remark\" data-sortable=\"true\" data-editable=\"false\">描述</th>\r\n            <th data-field=\"creater\" data-sortable=\"true\">创建人</th>\r\n            <th data-field=\"createTime\" data-sortable=\"true\" >创建日期</th>\r\n            <th data-field=\"updater\" data-sortable=\"true\">更新人</th>\r\n            <th data-field=\"updateTime\" data-sortable=\"true\">更新日期</th>\r\n        </tr>\r\n    </thead>\r\n</table>\r\n<script>\r\n    \r\n    $(\"#roleList\").bootstrapTable({\r\n       height:$(window).height()-120\r\n    });\r\n    $(function() {\r\n        //搜索事件\r\n        $(\"#search\").on(\"click\", function() {\r\n            search();\r\n        });\r\n        \r\n        function search() {\r\n            var $table = $(\"#roleList\");\r\n            var searchText = $(\"#searchBox\").val();\r\n            $.post(\"${basePath}/auth/role/getRoleList\", {\r\n                search: searchText,\r\n                limit: 20,\r\n                offset: 0,\r\n                order: \"desc\",\r\n                sort: 'name'\r\n            }, function(res) {\r\n                $table.bootstrapTable(\"getOptions\").pageNumber = 1; //默认排序从第一页开始\r\n                $table.bootstrapTable('load', res);\r\n            });\r\n        }\r\n        //排序事件\r\n        $(\"#userList\").on('sort.bs.table', function(name, order) {\r\n            $(this).bootstrapTable(\"getOptions\").pageNumber = 1; //默认排序从第一页开始\r\n        });\r\n\r\n        //添加角色\r\n        $(\"#add\").on(\"click\",function(){\r\n\t\t    $(\"#addRoleModal\").load($(this).attr(\"data-url\"));\r\n\t\t    $('#addRoleModal').on('hidden.bs.modal', function (e) {\r\n\t\t\t  search();\r\n\t\t\t})\r\n        });\r\n        \r\n        //更新角色\r\n        $(\"#edit\").on(\"click\", function() {\r\n            var data = $(\"#roleList\").bootstrapTable(\"getSelections\");\r\n            if (data.length > 1||data.length<1) {\r\n                new $.flavr({\r\n                    animateEntrance: \"rollIn\",\r\n                    animateClosing: \"rollOut\",\r\n                    content: '请选择一条记录',\r\n                    autoclose: true,\r\n                    timeout: 3000\r\n                });\r\n                $('#updateRoleModal').modal({backdrop:false});//去掉蒙板\r\n                return;\r\n            }else{\r\n                $(\"#updateRoleModal\").load($(this).attr(\"data-url\"));\r\n\t\t\t    $('#updateRoleModal').on('hidden.bs.modal', function (e) {\r\n\t\t\t\t   search();\r\n\t\t\t\t});\r\n            }\r\n        });\r\n        \r\n        //删除角色\r\n        $(\"#delete\").on(\"click\", function() {\r\n            var datas = $(\"#roleList\").bootstrapTable(\"getSelections\");\r\n            var ids = \"\";\r\n            var i = 0;\r\n            if (datas.length < 1) {\r\n                new $.flavr({\r\n                    animateEntrance: \"rollIn\",\r\n                    animateClosing: \"rollOut\",\r\n                    content: '请选择一条记录',\r\n                    autoclose: true,\r\n                    timeout: 3000\r\n                });\r\n                return;\r\n            }\r\n            for (i = 0; i < datas.length; i++) {\r\n                ids += datas[i].id + \",\";\r\n            }\r\n            $.ajax({\r\n                url: '${basePath}/auth/role/deleteRole?ids=' + ids,\r\n                method: 'post',\r\n                dataType: 'json',\r\n                complete: function(jqXHR, textStatus) {\r\n                    search();\r\n                }\r\n            });\r\n        });\r\n    })\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/role/updateRole.vm",
    "content": "   <div class=\"modal-dialog\" style=\"display: inline-block; width: auto;\">\r\n            <div class=\"modal-content\">\r\n                <div class=\"modal-header text-left\">\r\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span>\r\n                    </button>\r\n                    <h4 class=\"modal-title\" id=\"updateRoleModalLabel\">更新角色</h4>\r\n                </div>\r\n                <div class=\"modal-body\">\r\n                    <form class=\"form-inline\">\r\n                        <div class=\"form-group\">\r\n                            <label for=\"updateRoleName\">角色名</label>\r\n                            <input type=\"text\" class=\"form-control\" id=\"updateRoleName\" btvd-type=\"mail\" btvd-class='btvdclass' btvd-err=\"data-邮箱格式不正确！\">\r\n                        </div>\r\n                        <div class=\"form-group\">\r\n                            <label for=\"updateRoleRemark\">角色描述</label>\r\n                            <input type=\"text\" class=\"form-control\" id=\"updateRoleRemark\" btvd-type=\"mail\" btvd-class='btvdclass' btvd-err=\"data-邮箱格式不正确！\">\r\n                        </div>\r\n                    </form>\r\n                </div>\r\n                <div class=\"modal-footer\">\r\n                    <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\">关闭</button>\r\n                    <button type=\"submit\" class=\"btn btn-success\" id=\"updateRole\">更新</button>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <script>\r\n            $(function() {\r\n                var data = $(\"#roleList\").bootstrapTable(\"getSelections\")[0];\r\n                $(\"#updateRoleName\").val(data.name);\r\n                $(\"#updateRoleRemark\").val(data.remark);\r\n                $(\"#updateRole\").on(\"click\", function() {\r\n                    var obj = new Object();\r\n                    data.name = $(\"#updateRoleName\").val();\r\n                    data.remark = $(\"#updateRoleRemark\").val();\r\n                    $.ajax({\r\n                        url: '${basePath}/auth/role/updateRole',\r\n                        data: data,\r\n                        method: 'post',\r\n                        dataType: 'json',\r\n                        complete: function(jqXHR, textStatus) {\r\n                            $(\"#updateRoleModal\").modal(\"hide\");\r\n                        }\r\n                    });\r\n                });\r\n            });\r\n        </script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/user/addUser.vm",
    "content": "   <div class=\"modal-dialog\" style=\"display: inline-block; width: auto;\">\r\n            <div class=\"modal-content\">\r\n                <div class=\"modal-header text-left\">\r\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span>\r\n                    </button>\r\n                    <h4 class=\"modal-title\" id=\"addUserModalLabel\">添加用户</h4>\r\n                </div>\r\n                <div class=\"modal-body\">\r\n                    <form class=\"form-inline\">\r\n                        <div class=\"form-group\">\r\n                            <label for=\"addUserName\">用户名</label>\r\n                            <input type=\"text\" class=\"form-control\" id=\"addUserName\" btvd-type=\"mail\" btvd-class='btvdclass' btvd-err=\"data-邮箱格式不正确！\">\r\n                        </div>\r\n                        <div class=\"form-group\">\r\n                            <label for=\"addUserPassword\">密码</label>\r\n                            <div class=\"input-group\">\r\n                                <input type=\"text\" value=\"6666\" class=\"form-control\" id=\"addUserPassword\">\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-group\">\r\n                            <input type=\"radio\" name=\"addGender\" data-labelauty=\"男\" value=\"male\" checked=\"checked\">\r\n                            <input type=\"radio\" name=\"addGender\" data-labelauty=\"女\" value=\"female\">\r\n                        </div>\r\n                    </form>\r\n                </div>\r\n                <div class=\"modal-footer\">\r\n                    <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\">关闭</button>\r\n                    <button type=\"submit\" class=\"btn btn-success\" id=\"addUser\">添加</button>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <script>\r\n            $(function() {\r\n                $(':input[name=addGender]').labelauty();\r\n                $(\"#addUser\").on(\"click\", function() {\r\n                    var obj = new Object();\r\n                    obj.userName = $(\"#addUserName\").val();\r\n                    obj.password = md5($(\"#addUserPassword\").val());\r\n                    obj.gender = $(\"input[name='addGender']:checked\").val();\r\n                    $.ajax({\r\n                        url: '${basePath}/auth/user/addUser',\r\n                        data: obj,\r\n                        method: 'post',\r\n                        dataType: 'json',\r\n                        complete: function(jqXHR, textStatus) {\r\n                            $(\"#addUserModal\").modal(\"hide\");\r\n                        }\r\n                    });\r\n                });\r\n            });\r\n        </script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/user/updateUser.vm",
    "content": "   <div class=\"modal-dialog\" style=\"display: inline-block; width: auto;\">\r\n            <div class=\"modal-content\">\r\n                <div class=\"modal-header text-left\">\r\n                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span>\r\n                    </button>\r\n                    <h4 class=\"modal-title\" id=\"updateUserModalLabel\">更新用户</h4>\r\n                </div>\r\n                <div class=\"modal-body\">\r\n                    <form class=\"form-inline\">\r\n                        <div class=\"form-group\">\r\n                            <label for=\"updateUserName\">用户名</label>\r\n                            <input type=\"text\" class=\"form-control\" id=\"updateUserName\" btvd-type=\"mail\" btvd-class='btvdclass' btvd-err=\"data-邮箱格式不正确！\">\r\n                        </div>\r\n                        <div class=\"form-group\">\r\n                            <label for=\"updateUserPassword\">密码</label>\r\n                            <div class=\"input-group\">\r\n                                <input type=\"text\" class=\"form-control\" id=\"updateUserPassword\">\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-group\">\r\n                            <input type=\"radio\" name=\"updateGender\" data-labelauty=\"男\" value=\"male\" checked=\"checked\">\r\n                            <input type=\"radio\" name=\"updateGender\" data-labelauty=\"女\" value=\"female\">\r\n                        </div>\r\n                    </form>\r\n                </div>\r\n                <div class=\"modal-footer\">\r\n                    <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\">关闭</button>\r\n                    <button type=\"submit\" class=\"btn btn-success\" id=\"updateUser\">确定</button>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <script>\r\n            $(function() {\r\n                $(':input[name=updateGender]').labelauty();\r\n                var data = $(\"#userList\").bootstrapTable(\"getSelections\")[0];\r\n                $(\"#updateUserName\").val(data.userName);\r\n                //$(\"#updateUserPassword\").val('');\r\n                var gender = data.gender;\r\n                //根据value值设置radio选中项\r\n                $(\"input:radio[value=\"+gender+\"]\").attr('checked','true');\r\n                $(\"#updateUser\").on(\"click\", function() {\r\n                    data.userName = $(\"#updateUserName\").val();\r\n                    //加密\r\n                    data.password = md5($(\"#updateUserPassword\").val());\r\n                    data.gender = $(\"input[name='updateGender']:checked\").val();\r\n                    $.ajax({\r\n                        url: '${basePath}/auth/user/updateUser',\r\n                        data: data,\r\n                        method: 'post',\r\n                        dataType: 'json',\r\n                        complete: function(jqXHR, textStatus) {\r\n                            $(\"#updateUserName\").val(\"\");\r\n                            $(\"#updateUserPassword\").val(\"\");\r\n                            $(\"#updateUserModal\").modal(\"hide\");\r\n                        }\r\n                    });\r\n                });\r\n            });\r\n        </script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/auth/user/userList.vm",
    "content": "<ol class=\"breadcrumb\" style=\"margin-bottom:2px;\">\r\n    <li><a href=\"#\">首页</a>\r\n    </li>\r\n    <li><a href=\"#\">权限管理</a>\r\n    </li>\r\n    <li><a href=\"#\">用户管理</a>\r\n    </li>\r\n    \r\n\r\n</ol>\r\n\r\n<!-- Modal -->\r\n<div class=\"modal fade text-center\" id=\"addUserModal\"></div>\r\n<div class=\"modal fade text-center\" id=\"updateUserModal\"></div>\r\n<div id=\"toolbar\" class=\"btn-group\">\r\n    <input class=\"form-\" type=\"text\" placeholder=\"用户名\" style=\"float:left\" id=\"searchBox\" />\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"search\" style=\"margin-left:5px;\">\r\n        <i class=\"glyphicon glyphicon-search\"></i>\r\n    </button>\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"save\">\r\n        <i class=\"glyphicon glyphicon-floppy-save\"></i>\r\n    </button>\r\n    <button class=\"btn btn-default\" id=\"add\" data-backdrop=\"false\" data-url=\"${basePath}/auth/user/addUserView\" href=\"#addUserModal\" data-toggle=\"modal\">\r\n        <i class=\"glyphicon glyphicon-plus\"></i>\r\n    </button>\r\n    <button class=\"btn btn-default\" id=\"edit\" data-backdrop=\"false\" data-url=\"${basePath}/auth/user/updateUserView\" href=\"#updateUserModal\" data-toggle=\"modal\">\r\n        <i class=\"glyphicon glyphicon-edit\"></i>\r\n    </button>\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"delete\">\r\n        <i class=\"glyphicon glyphicon-remove-circle\"></i>\r\n    </button>\r\n</div>\r\n<table id=\"userList\" data-cache=\"false\" data-toggle=\"table\" data-url=\"${basePath}/auth/user/getUserList?search\" data-sort-name=\"userName\" data-sort-order=\"desc\" data-show-header=\"true\" data-show-refresh=\"true\" data-show-columns=\"false\" data-pagination=\"true\" data-side-pagination=\"server\" data-page-size=\"20\" data-page-list=\"[10,20]\" data-height=\"520\" data-show-export=\"true\" data-toolbar=\"#toolbar\" data-show-paginationSwitch=\"true\" data-pagination-detail-h-align=\"left\" data-pagination-h-align=\"right\" data-click-to-select=\"true\">\r\n    <thead>\r\n        <tr>\r\n            <th data-field=\"state\" data-checkbox=\"true\"></th>\r\n            <th data-field=\"id\" data-visible=\"false\">id</th>\r\n            <th data-field=\"userName\" data-sortable=\"true\" data-editable=\"false\">用户名</th>\r\n            <th data-field=\"password\" data-sortable=\"false\">密码</th>\r\n            <th data-field=\"gender\" data-align=\"center\" data-sortable=\"true\" data-formatter=\"formatGender\">性别</th>\r\n            <th data-field=\"creater\" data-sortable=\"true\">创建人</th>\r\n            <th data-field=\"createTime\" data-sortable=\"true\" >创建日期</th>\r\n            <th data-field=\"updater\" data-sortable=\"true\">更新人</th>\r\n            <th data-field=\"updateTime\" data-sortable=\"true\">更新日期</th>\r\n        </tr>\r\n    </thead>\r\n</table>\r\n\r\n<script>\r\n    $(function() {\r\n    \r\n        //搜索事件\r\n        $(\"#search\").on(\"click\", function() {\r\n            search();\r\n        });\r\n        \r\n        function search() {\r\n            var $table = $(\"#userList\");\r\n            var searchText = $(\"#searchBox\").val();\r\n            $.post(\"${basePath}/auth/user/getUserList\", {\r\n                search: searchText,\r\n                limit: 20,\r\n                offset: 0,\r\n                order: \"desc\",\r\n                sort: 'userName'\r\n            }, function(res) {\r\n                $table.bootstrapTable(\"getOptions\").pageNumber = 1; //默认排序从第一页开始\r\n                $table.bootstrapTable('load', res);\r\n            });\r\n        }\r\n        //排序事件\r\n        $(\"#userList\").on('sort.bs.table', function(name, order) {\r\n            $(this).bootstrapTable(\"getOptions\").pageNumber = 1; //默认排序从第一页开始\r\n        });\r\n\r\n\r\n        //添加用户\r\n        $(\"#add\").on(\"click\",function(){\r\n\t\t    $(\"#addUserModal\").load($(this).attr(\"data-url\"));\r\n\t\t    $('#addUserModal').on('hidden.bs.modal', function (e) {\r\n\t\t\t  search();\r\n\t\t\t})\r\n        });\r\n        \r\n        //更新用户\r\n        $(\"#edit\").on(\"click\", function() {\r\n            var data = $(\"#userList\").bootstrapTable(\"getSelections\");\r\n            if (data.length > 1||data.length<1) {\r\n                new $.flavr({\r\n                    animateEntrance: \"rollIn\",\r\n                    animateClosing: \"rollOut\",\r\n                    content: '请选择一条记录',\r\n                    autoclose: true,\r\n                    timeout: 3000\r\n                });\r\n                $('#updateUserModal').modal({backdrop:false});//去掉蒙板\r\n                return;\r\n            }else{\r\n                $(\"#updateUserModal\").load($(this).attr(\"data-url\"));\r\n\t\t\t    $('#updateUserModal').on('hidden.bs.modal', function (e) {\r\n\t\t\t\t   search();\r\n\t\t\t\t});\r\n            }\r\n        });\r\n        //删除用户\r\n        $(\"#delete\").on(\"click\", function() {\r\n            var datas = $(\"#userList\").bootstrapTable(\"getSelections\");\r\n            var ids = \"\";\r\n            var i = 0;\r\n            if (datas.length < 1) {\r\n                new $.flavr({\r\n                    animateEntrance: \"rollIn\",\r\n                    animateClosing: \"rollOut\",\r\n                    content: '请选择一条记录',\r\n                    autoclose: true,\r\n                    timeout: 3000\r\n                });\r\n                return;\r\n            }\r\n            for (i = 0; i < datas.length; i++) {\r\n                ids += datas[i].id + \",\";\r\n            }\r\n            $.ajax({\r\n                url: '${basePath}/auth/user/deleteUser?ids=' + ids,\r\n                method: 'post',\r\n                dataType: 'json',\r\n                complete: function(jqXHR, textStatus) {\r\n                    search();\r\n                }\r\n            });\r\n        });\r\n    });\r\n    $(\"#userList\").bootstrapTable({\r\n       height:$(window).height()-140\r\n    });\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/common/header.vm",
    "content": "<nav class=\"navbar box-shadow bg-white-only \" role=\"navigation\" style=\"margin-bottom:1px;\">\r\n    <div class=\"navbar-header\" style=\"margin-left:20px;\">\r\n        <img  src=\"${basePath}/static/img/logo.png\" alt=\"...\">\r\n    </div>\r\n    <div style=\"margin-right:40px;float:left;line-height:50px;\">\r\n        <span>\r\n           <i class=\"fa fa-dedent fa-fw\"></i>\r\n        </span>\r\n        <span>\r\n           <i class=\"icon-user fa-fw\"></i>\r\n        </span>\r\n        <span class=\"dropdown\">\r\n             <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">\r\n                #springMessage(\"header.message\") \r\n                <b class=\"caret\"></b>\r\n             </a>\r\n\t\t\t \r\n\t\t\t\r\n       </span>\r\n       <span class=\"dropdown\">\r\n             <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">\r\n                #springMessage(\"header.to-list\")\r\n                <b class=\"caret\"></b>\r\n             </a>\r\n\t\t\t  <ul class=\"dropdown-menu dropdown-menu-right\" role=\"menu\" aria-labelledby=\"dropdownMenu1\">\r\n\t\t\t\t<li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">English</a></li>\r\n\t\t\t\t<li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Chniese</a></li>\r\n\t\t\t  </ul>\r\n\t\t\t\r\n       </span>\r\n    </div>\r\n    <div style=\"margin-right:40px;float:right;line-height:50px;\">\r\n        <span class=\"dropdown\">\r\n             <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">\r\n                #springMessage(\"header.language\")\r\n                <b class=\"caret\"></b>\r\n             </a>\r\n\t\t\t   <ul class=\"dropdown-menu dropdown-menu-right\" role=\"menu\" aria-labelledby=\"dropdownMenu1\">\r\n\t\t\t\t<li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" onclick=\"changeLang('en')\">#springMessage(\"header.en\")</a></li>\r\n\t\t\t\t<li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" onclick=\"changeLang('zh')\">#springMessage(\"header.zh_CH\")</a></li>\r\n\t\t\t  </ul>\r\n\t\t\t\r\n       </span>\r\n        <span>\r\n          <i class=\"fa fa-expand fa-fw text\"></i>\r\n       </span>\r\n        <span>\r\n          <i class=\"icon-bell fa-fw\"></i>\r\n       </span>\r\n        <span class=\"dropdown\">\r\n             <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">\r\n\t\t\t    $!{Env.getUser().getUserName()}&nbsp;\r\n                <img  src=\"${basePath}/static/img/a0.jpg\" alt=\"...\" class=\"img-circle\">\r\n                <b class=\"caret\"></b>\r\n             </a>\r\n\t\t\t  <ul style=\"min-width:80px;\" class=\"dropdown-menu dropdown-menu-right\" role=\"menu\" aria-labelledby=\"dropdownMenu1\">\r\n\t\t\t\t<li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"${basePath}/logout\"><i class=\"glyphicon glyphicon-off\"></i>退出</a></li>\r\n\t\t\t  </ul>\r\n\t\t\t\r\n       </span>\r\n    </div>\r\n</nav>\r\n<script>\r\n    function changeLang(lang){\r\n        $.post(\"${basePath}/lang?langType=\"+lang,function(data,status){\r\n\t        location.reload();\r\n\t    });\r\n    }\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/common/layout.vm",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head lang=\"en\">\r\n    <meta charset=\"UTF-8\">\r\n    <title>HR-ADMIN</title>\r\n    <link href=\"${basePath}/static/css/style.css\" rel=\"stylesheet\">\r\n    <link href=\"${basePath}/static/css/bootstrap.css\" rel=\"stylesheet\">\r\n    <link href=\"${basePath}/static/css/font-awesome.min.css\" rel=\"stylesheet\">\r\n    <link href=\"${basePath}/static/css/simple-line-icons.css\" rel=\"stylesheet\">\r\n    <link href=\"${basePath}/static/css/layout.css\" rel=\"stylesheet\">\r\n    <script src=\"${basePath}/static/js/jquery.min.js\"></script>\r\n    <script src=\"${basePath}/static/js/bootstrap.min.js\"></script>\r\n    <link rel=\"shortcut icon\" href=\"/hr/static/img/favicon.ico\" />\r\n    <link href=\"${basePath}/static/css/bootstrap-table.css\" rel=\"stylesheet\">\r\n    <link href=\"${basePath}/static/css/bootstrap-table-editable.css\" rel=\"stylesheet\">\r\n    <script src=\"${basePath}/static/js/bootstrap-table.js\"></script>\r\n    <script src=\"${basePath}/static/js/bootstrap-table-zh-CN.js\"></script>\r\n    <script src=\"${basePath}/static/js/dateFormat.js\"></script>\r\n    <script src=\"${basePath}/static/js/bootstrap-table-editable.js\"></script>\r\n    <script src=\"${basePath}/static/js/bootstrap-editable.js\"></script>  \r\n    <script src=\"${basePath}/static/js/bootstrap-table-export.js\"></script>\r\n    <script src=\"${basePath}/static/js/tableExport.js\"></script>\r\n    <link href=\"${basePath}/static/css/animate.css\" rel=\"stylesheet\">\r\n    <link href=\"${basePath}/static/css/flavr.css\" rel=\"stylesheet\">\r\n\t<script src=\"${basePath}/static/js/flavr.js\"></script>\r\n\t<script src=\"${basePath}/static/js/jquery.datetimepicker.js\"></script>\r\n\t<link href=\"${basePath}/static/css/jquery.datetimepicker.css\" rel=\"stylesheet\">\r\n\t<script src=\"${basePath}/static/js/jquery.nicescroll.js\"></script>\r\n    <script src=\"${basePath}/static/jcheckbox/js/jquery-labelauty.js\"></script>\r\n    <link href=\"${basePath}/static/jcheckbox/css/jquery-labelauty.css\" rel=\"stylesheet\">\r\n    <script src=\"${basePath}/static/js/bt-validate.js\"></script>\r\n    <script src=\"${basePath}/static/js/md5.min.js\"></script>\r\n    <script src=\"${basePath}/static/js/json.js\"></script>\r\n    <script src=\"${basePath}/static/js/bootstrap-combobox.min.js\"></script>\r\n    <link href=\"${basePath}/static/easyui/themes/metro/easyui.css\" rel=\"stylesheet\">\r\n    <script src=\"${basePath}/static//easyui/jquery.easyui.min.js\"></script>\r\n    <link href=\"${basePath}/static/css/build.css\" rel=\"stylesheet\">\r\n</head>\r\n      #parse(\"${header_path}\")\r\n           #parse(\"${left_path}\") \r\n      \r\n      <div style=\"margin-left:161px;margin-right:6px;font-family:'微软雅黑'\">\r\n            #parse(\"${content_path}\")\r\n      </div>\r\n\n      <div class=\"footer\">\r\n          Copyright © 2015 L.Tao All rights Reserved.\r\n      </div>\r\n\n      <script>\r\n          $(function(){\r\n                 $.fn.editable.defaults.mode = 'inline';\r\n\t\t         $(\"html\").niceScroll({\r\n\t\t            cursorcolor: \"#777777\",\r\n\t\t            cursoropacitymax: 1,\r\n\t\t            touchbehavior: false,\r\n\t\t            cursorwidth: \"6px\",\r\n\t\t            cursorborder: \"5\",\r\n\t\t            cursorborderradius: \"4px\",\r\n\t\t            autohidemode: true\r\n\t\t         });\r\n          });\r\n      </script>\r\n</body>\r\n</html>\n"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/common/left.vm",
    "content": "<div class=\"leftsidebar_box\">\r\n    <a href=\"${basePath}/index\">\r\n    <dl class=\"system_log\" style=\"margin-top:40px;\">\r\n        <dt >#springMessage(\"home.dashboard\")<img src=\"${basePath}/static/img/left/select_xl01.png\"></dt>\r\n    </dl>\r\n    </a>\r\n    <dl class=\"custom\">\r\n        <dt >权限管理<img src=\"${basePath}/static/img/left/select_xl01.png\"></dt>\r\n        <dd class=\"first_dd\"><a href=\"${basePath}/auth/role/listView\">角色管理</a>\r\n        </dd>\r\n        <dd ><a href=\"${basePath}/auth/user/listView\">用户管理</a>\r\n        </dd>\r\n        <dd><a href=\"${basePath}/auth/role/roleAllocationView\">角色分配</a>\r\n        </dd>\r\n        <dd><a href=\"${basePath}/auth/module/listView\">模块管理</a>\r\n        </dd>\r\n    </dl>\r\n    <dl class=\"system_log\">\r\n        <dt >组织管理<img src=\"${basePath}/static/img/left/select_xl01.png\"></dt>\r\n        <dd class=\"first_dd\"><a href=\"${basePath}/ou/list\">组织信息</a>\r\n        </dd>\r\n        <dd><a href=\"#\">组织类型</a>\r\n        </dd>\r\n        <dd><a href=\"#\">组织类别</a>\r\n        </dd>\r\n        <dd><a href=\"#\">组织地址</a>\r\n        </dd>\r\n    </dl>\r\n\r\n    <dl class=\"channel\">\r\n        <dt>人员管理<img src=\"${basePath}/static/img/left/select_xl01.png\"></dt>\r\n        <dd class=\"first_dd\"><a href=\"#\">渠道主页</a>\r\n        </dd>\r\n        <dd><a href=\"#\">渠道标准管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">系统通知</a>\r\n        </dd>\r\n        <dd><a href=\"#\">渠道商管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">渠道商链接</a>\r\n        </dd>\r\n    </dl>\r\n\r\n    <dl class=\"app\">\r\n        <dt >薪酬管理<img src=\"${basePath}/static/img/left/select_xl01.png\"></dt>\r\n        <dd class=\"first_dd\"><a href=\"#\">App运营商管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">开放接口管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">接口类型管理</a>\r\n        </dd>\r\n    </dl>\r\n\r\n    <dl class=\"cloud\">\r\n        <dt>合同管理</dt>\r\n        <dd class=\"first_dd\"><a href=\"#\">平台运营商管理</a>\r\n        </dd>\r\n    </dl>\r\n\r\n    <dl class=\"syetem_management\">\r\n        <dt>绩效管理<img src=\"${basePath}/static/img/left/select_xl01.png\"></dt>\r\n        <dd class=\"first_dd\"><a href=\"#\">后台用户管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">角色管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">客户类型管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">栏目管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">微官网模板组管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">商城模板管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">微功能管理</a>\r\n        </dd>\r\n        <dd><a href=\"#\">修改用户密码</a>\r\n        </dd>\r\n    </dl>\r\n\r\n\r\n    <dl class=\"statistics\">\r\n        <dt>统计分析<img src=\"${basePath}/static/img/left/select_xl01.png\"></dt>\r\n        <dd class=\"first_dd\"><a href=\"#\">客户统计</a>\r\n        </dd>\r\n    </dl>\r\n\r\n</div>\r\n\r\n\r\n<script type=\"text/javascript\">\r\n    $(\".leftsidebar_box dt\").css({\r\n        \"background-color\": \"#fff\"\r\n    });\r\n    $(\".leftsidebar_box dt img\").attr(\"src\", \"${basePath}/static/img/left/select_xl01.png\");\r\n    $(function() {\r\n        $(\".leftsidebar_box dd\").hide();\r\n        $(\".leftsidebar_box dt\").click(function() {\r\n            $(\".leftsidebar_box dt\").css({\r\n                \"background-color\": \"#fff\"\r\n            })\r\n            $(this).css({\r\n                \"background-color\": \"#42b4f0\"\r\n            });\r\n            $(this).parent().find('dd').removeClass(\"menu_chioce\");\r\n            $(\".leftsidebar_box dt img\").attr(\"src\", \"${basePath}/static/img/left/select_xl01.png\");\r\n            $(this).parent().find('img').attr(\"src\", \"${basePath}/static/img/left/select_xl.png\");\r\n            $(\".menu_chioce\").slideUp();\r\n            $(this).parent().find('dd').slideToggle();\r\n            $(this).parent().find('dd').addClass(\"menu_chioce\");\r\n        });\r\n    })\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/login/login.vm",
    "content": "<!DOCTYPE html>\r\n<head>\r\n\t<title>HR-Login</title>\r\n\t<link href=\"${basePath}/static/css/templatemo_style.css\" rel=\"stylesheet\" type=\"text/css\">\t\r\n    <link href=\"${basePath}/static/css/bootstrap.css\" rel=\"stylesheet\">\r\n    <link href=\"${basePath}/static/css/font-awesome.min.css\" rel=\"stylesheet\">\r\n    <link href=\"${basePath}/static/css/simple-line-icons.css\" rel=\"stylesheet\">\r\n    <script src=\"${basePath}/static/js/jquery.min.js\"></script>\r\n    <script src=\"${basePath}/static/js/bootstrap.min.js\"></script>\r\n    <link rel=\"shortcut icon\" href=\"/hr/static/img/favicon.ico\" />\r\n\t<script src=\"${basePath}/static/js/md5.min.js\"></script>\r\n\t<link href=\"${basePath}/static/css/build.css\" rel=\"stylesheet\">\r\n</head>\r\n<body class=\"templatemo-bg-gray\">\r\n\t<div class=\"container\" style=\"margin-top:80px;\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<h1 class=\"margin-bottom-15\">#springMessage(\"system.name\")</h1>\r\n\t\t\t<form id=\"loginForm\" class=\"form-horizontal templatemo-container templatemo-login-form-1 margin-bottom-30\" role=\"form\">\t\t\t\t\r\n\t\t        <div class=\"form-group\">\r\n\t\t          <div class=\"col-xs-12\">\t\t            \r\n\t\t            <div class=\"control-wrapper\">\r\n\t\t            \t<label for=\"username\" class=\"control-label fa-label\"><i class=\"fa fa-user fa-medium\"></i></label>\r\n\t\t            \t<input type=\"text\" class=\"form-control\" id=\"userName\" placeholder=\"Username\" name=\"userName\">\r\n\t\t            </div>\t\t            \t            \r\n\t\t          </div>              \r\n\t\t        </div>\r\n\t\t        <div class=\"form-group\">\r\n\t\t          <div class=\"col-md-12\">\r\n\t\t          \t<div class=\"control-wrapper\">\r\n\t\t            \t<label for=\"password\" class=\"control-label fa-label\"><i class=\"fa fa-lock fa-medium\"></i></label>\r\n\t\t            \t<input type=\"password\" class=\"form-control\" id=\"password\" placeholder=\"Password\" name=\"password\">\r\n\t\t            </div>\r\n\t\t          </div>\r\n\t\t        </div>\r\n\t\t        <div class=\"form-group\">\r\n\t\t          <div class=\"col-md-12\">\r\n\t\t\t\t\t<div class=\"checkbox control-wrapper checkbox-info checkbox-circle \" style=\"margin-left:30px;\">\r\n                        <input id=\"isRemeberMe\" name=\"isRemeberMe\" class=\"styled\" type=\"checkbox\" checked value=\"true\">\r\n                        <label for=\"checkbox2\">\r\n                             #springMessage(\"login.remember\")\r\n                        </label>\r\n                    </div>\r\n\t\t          </div>\r\n\t\t        </div>\r\n\t\t        <div class=\"form-group\">\r\n\t\t          <div class=\"col-md-12\">\r\n\t\t          \t<div class=\"control-wrapper\">\r\n\t\t          \t\t<input type=\"button\" value=\"登录\" class=\"btn btn-info\" style=\"border-radius:4px;\" id=\"login\">\r\n\t\t          \t\t<a href=\"\" id=\"message\" style=\"color:red;\" class=\"text-right pull-right\"></a>\r\n\t\t          \t</div>\r\n\t\t          </div>\r\n\t\t        </div>\r\n\t\t        <hr>\r\n\t\t        <div class=\"form-group\">\r\n\t\t        \t<div class=\"col-md-12\">\r\n\t\t        \t\t<label>#springMessage(\"login.third\"): </label>\r\n\t\t        \t\t<div class=\"inline-block\">\r\n\t\t        \t\t\t<a href=\"#\"><i class=\"fa fa-facebook-square login-with\"></i></a>\r\n\t\t\t        \t\t<a href=\"#\"><i class=\"fa fa-twitter-square login-with\"></i></a>\r\n\t\t\t        \t\t<a href=\"#\"><i class=\"fa fa-google-plus-square login-with\"></i></a>\r\n\t\t\t        \t\t<a href=\"#\"><i class=\"fa fa-tumblr-square login-with\"></i></a>\r\n\t\t\t        \t\t<a href=\"#\"><i class=\"fa fa-github-square login-with\"></i></a>\r\n\t\t        \t\t</div>\t\t        \t\t\r\n\t\t        \t</div>\r\n\t\t        </div>\r\n\t\t      </form>\r\n\t\t</div>\r\n\t</div>\r\n\t<script>\r\n\t    function valadation(){\r\n\t        if($(\"#userName\").val()==\"\"||$(\"#password\").val()==\"\"){\r\n\t            return false;\r\n\t        }\r\n\t        return true;\r\n\t    }\r\n        $(function(){\r\n\t\t    $(\"#login\").on(\"click\",function(){\r\n\t\t        if(valadation()){\r\n\t\t             var data = new Object();\r\n\t\t             data.userName=$(\"#userName\").val();\r\n\t\t             data.password=$(\"#password\").val();\r\n\t\t             data.isRemeberMe = false;\r\n\t\t             if($(\"#isRemeberMe\").get(0).checked)\r\n\t\t                 data.isRemeberMe = true;\r\n\t\t             $.ajax({\r\n\t\t\t\t            url:\"${basePath}/login\",\r\n\t\t\t\t            method:\"post\",\r\n\t\t\t\t            data:data,\r\n\t\t\t\t            success:function(data, textStatus, jqXHR) {\r\n\t\t\t\t                if(data){\r\n\t\t\t\t                   window.location.href = \"${basePath}/loginSYS\";\r\n\t\t\t\t                }else{\r\n\t\t\t\t                   $(\"#message\").html(\"用户名、密码错误!\");\r\n\t\t\t\t                }\r\n\t\t\t\t            },\r\n\t\t\t\t            error:function(jqXHR, textStatus, errorThrown) {\r\n\t\t\t\t            }\r\n\t\t\t\t    });\r\n\t\t        \r\n\t\t        }else\r\n\t\t           $(\"#message\").html(\"用户名、密码不能为空!\");\r\n\t\t    \r\n\t\t    });\r\n\t\t    $(\"#username\").keypress(function(event) {\r\n\t\t    \tif (event.which == 13) {\r\n\t\t    \t\t$(\"#login\").click();\r\n\t\t    \t}\r\n\t\t    });\r\n\t\t    $(\"#password\").keypress(function(event) {\r\n\t\t    \tif (event.which == 13) {\r\n\t\t    \t\t$(\"#login\").click();\r\n\t\t    \t}\r\n\t\t    });\r\n        });\r\n\t</script>\r\n</body>\r\n</html>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/ou/addOu.vm",
    "content": "<div class=\"modal-dialog\">\r\n        <div class=\"modal-content\">\r\n            <div class=\"modal-header text-left\">\r\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span>\r\n                </button>\r\n                <h4 class=\"modal-title\" id=\"myModalLabel\">添加组织</h4>\r\n            </div>\r\n            <div class=\"modal-body\">\r\n                <form class=\"form-inline\">\r\n                    <div class=\"form-group\">\r\n                        <label for=\"addOuName\">组织名称</label>\r\n                        <input type=\"text\" class=\"form-control\" id=\"addOuName\">\r\n                    </div>\r\n                    <div class=\"form-group\">\r\n                        <label for=\"addEndTime\">失效日期</label>\r\n                        <div class=\"input-group\">\r\n                            <input type=\"time\" class=\"form-control\" id=\"addEndTime\">\r\n                            <span class=\"input-group-addon\"><i class=\"glyphicon glyphicon-time\"></i></span>\r\n                        </div>\r\n\r\n                    </div>\r\n                </form>\r\n            </div>\r\n            <div class=\"modal-footer\">\r\n                <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\">关闭</button>\r\n                <button type=\"button\" class=\"btn btn-success\" id=\"addOu\">添加</button>\r\n            </div>\r\n        </div>\r\n</div>\r\n<script>\r\n    $(function(){\r\n         $(\"#addEndTime\").datetimepicker();\r\n         $(\"#addOu\").on(\"click\", function() {\r\n            var obj = new Object();\r\n            obj.ouName = $(\"#addOuName\").val();\r\n            obj.endTime = $(\"#addEndTime\").val();\r\n            $.ajax({\r\n                url: '${basePath}/ou/addOu',\r\n                data: obj,\r\n                method: 'post',\r\n                dataType: 'json',\r\n                complete: function(jqXHR, textStatus) {\r\n                    $(\"#addOuModal\").modal(\"hide\");\r\n                    search();\r\n                }\r\n            });\r\n        });\r\n    });\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/ou/ouList.vm",
    "content": "<ol class=\"breadcrumb\" style=\"margin-bottom:2px;\">\r\n    <li><a href=\"#\">首页</a>\r\n    </li>\r\n    <li><a href=\"#\">组织管理</a>\r\n    </li>\r\n    <li class=\"active\">基本信息</li>\r\n</ol>\r\n<!-- Modal -->\r\n<div class=\"modal fade text-center\" id=\"addOuModal\"></div>\r\n<div class=\"modal fade text-center\" id=\"updateOuModal\"></div>\r\n<div id=\"toolbar\" class=\"btn-group\">\r\n    <input class=\"form-\" type=\"text\" placeholder=\"搜索\" style=\"float:left\" id=\"searchBox\" />\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"search\" style=\"margin-left:5px;\">\r\n        <i class=\"glyphicon glyphicon-search\"></i>\r\n    </button>\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"save\">\r\n        <i class=\"glyphicon glyphicon-floppy-save\"></i>\r\n    </button>\r\n    <button class=\"btn btn-default\" id=\"add\" data-backdrop=\"false\" data-url=\"${basePath}/ou/addOuView\" href=\"#addOuModal\" data-toggle=\"modal\">\r\n        <i class=\"glyphicon glyphicon-plus\"></i>\r\n    </button>\r\n    <button class=\"btn btn-default\" id=\"edit\" data-backdrop=\"false\" data-url=\"${basePath}/ou/updateOuView\" href=\"#updateOuModal\" data-toggle=\"modal\">\r\n        <i class=\"glyphicon glyphicon-edit\"></i>\r\n    </button>\r\n    <button type=\"button\" class=\"btn btn-default\" id=\"delete\">\r\n        <i class=\"glyphicon glyphicon-remove-circle\"></i>\r\n    </button>\r\n</div>\r\n<table id=\"ouList\" data-toggle=\"table\" data-cache=\"false\" data-url=\"${basePath}/ou/getOuList?search\" data-sort-name=\"ouName\" data-sort-order=\"desc\" data-show-header=\"true\" data-show-refresh=\"true\" data-show-columns=\"true\" data-pagination=\"true\" data-side-pagination=\"server\" data-page-size=\"20\" data-page-list=\"[10,20]\" data-height=\"520\" data-show-export=\"true\" data-toolbar=\"#toolbar\" data-show-paginationSwitch=\"true\" data-pagination-detail-h-align=\"left\" data-pagination-h-align=\"right\" data-click-to-select=\"true\">\r\n    <thead>\r\n        <tr>\r\n            <th data-field=\"state\" data-checkbox=\"true\"></th>\r\n            <th data-field=\"id\" data-visible=\"false\">id</th>\r\n            <th data-field=\"ouName\" data-sortable=\"true\" data-editable=\"false\">组织名称</th>\r\n            <th data-field=\"startTime\" data-sortable=\"true\">开始日期</th>\r\n            <th data-field=\"endTime\" data-sortable=\"true\">失效日期</th>\r\n            <th data-field=\"createTime\" data-sortable=\"true\" >创建日期</th>\r\n            <th data-field=\"creater\" data-sortable=\"true\">创建人</th>\r\n            <th data-field=\"updateTime\" data-sortable=\"true\">更新日期</th>\r\n            <th data-field=\"updater\" data-sortable=\"true\">更新人</th>\r\n        </tr>\r\n    </thead>\r\n</table>\r\n\r\n<script>\r\n    $(function() {\r\n        $(\"#search\").on(\"click\", function() {\r\n            search();\r\n        });\r\n        function search() {\r\n            var $table = $(\"#ouList\");\r\n            var searchText = $(\"#searchBox\").val();\r\n            $.post(\"${basePath}/ou/getOuList\", {\r\n                search: searchText,\r\n                limit: 10,\r\n                offset: 0,\r\n                order: \"desc\",\r\n                sort: 'ouName'\r\n            }, function(res) {\r\n                $table.bootstrapTable(\"getOptions\").pageNumber = 1; //默认排序从第一页开始\r\n                $table.bootstrapTable('load', res);\r\n            });\r\n        }\r\n        $(\"#ouList\").on('sort.bs.table', function(name, order) {\r\n            $(this).bootstrapTable(\"getOptions\").pageNumber = 1; //默认排序从第一页开始\r\n            console.info($(this).bootstrapTable(\"getOptions\"))\r\n        });\r\n        \r\n        //添加组织\r\n        $(\"#add\").on(\"click\",function(){\r\n\t\t    $(\"#addOuModal\").load($(this).attr(\"data-url\"));\r\n\t\t    $('#addOuModal').on('hidden.bs.modal', function (e) {\r\n\t\t\t  search();\r\n\t\t\t})\r\n        });\r\n\r\n        //更新用户\r\n        $(\"#edit\").on(\"click\", function() {\r\n            var data = $(\"#ouList\").bootstrapTable(\"getSelections\");\r\n            if (data.length > 1||data.length<1) {\r\n                new $.flavr({\r\n                    animateEntrance: \"rollIn\",\r\n                    animateClosing: \"rollOut\",\r\n                    content: '请选择一条记录',\r\n                    autoclose: true,\r\n                    timeout: 3000\r\n                });\r\n                $('#updateOuModal').modal({backdrop:false});//去掉蒙板\r\n                return;\r\n            }else{\r\n                $(\"#updateOuModal\").load($(this).attr(\"data-url\"));\r\n\t\t\t    $('#updateOuModal').on('hidden.bs.modal', function (e) {\r\n\t\t\t\t   search();\r\n\t\t\t\t});\r\n            }\r\n        });\r\n        \r\n        $(\"#delete\").on(\"click\", function() {\r\n            var datas = $(\"#ouList\").bootstrapTable(\"getSelections\");\r\n            var ids = \"\";\r\n            var i = 0;\r\n            if (datas.length < 1) {\r\n                new $.flavr({\r\n                    animateEntrance: \"rollIn\",\r\n                    animateClosing: \"rollOut\",\r\n                    content: '请选择一条记录',\r\n                    autoclose: true,\r\n                    timeout: 3000\r\n                });\r\n                return;\r\n            }\r\n            for (i = 0; i < datas.length; i++) {\r\n                ids += datas[i].id + \",\";\r\n            }\r\n            \r\n            $.ajax({\r\n                url: '${basePath}/ou/deleteOu?ids=' + ids,\r\n                method: 'post',\r\n                dataType: 'json',\r\n                complete: function(jqXHR, textStatus) {\r\n                    search();\r\n                }\r\n            });\r\n        });\r\n    });\r\n     $(\"#ouList\").bootstrapTable({\r\n       height:$(window).height()-140\r\n    });\r\n</script>"
  },
  {
    "path": "src/main/webapp/WEB-INF/views/ou/updateOu.vm",
    "content": "<div class=\"modal-dialog\">\r\n        <div class=\"modal-content text-left\">\r\n            <div class=\"modal-header\">\r\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span>\r\n                </button>\r\n                <h4 class=\"modal-title\" id=\"myModalLabel\">更新组织</h4>\r\n            </div>\r\n            <div class=\"modal-body\">\r\n                <form class=\"form-inline\">\r\n                    <div class=\"form-group\">\r\n                        <label for=\"\">组织名称</label>\r\n                        <input type=\"text\" class=\"form-control\" id=\"editOuName\">\r\n                        <input type=\"hidden\" class=\"form-control\" id=\"editId\">\r\n                    </div>\r\n                    <div class=\"form-group\">\r\n                        <label for=\"\">失效日期</label>\r\n                        <div class=\"input-group\">\r\n                            <input type=\"time\" class=\"form-control\" id=\"editEndTime\">\r\n                            <span class=\"input-group-addon\"><i class=\"glyphicon glyphicon-time\"></i></span>\r\n                        </div>\r\n\r\n                    </div>\r\n                </form>\r\n            </div>\r\n            <div class=\"modal-footer\">\r\n                <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\">关闭</button>\r\n                <button type=\"button\" class=\"btn btn-success\" id=\"editOu\">确定</button>\r\n            </div>\r\n        </div>\r\n </div>\r\n \r\n <script>\r\n      $(function(){\r\n         \r\n         $(\"#editEndTime\").datetimepicker();\r\n         var data = $(\"#ouList\").bootstrapTable(\"getSelections\")[0];\r\n         $(\"#editEndTime\").val(data.endTime);\r\n         $(\"#editOuName\").val(data.ouName);\r\n         $(\"#editOu\").on(\"click\",function(){\r\n           var obj = $(\"#ouList\").bootstrapTable(\"getSelections\")[0];\r\n           obj.ouName = $(\"#editOuName\").val();\r\n           obj.endTime = $(\"#editEndTime\").val();\r\n           $.ajax({\r\n                url: '${basePath}/ou/updateOu',\r\n                method: 'post',\r\n                dataType: 'json',\r\n                data:obj,\r\n                complete: function(jqXHR, textStatus) {\r\n                    $(\"#updateOuModal\").modal(\"hide\");\r\n                }\r\n           });\r\n        });\r\n         \r\n      });\r\n </script>\r\n   \r\n  "
  },
  {
    "path": "src/main/webapp/WEB-INF/web.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\r\n\txsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\r\n\tid=\"WebApp_ID\" version=\"2.5\">\r\n\t<display-name>hr</display-name>\r\n\t<welcome-file-list>\r\n\t\t<welcome-file>index.vm</welcome-file>\r\n\t</welcome-file-list>\r\n\r\n\r\n\t<!-- 加载所有的配置文件 这里我将配置文件置于源码包中 -->\r\n\t<context-param>\r\n\t\t<param-name>contextConfigLocation</param-name>\r\n\t\t<param-value>classpath*:spring-*.xml</param-value>\r\n\t</context-param>\r\n\r\n\t<!-- 配置Spring -->\r\n\t<listener>\r\n\t\t<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>\r\n\t</listener>\r\n\r\n\t<!-- -->\r\n\t<listener>\r\n\t\t<listener-class>com.lcore.hr.module.listener.StartupListener</listener-class>\r\n\t</listener>\r\n\t<!-- 配置SpringMVC -->\r\n\t<servlet>\r\n\t\t<servlet-name>springMVC</servlet-name>\r\n\t\t<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>\r\n\t\t<init-param>\r\n\t\t\t<param-name>contextConfigLocation</param-name>\r\n\t\t\t<param-value>classpath*:spring-mvc.xml</param-value>\r\n\t\t</init-param>\r\n\t\t<load-on-startup>1</load-on-startup>\r\n\t</servlet>\r\n\t<servlet-mapping>\r\n\t\t<servlet-name>springMVC</servlet-name>\r\n\t\t<url-pattern>/</url-pattern>\r\n\t</servlet-mapping>\r\n\t<filter>\r\n\t\t<filter-name>shiroFilter</filter-name>\r\n\t\t<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>\r\n\t\t<init-param>\r\n\t\t\t<param-name>targetFilterLifecycle</param-name>\r\n\t\t\t<param-value>true</param-value>\r\n\t\t</init-param>\r\n\t</filter>\r\n\t<filter-mapping>\r\n\t\t<filter-name>shiroFilter</filter-name>\r\n\t\t<url-pattern>/*</url-pattern>\r\n\t</filter-mapping>\r\n\r\n\t<!-- 配置字符集 -->\r\n\t<filter>\r\n\t\t<filter-name>encodingFilter</filter-name>\r\n\t\t<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>\r\n\t\t<init-param>\r\n\t\t\t<param-name>encoding</param-name>\r\n\t\t\t<param-value>UTF-8</param-value>\r\n\t\t</init-param>\r\n\t\t<init-param>\r\n\t\t\t<param-name>forceEncoding</param-name>\r\n\t\t\t<param-value>true</param-value>\r\n\t\t</init-param>\r\n\t</filter>\r\n\t<filter-mapping>\r\n\t\t<filter-name>encodingFilter</filter-name>\r\n\t\t<url-pattern>/*</url-pattern>\r\n\t</filter-mapping>\r\n\r\n\t<!-- 配置Session -->\r\n\t<filter>\r\n\t\t<filter-name>openSession</filter-name>\r\n\t\t<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>\r\n\t</filter>\r\n\t<filter-mapping>\r\n\t\t<filter-name>openSession</filter-name>\r\n\t\t<url-pattern>/*</url-pattern>\r\n\t</filter-mapping>\r\n</web-app>"
  },
  {
    "path": "src/main/webapp/static/css/animate.css",
    "content": "@charset \"UTF-8\";\r\n\r\n/*!\r\nAnimate.css - http://daneden.me/animate\r\nLicensed under the MIT license\r\n\r\nCopyright (c) 2013 Daniel Eden\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n*/\r\n\r\n.animated {\r\n  -webkit-animation-duration: 1s;\r\n  animation-duration: 1s;\r\n  -webkit-animation-fill-mode: both;\r\n  animation-fill-mode: both;\r\n}\r\n\r\n.animated.hinge {\r\n  -webkit-animation-duration: 2s;\r\n  animation-duration: 2s;\r\n}\r\n\r\n@-webkit-keyframes bounce {\r\n  0%, 20%, 50%, 80%, 100% {\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: translateY(-30px);\r\n    transform: translateY(-30px);\r\n  }\r\n\r\n  60% {\r\n    -webkit-transform: translateY(-15px);\r\n    transform: translateY(-15px);\r\n  }\r\n}\r\n\r\n@keyframes bounce {\r\n  0%, 20%, 50%, 80%, 100% {\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: translateY(-30px);\r\n    -ms-transform: translateY(-30px);\r\n    transform: translateY(-30px);\r\n  }\r\n\r\n  60% {\r\n    -webkit-transform: translateY(-15px);\r\n    -ms-transform: translateY(-15px);\r\n    transform: translateY(-15px);\r\n  }\r\n}\r\n\r\n.bounce {\r\n  -webkit-animation-name: bounce;\r\n  animation-name: bounce;\r\n}\r\n\r\n@-webkit-keyframes flash {\r\n  0%, 50%, 100% {\r\n    opacity: 1;\r\n  }\r\n\r\n  25%, 75% {\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes flash {\r\n  0%, 50%, 100% {\r\n    opacity: 1;\r\n  }\r\n\r\n  25%, 75% {\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.flash {\r\n  -webkit-animation-name: flash;\r\n  animation-name: flash;\r\n}\r\n\r\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\r\n\r\n@-webkit-keyframes pulse {\r\n  0% {\r\n    -webkit-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n\r\n  50% {\r\n    -webkit-transform: scale(1.1);\r\n    transform: scale(1.1);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n}\r\n\r\n@keyframes pulse {\r\n  0% {\r\n    -webkit-transform: scale(1);\r\n    -ms-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n\r\n  50% {\r\n    -webkit-transform: scale(1.1);\r\n    -ms-transform: scale(1.1);\r\n    transform: scale(1.1);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: scale(1);\r\n    -ms-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n}\r\n\r\n.pulse {\r\n  -webkit-animation-name: pulse;\r\n  animation-name: pulse;\r\n}\r\n\r\n@-webkit-keyframes rubberBand {\r\n  0% {\r\n    -webkit-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n\r\n  30% {\r\n    -webkit-transform: scaleX(1.25) scaleY(0.75);\r\n    transform: scaleX(1.25) scaleY(0.75);\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: scaleX(0.75) scaleY(1.25);\r\n    transform: scaleX(0.75) scaleY(1.25);\r\n  }\r\n\r\n  60% {\r\n    -webkit-transform: scaleX(1.15) scaleY(0.85);\r\n    transform: scaleX(1.15) scaleY(0.85);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n}\r\n\r\n@keyframes rubberBand {\r\n  0% {\r\n    -webkit-transform: scale(1);\r\n    -ms-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n\r\n  30% {\r\n    -webkit-transform: scaleX(1.25) scaleY(0.75);\r\n    -ms-transform: scaleX(1.25) scaleY(0.75);\r\n    transform: scaleX(1.25) scaleY(0.75);\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: scaleX(0.75) scaleY(1.25);\r\n    -ms-transform: scaleX(0.75) scaleY(1.25);\r\n    transform: scaleX(0.75) scaleY(1.25);\r\n  }\r\n\r\n  60% {\r\n    -webkit-transform: scaleX(1.15) scaleY(0.85);\r\n    -ms-transform: scaleX(1.15) scaleY(0.85);\r\n    transform: scaleX(1.15) scaleY(0.85);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: scale(1);\r\n    -ms-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n}\r\n\r\n.rubberBand {\r\n  -webkit-animation-name: rubberBand;\r\n  animation-name: rubberBand;\r\n}\r\n\r\n@-webkit-keyframes shake {\r\n  0%, 100% {\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  10%, 30%, 50%, 70%, 90% {\r\n    -webkit-transform: translateX(-10px);\r\n    transform: translateX(-10px);\r\n  }\r\n\r\n  20%, 40%, 60%, 80% {\r\n    -webkit-transform: translateX(10px);\r\n    transform: translateX(10px);\r\n  }\r\n}\r\n\r\n@keyframes shake {\r\n  0%, 100% {\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  10%, 30%, 50%, 70%, 90% {\r\n    -webkit-transform: translateX(-10px);\r\n    -ms-transform: translateX(-10px);\r\n    transform: translateX(-10px);\r\n  }\r\n\r\n  20%, 40%, 60%, 80% {\r\n    -webkit-transform: translateX(10px);\r\n    -ms-transform: translateX(10px);\r\n    transform: translateX(10px);\r\n  }\r\n}\r\n\r\n.shake {\r\n  -webkit-animation-name: shake;\r\n  animation-name: shake;\r\n}\r\n\r\n@-webkit-keyframes swing {\r\n  20% {\r\n    -webkit-transform: rotate(15deg);\r\n    transform: rotate(15deg);\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: rotate(-10deg);\r\n    transform: rotate(-10deg);\r\n  }\r\n\r\n  60% {\r\n    -webkit-transform: rotate(5deg);\r\n    transform: rotate(5deg);\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: rotate(-5deg);\r\n    transform: rotate(-5deg);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: rotate(0deg);\r\n    transform: rotate(0deg);\r\n  }\r\n}\r\n\r\n@keyframes swing {\r\n  20% {\r\n    -webkit-transform: rotate(15deg);\r\n    -ms-transform: rotate(15deg);\r\n    transform: rotate(15deg);\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: rotate(-10deg);\r\n    -ms-transform: rotate(-10deg);\r\n    transform: rotate(-10deg);\r\n  }\r\n\r\n  60% {\r\n    -webkit-transform: rotate(5deg);\r\n    -ms-transform: rotate(5deg);\r\n    transform: rotate(5deg);\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: rotate(-5deg);\r\n    -ms-transform: rotate(-5deg);\r\n    transform: rotate(-5deg);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: rotate(0deg);\r\n    -ms-transform: rotate(0deg);\r\n    transform: rotate(0deg);\r\n  }\r\n}\r\n\r\n.swing {\r\n  -webkit-transform-origin: top center;\r\n  -ms-transform-origin: top center;\r\n  transform-origin: top center;\r\n  -webkit-animation-name: swing;\r\n  animation-name: swing;\r\n}\r\n\r\n@-webkit-keyframes tada {\r\n  0% {\r\n    -webkit-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n\r\n  10%, 20% {\r\n    -webkit-transform: scale(0.9) rotate(-3deg);\r\n    transform: scale(0.9) rotate(-3deg);\r\n  }\r\n\r\n  30%, 50%, 70%, 90% {\r\n    -webkit-transform: scale(1.1) rotate(3deg);\r\n    transform: scale(1.1) rotate(3deg);\r\n  }\r\n\r\n  40%, 60%, 80% {\r\n    -webkit-transform: scale(1.1) rotate(-3deg);\r\n    transform: scale(1.1) rotate(-3deg);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: scale(1) rotate(0);\r\n    transform: scale(1) rotate(0);\r\n  }\r\n}\r\n\r\n@keyframes tada {\r\n  0% {\r\n    -webkit-transform: scale(1);\r\n    -ms-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n\r\n  10%, 20% {\r\n    -webkit-transform: scale(0.9) rotate(-3deg);\r\n    -ms-transform: scale(0.9) rotate(-3deg);\r\n    transform: scale(0.9) rotate(-3deg);\r\n  }\r\n\r\n  30%, 50%, 70%, 90% {\r\n    -webkit-transform: scale(1.1) rotate(3deg);\r\n    -ms-transform: scale(1.1) rotate(3deg);\r\n    transform: scale(1.1) rotate(3deg);\r\n  }\r\n\r\n  40%, 60%, 80% {\r\n    -webkit-transform: scale(1.1) rotate(-3deg);\r\n    -ms-transform: scale(1.1) rotate(-3deg);\r\n    transform: scale(1.1) rotate(-3deg);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: scale(1) rotate(0);\r\n    -ms-transform: scale(1) rotate(0);\r\n    transform: scale(1) rotate(0);\r\n  }\r\n}\r\n\r\n.tada {\r\n  -webkit-animation-name: tada;\r\n  animation-name: tada;\r\n}\r\n\r\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\r\n\r\n@-webkit-keyframes wobble {\r\n  0% {\r\n    -webkit-transform: translateX(0%);\r\n    transform: translateX(0%);\r\n  }\r\n\r\n  15% {\r\n    -webkit-transform: translateX(-25%) rotate(-5deg);\r\n    transform: translateX(-25%) rotate(-5deg);\r\n  }\r\n\r\n  30% {\r\n    -webkit-transform: translateX(20%) rotate(3deg);\r\n    transform: translateX(20%) rotate(3deg);\r\n  }\r\n\r\n  45% {\r\n    -webkit-transform: translateX(-15%) rotate(-3deg);\r\n    transform: translateX(-15%) rotate(-3deg);\r\n  }\r\n\r\n  60% {\r\n    -webkit-transform: translateX(10%) rotate(2deg);\r\n    transform: translateX(10%) rotate(2deg);\r\n  }\r\n\r\n  75% {\r\n    -webkit-transform: translateX(-5%) rotate(-1deg);\r\n    transform: translateX(-5%) rotate(-1deg);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0%);\r\n    transform: translateX(0%);\r\n  }\r\n}\r\n\r\n@keyframes wobble {\r\n  0% {\r\n    -webkit-transform: translateX(0%);\r\n    -ms-transform: translateX(0%);\r\n    transform: translateX(0%);\r\n  }\r\n\r\n  15% {\r\n    -webkit-transform: translateX(-25%) rotate(-5deg);\r\n    -ms-transform: translateX(-25%) rotate(-5deg);\r\n    transform: translateX(-25%) rotate(-5deg);\r\n  }\r\n\r\n  30% {\r\n    -webkit-transform: translateX(20%) rotate(3deg);\r\n    -ms-transform: translateX(20%) rotate(3deg);\r\n    transform: translateX(20%) rotate(3deg);\r\n  }\r\n\r\n  45% {\r\n    -webkit-transform: translateX(-15%) rotate(-3deg);\r\n    -ms-transform: translateX(-15%) rotate(-3deg);\r\n    transform: translateX(-15%) rotate(-3deg);\r\n  }\r\n\r\n  60% {\r\n    -webkit-transform: translateX(10%) rotate(2deg);\r\n    -ms-transform: translateX(10%) rotate(2deg);\r\n    transform: translateX(10%) rotate(2deg);\r\n  }\r\n\r\n  75% {\r\n    -webkit-transform: translateX(-5%) rotate(-1deg);\r\n    -ms-transform: translateX(-5%) rotate(-1deg);\r\n    transform: translateX(-5%) rotate(-1deg);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0%);\r\n    -ms-transform: translateX(0%);\r\n    transform: translateX(0%);\r\n  }\r\n}\r\n\r\n.wobble {\r\n  -webkit-animation-name: wobble;\r\n  animation-name: wobble;\r\n}\r\n\r\n@-webkit-keyframes bounceIn {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: scale(.3);\r\n    transform: scale(.3);\r\n  }\r\n\r\n  50% {\r\n    opacity: 1;\r\n    -webkit-transform: scale(1.05);\r\n    transform: scale(1.05);\r\n  }\r\n\r\n  70% {\r\n    -webkit-transform: scale(.9);\r\n    transform: scale(.9);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n}\r\n\r\n@keyframes bounceIn {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: scale(.3);\r\n    -ms-transform: scale(.3);\r\n    transform: scale(.3);\r\n  }\r\n\r\n  50% {\r\n    opacity: 1;\r\n    -webkit-transform: scale(1.05);\r\n    -ms-transform: scale(1.05);\r\n    transform: scale(1.05);\r\n  }\r\n\r\n  70% {\r\n    -webkit-transform: scale(.9);\r\n    -ms-transform: scale(.9);\r\n    transform: scale(.9);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: scale(1);\r\n    -ms-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n}\r\n\r\n.bounceIn {\r\n  -webkit-animation-name: bounceIn;\r\n  animation-name: bounceIn;\r\n}\r\n\r\n@-webkit-keyframes bounceInDown {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n\r\n  60% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(30px);\r\n    transform: translateY(30px);\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: translateY(-10px);\r\n    transform: translateY(-10px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n@keyframes bounceInDown {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    -ms-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n\r\n  60% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(30px);\r\n    -ms-transform: translateY(30px);\r\n    transform: translateY(30px);\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: translateY(-10px);\r\n    -ms-transform: translateY(-10px);\r\n    transform: translateY(-10px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.bounceInDown {\r\n  -webkit-animation-name: bounceInDown;\r\n  animation-name: bounceInDown;\r\n}\r\n\r\n@-webkit-keyframes bounceInLeft {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n\r\n  60% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(30px);\r\n    transform: translateX(30px);\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: translateX(-10px);\r\n    transform: translateX(-10px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n@keyframes bounceInLeft {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    -ms-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n\r\n  60% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(30px);\r\n    -ms-transform: translateX(30px);\r\n    transform: translateX(30px);\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: translateX(-10px);\r\n    -ms-transform: translateX(-10px);\r\n    transform: translateX(-10px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n.bounceInLeft {\r\n  -webkit-animation-name: bounceInLeft;\r\n  animation-name: bounceInLeft;\r\n}\r\n\r\n@-webkit-keyframes bounceInRight {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n\r\n  60% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(-30px);\r\n    transform: translateX(-30px);\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: translateX(10px);\r\n    transform: translateX(10px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n@keyframes bounceInRight {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    -ms-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n\r\n  60% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(-30px);\r\n    -ms-transform: translateX(-30px);\r\n    transform: translateX(-30px);\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: translateX(10px);\r\n    -ms-transform: translateX(10px);\r\n    transform: translateX(10px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n.bounceInRight {\r\n  -webkit-animation-name: bounceInRight;\r\n  animation-name: bounceInRight;\r\n}\r\n\r\n@-webkit-keyframes bounceInUp {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(2000px);\r\n    transform: translateY(2000px);\r\n  }\r\n\r\n  60% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(-30px);\r\n    transform: translateY(-30px);\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: translateY(10px);\r\n    transform: translateY(10px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n@keyframes bounceInUp {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(2000px);\r\n    -ms-transform: translateY(2000px);\r\n    transform: translateY(2000px);\r\n  }\r\n\r\n  60% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(-30px);\r\n    -ms-transform: translateY(-30px);\r\n    transform: translateY(-30px);\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: translateY(10px);\r\n    -ms-transform: translateY(10px);\r\n    transform: translateY(10px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.bounceInUp {\r\n  -webkit-animation-name: bounceInUp;\r\n  animation-name: bounceInUp;\r\n}\r\n\r\n@-webkit-keyframes bounceOut {\r\n  0% {\r\n    -webkit-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n\r\n  25% {\r\n    -webkit-transform: scale(.95);\r\n    transform: scale(.95);\r\n  }\r\n\r\n  50% {\r\n    opacity: 1;\r\n    -webkit-transform: scale(1.1);\r\n    transform: scale(1.1);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: scale(.3);\r\n    transform: scale(.3);\r\n  }\r\n}\r\n\r\n@keyframes bounceOut {\r\n  0% {\r\n    -webkit-transform: scale(1);\r\n    -ms-transform: scale(1);\r\n    transform: scale(1);\r\n  }\r\n\r\n  25% {\r\n    -webkit-transform: scale(.95);\r\n    -ms-transform: scale(.95);\r\n    transform: scale(.95);\r\n  }\r\n\r\n  50% {\r\n    opacity: 1;\r\n    -webkit-transform: scale(1.1);\r\n    -ms-transform: scale(1.1);\r\n    transform: scale(1.1);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: scale(.3);\r\n    -ms-transform: scale(.3);\r\n    transform: scale(.3);\r\n  }\r\n}\r\n\r\n.bounceOut {\r\n  -webkit-animation-name: bounceOut;\r\n  animation-name: bounceOut;\r\n}\r\n\r\n@-webkit-keyframes bounceOutDown {\r\n  0% {\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  20% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(-20px);\r\n    transform: translateY(-20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(2000px);\r\n    transform: translateY(2000px);\r\n  }\r\n}\r\n\r\n@keyframes bounceOutDown {\r\n  0% {\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  20% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(-20px);\r\n    -ms-transform: translateY(-20px);\r\n    transform: translateY(-20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(2000px);\r\n    -ms-transform: translateY(2000px);\r\n    transform: translateY(2000px);\r\n  }\r\n}\r\n\r\n.bounceOutDown {\r\n  -webkit-animation-name: bounceOutDown;\r\n  animation-name: bounceOutDown;\r\n}\r\n\r\n@-webkit-keyframes bounceOutLeft {\r\n  0% {\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  20% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(20px);\r\n    transform: translateX(20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n}\r\n\r\n@keyframes bounceOutLeft {\r\n  0% {\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  20% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(20px);\r\n    -ms-transform: translateX(20px);\r\n    transform: translateX(20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    -ms-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n}\r\n\r\n.bounceOutLeft {\r\n  -webkit-animation-name: bounceOutLeft;\r\n  animation-name: bounceOutLeft;\r\n}\r\n\r\n@-webkit-keyframes bounceOutRight {\r\n  0% {\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  20% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(-20px);\r\n    transform: translateX(-20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n}\r\n\r\n@keyframes bounceOutRight {\r\n  0% {\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  20% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(-20px);\r\n    -ms-transform: translateX(-20px);\r\n    transform: translateX(-20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    -ms-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n}\r\n\r\n.bounceOutRight {\r\n  -webkit-animation-name: bounceOutRight;\r\n  animation-name: bounceOutRight;\r\n}\r\n\r\n@-webkit-keyframes bounceOutUp {\r\n  0% {\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  20% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(20px);\r\n    transform: translateY(20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n}\r\n\r\n@keyframes bounceOutUp {\r\n  0% {\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  20% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(20px);\r\n    -ms-transform: translateY(20px);\r\n    transform: translateY(20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    -ms-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n}\r\n\r\n.bounceOutUp {\r\n  -webkit-animation-name: bounceOutUp;\r\n  animation-name: bounceOutUp;\r\n}\r\n\r\n@-webkit-keyframes fadeIn {\r\n  0% {\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes fadeIn {\r\n  0% {\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n.fadeIn {\r\n  -webkit-animation-name: fadeIn;\r\n  animation-name: fadeIn;\r\n}\r\n\r\n@-webkit-keyframes fadeInDown {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-20px);\r\n    transform: translateY(-20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n@keyframes fadeInDown {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-20px);\r\n    -ms-transform: translateY(-20px);\r\n    transform: translateY(-20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.fadeInDown {\r\n  -webkit-animation-name: fadeInDown;\r\n  animation-name: fadeInDown;\r\n}\r\n\r\n@-webkit-keyframes fadeInDownBig {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n@keyframes fadeInDownBig {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    -ms-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.fadeInDownBig {\r\n  -webkit-animation-name: fadeInDownBig;\r\n  animation-name: fadeInDownBig;\r\n}\r\n\r\n@-webkit-keyframes fadeInLeft {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-20px);\r\n    transform: translateX(-20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n@keyframes fadeInLeft {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-20px);\r\n    -ms-transform: translateX(-20px);\r\n    transform: translateX(-20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n.fadeInLeft {\r\n  -webkit-animation-name: fadeInLeft;\r\n  animation-name: fadeInLeft;\r\n}\r\n\r\n@-webkit-keyframes fadeInLeftBig {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n@keyframes fadeInLeftBig {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    -ms-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n.fadeInLeftBig {\r\n  -webkit-animation-name: fadeInLeftBig;\r\n  animation-name: fadeInLeftBig;\r\n}\r\n\r\n@-webkit-keyframes fadeInRight {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(20px);\r\n    transform: translateX(20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n@keyframes fadeInRight {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(20px);\r\n    -ms-transform: translateX(20px);\r\n    transform: translateX(20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n.fadeInRight {\r\n  -webkit-animation-name: fadeInRight;\r\n  animation-name: fadeInRight;\r\n}\r\n\r\n@-webkit-keyframes fadeInRightBig {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n@keyframes fadeInRightBig {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    -ms-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n.fadeInRightBig {\r\n  -webkit-animation-name: fadeInRightBig;\r\n  animation-name: fadeInRightBig;\r\n}\r\n\r\n@-webkit-keyframes fadeInUp {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(20px);\r\n    transform: translateY(20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n@keyframes fadeInUp {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(20px);\r\n    -ms-transform: translateY(20px);\r\n    transform: translateY(20px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.fadeInUp {\r\n  -webkit-animation-name: fadeInUp;\r\n  animation-name: fadeInUp;\r\n}\r\n\r\n@-webkit-keyframes fadeInUpBig {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(2000px);\r\n    transform: translateY(2000px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n@keyframes fadeInUpBig {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(2000px);\r\n    -ms-transform: translateY(2000px);\r\n    transform: translateY(2000px);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.fadeInUpBig {\r\n  -webkit-animation-name: fadeInUpBig;\r\n  animation-name: fadeInUpBig;\r\n}\r\n\r\n@-webkit-keyframes fadeOut {\r\n  0% {\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes fadeOut {\r\n  0% {\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.fadeOut {\r\n  -webkit-animation-name: fadeOut;\r\n  animation-name: fadeOut;\r\n}\r\n\r\n@-webkit-keyframes fadeOutDown {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(20px);\r\n    transform: translateY(20px);\r\n  }\r\n}\r\n\r\n@keyframes fadeOutDown {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(20px);\r\n    -ms-transform: translateY(20px);\r\n    transform: translateY(20px);\r\n  }\r\n}\r\n\r\n.fadeOutDown {\r\n  -webkit-animation-name: fadeOutDown;\r\n  animation-name: fadeOutDown;\r\n}\r\n\r\n@-webkit-keyframes fadeOutDownBig {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(2000px);\r\n    transform: translateY(2000px);\r\n  }\r\n}\r\n\r\n@keyframes fadeOutDownBig {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(2000px);\r\n    -ms-transform: translateY(2000px);\r\n    transform: translateY(2000px);\r\n  }\r\n}\r\n\r\n.fadeOutDownBig {\r\n  -webkit-animation-name: fadeOutDownBig;\r\n  animation-name: fadeOutDownBig;\r\n}\r\n\r\n@-webkit-keyframes fadeOutLeft {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-20px);\r\n    transform: translateX(-20px);\r\n  }\r\n}\r\n\r\n@keyframes fadeOutLeft {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-20px);\r\n    -ms-transform: translateX(-20px);\r\n    transform: translateX(-20px);\r\n  }\r\n}\r\n\r\n.fadeOutLeft {\r\n  -webkit-animation-name: fadeOutLeft;\r\n  animation-name: fadeOutLeft;\r\n}\r\n\r\n@-webkit-keyframes fadeOutLeftBig {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n}\r\n\r\n@keyframes fadeOutLeftBig {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    -ms-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n}\r\n\r\n.fadeOutLeftBig {\r\n  -webkit-animation-name: fadeOutLeftBig;\r\n  animation-name: fadeOutLeftBig;\r\n}\r\n\r\n@-webkit-keyframes fadeOutRight {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(20px);\r\n    transform: translateX(20px);\r\n  }\r\n}\r\n\r\n@keyframes fadeOutRight {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(20px);\r\n    -ms-transform: translateX(20px);\r\n    transform: translateX(20px);\r\n  }\r\n}\r\n\r\n.fadeOutRight {\r\n  -webkit-animation-name: fadeOutRight;\r\n  animation-name: fadeOutRight;\r\n}\r\n\r\n@-webkit-keyframes fadeOutRightBig {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n}\r\n\r\n@keyframes fadeOutRightBig {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    -ms-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n}\r\n\r\n.fadeOutRightBig {\r\n  -webkit-animation-name: fadeOutRightBig;\r\n  animation-name: fadeOutRightBig;\r\n}\r\n\r\n@-webkit-keyframes fadeOutUp {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-20px);\r\n    transform: translateY(-20px);\r\n  }\r\n}\r\n\r\n@keyframes fadeOutUp {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-20px);\r\n    -ms-transform: translateY(-20px);\r\n    transform: translateY(-20px);\r\n  }\r\n}\r\n\r\n.fadeOutUp {\r\n  -webkit-animation-name: fadeOutUp;\r\n  animation-name: fadeOutUp;\r\n}\r\n\r\n@-webkit-keyframes fadeOutUpBig {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n}\r\n\r\n@keyframes fadeOutUpBig {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    -ms-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n}\r\n\r\n.fadeOutUpBig {\r\n  -webkit-animation-name: fadeOutUpBig;\r\n  animation-name: fadeOutUpBig;\r\n}\r\n\r\n@-webkit-keyframes flip {\r\n  0% {\r\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\r\n    transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\r\n    -webkit-animation-timing-function: ease-out;\r\n    animation-timing-function: ease-out;\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\r\n    transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\r\n    -webkit-animation-timing-function: ease-out;\r\n    animation-timing-function: ease-out;\r\n  }\r\n\r\n  50% {\r\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\r\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\r\n    -webkit-animation-timing-function: ease-in;\r\n    animation-timing-function: ease-in;\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\r\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\r\n    -webkit-animation-timing-function: ease-in;\r\n    animation-timing-function: ease-in;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\r\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\r\n    -webkit-animation-timing-function: ease-in;\r\n    animation-timing-function: ease-in;\r\n  }\r\n}\r\n\r\n@keyframes flip {\r\n  0% {\r\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\r\n    -ms-transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\r\n    transform: perspective(400px) translateZ(0) rotateY(0) scale(1);\r\n    -webkit-animation-timing-function: ease-out;\r\n    animation-timing-function: ease-out;\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\r\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\r\n    transform: perspective(400px) translateZ(150px) rotateY(170deg) scale(1);\r\n    -webkit-animation-timing-function: ease-out;\r\n    animation-timing-function: ease-out;\r\n  }\r\n\r\n  50% {\r\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\r\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\r\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\r\n    -webkit-animation-timing-function: ease-in;\r\n    animation-timing-function: ease-in;\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\r\n    -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\r\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(.95);\r\n    -webkit-animation-timing-function: ease-in;\r\n    animation-timing-function: ease-in;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\r\n    -ms-transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\r\n    transform: perspective(400px) translateZ(0) rotateY(360deg) scale(1);\r\n    -webkit-animation-timing-function: ease-in;\r\n    animation-timing-function: ease-in;\r\n  }\r\n}\r\n\r\n.animated.flip {\r\n  -webkit-backface-visibility: visible;\r\n  -ms-backface-visibility: visible;\r\n  backface-visibility: visible;\r\n  -webkit-animation-name: flip;\r\n  animation-name: flip;\r\n}\r\n\r\n@-webkit-keyframes flipInX {\r\n  0% {\r\n    -webkit-transform: perspective(400px) rotateX(90deg);\r\n    transform: perspective(400px) rotateX(90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: perspective(400px) rotateX(-10deg);\r\n    transform: perspective(400px) rotateX(-10deg);\r\n  }\r\n\r\n  70% {\r\n    -webkit-transform: perspective(400px) rotateX(10deg);\r\n    transform: perspective(400px) rotateX(10deg);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: perspective(400px) rotateX(0deg);\r\n    transform: perspective(400px) rotateX(0deg);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes flipInX {\r\n  0% {\r\n    -webkit-transform: perspective(400px) rotateX(90deg);\r\n    -ms-transform: perspective(400px) rotateX(90deg);\r\n    transform: perspective(400px) rotateX(90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: perspective(400px) rotateX(-10deg);\r\n    -ms-transform: perspective(400px) rotateX(-10deg);\r\n    transform: perspective(400px) rotateX(-10deg);\r\n  }\r\n\r\n  70% {\r\n    -webkit-transform: perspective(400px) rotateX(10deg);\r\n    -ms-transform: perspective(400px) rotateX(10deg);\r\n    transform: perspective(400px) rotateX(10deg);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: perspective(400px) rotateX(0deg);\r\n    -ms-transform: perspective(400px) rotateX(0deg);\r\n    transform: perspective(400px) rotateX(0deg);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n.flipInX {\r\n  -webkit-backface-visibility: visible !important;\r\n  -ms-backface-visibility: visible !important;\r\n  backface-visibility: visible !important;\r\n  -webkit-animation-name: flipInX;\r\n  animation-name: flipInX;\r\n}\r\n\r\n@-webkit-keyframes flipInY {\r\n  0% {\r\n    -webkit-transform: perspective(400px) rotateY(90deg);\r\n    transform: perspective(400px) rotateY(90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: perspective(400px) rotateY(-10deg);\r\n    transform: perspective(400px) rotateY(-10deg);\r\n  }\r\n\r\n  70% {\r\n    -webkit-transform: perspective(400px) rotateY(10deg);\r\n    transform: perspective(400px) rotateY(10deg);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: perspective(400px) rotateY(0deg);\r\n    transform: perspective(400px) rotateY(0deg);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes flipInY {\r\n  0% {\r\n    -webkit-transform: perspective(400px) rotateY(90deg);\r\n    -ms-transform: perspective(400px) rotateY(90deg);\r\n    transform: perspective(400px) rotateY(90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: perspective(400px) rotateY(-10deg);\r\n    -ms-transform: perspective(400px) rotateY(-10deg);\r\n    transform: perspective(400px) rotateY(-10deg);\r\n  }\r\n\r\n  70% {\r\n    -webkit-transform: perspective(400px) rotateY(10deg);\r\n    -ms-transform: perspective(400px) rotateY(10deg);\r\n    transform: perspective(400px) rotateY(10deg);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: perspective(400px) rotateY(0deg);\r\n    -ms-transform: perspective(400px) rotateY(0deg);\r\n    transform: perspective(400px) rotateY(0deg);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n.flipInY {\r\n  -webkit-backface-visibility: visible !important;\r\n  -ms-backface-visibility: visible !important;\r\n  backface-visibility: visible !important;\r\n  -webkit-animation-name: flipInY;\r\n  animation-name: flipInY;\r\n}\r\n\r\n@-webkit-keyframes flipOutX {\r\n  0% {\r\n    -webkit-transform: perspective(400px) rotateX(0deg);\r\n    transform: perspective(400px) rotateX(0deg);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: perspective(400px) rotateX(90deg);\r\n    transform: perspective(400px) rotateX(90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes flipOutX {\r\n  0% {\r\n    -webkit-transform: perspective(400px) rotateX(0deg);\r\n    -ms-transform: perspective(400px) rotateX(0deg);\r\n    transform: perspective(400px) rotateX(0deg);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: perspective(400px) rotateX(90deg);\r\n    -ms-transform: perspective(400px) rotateX(90deg);\r\n    transform: perspective(400px) rotateX(90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.flipOutX {\r\n  -webkit-animation-name: flipOutX;\r\n  animation-name: flipOutX;\r\n  -webkit-backface-visibility: visible !important;\r\n  -ms-backface-visibility: visible !important;\r\n  backface-visibility: visible !important;\r\n}\r\n\r\n@-webkit-keyframes flipOutY {\r\n  0% {\r\n    -webkit-transform: perspective(400px) rotateY(0deg);\r\n    transform: perspective(400px) rotateY(0deg);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: perspective(400px) rotateY(90deg);\r\n    transform: perspective(400px) rotateY(90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes flipOutY {\r\n  0% {\r\n    -webkit-transform: perspective(400px) rotateY(0deg);\r\n    -ms-transform: perspective(400px) rotateY(0deg);\r\n    transform: perspective(400px) rotateY(0deg);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: perspective(400px) rotateY(90deg);\r\n    -ms-transform: perspective(400px) rotateY(90deg);\r\n    transform: perspective(400px) rotateY(90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.flipOutY {\r\n  -webkit-backface-visibility: visible !important;\r\n  -ms-backface-visibility: visible !important;\r\n  backface-visibility: visible !important;\r\n  -webkit-animation-name: flipOutY;\r\n  animation-name: flipOutY;\r\n}\r\n\r\n@-webkit-keyframes lightSpeedIn {\r\n  0% {\r\n    -webkit-transform: translateX(100%) skewX(-30deg);\r\n    transform: translateX(100%) skewX(-30deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  60% {\r\n    -webkit-transform: translateX(-20%) skewX(30deg);\r\n    transform: translateX(-20%) skewX(30deg);\r\n    opacity: 1;\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: translateX(0%) skewX(-15deg);\r\n    transform: translateX(0%) skewX(-15deg);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0%) skewX(0deg);\r\n    transform: translateX(0%) skewX(0deg);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes lightSpeedIn {\r\n  0% {\r\n    -webkit-transform: translateX(100%) skewX(-30deg);\r\n    -ms-transform: translateX(100%) skewX(-30deg);\r\n    transform: translateX(100%) skewX(-30deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  60% {\r\n    -webkit-transform: translateX(-20%) skewX(30deg);\r\n    -ms-transform: translateX(-20%) skewX(30deg);\r\n    transform: translateX(-20%) skewX(30deg);\r\n    opacity: 1;\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: translateX(0%) skewX(-15deg);\r\n    -ms-transform: translateX(0%) skewX(-15deg);\r\n    transform: translateX(0%) skewX(-15deg);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0%) skewX(0deg);\r\n    -ms-transform: translateX(0%) skewX(0deg);\r\n    transform: translateX(0%) skewX(0deg);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n.lightSpeedIn {\r\n  -webkit-animation-name: lightSpeedIn;\r\n  animation-name: lightSpeedIn;\r\n  -webkit-animation-timing-function: ease-out;\r\n  animation-timing-function: ease-out;\r\n}\r\n\r\n@-webkit-keyframes lightSpeedOut {\r\n  0% {\r\n    -webkit-transform: translateX(0%) skewX(0deg);\r\n    transform: translateX(0%) skewX(0deg);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(100%) skewX(-30deg);\r\n    transform: translateX(100%) skewX(-30deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes lightSpeedOut {\r\n  0% {\r\n    -webkit-transform: translateX(0%) skewX(0deg);\r\n    -ms-transform: translateX(0%) skewX(0deg);\r\n    transform: translateX(0%) skewX(0deg);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(100%) skewX(-30deg);\r\n    -ms-transform: translateX(100%) skewX(-30deg);\r\n    transform: translateX(100%) skewX(-30deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.lightSpeedOut {\r\n  -webkit-animation-name: lightSpeedOut;\r\n  animation-name: lightSpeedOut;\r\n  -webkit-animation-timing-function: ease-in;\r\n  animation-timing-function: ease-in;\r\n}\r\n\r\n@-webkit-keyframes rotateIn {\r\n  0% {\r\n    -webkit-transform-origin: center center;\r\n    transform-origin: center center;\r\n    -webkit-transform: rotate(-200deg);\r\n    transform: rotate(-200deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: center center;\r\n    transform-origin: center center;\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes rotateIn {\r\n  0% {\r\n    -webkit-transform-origin: center center;\r\n    -ms-transform-origin: center center;\r\n    transform-origin: center center;\r\n    -webkit-transform: rotate(-200deg);\r\n    -ms-transform: rotate(-200deg);\r\n    transform: rotate(-200deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: center center;\r\n    -ms-transform-origin: center center;\r\n    transform-origin: center center;\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n.rotateIn {\r\n  -webkit-animation-name: rotateIn;\r\n  animation-name: rotateIn;\r\n}\r\n\r\n@-webkit-keyframes rotateInDownLeft {\r\n  0% {\r\n    -webkit-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(-90deg);\r\n    transform: rotate(-90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes rotateInDownLeft {\r\n  0% {\r\n    -webkit-transform-origin: left bottom;\r\n    -ms-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(-90deg);\r\n    -ms-transform: rotate(-90deg);\r\n    transform: rotate(-90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: left bottom;\r\n    -ms-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n.rotateInDownLeft {\r\n  -webkit-animation-name: rotateInDownLeft;\r\n  animation-name: rotateInDownLeft;\r\n}\r\n\r\n@-webkit-keyframes rotateInDownRight {\r\n  0% {\r\n    -webkit-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(90deg);\r\n    transform: rotate(90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes rotateInDownRight {\r\n  0% {\r\n    -webkit-transform-origin: right bottom;\r\n    -ms-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(90deg);\r\n    -ms-transform: rotate(90deg);\r\n    transform: rotate(90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: right bottom;\r\n    -ms-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n.rotateInDownRight {\r\n  -webkit-animation-name: rotateInDownRight;\r\n  animation-name: rotateInDownRight;\r\n}\r\n\r\n@-webkit-keyframes rotateInUpLeft {\r\n  0% {\r\n    -webkit-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(90deg);\r\n    transform: rotate(90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes rotateInUpLeft {\r\n  0% {\r\n    -webkit-transform-origin: left bottom;\r\n    -ms-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(90deg);\r\n    -ms-transform: rotate(90deg);\r\n    transform: rotate(90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: left bottom;\r\n    -ms-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n.rotateInUpLeft {\r\n  -webkit-animation-name: rotateInUpLeft;\r\n  animation-name: rotateInUpLeft;\r\n}\r\n\r\n@-webkit-keyframes rotateInUpRight {\r\n  0% {\r\n    -webkit-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(-90deg);\r\n    transform: rotate(-90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n@keyframes rotateInUpRight {\r\n  0% {\r\n    -webkit-transform-origin: right bottom;\r\n    -ms-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(-90deg);\r\n    -ms-transform: rotate(-90deg);\r\n    transform: rotate(-90deg);\r\n    opacity: 0;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: right bottom;\r\n    -ms-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n}\r\n\r\n.rotateInUpRight {\r\n  -webkit-animation-name: rotateInUpRight;\r\n  animation-name: rotateInUpRight;\r\n}\r\n\r\n@-webkit-keyframes rotateOut {\r\n  0% {\r\n    -webkit-transform-origin: center center;\r\n    transform-origin: center center;\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: center center;\r\n    transform-origin: center center;\r\n    -webkit-transform: rotate(200deg);\r\n    transform: rotate(200deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes rotateOut {\r\n  0% {\r\n    -webkit-transform-origin: center center;\r\n    -ms-transform-origin: center center;\r\n    transform-origin: center center;\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: center center;\r\n    -ms-transform-origin: center center;\r\n    transform-origin: center center;\r\n    -webkit-transform: rotate(200deg);\r\n    -ms-transform: rotate(200deg);\r\n    transform: rotate(200deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.rotateOut {\r\n  -webkit-animation-name: rotateOut;\r\n  animation-name: rotateOut;\r\n}\r\n\r\n@-webkit-keyframes rotateOutDownLeft {\r\n  0% {\r\n    -webkit-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(90deg);\r\n    transform: rotate(90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes rotateOutDownLeft {\r\n  0% {\r\n    -webkit-transform-origin: left bottom;\r\n    -ms-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: left bottom;\r\n    -ms-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(90deg);\r\n    -ms-transform: rotate(90deg);\r\n    transform: rotate(90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.rotateOutDownLeft {\r\n  -webkit-animation-name: rotateOutDownLeft;\r\n  animation-name: rotateOutDownLeft;\r\n}\r\n\r\n@-webkit-keyframes rotateOutDownRight {\r\n  0% {\r\n    -webkit-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(-90deg);\r\n    transform: rotate(-90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes rotateOutDownRight {\r\n  0% {\r\n    -webkit-transform-origin: right bottom;\r\n    -ms-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: right bottom;\r\n    -ms-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(-90deg);\r\n    -ms-transform: rotate(-90deg);\r\n    transform: rotate(-90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.rotateOutDownRight {\r\n  -webkit-animation-name: rotateOutDownRight;\r\n  animation-name: rotateOutDownRight;\r\n}\r\n\r\n@-webkit-keyframes rotateOutUpLeft {\r\n  0% {\r\n    -webkit-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(-90deg);\r\n    transform: rotate(-90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes rotateOutUpLeft {\r\n  0% {\r\n    -webkit-transform-origin: left bottom;\r\n    -ms-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: left bottom;\r\n    -ms-transform-origin: left bottom;\r\n    transform-origin: left bottom;\r\n    -webkit-transform: rotate(-90deg);\r\n    -ms-transform: rotate(-90deg);\r\n    transform: rotate(-90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.rotateOutUpLeft {\r\n  -webkit-animation-name: rotateOutUpLeft;\r\n  animation-name: rotateOutUpLeft;\r\n}\r\n\r\n@-webkit-keyframes rotateOutUpRight {\r\n  0% {\r\n    -webkit-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(90deg);\r\n    transform: rotate(90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes rotateOutUpRight {\r\n  0% {\r\n    -webkit-transform-origin: right bottom;\r\n    -ms-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    opacity: 1;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform-origin: right bottom;\r\n    -ms-transform-origin: right bottom;\r\n    transform-origin: right bottom;\r\n    -webkit-transform: rotate(90deg);\r\n    -ms-transform: rotate(90deg);\r\n    transform: rotate(90deg);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.rotateOutUpRight {\r\n  -webkit-animation-name: rotateOutUpRight;\r\n  animation-name: rotateOutUpRight;\r\n}\r\n\r\n@-webkit-keyframes slideInDown {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n@keyframes slideInDown {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    -ms-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n}\r\n\r\n.slideInDown {\r\n  -webkit-animation-name: slideInDown;\r\n  animation-name: slideInDown;\r\n}\r\n\r\n@-webkit-keyframes slideInLeft {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n@keyframes slideInLeft {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    -ms-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n.slideInLeft {\r\n  -webkit-animation-name: slideInLeft;\r\n  animation-name: slideInLeft;\r\n}\r\n\r\n@-webkit-keyframes slideInRight {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n@keyframes slideInRight {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    -ms-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n}\r\n\r\n.slideInRight {\r\n  -webkit-animation-name: slideInRight;\r\n  animation-name: slideInRight;\r\n}\r\n\r\n@-webkit-keyframes slideOutLeft {\r\n  0% {\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n}\r\n\r\n@keyframes slideOutLeft {\r\n  0% {\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-2000px);\r\n    -ms-transform: translateX(-2000px);\r\n    transform: translateX(-2000px);\r\n  }\r\n}\r\n\r\n.slideOutLeft {\r\n  -webkit-animation-name: slideOutLeft;\r\n  animation-name: slideOutLeft;\r\n}\r\n\r\n@-webkit-keyframes slideOutRight {\r\n  0% {\r\n    -webkit-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n}\r\n\r\n@keyframes slideOutRight {\r\n  0% {\r\n    -webkit-transform: translateX(0);\r\n    -ms-transform: translateX(0);\r\n    transform: translateX(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(2000px);\r\n    -ms-transform: translateX(2000px);\r\n    transform: translateX(2000px);\r\n  }\r\n}\r\n\r\n.slideOutRight {\r\n  -webkit-animation-name: slideOutRight;\r\n  animation-name: slideOutRight;\r\n}\r\n\r\n@-webkit-keyframes slideOutUp {\r\n  0% {\r\n    -webkit-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n}\r\n\r\n@keyframes slideOutUp {\r\n  0% {\r\n    -webkit-transform: translateY(0);\r\n    -ms-transform: translateY(0);\r\n    transform: translateY(0);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateY(-2000px);\r\n    -ms-transform: translateY(-2000px);\r\n    transform: translateY(-2000px);\r\n  }\r\n}\r\n\r\n.slideOutUp {\r\n  -webkit-animation-name: slideOutUp;\r\n  animation-name: slideOutUp;\r\n}\r\n\r\n@-webkit-keyframes hinge {\r\n  0% {\r\n    -webkit-transform: rotate(0);\r\n    transform: rotate(0);\r\n    -webkit-transform-origin: top left;\r\n    transform-origin: top left;\r\n    -webkit-animation-timing-function: ease-in-out;\r\n    animation-timing-function: ease-in-out;\r\n  }\r\n\r\n  20%, 60% {\r\n    -webkit-transform: rotate(80deg);\r\n    transform: rotate(80deg);\r\n    -webkit-transform-origin: top left;\r\n    transform-origin: top left;\r\n    -webkit-animation-timing-function: ease-in-out;\r\n    animation-timing-function: ease-in-out;\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: rotate(60deg);\r\n    transform: rotate(60deg);\r\n    -webkit-transform-origin: top left;\r\n    transform-origin: top left;\r\n    -webkit-animation-timing-function: ease-in-out;\r\n    animation-timing-function: ease-in-out;\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: rotate(60deg) translateY(0);\r\n    transform: rotate(60deg) translateY(0);\r\n    opacity: 1;\r\n    -webkit-transform-origin: top left;\r\n    transform-origin: top left;\r\n    -webkit-animation-timing-function: ease-in-out;\r\n    animation-timing-function: ease-in-out;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateY(700px);\r\n    transform: translateY(700px);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n@keyframes hinge {\r\n  0% {\r\n    -webkit-transform: rotate(0);\r\n    -ms-transform: rotate(0);\r\n    transform: rotate(0);\r\n    -webkit-transform-origin: top left;\r\n    -ms-transform-origin: top left;\r\n    transform-origin: top left;\r\n    -webkit-animation-timing-function: ease-in-out;\r\n    animation-timing-function: ease-in-out;\r\n  }\r\n\r\n  20%, 60% {\r\n    -webkit-transform: rotate(80deg);\r\n    -ms-transform: rotate(80deg);\r\n    transform: rotate(80deg);\r\n    -webkit-transform-origin: top left;\r\n    -ms-transform-origin: top left;\r\n    transform-origin: top left;\r\n    -webkit-animation-timing-function: ease-in-out;\r\n    animation-timing-function: ease-in-out;\r\n  }\r\n\r\n  40% {\r\n    -webkit-transform: rotate(60deg);\r\n    -ms-transform: rotate(60deg);\r\n    transform: rotate(60deg);\r\n    -webkit-transform-origin: top left;\r\n    -ms-transform-origin: top left;\r\n    transform-origin: top left;\r\n    -webkit-animation-timing-function: ease-in-out;\r\n    animation-timing-function: ease-in-out;\r\n  }\r\n\r\n  80% {\r\n    -webkit-transform: rotate(60deg) translateY(0);\r\n    -ms-transform: rotate(60deg) translateY(0);\r\n    transform: rotate(60deg) translateY(0);\r\n    opacity: 1;\r\n    -webkit-transform-origin: top left;\r\n    -ms-transform-origin: top left;\r\n    transform-origin: top left;\r\n    -webkit-animation-timing-function: ease-in-out;\r\n    animation-timing-function: ease-in-out;\r\n  }\r\n\r\n  100% {\r\n    -webkit-transform: translateY(700px);\r\n    -ms-transform: translateY(700px);\r\n    transform: translateY(700px);\r\n    opacity: 0;\r\n  }\r\n}\r\n\r\n.hinge {\r\n  -webkit-animation-name: hinge;\r\n  animation-name: hinge;\r\n}\r\n\r\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\r\n\r\n@-webkit-keyframes rollIn {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-100%) rotate(-120deg);\r\n    transform: translateX(-100%) rotate(-120deg);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0px) rotate(0deg);\r\n    transform: translateX(0px) rotate(0deg);\r\n  }\r\n}\r\n\r\n@keyframes rollIn {\r\n  0% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(-100%) rotate(-120deg);\r\n    -ms-transform: translateX(-100%) rotate(-120deg);\r\n    transform: translateX(-100%) rotate(-120deg);\r\n  }\r\n\r\n  100% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0px) rotate(0deg);\r\n    -ms-transform: translateX(0px) rotate(0deg);\r\n    transform: translateX(0px) rotate(0deg);\r\n  }\r\n}\r\n\r\n.rollIn {\r\n  -webkit-animation-name: rollIn;\r\n  animation-name: rollIn;\r\n}\r\n\r\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\r\n\r\n@-webkit-keyframes rollOut {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0px) rotate(0deg);\r\n    transform: translateX(0px) rotate(0deg);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(100%) rotate(120deg);\r\n    transform: translateX(100%) rotate(120deg);\r\n  }\r\n}\r\n\r\n@keyframes rollOut {\r\n  0% {\r\n    opacity: 1;\r\n    -webkit-transform: translateX(0px) rotate(0deg);\r\n    -ms-transform: translateX(0px) rotate(0deg);\r\n    transform: translateX(0px) rotate(0deg);\r\n  }\r\n\r\n  100% {\r\n    opacity: 0;\r\n    -webkit-transform: translateX(100%) rotate(120deg);\r\n    -ms-transform: translateX(100%) rotate(120deg);\r\n    transform: translateX(100%) rotate(120deg);\r\n  }\r\n}\r\n\r\n.rollOut {\r\n  -webkit-animation-name: rollOut;\r\n  animation-name: rollOut;\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/css/bootstrap-social.css",
    "content": "/*\n * Social Buttons for Bootstrap\n *\n * Copyright 2013-2014 Panayiotis Lipiridis\n * Licensed under the MIT License\n *\n * https://github.com/lipis/bootstrap-social\n */\n\n.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}\n.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em}\n.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em}\n.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em}\n.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}\n.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em}\n.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em}\n.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em}\n.btn-social-icon :first-child{border:none;text-align:center;width:100% !important}\n.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}\n.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}\n.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}\n.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:hover,.btn-adn:focus,.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}\n.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}\n.btn-adn.disabled,.btn-adn[disabled],fieldset[disabled] .btn-adn,.btn-adn.disabled:hover,.btn-adn[disabled]:hover,fieldset[disabled] .btn-adn:hover,.btn-adn.disabled:focus,.btn-adn[disabled]:focus,fieldset[disabled] .btn-adn:focus,.btn-adn.disabled:active,.btn-adn[disabled]:active,fieldset[disabled] .btn-adn:active,.btn-adn.disabled.active,.btn-adn[disabled].active,fieldset[disabled] .btn-adn.active{background-color:#d87a68;border-color:rgba(0,0,0,0.2)}\n.btn-adn .badge{color:#d87a68;background-color:#fff}\n.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover,.btn-bitbucket:focus,.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}\n.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}\n.btn-bitbucket.disabled,.btn-bitbucket[disabled],fieldset[disabled] .btn-bitbucket,.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled:active,.btn-bitbucket[disabled]:active,fieldset[disabled] .btn-bitbucket:active,.btn-bitbucket.disabled.active,.btn-bitbucket[disabled].active,fieldset[disabled] .btn-bitbucket.active{background-color:#205081;border-color:rgba(0,0,0,0.2)}\n.btn-bitbucket .badge{color:#205081;background-color:#fff}\n.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover,.btn-dropbox:focus,.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}\n.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}\n.btn-dropbox.disabled,.btn-dropbox[disabled],fieldset[disabled] .btn-dropbox,.btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled:active,.btn-dropbox[disabled]:active,fieldset[disabled] .btn-dropbox:active,.btn-dropbox.disabled.active,.btn-dropbox[disabled].active,fieldset[disabled] .btn-dropbox.active{background-color:#1087dd;border-color:rgba(0,0,0,0.2)}\n.btn-dropbox .badge{color:#1087dd;background-color:#fff}\n.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover,.btn-facebook:focus,.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}\n.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}\n.btn-facebook.disabled,.btn-facebook[disabled],fieldset[disabled] .btn-facebook,.btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled:active,.btn-facebook[disabled]:active,fieldset[disabled] .btn-facebook:active,.btn-facebook.disabled.active,.btn-facebook[disabled].active,fieldset[disabled] .btn-facebook.active{background-color:#3b5998;border-color:rgba(0,0,0,0.2)}\n.btn-facebook .badge{color:#3b5998;background-color:#fff}\n.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover,.btn-flickr:focus,.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}\n.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}\n.btn-flickr.disabled,.btn-flickr[disabled],fieldset[disabled] .btn-flickr,.btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled:active,.btn-flickr[disabled]:active,fieldset[disabled] .btn-flickr:active,.btn-flickr.disabled.active,.btn-flickr[disabled].active,fieldset[disabled] .btn-flickr.active{background-color:#ff0084;border-color:rgba(0,0,0,0.2)}\n.btn-flickr .badge{color:#ff0084;background-color:#fff}\n.btn-foursquare{color:#fff;background-color:#0072b1;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover,.btn-foursquare:focus,.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#00517e;border-color:rgba(0,0,0,0.2)}\n.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}\n.btn-foursquare.disabled,.btn-foursquare[disabled],fieldset[disabled] .btn-foursquare,.btn-foursquare.disabled:hover,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare:hover,.btn-foursquare.disabled:focus,.btn-foursquare[disabled]:focus,fieldset[disabled] .btn-foursquare:focus,.btn-foursquare.disabled:active,.btn-foursquare[disabled]:active,fieldset[disabled] .btn-foursquare:active,.btn-foursquare.disabled.active,.btn-foursquare[disabled].active,fieldset[disabled] .btn-foursquare.active{background-color:#0072b1;border-color:rgba(0,0,0,0.2)}\n.btn-foursquare .badge{color:#0072b1;background-color:#fff}\n.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:hover,.btn-github:focus,.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}\n.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}\n.btn-github.disabled,.btn-github[disabled],fieldset[disabled] .btn-github,.btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled:active,.btn-github[disabled]:active,fieldset[disabled] .btn-github:active,.btn-github.disabled.active,.btn-github[disabled].active,fieldset[disabled] .btn-github.active{background-color:#444;border-color:rgba(0,0,0,0.2)}\n.btn-github .badge{color:#444;background-color:#fff}\n.btn-google-plus{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google-plus:hover,.btn-google-plus:focus,.btn-google-plus:active,.btn-google-plus.active,.open>.dropdown-toggle.btn-google-plus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}\n.btn-google-plus:active,.btn-google-plus.active,.open>.dropdown-toggle.btn-google-plus{background-image:none}\n.btn-google-plus.disabled,.btn-google-plus[disabled],fieldset[disabled] .btn-google-plus,.btn-google-plus.disabled:hover,.btn-google-plus[disabled]:hover,fieldset[disabled] .btn-google-plus:hover,.btn-google-plus.disabled:focus,.btn-google-plus[disabled]:focus,fieldset[disabled] .btn-google-plus:focus,.btn-google-plus.disabled:active,.btn-google-plus[disabled]:active,fieldset[disabled] .btn-google-plus:active,.btn-google-plus.disabled.active,.btn-google-plus[disabled].active,fieldset[disabled] .btn-google-plus.active{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}\n.btn-google-plus .badge{color:#dd4b39;background-color:#fff}\n.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover,.btn-instagram:focus,.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}\n.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}\n.btn-instagram.disabled,.btn-instagram[disabled],fieldset[disabled] .btn-instagram,.btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled:active,.btn-instagram[disabled]:active,fieldset[disabled] .btn-instagram:active,.btn-instagram.disabled.active,.btn-instagram[disabled].active,fieldset[disabled] .btn-instagram.active{background-color:#3f729b;border-color:rgba(0,0,0,0.2)}\n.btn-instagram .badge{color:#3f729b;background-color:#fff}\n.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover,.btn-linkedin:focus,.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}\n.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}\n.btn-linkedin.disabled,.btn-linkedin[disabled],fieldset[disabled] .btn-linkedin,.btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled:active,.btn-linkedin[disabled]:active,fieldset[disabled] .btn-linkedin:active,.btn-linkedin.disabled.active,.btn-linkedin[disabled].active,fieldset[disabled] .btn-linkedin.active{background-color:#007bb6;border-color:rgba(0,0,0,0.2)}\n.btn-linkedin .badge{color:#007bb6;background-color:#fff}\n.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover,.btn-microsoft:focus,.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}\n.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}\n.btn-microsoft.disabled,.btn-microsoft[disabled],fieldset[disabled] .btn-microsoft,.btn-microsoft.disabled:hover,.btn-microsoft[disabled]:hover,fieldset[disabled] .btn-microsoft:hover,.btn-microsoft.disabled:focus,.btn-microsoft[disabled]:focus,fieldset[disabled] .btn-microsoft:focus,.btn-microsoft.disabled:active,.btn-microsoft[disabled]:active,fieldset[disabled] .btn-microsoft:active,.btn-microsoft.disabled.active,.btn-microsoft[disabled].active,fieldset[disabled] .btn-microsoft.active{background-color:#2672ec;border-color:rgba(0,0,0,0.2)}\n.btn-microsoft .badge{color:#2672ec;background-color:#fff}\n.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:hover,.btn-openid:focus,.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}\n.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}\n.btn-openid.disabled,.btn-openid[disabled],fieldset[disabled] .btn-openid,.btn-openid.disabled:hover,.btn-openid[disabled]:hover,fieldset[disabled] .btn-openid:hover,.btn-openid.disabled:focus,.btn-openid[disabled]:focus,fieldset[disabled] .btn-openid:focus,.btn-openid.disabled:active,.btn-openid[disabled]:active,fieldset[disabled] .btn-openid:active,.btn-openid.disabled.active,.btn-openid[disabled].active,fieldset[disabled] .btn-openid.active{background-color:#f7931e;border-color:rgba(0,0,0,0.2)}\n.btn-openid .badge{color:#f7931e;background-color:#fff}\n.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover,.btn-reddit:focus,.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}\n.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}\n.btn-reddit.disabled,.btn-reddit[disabled],fieldset[disabled] .btn-reddit,.btn-reddit.disabled:hover,.btn-reddit[disabled]:hover,fieldset[disabled] .btn-reddit:hover,.btn-reddit.disabled:focus,.btn-reddit[disabled]:focus,fieldset[disabled] .btn-reddit:focus,.btn-reddit.disabled:active,.btn-reddit[disabled]:active,fieldset[disabled] .btn-reddit:active,.btn-reddit.disabled.active,.btn-reddit[disabled].active,fieldset[disabled] .btn-reddit.active{background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}\n.btn-reddit .badge{color:#eff7ff;background-color:#000}\n.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover,.btn-soundcloud:focus,.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}\n.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}\n.btn-soundcloud.disabled,.btn-soundcloud[disabled],fieldset[disabled] .btn-soundcloud,.btn-soundcloud.disabled:hover,.btn-soundcloud[disabled]:hover,fieldset[disabled] .btn-soundcloud:hover,.btn-soundcloud.disabled:focus,.btn-soundcloud[disabled]:focus,fieldset[disabled] .btn-soundcloud:focus,.btn-soundcloud.disabled:active,.btn-soundcloud[disabled]:active,fieldset[disabled] .btn-soundcloud:active,.btn-soundcloud.disabled.active,.btn-soundcloud[disabled].active,fieldset[disabled] .btn-soundcloud.active{background-color:#f50;border-color:rgba(0,0,0,0.2)}\n.btn-soundcloud .badge{color:#f50;background-color:#fff}\n.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover,.btn-tumblr:focus,.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}\n.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}\n.btn-tumblr.disabled,.btn-tumblr[disabled],fieldset[disabled] .btn-tumblr,.btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled:active,.btn-tumblr[disabled]:active,fieldset[disabled] .btn-tumblr:active,.btn-tumblr.disabled.active,.btn-tumblr[disabled].active,fieldset[disabled] .btn-tumblr.active{background-color:#2c4762;border-color:rgba(0,0,0,0.2)}\n.btn-tumblr .badge{color:#2c4762;background-color:#fff}\n.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover,.btn-twitter:focus,.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}\n.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}\n.btn-twitter.disabled,.btn-twitter[disabled],fieldset[disabled] .btn-twitter,.btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled:active,.btn-twitter[disabled]:active,fieldset[disabled] .btn-twitter:active,.btn-twitter.disabled.active,.btn-twitter[disabled].active,fieldset[disabled] .btn-twitter.active{background-color:#55acee;border-color:rgba(0,0,0,0.2)}\n.btn-twitter .badge{color:#55acee;background-color:#fff}\n.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover,.btn-vimeo:focus,.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}\n.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}\n.btn-vimeo.disabled,.btn-vimeo[disabled],fieldset[disabled] .btn-vimeo,.btn-vimeo.disabled:hover,.btn-vimeo[disabled]:hover,fieldset[disabled] .btn-vimeo:hover,.btn-vimeo.disabled:focus,.btn-vimeo[disabled]:focus,fieldset[disabled] .btn-vimeo:focus,.btn-vimeo.disabled:active,.btn-vimeo[disabled]:active,fieldset[disabled] .btn-vimeo:active,.btn-vimeo.disabled.active,.btn-vimeo[disabled].active,fieldset[disabled] .btn-vimeo.active{background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}\n.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}\n.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:hover,.btn-vk:focus,.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}\n.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}\n.btn-vk.disabled,.btn-vk[disabled],fieldset[disabled] .btn-vk,.btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled:active,.btn-vk[disabled]:active,fieldset[disabled] .btn-vk:active,.btn-vk.disabled.active,.btn-vk[disabled].active,fieldset[disabled] .btn-vk.active{background-color:#587ea3;border-color:rgba(0,0,0,0.2)}\n.btn-vk .badge{color:#587ea3;background-color:#fff}\n.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover,.btn-yahoo:focus,.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}\n.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}\n.btn-yahoo.disabled,.btn-yahoo[disabled],fieldset[disabled] .btn-yahoo,.btn-yahoo.disabled:hover,.btn-yahoo[disabled]:hover,fieldset[disabled] .btn-yahoo:hover,.btn-yahoo.disabled:focus,.btn-yahoo[disabled]:focus,fieldset[disabled] .btn-yahoo:focus,.btn-yahoo.disabled:active,.btn-yahoo[disabled]:active,fieldset[disabled] .btn-yahoo:active,.btn-yahoo.disabled.active,.btn-yahoo[disabled].active,fieldset[disabled] .btn-yahoo.active{background-color:#720e9e;border-color:rgba(0,0,0,0.2)}\n.btn-yahoo .badge{color:#720e9e;background-color:#fff}\n"
  },
  {
    "path": "src/main/webapp/static/css/bootstrap-table-editable.css",
    "content": "/*! X-editable - v1.5.1 \r\n* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery\r\n* http://github.com/vitalets/x-editable\r\n* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */\r\n.editableform {\r\n    margin-bottom: 0; /* overwrites bootstrap margin */\r\n}\r\n\r\n.editableform .control-group {\r\n    margin-bottom: 0; /* overwrites bootstrap margin */\r\n    white-space: nowrap; /* prevent wrapping buttons on new line */\r\n    line-height: 20px; /* overwriting bootstrap line-height. See #133 */\r\n}\r\n\r\n/* \r\n  BS3 width:1005 for inputs breaks editable form in popup \r\n  See: https://github.com/vitalets/x-editable/issues/393\r\n*/\r\n.editableform .form-control {\r\n    width: auto;\r\n}\r\n\r\n.editable-buttons {\r\n   display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */\r\n   vertical-align: top;\r\n   margin-left: 7px;\r\n   /* inline-block emulation for IE7*/\r\n   zoom: 1; \r\n   *display: inline;\r\n}\r\n\r\n.editable-buttons.editable-buttons-bottom {\r\n   display: block; \r\n   margin-top: 7px;\r\n   margin-left: 0;\r\n}\r\n\r\n.editable-input {\r\n    vertical-align: top; \r\n    display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */\r\n    width: auto; /* bootstrap-responsive has width: 100% that breakes layout */\r\n    white-space: normal; /* reset white-space decalred in parent*/\r\n   /* display-inline emulation for IE7*/\r\n   zoom: 1; \r\n   *display: inline;   \r\n}\r\n\r\n.editable-buttons .editable-cancel {\r\n   margin-left: 7px; \r\n}\r\n\r\n/*for jquery-ui buttons need set height to look more pretty*/\r\n.editable-buttons button.ui-button-icon-only {\r\n   height: 24px; \r\n   width: 30px;\r\n}\r\n\r\n.editableform-loading {\r\n    background: url('/hr/static/img/loading.gif') center center no-repeat;  \r\n    height: 25px;\r\n    width: auto; \r\n    min-width: 25px; \r\n}\r\n\r\n.editable-inline .editableform-loading {\r\n    background-position: left 5px;      \r\n}\r\n\r\n .editable-error-block {\r\n    max-width: 300px;\r\n    margin: 5px 0 0 0;\r\n    width: auto;\r\n    white-space: normal;\r\n}\r\n\r\n/*add padding for jquery ui*/\r\n.editable-error-block.ui-state-error {\r\n    padding: 3px;  \r\n}  \r\n\r\n.editable-error {\r\n   color: red;  \r\n}\r\n\r\n/* ---- For specific types ---- */\r\n\r\n.editableform .editable-date {\r\n    padding: 0; \r\n    margin: 0;\r\n    float: left;\r\n}\r\n\r\n/* move datepicker icon to center of add-on button. See https://github.com/vitalets/x-editable/issues/183 */\r\n.editable-inline .add-on .icon-th {\r\n   margin-top: 3px;\r\n   margin-left: 1px; \r\n}\r\n\r\n\r\n/* checklist vertical alignment */\r\n.editable-checklist label input[type=\"checkbox\"], \r\n.editable-checklist label span {\r\n    vertical-align: middle;\r\n    margin: 0;\r\n}\r\n\r\n.editable-checklist label {\r\n    white-space: nowrap; \r\n}\r\n\r\n/* set exact width of textarea to fit buttons toolbar */\r\n.editable-wysihtml5 {\r\n    width: 566px; \r\n    height: 250px; \r\n}\r\n\r\n/* clear button shown as link in date inputs */\r\n.editable-clear {\r\n   clear: both;\r\n   font-size: 0.9em;\r\n   text-decoration: none;\r\n   text-align: right;\r\n}\r\n\r\n/* IOS-style clear button for text inputs */\r\n.editable-clear-x {\r\n   background: url('/hr/static/img/clear.png') center center no-repeat;\r\n   display: block;\r\n   width: 13px;    \r\n   height: 13px;\r\n   position: absolute;\r\n   opacity: 0.6;\r\n   z-index: 100;\r\n   \r\n   top: 50%;\r\n   right: 10px;\r\n   margin-top: -6px;\r\n   \r\n}\r\n\r\n.editable-clear-x:hover {\r\n   opacity: 1;\r\n}\r\n\r\n.editable-pre-wrapped {\r\n   white-space: pre-wrap;\r\n}\r\n.editable-container.editable-popup {\r\n    max-width: none !important; /* without this rule poshytip/tooltip does not stretch */\r\n}  \r\n\r\n.editable-container.popover {\r\n    width: auto; /* without this rule popover does not stretch */\r\n}\r\n\r\n.editable-container.editable-inline {\r\n    display: inline-block; \r\n    vertical-align: middle;\r\n    width: auto;\r\n    /* inline-block emulation for IE7*/\r\n    zoom: 1; \r\n    *display: inline;    \r\n}\r\n\r\n.editable-container.ui-widget {\r\n   font-size: inherit;  /* jqueryui widget font 1.1em too big, overwrite it */\r\n   z-index: 9990; /* should be less than select2 dropdown z-index to close dropdown first when click */\r\n}\r\n.editable-click, \r\na.editable-click, \r\na.editable-click:hover {\r\n    text-decoration: none;\r\n    border-bottom: dashed 1px #0088cc;\r\n}\r\n\r\n.editable-click.editable-disabled, \r\na.editable-click.editable-disabled, \r\na.editable-click.editable-disabled:hover {\r\n   color: #585858;  \r\n   cursor: default;\r\n   border-bottom: none;\r\n}\r\n\r\n.editable-empty, .editable-empty:hover, .editable-empty:focus{\r\n  font-style: italic; \r\n  color: #DD1144;  \r\n  /* border-bottom: none; */\r\n  text-decoration: none;\r\n}\r\n\r\n.editable-unsaved {\r\n  font-weight: bold; \r\n}\r\n\r\n.editable-unsaved:after {\r\n/*    content: '*'*/\r\n}\r\n\r\n.editable-bg-transition {\r\n  -webkit-transition: background-color 1400ms ease-out;\r\n  -moz-transition: background-color 1400ms ease-out;\r\n  -o-transition: background-color 1400ms ease-out;\r\n  -ms-transition: background-color 1400ms ease-out;\r\n  transition: background-color 1400ms ease-out;  \r\n}\r\n\r\n/*see https://github.com/vitalets/x-editable/issues/139 */\r\n.form-horizontal .editable\r\n{ \r\n    padding-top: 5px;\r\n    display:inline-block;\r\n}\r\n\r\n\r\n/*!\r\n * Datepicker for Bootstrap\r\n *\r\n * Copyright 2012 Stefan Petre\r\n * Improvements by Andrew Rowls\r\n * Licensed under the Apache License v2.0\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n */\r\n.datepicker {\r\n  padding: 4px;\r\n  -webkit-border-radius: 4px;\r\n  -moz-border-radius: 4px;\r\n  border-radius: 4px;\r\n  direction: ltr;\r\n  /*.dow {\r\n\t\tborder-top: 1px solid #ddd !important;\r\n\t}*/\r\n\r\n}\r\n.datepicker-inline {\r\n  width: 220px;\r\n}\r\n.datepicker.datepicker-rtl {\r\n  direction: rtl;\r\n}\r\n.datepicker.datepicker-rtl table tr td span {\r\n  float: right;\r\n}\r\n.datepicker-dropdown {\r\n  top: 0;\r\n  left: 0;\r\n}\r\n.datepicker-dropdown:before {\r\n  content: '';\r\n  display: inline-block;\r\n  border-left: 7px solid transparent;\r\n  border-right: 7px solid transparent;\r\n  border-bottom: 7px solid #ccc;\r\n  border-bottom-color: rgba(0, 0, 0, 0.2);\r\n  position: absolute;\r\n  top: -7px;\r\n  left: 6px;\r\n}\r\n.datepicker-dropdown:after {\r\n  content: '';\r\n  display: inline-block;\r\n  border-left: 6px solid transparent;\r\n  border-right: 6px solid transparent;\r\n  border-bottom: 6px solid #ffffff;\r\n  position: absolute;\r\n  top: -6px;\r\n  left: 7px;\r\n}\r\n.datepicker > div {\r\n  display: none;\r\n}\r\n.datepicker.days div.datepicker-days {\r\n  display: block;\r\n}\r\n.datepicker.months div.datepicker-months {\r\n  display: block;\r\n}\r\n.datepicker.years div.datepicker-years {\r\n  display: block;\r\n}\r\n.datepicker table {\r\n  margin: 0;\r\n}\r\n.datepicker td,\r\n.datepicker th {\r\n  text-align: center;\r\n  width: 20px;\r\n  height: 20px;\r\n  -webkit-border-radius: 4px;\r\n  -moz-border-radius: 4px;\r\n  border-radius: 4px;\r\n  border: none;\r\n}\r\n.table-striped .datepicker table tr td,\r\n.table-striped .datepicker table tr th {\r\n  background-color: transparent;\r\n}\r\n.datepicker table tr td.day:hover {\r\n  background: #eeeeee;\r\n  cursor: pointer;\r\n}\r\n.datepicker table tr td.old,\r\n.datepicker table tr td.new {\r\n  color: #999999;\r\n}\r\n.datepicker table tr td.disabled,\r\n.datepicker table tr td.disabled:hover {\r\n  background: none;\r\n  color: #999999;\r\n  cursor: default;\r\n}\r\n.datepicker table tr td.today,\r\n.datepicker table tr td.today:hover,\r\n.datepicker table tr td.today.disabled,\r\n.datepicker table tr td.today.disabled:hover {\r\n  background-color: #fde19a;\r\n  background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);\r\n  background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);\r\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));\r\n  background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);\r\n  background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);\r\n  background-image: linear-gradient(top, #fdd49a, #fdf59a);\r\n  background-repeat: repeat-x;\r\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);\r\n  border-color: #fdf59a #fdf59a #fbed50;\r\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\r\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\r\n  color: #000;\r\n}\r\n.datepicker table tr td.today:hover,\r\n.datepicker table tr td.today:hover:hover,\r\n.datepicker table tr td.today.disabled:hover,\r\n.datepicker table tr td.today.disabled:hover:hover,\r\n.datepicker table tr td.today:active,\r\n.datepicker table tr td.today:hover:active,\r\n.datepicker table tr td.today.disabled:active,\r\n.datepicker table tr td.today.disabled:hover:active,\r\n.datepicker table tr td.today.active,\r\n.datepicker table tr td.today:hover.active,\r\n.datepicker table tr td.today.disabled.active,\r\n.datepicker table tr td.today.disabled:hover.active,\r\n.datepicker table tr td.today.disabled,\r\n.datepicker table tr td.today:hover.disabled,\r\n.datepicker table tr td.today.disabled.disabled,\r\n.datepicker table tr td.today.disabled:hover.disabled,\r\n.datepicker table tr td.today[disabled],\r\n.datepicker table tr td.today:hover[disabled],\r\n.datepicker table tr td.today.disabled[disabled],\r\n.datepicker table tr td.today.disabled:hover[disabled] {\r\n  background-color: #fdf59a;\r\n}\r\n.datepicker table tr td.today:active,\r\n.datepicker table tr td.today:hover:active,\r\n.datepicker table tr td.today.disabled:active,\r\n.datepicker table tr td.today.disabled:hover:active,\r\n.datepicker table tr td.today.active,\r\n.datepicker table tr td.today:hover.active,\r\n.datepicker table tr td.today.disabled.active,\r\n.datepicker table tr td.today.disabled:hover.active {\r\n  background-color: #fbf069 \\9;\r\n}\r\n.datepicker table tr td.today:hover:hover {\r\n  color: #000;\r\n}\r\n.datepicker table tr td.today.active:hover {\r\n  color: #fff;\r\n}\r\n.datepicker table tr td.range,\r\n.datepicker table tr td.range:hover,\r\n.datepicker table tr td.range.disabled,\r\n.datepicker table tr td.range.disabled:hover {\r\n  background: #eeeeee;\r\n  -webkit-border-radius: 0;\r\n  -moz-border-radius: 0;\r\n  border-radius: 0;\r\n}\r\n.datepicker table tr td.range.today,\r\n.datepicker table tr td.range.today:hover,\r\n.datepicker table tr td.range.today.disabled,\r\n.datepicker table tr td.range.today.disabled:hover {\r\n  background-color: #f3d17a;\r\n  background-image: -moz-linear-gradient(top, #f3c17a, #f3e97a);\r\n  background-image: -ms-linear-gradient(top, #f3c17a, #f3e97a);\r\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));\r\n  background-image: -webkit-linear-gradient(top, #f3c17a, #f3e97a);\r\n  background-image: -o-linear-gradient(top, #f3c17a, #f3e97a);\r\n  background-image: linear-gradient(top, #f3c17a, #f3e97a);\r\n  background-repeat: repeat-x;\r\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);\r\n  border-color: #f3e97a #f3e97a #edde34;\r\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\r\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\r\n  -webkit-border-radius: 0;\r\n  -moz-border-radius: 0;\r\n  border-radius: 0;\r\n}\r\n.datepicker table tr td.range.today:hover,\r\n.datepicker table tr td.range.today:hover:hover,\r\n.datepicker table tr td.range.today.disabled:hover,\r\n.datepicker table tr td.range.today.disabled:hover:hover,\r\n.datepicker table tr td.range.today:active,\r\n.datepicker table tr td.range.today:hover:active,\r\n.datepicker table tr td.range.today.disabled:active,\r\n.datepicker table tr td.range.today.disabled:hover:active,\r\n.datepicker table tr td.range.today.active,\r\n.datepicker table tr td.range.today:hover.active,\r\n.datepicker table tr td.range.today.disabled.active,\r\n.datepicker table tr td.range.today.disabled:hover.active,\r\n.datepicker table tr td.range.today.disabled,\r\n.datepicker table tr td.range.today:hover.disabled,\r\n.datepicker table tr td.range.today.disabled.disabled,\r\n.datepicker table tr td.range.today.disabled:hover.disabled,\r\n.datepicker table tr td.range.today[disabled],\r\n.datepicker table tr td.range.today:hover[disabled],\r\n.datepicker table tr td.range.today.disabled[disabled],\r\n.datepicker table tr td.range.today.disabled:hover[disabled] {\r\n  background-color: #f3e97a;\r\n}\r\n.datepicker table tr td.range.today:active,\r\n.datepicker table tr td.range.today:hover:active,\r\n.datepicker table tr td.range.today.disabled:active,\r\n.datepicker table tr td.range.today.disabled:hover:active,\r\n.datepicker table tr td.range.today.active,\r\n.datepicker table tr td.range.today:hover.active,\r\n.datepicker table tr td.range.today.disabled.active,\r\n.datepicker table tr td.range.today.disabled:hover.active {\r\n  background-color: #efe24b \\9;\r\n}\r\n.datepicker table tr td.selected,\r\n.datepicker table tr td.selected:hover,\r\n.datepicker table tr td.selected.disabled,\r\n.datepicker table tr td.selected.disabled:hover {\r\n  background-color: #9e9e9e;\r\n  background-image: -moz-linear-gradient(top, #b3b3b3, #808080);\r\n  background-image: -ms-linear-gradient(top, #b3b3b3, #808080);\r\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));\r\n  background-image: -webkit-linear-gradient(top, #b3b3b3, #808080);\r\n  background-image: -o-linear-gradient(top, #b3b3b3, #808080);\r\n  background-image: linear-gradient(top, #b3b3b3, #808080);\r\n  background-repeat: repeat-x;\r\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);\r\n  border-color: #808080 #808080 #595959;\r\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\r\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\r\n  color: #fff;\r\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\r\n}\r\n.datepicker table tr td.selected:hover,\r\n.datepicker table tr td.selected:hover:hover,\r\n.datepicker table tr td.selected.disabled:hover,\r\n.datepicker table tr td.selected.disabled:hover:hover,\r\n.datepicker table tr td.selected:active,\r\n.datepicker table tr td.selected:hover:active,\r\n.datepicker table tr td.selected.disabled:active,\r\n.datepicker table tr td.selected.disabled:hover:active,\r\n.datepicker table tr td.selected.active,\r\n.datepicker table tr td.selected:hover.active,\r\n.datepicker table tr td.selected.disabled.active,\r\n.datepicker table tr td.selected.disabled:hover.active,\r\n.datepicker table tr td.selected.disabled,\r\n.datepicker table tr td.selected:hover.disabled,\r\n.datepicker table tr td.selected.disabled.disabled,\r\n.datepicker table tr td.selected.disabled:hover.disabled,\r\n.datepicker table tr td.selected[disabled],\r\n.datepicker table tr td.selected:hover[disabled],\r\n.datepicker table tr td.selected.disabled[disabled],\r\n.datepicker table tr td.selected.disabled:hover[disabled] {\r\n  background-color: #808080;\r\n}\r\n.datepicker table tr td.selected:active,\r\n.datepicker table tr td.selected:hover:active,\r\n.datepicker table tr td.selected.disabled:active,\r\n.datepicker table tr td.selected.disabled:hover:active,\r\n.datepicker table tr td.selected.active,\r\n.datepicker table tr td.selected:hover.active,\r\n.datepicker table tr td.selected.disabled.active,\r\n.datepicker table tr td.selected.disabled:hover.active {\r\n  background-color: #666666 \\9;\r\n}\r\n.datepicker table tr td.active,\r\n.datepicker table tr td.active:hover,\r\n.datepicker table tr td.active.disabled,\r\n.datepicker table tr td.active.disabled:hover {\r\n  background-color: #006dcc;\r\n  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);\r\n  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);\r\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));\r\n  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);\r\n  background-image: -o-linear-gradient(top, #0088cc, #0044cc);\r\n  background-image: linear-gradient(top, #0088cc, #0044cc);\r\n  background-repeat: repeat-x;\r\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);\r\n  border-color: #0044cc #0044cc #002a80;\r\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\r\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\r\n  color: #fff;\r\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\r\n}\r\n.datepicker table tr td.active:hover,\r\n.datepicker table tr td.active:hover:hover,\r\n.datepicker table tr td.active.disabled:hover,\r\n.datepicker table tr td.active.disabled:hover:hover,\r\n.datepicker table tr td.active:active,\r\n.datepicker table tr td.active:hover:active,\r\n.datepicker table tr td.active.disabled:active,\r\n.datepicker table tr td.active.disabled:hover:active,\r\n.datepicker table tr td.active.active,\r\n.datepicker table tr td.active:hover.active,\r\n.datepicker table tr td.active.disabled.active,\r\n.datepicker table tr td.active.disabled:hover.active,\r\n.datepicker table tr td.active.disabled,\r\n.datepicker table tr td.active:hover.disabled,\r\n.datepicker table tr td.active.disabled.disabled,\r\n.datepicker table tr td.active.disabled:hover.disabled,\r\n.datepicker table tr td.active[disabled],\r\n.datepicker table tr td.active:hover[disabled],\r\n.datepicker table tr td.active.disabled[disabled],\r\n.datepicker table tr td.active.disabled:hover[disabled] {\r\n  background-color: #0044cc;\r\n}\r\n.datepicker table tr td.active:active,\r\n.datepicker table tr td.active:hover:active,\r\n.datepicker table tr td.active.disabled:active,\r\n.datepicker table tr td.active.disabled:hover:active,\r\n.datepicker table tr td.active.active,\r\n.datepicker table tr td.active:hover.active,\r\n.datepicker table tr td.active.disabled.active,\r\n.datepicker table tr td.active.disabled:hover.active {\r\n  background-color: #003399 \\9;\r\n}\r\n.datepicker table tr td span {\r\n  display: block;\r\n  width: 23%;\r\n  height: 54px;\r\n  line-height: 54px;\r\n  float: left;\r\n  margin: 1%;\r\n  cursor: pointer;\r\n  -webkit-border-radius: 4px;\r\n  -moz-border-radius: 4px;\r\n  border-radius: 4px;\r\n}\r\n.datepicker table tr td span:hover {\r\n  background: #eeeeee;\r\n}\r\n.datepicker table tr td span.disabled,\r\n.datepicker table tr td span.disabled:hover {\r\n  background: none;\r\n  color: #999999;\r\n  cursor: default;\r\n}\r\n.datepicker table tr td span.active,\r\n.datepicker table tr td span.active:hover,\r\n.datepicker table tr td span.active.disabled,\r\n.datepicker table tr td span.active.disabled:hover {\r\n  background-color: #006dcc;\r\n  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);\r\n  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);\r\n  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));\r\n  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);\r\n  background-image: -o-linear-gradient(top, #0088cc, #0044cc);\r\n  background-image: linear-gradient(top, #0088cc, #0044cc);\r\n  background-repeat: repeat-x;\r\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);\r\n  border-color: #0044cc #0044cc #002a80;\r\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\r\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\r\n  color: #fff;\r\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\r\n}\r\n.datepicker table tr td span.active:hover,\r\n.datepicker table tr td span.active:hover:hover,\r\n.datepicker table tr td span.active.disabled:hover,\r\n.datepicker table tr td span.active.disabled:hover:hover,\r\n.datepicker table tr td span.active:active,\r\n.datepicker table tr td span.active:hover:active,\r\n.datepicker table tr td span.active.disabled:active,\r\n.datepicker table tr td span.active.disabled:hover:active,\r\n.datepicker table tr td span.active.active,\r\n.datepicker table tr td span.active:hover.active,\r\n.datepicker table tr td span.active.disabled.active,\r\n.datepicker table tr td span.active.disabled:hover.active,\r\n.datepicker table tr td span.active.disabled,\r\n.datepicker table tr td span.active:hover.disabled,\r\n.datepicker table tr td span.active.disabled.disabled,\r\n.datepicker table tr td span.active.disabled:hover.disabled,\r\n.datepicker table tr td span.active[disabled],\r\n.datepicker table tr td span.active:hover[disabled],\r\n.datepicker table tr td span.active.disabled[disabled],\r\n.datepicker table tr td span.active.disabled:hover[disabled] {\r\n  background-color: #0044cc;\r\n}\r\n.datepicker table tr td span.active:active,\r\n.datepicker table tr td span.active:hover:active,\r\n.datepicker table tr td span.active.disabled:active,\r\n.datepicker table tr td span.active.disabled:hover:active,\r\n.datepicker table tr td span.active.active,\r\n.datepicker table tr td span.active:hover.active,\r\n.datepicker table tr td span.active.disabled.active,\r\n.datepicker table tr td span.active.disabled:hover.active {\r\n  background-color: #003399 \\9;\r\n}\r\n.datepicker table tr td span.old,\r\n.datepicker table tr td span.new {\r\n  color: #999999;\r\n}\r\n.datepicker th.datepicker-switch {\r\n  width: 145px;\r\n}\r\n.datepicker thead tr:first-child th,\r\n.datepicker tfoot tr th {\r\n  cursor: pointer;\r\n}\r\n.datepicker thead tr:first-child th:hover,\r\n.datepicker tfoot tr th:hover {\r\n  background: #eeeeee;\r\n}\r\n.datepicker .cw {\r\n  font-size: 10px;\r\n  width: 12px;\r\n  padding: 0 2px 0 5px;\r\n  vertical-align: middle;\r\n}\r\n.datepicker thead tr:first-child th.cw {\r\n  cursor: default;\r\n  background-color: transparent;\r\n}\r\n.input-append.date .add-on i,\r\n.input-prepend.date .add-on i {\r\n  display: block;\r\n  cursor: pointer;\r\n  width: 16px;\r\n  height: 16px;\r\n}\r\n.input-daterange input {\r\n  text-align: center;\r\n}\r\n.input-daterange input:first-child {\r\n  -webkit-border-radius: 3px 0 0 3px;\r\n  -moz-border-radius: 3px 0 0 3px;\r\n  border-radius: 3px 0 0 3px;\r\n}\r\n.input-daterange input:last-child {\r\n  -webkit-border-radius: 0 3px 3px 0;\r\n  -moz-border-radius: 0 3px 3px 0;\r\n  border-radius: 0 3px 3px 0;\r\n}\r\n.input-daterange .add-on {\r\n  display: inline-block;\r\n  width: auto;\r\n  min-width: 16px;\r\n  height: 18px;\r\n  padding: 4px 5px;\r\n  font-weight: normal;\r\n  line-height: 18px;\r\n  text-align: center;\r\n  text-shadow: 0 1px 0 #ffffff;\r\n  vertical-align: middle;\r\n  background-color: #eeeeee;\r\n  border: 1px solid #ccc;\r\n  margin-left: -5px;\r\n  margin-right: -5px;\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/css/bootstrap-table.css",
    "content": "/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * version: 1.7.0\n * https://github.com/wenzhixin/bootstrap-table/\n */\n\n.bootstrap-table .table {\n    margin-bottom: 0 !important;\n    border-bottom: 1px solid #dddddd;\n    border-collapse: collapse !important;\n    border-radius: 1px;\n}\n\n.bootstrap-table .table,\n.bootstrap-table .table > tbody > tr > th,\n.bootstrap-table .table > tfoot > tr > th,\n.bootstrap-table .table > thead > tr > td,\n.bootstrap-table .table > tbody > tr > td,\n.bootstrap-table .table > tfoot > tr > td {\n    padding: 8px !important;\n}\n\n.bootstrap-table .table.table-no-bordered > thead > tr > th,\n.bootstrap-table .table.table-no-bordered > tbody > tr > td {\n    border-right: 2px solid transparent;\n}\n\n.fixed-table-container {\n    position: relative;\n    clear: both;\n    border: 1px solid #dddddd;\n    border-radius: 4px;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n}\n\n.fixed-table-container.table-no-bordered {\n    border: 1px solid transparent;\n}\n\n.fixed-table-footer,\n.fixed-table-header {\n    height: 37px; /*cellHeight*/\n    overflow: hidden;\n    border-radius: 4px 4px 0 0;\n    -webkit-border-radius: 4px 4px 0 0;\n    -moz-border-radius: 4px 4px 0 0;\n}\n\n.fixed-table-header {\n    border-bottom: 1px solid #fff;\n}\n\n.fixed-table-footer {\n    border-top: 1px solid #dddddd;\n}\n\n.fixed-table-body {\n    overflow-x: auto;\n    overflow-y: auto;\n    height: 100%;\n}\n\n.fixed-table-container table {\n    width: 100%;\n}\n\n.fixed-table-container thead th {\n    height: 0;\n    padding: 0;\n    margin: 0;\n    border-left: 1px solid #dddddd;\n}\n\n.fixed-table-container thead th:first-child {\n    border-left: none;\n    border-top-left-radius: 4px;\n    -webkit-border-top-left-radius: 4px;\n    -moz-border-radius-topleft: 4px;\n}\n\n.fixed-table-container thead th .th-inner {\n    padding: 8px;\n    line-height: 24px;\n    vertical-align: top;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.fixed-table-container thead th .sortable {\n    cursor: pointer;\n}\n\n.fixed-table-container tbody td {\n    border-left: 1px solid #dddddd;\n}\n\n.fixed-table-container tbody tr:first-child td {\n    border-top: none;\n}\n\n.fixed-table-container tbody td:first-child {\n    border-left: none;\n}\n\n/* the same color with .active */\n.fixed-table-container tbody .selected td {\n    background-color: #f5f5f5;\n}\n\n.fixed-table-container .bs-checkbox {\n    text-align: center;\n}\n\n.fixed-table-container .bs-checkbox .th-inner {\n    padding: 8px 0;\n}\n\n.fixed-table-container input[type=\"radio\"],\n.fixed-table-container input[type=\"checkbox\"] {\n    margin: 0 auto !important;\n}\n\n.fixed-table-container .no-records-found {\n    text-align: center;\n}\n\n.fixed-table-pagination .pagination,\n.fixed-table-pagination .pagination-detail {\n    margin-top: 5px;\n    margin-bottom: 0px;\n}\n\n.fixed-table-pagination .pagination a {\n    padding: 6px 12px;\n    line-height: 1.428571429;\n}\n\n.fixed-table-pagination .pagination-info {\n    line-height: 34px;\n    margin-right: 5px;\n}\n\n.fixed-table-pagination .btn-group {\n    position: relative;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.fixed-table-pagination .dropup .dropdown-menu {\n    margin-bottom: 0;\n}\n\n.fixed-table-pagination .page-list {\n    display: inline-block;\n}\n\n.fixed-table-toolbar .columns-left {\n    margin-right: 5px;\n}\n\n.fixed-table-toolbar .columns-right {\n    margin-left: 5px;\n}\n\n.fixed-table-toolbar .columns label {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: 1.428571429;\n}\n\n.fixed-table-toolbar .bars,\n.fixed-table-toolbar .search,\n.fixed-table-toolbar .columns {\n    position: relative;\n    margin-top: 4px;\n    margin-bottom: 4px;\n    line-height: 34px;\n}\n\n.fixed-table-pagination li.disabled a {\n    pointer-events: none;\n    cursor: default;\n}\n\n.fixed-table-loading {\n    display: none;\n    position: absolute;\n    top: 42px;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 99;\n    background-color: #fff;\n    text-align: center;\n}\n\n.fixed-table-body .card-view .title {\n    font-weight: bold;\n    display: inline-block;\n    min-width: 30%;\n    text-align: left !important;\n}\n\n/* support bootstrap 2 */\n.fixed-table-body thead th .th-inner {\n    box-sizing: border-box;\n}\n\n.table th, .table td {\n    vertical-align: middle;\n    box-sizing: border-box;\n}\n\n.fixed-table-toolbar .dropdown-menu {\n    text-align: left;\n    max-height: 300px;\n    overflow: auto;\n}\n\n.fixed-table-toolbar .btn-group > .btn-group {\n    display: inline-block;\n    margin-left: -1px !important;\n}\n\n.fixed-table-toolbar .btn-group > .btn-group > .btn {\n    border-radius: 0;\n}\n\n.fixed-table-toolbar .btn-group > .btn-group:first-child > .btn {\n    border-top-left-radius: 4px;\n    border-bottom-left-radius: 4px;\n}\n\n.fixed-table-toolbar .btn-group > .btn-group:last-child > .btn {\n    border-top-right-radius: 0px;\n    border-bottom-right-radius: 0px;\n}\n\n.bootstrap-table .table > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid #ddd;\n}\n\n/* support bootstrap 3 */\n.bootstrap-table .table thead > tr > th {\n    padding: 0;\n    margin: 0;\n}\n\n.pull-right .dropdown-menu {\n    right: 0;\n    left: auto;\n}\n\n/* calculate scrollbar width */\np.fixed-table-scroll-inner {\n    width: 100%;\n    height: 200px;\n}\n\ndiv.fixed-table-scroll-outer {\n    top: 0;\n    left: 0;\n    visibility: hidden;\n    width: 200px;\n    height: 150px;\n    overflow: hidden;\n}"
  },
  {
    "path": "src/main/webapp/static/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.0 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\",\"微软雅黑\";\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #333;;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #333;\n  text-decoration: none;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #428bca;\n}\na.text-primary:hover {\n  color: #3071a9;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #428bca;\n}\na.bg-primary:hover {\n  background-color: #3071a9;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  line-height: 34px;\n  line-height: 1.42857143 \\0;\n}\ninput[type=\"date\"].input-sm,\ninput[type=\"time\"].input-sm,\ninput[type=\"datetime-local\"].input-sm,\ninput[type=\"month\"].input-sm {\n  line-height: 30px;\n  line-height: 1.5 \\0;\n}\ninput[type=\"date\"].input-lg,\ninput[type=\"time\"].input-lg,\ninput[type=\"datetime-local\"].input-lg,\ninput[type=\"month\"].input-lg {\n  line-height: 46px;\n  line-height: 1.33 \\0;\n}\n_:-ms-fullscreen,\n:root input[type=\"date\"],\n_:-ms-fullscreen,\n:root input[type=\"time\"],\n_:-ms-fullscreen,\n:root input[type=\"datetime-local\"],\n_:-ms-fullscreen,\n:root input[type=\"month\"] {\n  line-height: 1.42857143;\n}\n_:-ms-fullscreen.input-sm,\n:root input[type=\"date\"].input-sm,\n_:-ms-fullscreen.input-sm,\n:root input[type=\"time\"].input-sm,\n_:-ms-fullscreen.input-sm,\n:root input[type=\"datetime-local\"].input-sm,\n_:-ms-fullscreen.input-sm,\n:root input[type=\"month\"].input-sm {\n  line-height: 1.5;\n}\n_:-ms-fullscreen.input-lg,\n:root input[type=\"date\"].input-lg,\n_:-ms-fullscreen.input-lg,\n:root input[type=\"time\"].input-lg,\n_:-ms-fullscreen.input-lg,\n:root input[type=\"datetime-local\"].input-lg,\n_:-ms-fullscreen.input-lg,\n:root input[type=\"month\"].input-lg {\n  line-height: 1.33;\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm,\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm,\nselect.form-group-sm .form-control {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\ntextarea.form-group-sm .form-control,\nselect[multiple].input-sm,\nselect[multiple].form-group-sm .form-control {\n  height: auto;\n}\n.input-lg,\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-lg,\nselect.form-group-lg .form-control {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\ntextarea.form-group-lg .form-control,\nselect[multiple].input-lg,\nselect[multiple].form-group-lg .form-control {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 14.3px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 0;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #fff;\n  background-color: #48AAF2;\n  border-color: #fff;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #3071a9;\n  border-color: #285e8e;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #428bca;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n  visibility: hidden;\n}\n.collapse.in {\n  display: block;\n  visibility: visible;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #428bca;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px solid;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: 0;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #428bca;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #428bca;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n  visibility: hidden;\n}\n.tab-content > .active {\n  display: block;\n  visibility: visible;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n    visibility: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #ffffff;\n  border-radius: 0px;\n  border-bottom-width:1px;\n  border-bottom-color:#ddd;\n  border-bottom-style:solid;\n  font-family:'微软雅黑';\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n-\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #428bca;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px 15px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding: 48px 0;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #428bca;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #428bca;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\na.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #e1edf7;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #428bca;\n}\n.panel-primary > .panel-heading .badge {\n  color: #428bca;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #428bca;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 2px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 3px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 3px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  min-height: 16.42857143px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 160px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 5px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 5px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  visibility: visible;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000;\n            perspective: 1000;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  font-family: serif;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -15px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -15px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "src/main/webapp/static/css/build.css",
    "content": ".checkbox {\n  padding-left: 20px; }\n  .checkbox label {\n    display: inline-block;\n    vertical-align: middle;\n    position: relative;\n    padding-left: 5px; }\n    .checkbox label::before {\n      content: \"\";\n      display: inline-block;\n      position: absolute;\n      width: 17px;\n      height: 17px;\n      left: 0;\n      margin-left: -20px;\n      border: 1px solid #cccccc;\n      border-radius: 3px;\n      background-color: #fff;\n      -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;\n      -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;\n      transition: border 0.15s ease-in-out, color 0.15s ease-in-out; }\n    .checkbox label::after {\n      display: inline-block;\n      position: absolute;\n      width: 16px;\n      height: 16px;\n      left: 0;\n      top: 0;\n      margin-left: -20px;\n      padding-left: 3px;\n      padding-top: 1px;\n      font-size: 11px;\n      color: #555555; }\n  .checkbox input[type=\"checkbox\"],\n  .checkbox input[type=\"radio\"] {\n    opacity: 0;\n    z-index: 1; }\n    .checkbox input[type=\"checkbox\"]:focus + label::before,\n    .checkbox input[type=\"radio\"]:focus + label::before {\n      outline: thin dotted;\n      outline: 5px auto -webkit-focus-ring-color;\n      outline-offset: -2px; }\n    .checkbox input[type=\"checkbox\"]:checked + label::after,\n    .checkbox input[type=\"radio\"]:checked + label::after {\n      font-family: \"FontAwesome\";\n      content: \"\\f00c\"; }\n    .checkbox input[type=\"checkbox\"]:disabled + label,\n    .checkbox input[type=\"radio\"]:disabled + label {\n      opacity: 0.65; }\n      .checkbox input[type=\"checkbox\"]:disabled + label::before,\n      .checkbox input[type=\"radio\"]:disabled + label::before {\n        background-color: #eeeeee;\n        cursor: not-allowed; }\n  .checkbox.checkbox-circle label::before {\n    border-radius: 50%; }\n  .checkbox.checkbox-inline {\n    margin-top: 0; }\n\n.checkbox-primary input[type=\"checkbox\"]:checked + label::before,\n.checkbox-primary input[type=\"radio\"]:checked + label::before {\n  background-color: #337ab7;\n  border-color: #337ab7; }\n.checkbox-primary input[type=\"checkbox\"]:checked + label::after,\n.checkbox-primary input[type=\"radio\"]:checked + label::after {\n  color: #fff; }\n\n.checkbox-danger input[type=\"checkbox\"]:checked + label::before,\n.checkbox-danger input[type=\"radio\"]:checked + label::before {\n  background-color: #d9534f;\n  border-color: #d9534f; }\n.checkbox-danger input[type=\"checkbox\"]:checked + label::after,\n.checkbox-danger input[type=\"radio\"]:checked + label::after {\n  color: #fff; }\n\n.checkbox-info input[type=\"checkbox\"]:checked + label::before,\n.checkbox-info input[type=\"radio\"]:checked + label::before {\n  background-color: #5bc0de;\n  border-color: #5bc0de; }\n.checkbox-info input[type=\"checkbox\"]:checked + label::after,\n.checkbox-info input[type=\"radio\"]:checked + label::after {\n  color: #fff; }\n\n.checkbox-warning input[type=\"checkbox\"]:checked + label::before,\n.checkbox-warning input[type=\"radio\"]:checked + label::before {\n  background-color: #f0ad4e;\n  border-color: #f0ad4e; }\n.checkbox-warning input[type=\"checkbox\"]:checked + label::after,\n.checkbox-warning input[type=\"radio\"]:checked + label::after {\n  color: #fff; }\n\n.checkbox-success input[type=\"checkbox\"]:checked + label::before,\n.checkbox-success input[type=\"radio\"]:checked + label::before {\n  background-color: #5cb85c;\n  border-color: #5cb85c; }\n.checkbox-success input[type=\"checkbox\"]:checked + label::after,\n.checkbox-success input[type=\"radio\"]:checked + label::after {\n  color: #fff; }\n\n.radio {\n  padding-left: 20px; }\n  .radio label {\n    display: inline-block;\n    vertical-align: middle;\n    position: relative;\n    padding-left: 5px; }\n    .radio label::before {\n      content: \"\";\n      display: inline-block;\n      position: absolute;\n      width: 17px;\n      height: 17px;\n      left: 0;\n      margin-left: -20px;\n      border: 1px solid #cccccc;\n      border-radius: 50%;\n      background-color: #fff;\n      -webkit-transition: border 0.15s ease-in-out;\n      -o-transition: border 0.15s ease-in-out;\n      transition: border 0.15s ease-in-out; }\n    .radio label::after {\n      display: inline-block;\n      position: absolute;\n      content: \" \";\n      width: 11px;\n      height: 11px;\n      left: 3px;\n      top: 3px;\n      margin-left: -20px;\n      border-radius: 50%;\n      background-color: #555555;\n      -webkit-transform: scale(0, 0);\n      -ms-transform: scale(0, 0);\n      -o-transform: scale(0, 0);\n      transform: scale(0, 0);\n      -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);\n      -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);\n      -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);\n      transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); }\n  .radio input[type=\"radio\"] {\n    opacity: 0;\n    z-index: 1; }\n    .radio input[type=\"radio\"]:focus + label::before {\n      outline: thin dotted;\n      outline: 5px auto -webkit-focus-ring-color;\n      outline-offset: -2px; }\n    .radio input[type=\"radio\"]:checked + label::after {\n      -webkit-transform: scale(1, 1);\n      -ms-transform: scale(1, 1);\n      -o-transform: scale(1, 1);\n      transform: scale(1, 1); }\n    .radio input[type=\"radio\"]:disabled + label {\n      opacity: 0.65; }\n      .radio input[type=\"radio\"]:disabled + label::before {\n        cursor: not-allowed; }\n  .radio.radio-inline {\n    margin-top: 0; }\n\n.radio-primary input[type=\"radio\"] + label::after {\n  background-color: #337ab7; }\n.radio-primary input[type=\"radio\"]:checked + label::before {\n  border-color: #337ab7; }\n.radio-primary input[type=\"radio\"]:checked + label::after {\n  background-color: #337ab7; }\n\n.radio-danger input[type=\"radio\"] + label::after {\n  background-color: #d9534f; }\n.radio-danger input[type=\"radio\"]:checked + label::before {\n  border-color: #d9534f; }\n.radio-danger input[type=\"radio\"]:checked + label::after {\n  background-color: #d9534f; }\n\n.radio-info input[type=\"radio\"] + label::after {\n  background-color: #5bc0de; }\n.radio-info input[type=\"radio\"]:checked + label::before {\n  border-color: #5bc0de; }\n.radio-info input[type=\"radio\"]:checked + label::after {\n  background-color: #5bc0de; }\n\n.radio-warning input[type=\"radio\"] + label::after {\n  background-color: #f0ad4e; }\n.radio-warning input[type=\"radio\"]:checked + label::before {\n  border-color: #f0ad4e; }\n.radio-warning input[type=\"radio\"]:checked + label::after {\n  background-color: #f0ad4e; }\n\n.radio-success input[type=\"radio\"] + label::after {\n  background-color: #5cb85c; }\n.radio-success input[type=\"radio\"]:checked + label::before {\n  border-color: #5cb85c; }\n.radio-success input[type=\"radio\"]:checked + label::after {\n  background-color: #5cb85c; }\n\ninput[type=\"checkbox\"].styled:checked + label:after,\ninput[type=\"radio\"].styled:checked + label:after {\n  font-family: 'FontAwesome';\n  content: \"\\f00c\"; }\ninput[type=\"checkbox\"] .styled:checked + label::before,\ninput[type=\"radio\"] .styled:checked + label::before {\n  color: #fff; }\ninput[type=\"checkbox\"] .styled:checked + label::after,\ninput[type=\"radio\"] .styled:checked + label::after {\n  color: #fff; }\n"
  },
  {
    "path": "src/main/webapp/static/css/flavr.css",
    "content": "/* CSS crunched with Crunch - http://crunchapp.net/ */\r\n.flavr-container {\r\n\tposition: fixed;\r\n\ttext-align: center;\r\n\tvisibility: visible;\r\n\tleft: 0;\r\n\tright: 0;\r\n\ttop: 0;\r\n\tbottom: 0;\r\n\tpointer-events: none;\r\n\tdisplay: none;\r\n\tz-index: 999;\r\n\toverflow: hidden;\r\n\t-webkit-transform: translateZ(0);\r\n\t-moz-transform: translateZ(0);\r\n\t-ms-transform: translateZ(0);\r\n\t-o-transform: translateZ(0);\r\n\ttransform: translateZ(0)\r\n}\r\n\r\n.flavr-container *, .flavr-container *:before, .flavr-container *:after\r\n\t{\r\n\t-webkit-box-sizing: border-box;\r\n\t-moz-box-sizing: border-box;\r\n\t-ms-box-sizing: border-box;\r\n\tbox-sizing: border-box\r\n}\r\n\r\n.flavr-container .cleafix:after, .flavr-container.clearfix:after {\r\n\tcontent: \" \";\r\n\tdisplay: table;\r\n\tclear: both\r\n}\r\n\r\n.flavr-container.modal {\r\n\tpointer-events: auto\r\n}\r\n\r\n.flavr-container.shown {\r\n\tdisplay: block\r\n}\r\n\r\n.flavr-container.top-mid .flavr-fixer {\r\n\tmargin: 0\r\n}\r\n\r\n.flavr-container.top-left .flavr-fixer {\r\n\tposition: fixed;\r\n\tmargin: 0;\r\n\ttop: 0;\r\n\tright: auto;\r\n\tbottom: auto;\r\n\tleft: 0\r\n}\r\n\r\n.flavr-container.top-right .flavr-fixer {\r\n\tposition: fixed;\r\n\tmargin: 0;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: auto;\r\n\tleft: auto\r\n}\r\n\r\n.flavr-container.bottom-left .flavr-fixer {\r\n\tposition: fixed;\r\n\tmargin: 0;\r\n\ttop: auto;\r\n\tright: auto;\r\n\tbottom: 0;\r\n\tleft: 0\r\n}\r\n\r\n.flavr-container.bottom-right .flavr-fixer {\r\n\tposition: fixed;\r\n\tmargin: 0;\r\n\ttop: auto;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\tleft: auto\r\n}\r\n\r\n.flavr-container.bottom-mid .flavr-fixer {\r\n\tposition: fixed;\r\n\tmargin: 0;\r\n\ttop: auto;\r\n\tright: auto;\r\n\tbottom: 0;\r\n\tleft: 50%;\r\n\ttext-align: left\r\n}\r\n\r\n.flavr-container.bottom-mid .flavr-fixer .flavr-outer {\r\n\tmargin-left: -50%;\r\n\twidth: 100%\r\n}\r\n\r\n.flavr-container.fullscreen .flavr-fixer {\r\n\tmargin-top: 0\r\n}\r\n\r\n.flavr-container .flavr-overlay {\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\tleft: 0;\r\n\tvisibility: inherit;\r\n\tbackground: rgba(0, 0, 0, 0.4)\r\n}\r\n\r\n.flavr-container .flavr-fixer {\r\n\tposition: relative;\r\n\tmargin: 12% auto 0;\r\n\tdisplay: inline-block;\r\n\twidth: auto;\r\n\tpointer-events: auto;\r\n\t-webkit-transition: margin .3s;\r\n\t-moz-transition: margin .3s;\r\n\t-o-transition: margin .3s;\r\n\ttransition: margin .3s\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer {\r\n\tbackground: #2e3846;\r\n\tmin-width: 300px;\r\n\theight: auto;\r\n\ttext-align: center;\r\n\tfont-family: '微软雅黑';\r\n\t-webkit-border-radius: 3px;\r\n\t-moz-border-radius: 3px;\r\n\tborder-radius: 3px;\r\n\t-webkit-background-clip: padding-box;\r\n\t-moz-background-clip: padding-box;\r\n\tbackground-clip: padding-box;\r\n\t-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.3);\r\n\t-moz-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.3);\r\n\tbox-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.3)\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content {\r\n\tfont-size: 14px;\r\n\tcolor: #fff;\r\n\tpadding: 20px 30px 8px\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-icon {\r\n\tmargin-top: 10px;\r\n\tmargin-bottom: 10px\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-icon img\r\n\t{\r\n\tmax-height: 75px;\r\n\tmax-width: 75px\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-title {\r\n\tmargin: 0;\r\n\tmargin-bottom: 6px;\r\n\tfont-size: 1.3em;\r\n\tline-height: 1.5\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message\r\n\t{\r\n\tmargin-top: 6px;\r\n\tcolor: inherit;\r\n\ttext-shadow: 2px 2px rgba(0, 0, 0, 0.1);\r\n\tline-height: 1.5\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form .form-row\r\n\t{\r\n\ttext-align: left;\r\n\tmargin-top: 8px\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input\r\n\t{\r\n\tdisplay: block;\r\n\twidth: 100%;\r\n\tborder: 0;\r\n\tpadding: 8px 6px 7px 15px;\r\n\tbackground-color: #f6f6f6;\r\n\toutline: none;\r\n\theight: 35px\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=checkbox],\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=radio]\r\n\t{\r\n\tdisplay: inline;\r\n\twidth: auto;\r\n\tmargin-left: 12px;\r\n\tbackground-color: transparent;\r\n\theight: auto\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=checkbox]:first-child,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=radio]:first-child\r\n\t{\r\n\tmargin-left: 0\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form select\r\n\t{\r\n\tdisplay: block;\r\n\tbackground-color: #f6f6f6;\r\n\theight: 36px;\r\n\twidth: 100%;\r\n\tborder: 0;\r\n\toutline: none;\r\n\tcolor: #666;\r\n\tpadding: 6px 6px 7px 15px\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form label\r\n\t{\r\n\tfont-size: 0.9em\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form button,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=button],\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=submit],\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=reset],\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form a.btn\r\n\t{\r\n\tdisplay: block;\r\n\toutline: none;\r\n\ttext-decoration: none;\r\n\tpadding: 8px 12px;\r\n\tmargin-top: 8px;\r\n\tmargin-bottom: 4px;\r\n\tfont-size: 14px;\r\n\tfont-weight: normal;\r\n\tline-height: 1.428571429;\r\n\tcolor: #fff;\r\n\tbackground-color: #795aac;\r\n\ttext-align: center;\r\n\twhite-space: nowrap;\r\n\tvertical-align: middle;\r\n\tcursor: pointer;\r\n\tbackground-image: none;\r\n\tborder: none;\r\n\t-webkit-border-radius: 3px;\r\n\t-moz-border-radius: 3px;\r\n\tborder-radius: 3px;\r\n\t-webkit-background-clip: padding-box;\r\n\t-moz-background-clip: padding-box;\r\n\tbackground-clip: padding-box;\r\n\t-webkit-touch-callout: none;\r\n\t-webkit-user-select: none;\r\n\t-khtml-user-select: none;\r\n\t-moz-user-select: none;\r\n\t-ms-user-select: none;\r\n\tuser-select: none;\r\n\t-webkit-transition: all ease .3s;\r\n\t-moz-transition: all ease .3s;\r\n\t-o-transition: all ease .3s;\r\n\ttransition: all ease .3s\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form button:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form button:focus,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=button]:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=button]:focus,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=submit]:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=submit]:focus,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=reset]:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form input[type=reset]:focus,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form a.btn:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-content .flavr-message form a.btn:focus\r\n\t{\r\n\toutline: none;\r\n\tbackground-color: #3e4b5d\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar {\r\n\twhite-space: nowrap;\r\n\tpadding: 0 30px 20px\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button\r\n\t{\r\n\toutline: none;\r\n\tdisplay: block;\r\n\ttext-decoration: none !important;\r\n\tpadding: 7px 12px;\r\n\tmargin-top: 8px;\r\n\tmargin-bottom: 4px;\r\n\tfont-size: 13px;\r\n\tfont-weight: normal;\r\n\tline-height: 1.428571429;\r\n\tcolor: #fff;\r\n\tbackground-color: #795aac;\r\n\ttext-align: center;\r\n\twhite-space: nowrap;\r\n\tvertical-align: middle;\r\n\tcursor: pointer;\r\n\tbackground-image: none;\r\n\tborder: none;\r\n\t-webkit-border-radius: 3px;\r\n\t-moz-border-radius: 3px;\r\n\tborder-radius: 3px;\r\n\t-webkit-background-clip: padding-box;\r\n\t-moz-background-clip: padding-box;\r\n\tbackground-clip: padding-box;\r\n\t-webkit-touch-callout: none;\r\n\t-webkit-user-select: none;\r\n\t-khtml-user-select: none;\r\n\t-moz-user-select: none;\r\n\t-ms-user-select: none;\r\n\tuser-select: none;\r\n\t-webkit-transition: all ease .3s;\r\n\t-moz-transition: all ease .3s;\r\n\t-o-transition: all ease .3s;\r\n\ttransition: all ease .3s\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button:focus\r\n\t{\r\n\toutline: none;\r\n\tbackground-color: #3e4b5d;\r\n\tcolor: #fff\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.primary\r\n\t{\r\n\tbackground-color: #2980b9\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.primary:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.primary:focus\r\n\t{\r\n\tbackground-color: #3e4b5d\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.success\r\n\t{\r\n\tbackground-color: #27ae60\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.success:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.success:focus\r\n\t{\r\n\tbackground-color: #3e4b5d\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.info\r\n\t{\r\n\tbackground-color: #1fb5ad\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.info:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.info:focus\r\n\t{\r\n\tbackground-color: #3e4b5d\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.warning\r\n\t{\r\n\tbackground-color: #f39c12\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.warning:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.warning:focus\r\n\t{\r\n\tbackground-color: #3e4b5d\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.danger\r\n\t{\r\n\tbackground-color: #f44a56\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.danger:hover,\r\n\t.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar .flavr-button.danger:focus\r\n\t{\r\n\tbackground-color: #3e4b5d\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar.inline .flavr-button\r\n\t{\r\n\tdisplay: inline-block;\r\n\twidth: auto;\r\n\tmin-width: 120px;\r\n\tmargin-left: 6px;\r\n\tmargin-top: 2px\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar.inline .flavr-button:first-child\r\n\t{\r\n\tmargin-left: 0\r\n}\r\n\r\n.flavr-container .flavr-fixer .flavr-outer .flavr-toolbar.stacked .flavr-button:first-child\r\n\t{\r\n\tmargin-top: 0\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiSAMAAG8AaYLq42UAAAAASUVORK5CYII=')\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay.opacity-10 {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNikAQAACIAHF/uBd8AAAAASUVORK5CYII=')\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay.opacity-20 {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiMAYAADwANpiOMBYAAAAASUVORK5CYII=')\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay.opacity-30 {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNi8AEAAFUATydJphIAAAAASUVORK5CYII=')\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay.opacity-40 {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiSAMAAG8AaYLq42UAAAAASUVORK5CYII=')\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay.opacity-50 {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiqAcAAIgAgoGu+rEAAAAASUVORK5CYII=')\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay.opacity-60 {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNimAkAAKIAnNwSwMYAAAAASUVORK5CYII=')\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay.opacity-70 {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNi2AQAALsAtXXCpvIAAAAASUVORK5CYII=')\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay.opacity-80 {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiOAMAANUAz5n+TlUAAAAASUVORK5CYII=')\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay.opacity-90 {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNieAoAAO4A6HfO1f4AAAAASUVORK5CYII=')\r\n}\r\n\r\n.flavr-container.msie8 .flavr-overlay.opacity-100 {\r\n\tbackground-image: none;\r\n\tbackground-color: #000\r\n}\r\n\r\n.flavr-container.ie-overlay-false {\r\n\tbackground-image:\r\n\t\turl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=')\r\n}"
  },
  {
    "path": "src/main/webapp/static/css/jquery.datetimepicker.css",
    "content": ".xdsoft_datetimepicker{\n\tbox-shadow: 0px 5px 15px -5px rgba(0, 0, 0, 0.506);\n\tbackground: #FFFFFF;\n\tborder-bottom: 1px solid #BBBBBB;\n\tborder-left: 1px solid #CCCCCC;\n\tborder-right: 1px solid #CCCCCC;\n\tborder-top: 1px solid #CCCCCC;\n\tcolor: #333333;\n\tdisplay: block;\n\tfont-family: \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n\tpadding: 8px;\n\tpadding-left: 0px;\n\tpadding-top: 2px;\n\tposition: absolute;\n\tz-index: 9999;\n\t-moz-box-sizing: border-box;\n\tbox-sizing: border-box;\n\tdisplay:none;\n}\n\n.xdsoft_datetimepicker iframe {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 75px;\n    height: 210px;\n    background: transparent;\n    border:none;\n}\n/*For IE8 or lower*/\n.xdsoft_datetimepicker button {\n    border:none !important;\n}\n\n.xdsoft_noselect{\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\t-o-user-select: none;\n\tuser-select: none;\n}\n.xdsoft_noselect::selection { background: transparent; }\n.xdsoft_noselect::-moz-selection { background: transparent; }\n.xdsoft_datetimepicker.xdsoft_inline{\n\tdisplay: inline-block;\n\tposition: static;\n\tbox-shadow: none;\n}\n.xdsoft_datetimepicker *{\n\t-moz-box-sizing: border-box;\n\tbox-sizing: border-box;\n\tpadding:0px;\n\tmargin:0px;\n}\n.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker  .xdsoft_timepicker{\n\tdisplay:none;\n}\n.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker  .xdsoft_timepicker.active{\n\tdisplay:block;\n}\n.xdsoft_datetimepicker .xdsoft_datepicker{\n\twidth: 224px;\n\tfloat:left;\n\tmargin-left:8px;\n}\n.xdsoft_datetimepicker  .xdsoft_timepicker{\n\twidth: 58px;\n\tfloat:left;\n\ttext-align:center;\n\tmargin-left:8px;\n\tmargin-top:0px;\n}\n.xdsoft_datetimepicker  .xdsoft_datepicker.active+.xdsoft_timepicker{\n\tmargin-top:8px;\n\tmargin-bottom:3px\n}\n.xdsoft_datetimepicker  .xdsoft_mounthpicker{\n\tposition: relative;\n\ttext-align: center;\n}\n\n.xdsoft_datetimepicker  .xdsoft_prev, .xdsoft_datetimepicker  .xdsoft_next,.xdsoft_datetimepicker  .xdsoft_today_button{\n\tbackground-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAeCAYAAACsYQl4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozQjRCQjRGREU4MkNFMzExQjRDQkIyRDJDOTdBRUI1MCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCQjg0OUYyNTZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCQjg0OUYyNDZDODAxMUUzQjMwM0IwMERBNUU0ODQ5NSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkI5NzE3MjFBN0E2Q0UzMTFBQjJEQjgzMDk5RTNBNTdBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjNCNEJCNEZERTgyQ0UzMTFCNENCQjJEMkM5N0FFQjUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+aQvATgAAAfVJREFUeNrsmr1OwzAQxzGtkPjYEAuvVGAvfQIGRKADE49gdLwDDwBiZ2RhQUKwICQkWLsgFiRQuIBTucFJ/XFp4+hO+quqnZ4uvzj2nV2RpukCW/22yAgYNINmc7du7DcghCjrkqgOKjF1znpt6rZ0AGWQj7TvCU8d9UM+QAGDrhdyc2Bnc1WVVPBev9V8lBnY+rDwncWZThG4xk4lmxtJy2AHgoY/FySgbSBPwPZ8mEXbQx3aDERb0EbYAYFC7pcAtAvkMWwC0D3NX58S9D/YnoGC7nPWr3Dg9JTbtuHhDShBT8D2CBSK/iIEvVXxpuxSgh7DdgwUTL4iA92zmJb6lKB/YTsECmV+IgK947AGDIqgQ/LojsO135Hn51l2cWlov0JdGNrPUceueXRwilSVgkUyom9Rd6gbLfYTDeO+1v6orn0InTogYDGUkYLO3/wc9BdqqTCKP1Tfi+oTIaCBIL2TES+GTyruT9S61p6BHam+99DFEAgLFklYsIBHwSI9QY80H5ta+1rB/6ovaKihBJeEJbgLbBlQgl+j3lDPqA2tfQV1j3pVn8s+oKHGTSVJ+FqDLeR5bCqJ2E/BCycsoLZETXaKGs7rhKVt+9HZScrZNMi88V8P7LlDbvOZYaJVpMMmBCT4n0o8dTBoNgbdWPsRYACs3r7XyNfbnAAAAABJRU5ErkJggg==');\n}\n.xdsoft_datetimepicker  .xdsoft_prev{\n    float: left;\n\tbackground-position:-20px 0px;\n}\n.xdsoft_datetimepicker  .xdsoft_today_button{\n    float: left;\n\tbackground-position:-70px 0px;\n\tmargin-left:5px;\n}\n\n.xdsoft_datetimepicker  .xdsoft_next{\n    float: right;\n\tbackground-position:0px 0px;\n}\n.xdsoft_datetimepicker  .xdsoft_next:active,.xdsoft_datetimepicker  .xdsoft_prev:active{\n}\n.xdsoft_datetimepicker  .xdsoft_next,.xdsoft_datetimepicker  .xdsoft_prev ,.xdsoft_datetimepicker  .xdsoft_today_button{\n\tbackground-color: transparent;\n\tbackground-repeat: no-repeat;\n\tborder: 0px none currentColor;\n\tcursor: pointer;\n\tdisplay: block;\n\theight: 30px;\n\topacity: 0.5;\n\toutline: medium none currentColor;\n\toverflow: hidden;\n\tpadding: 0px;\n\tposition: relative;\n\ttext-indent: 100%;\n\twhite-space: nowrap;\n\twidth: 20px;\n}\n.xdsoft_datetimepicker  .xdsoft_timepicker .xdsoft_prev,\n.xdsoft_datetimepicker  .xdsoft_timepicker .xdsoft_next{\n\tfloat:none;\n\tbackground-position:-40px -15px;\n\theight: 15px;\n\twidth: 30px;\n\tdisplay: block;\n\tmargin-left:14px;\n\tmargin-top:7px;\n}\n.xdsoft_datetimepicker  .xdsoft_timepicker .xdsoft_prev{\n\tbackground-position:-40px 0px;\n\tmargin-bottom:7px;\n\tmargin-top:0px;\n}\n.xdsoft_datetimepicker  .xdsoft_timepicker .xdsoft_time_box{\n\theight:151px;\n\toverflow:hidden;\n\tborder-bottom:1px solid #DDDDDD;\n}\n.xdsoft_datetimepicker  .xdsoft_timepicker .xdsoft_time_box >div >div{\n\tbackground: #F5F5F5;\n\tborder-top:1px solid #DDDDDD;\n\tcolor: #666666;\n\tfont-size: 12px;\n\ttext-align: center;\n\tborder-collapse:collapse;\n\tcursor:pointer;\n\tborder-bottom-width:0px;\n\theight:25px;\n\tline-height:25px;\n}\n\n.xdsoft_datetimepicker  .xdsoft_timepicker .xdsoft_time_box >div > div:first-child{\n border-top-width:0px;\n}\n.xdsoft_datetimepicker  .xdsoft_today_button:hover,\n.xdsoft_datetimepicker  .xdsoft_next:hover,\n.xdsoft_datetimepicker  .xdsoft_prev:hover {\n    opacity: 1;\n}\n.xdsoft_datetimepicker  .xdsoft_label{\n\tdisplay: inline;\n    position: relative;\n    z-index: 9999;\n    margin: 0;\n    padding: 5px 3px;\n    font-size: 14px;\n    line-height: 20px;\n    font-weight: bold;\n    background-color: #fff;\n\tfloat:left;\n\twidth:182px;\n\ttext-align:center;\n\tcursor:pointer;\n}\n.xdsoft_datetimepicker  .xdsoft_label:hover{\n\ttext-decoration:underline;\n}\n.xdsoft_datetimepicker  .xdsoft_label > .xdsoft_select{\n\tborder:1px solid #ccc;\n\tposition:absolute;\n\tdisplay:block;\n\tright:0px;\n\ttop:30px;\n\tz-index:101;\n\tdisplay:none;\n\tbackground:#fff;\n\tmax-height:160px;\n\toverflow-y:hidden;\n}\n.xdsoft_datetimepicker  .xdsoft_label > .xdsoft_select.xdsoft_monthselect{right:-7px;}\n.xdsoft_datetimepicker  .xdsoft_label > .xdsoft_select.xdsoft_yearselect{right:2px;}\n.xdsoft_datetimepicker  .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover{\n\tcolor: #fff;\n    background: #ff8000;\n}\n.xdsoft_datetimepicker  .xdsoft_label > .xdsoft_select > div > .xdsoft_option{\n\tpadding:2px 10px 2px 5px; \n}\n.xdsoft_datetimepicker  .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current{\n\tbackground: #33AAFF;\n\tbox-shadow: #178FE5 0px 1px 3px 0px inset;\n\tcolor:#fff;\n\tfont-weight: 700;\n}\n.xdsoft_datetimepicker  .xdsoft_month{\n\twidth:90px;\n\ttext-align:right;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar{\n\tclear:both;\n}\n.xdsoft_datetimepicker  .xdsoft_year{\n\twidth:56px;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar table{\n\tborder-collapse:collapse;\n\twidth:100%;\n\t\n}\n.xdsoft_datetimepicker  .xdsoft_calendar td > div{\n\tpadding-right:5px;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar th{\n\theight: 25px;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar td,.xdsoft_datetimepicker  .xdsoft_calendar th{\n\twidth:14.2857142%;\n\ttext-align:center;\n\tbackground: #F5F5F5;\n\tborder:1px solid #DDDDDD;\n\tcolor: #666666;\n\tfont-size: 12px;\n\ttext-align: right;\n\tpadding:0px;\n\tborder-collapse:collapse;\n\tcursor:pointer;\n\theight: 25px;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar th{\n\tbackground: #F1F1F1;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar td.xdsoft_today{\n\tcolor:#33AAFF;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar td.xdsoft_default,\n.xdsoft_datetimepicker  .xdsoft_calendar td.xdsoft_current,\n.xdsoft_datetimepicker  .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current{\n\tbackground: #33AAFF;\n\tbox-shadow: #178FE5 0px 1px 3px 0px inset;\n\tcolor:#fff;\n\tfont-weight: 700;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar td.xdsoft_other_month,\n.xdsoft_datetimepicker  .xdsoft_calendar td.xdsoft_disabled,\n.xdsoft_datetimepicker  .xdsoft_time_box >div >div.xdsoft_disabled{\n\topacity:0.5;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled{\n\topacity:0.2;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar td:hover,\n.xdsoft_datetimepicker  .xdsoft_timepicker .xdsoft_time_box >div >div:hover{\n\tcolor: #fff !important;\n    background: #ff8000 !important;\n    box-shadow: none !important;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar td.xdsoft_disabled:hover,\n.xdsoft_datetimepicker  .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover{\n\tcolor: inherit\t!important;\n    background: inherit !important;\n    box-shadow: inherit !important;\n}\n.xdsoft_datetimepicker  .xdsoft_calendar th{\n\tfont-weight: 700;\n\ttext-align: center;\n\tcolor: #999;\n\tcursor:default;\n}\n.xdsoft_datetimepicker  .xdsoft_copyright{ color:#ccc !important; font-size:10px;clear:both;float:none;margin-left:8px;}\n.xdsoft_datetimepicker  .xdsoft_copyright a{ color:#eee !important;}\n.xdsoft_datetimepicker  .xdsoft_copyright a:hover{ color:#aaa !important;}\n\n\n.xdsoft_time_box{\n\tposition:relative;\n\tborder:1px solid #ccc;\n}\n.xdsoft_scrollbar >.xdsoft_scroller{\n\tbackground:#ccc !important;\n\theight:20px;\n\tborder-radius:3px;\n}\n.xdsoft_scrollbar{\n\tposition:absolute;\n\twidth:7px;\n\twidth:7px;\n\tright:0px;\n\ttop:0px;\n\tbottom:0px;\n\tcursor:pointer;\n}\n.xdsoft_scroller_box{\nposition:relative;\n}"
  },
  {
    "path": "src/main/webapp/static/css/layout.css",
    "content": ".navbar {\r\n\t/*background-color:#F5F5F5;*/\r\n}\r\n.navbar span {\r\n\tdisplay: -moz-inline-box; /* css注释：for ff2 */\r\n\tdisplay: inline-block;\r\n\theight: auto;\r\n\tpadding-left: 10px;\r\n\tpadding-right: 10px;\r\n\tmin-width: 50px;\r\n\ttext-align: center;\r\n\tcursor: pointer;\r\n}\r\n\r\n.navbar span:hover {\r\n\tbackground-color: #F6F8F8;\r\n}\r\n\r\n/*\r\n  left\r\n*/\r\nimg {\r\n\tborder: none;\r\n}\r\n\r\ndl, dt, dd {\r\n\tdisplay: block;\r\n\tfont-weight:normal;\r\n\tmargin: 0;\r\n}\r\n\r\na {\r\n\ttext-decoration: none;\r\n}\r\n/*left*/\r\n.leftsidebar_box {\r\n\tfont-family: '微软雅黑';\r\n\twidth: 160px;\r\n\tmin-height:640px;\n\theight:90%;\n    position: absolute;\r\n    width: 160px;\r\n    border: solid 1px #eee;\r\n\tborder-top-width: 0px;\r\n\tborder-bottom-width:0px;\r\n}\r\n\r\n.leftsidebar_box dt {\r\n\tpadding-left: 40px;\r\n\tpadding-right: 10px;\r\n\tbackground-repeat: no-repeat;\r\n\tbackground-position: 10px center;\r\n\tcolor: #000;\r\n\tfont-size: 14px;\r\n\tposition: relative;\r\n\tline-height: 48px;\r\n\tcursor: pointer;\r\n}\r\n\r\n.leftsidebar_box dd {\r\n\tbackground-color: #fff;\r\n\tpadding-left: 40px;\r\n\tmargin-top: 2px;\r\n}\r\n\r\n.leftsidebar_box dd:hover {\r\n\tbackground-color: #42b4f0;\r\n}\r\n\r\n.leftsidebar_box dd a {\r\n\tcolor: #000;\r\n\tline-height: 30px;\r\n}\r\n.leftsidebar_box dd a:hover {\r\n\tcolor:#fff;\r\n}\r\n\r\n\r\n.leftsidebar_box dt img {\r\n\tposition: absolute;\r\n\tright: 10px;\r\n\ttop: 20px;\r\n}\r\n\r\n.system_log dt {\r\n\tbackground-image: url(../img/left/system.png)\r\n}\r\n\r\n.custom dt {\r\n\tbackground-image: url(../img/left/custom.png)\r\n}\r\n\r\n.channel dt {\r\n\tbackground-image: url(../img/left/channel.png)\r\n}\r\n\r\n.app dt {\r\n\tbackground-image: url(../img/left/app.png)\r\n}\r\n\r\n.cloud dt {\r\n\tbackground-image: url(../img/left/cloud.png)\r\n}\r\n\r\n.syetem_management dt {\r\n\tbackground-image: url(../img/left/syetem_management.png)\r\n}\r\n\r\n.source dt {\r\n\tbackground-image: url(../img/left/source.png)\r\n}\r\n\r\n.statistics dt {\r\n\tbackground-image: url(../img/left/statistics.png)\r\n}\r\n\r\n.leftsidebar_box dl dd:last-child {\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n/**\r\n   footer\r\n*/\r\n.footer {\r\n\tposition: fixed;\r\n\tleft:0px;\r\n\tbottom:0px;\r\n\twidth:100%;\r\n\tfont-family:'microsoft yahei';\r\n\theight:30px;\r\n\tline-height:30px;\r\n\tbackground-color:#fefefe;\r\n\ttext-align:center;\r\n}\n"
  },
  {
    "path": "src/main/webapp/static/css/metro-bootstrap.css",
    "content": "/*!\n * metro-bootstrap v3.2.0.1\n *\n * from talkslab based on twitter bootstrap.\n */\n/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  border: 0;\n  padding: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n}\n@media print {\n  * {\n    text-shadow: none !important;\n    color: #000 !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n* {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Segoe UI Light\", \"Segoe UI\", \"Segoe WP\", \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #333333;\n  background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #428bca;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\na:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  width: 100% \\9;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 0px;\n}\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 0px;\n  -webkit-transition: all 0.2s ease-in-out;\n  -o-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  width: 100% \\9;\n  max-width: 100%;\n  height: auto;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: \"Segoe UI Light\", \"Helvetica Neue\", \"Segoe UI\", \"Segoe WP\", sans-serif;\n  font-weight: 100;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\ncite {\n  font-style: normal;\n}\nmark,\n.mark {\n  background-color: #f1c40f;\n  padding: .2em;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777777;\n}\n.text-primary {\n  color: #428bca;\n}\na.text-primary:hover {\n  color: #3071a9;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #428bca;\n}\na.bg-primary:hover {\n  background-color: #3071a9;\n}\n.bg-success {\n  background-color: #2ecc71;\n}\na.bg-success:hover {\n  background-color: #25a25a;\n}\n.bg-info {\n  background-color: #3498db;\n}\na.bg-info:hover {\n  background-color: #217dbb;\n}\n.bg-warning {\n  background-color: #f1c40f;\n}\na.bg-warning:hover {\n  background-color: #c29d0b;\n}\n.bg-danger {\n  background-color: #e74c3c;\n}\na.bg-danger:hover {\n  background-color: #d62c1a;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-left: 5px;\n  padding-right: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.428571429;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.428571429;\n  color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n  text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.428571429;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 0px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #ffffff;\n  background-color: #333333;\n  border-radius: 0px;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.428571429;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: #333333;\n  background-color: #f5f5f5;\n  border: 1px solid #cccccc;\n  border-radius: 0px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.row {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666666666666%;\n}\n.col-xs-10 {\n  width: 83.33333333333334%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666666666666%;\n}\n.col-xs-7 {\n  width: 58.333333333333336%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666666666667%;\n}\n.col-xs-4 {\n  width: 33.33333333333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.666666666666664%;\n}\n.col-xs-1 {\n  width: 8.333333333333332%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666666666666%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333333334%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666666666666%;\n}\n.col-xs-pull-7 {\n  right: 58.333333333333336%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666666666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.666666666666664%;\n}\n.col-xs-pull-1 {\n  right: 8.333333333333332%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666666666666%;\n}\n.col-xs-push-10 {\n  left: 83.33333333333334%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666666666666%;\n}\n.col-xs-push-7 {\n  left: 58.333333333333336%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666666666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.666666666666664%;\n}\n.col-xs-push-1 {\n  left: 8.333333333333332%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666666666666%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333333334%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666666666666%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.333333333333336%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666666666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.666666666666664%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.333333333333332%;\n}\n.col-xs-offset-0 {\n  margin-left: 0%;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666666666666%;\n  }\n  .col-sm-10 {\n    width: 83.33333333333334%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666666666666%;\n  }\n  .col-sm-7 {\n    width: 58.333333333333336%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666666666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.666666666666664%;\n  }\n  .col-sm-1 {\n    width: 8.333333333333332%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-sm-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-sm-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-sm-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-sm-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666666666666%;\n  }\n  .col-md-10 {\n    width: 83.33333333333334%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666666666666%;\n  }\n  .col-md-7 {\n    width: 58.333333333333336%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666666666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.666666666666664%;\n  }\n  .col-md-1 {\n    width: 8.333333333333332%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-md-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-md-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-md-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-md-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666666666666%;\n  }\n  .col-lg-10 {\n    width: 83.33333333333334%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666666666666%;\n  }\n  .col-lg-7 {\n    width: 58.333333333333336%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666666666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.666666666666664%;\n  }\n  .col-lg-1 {\n    width: 8.333333333333332%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-lg-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-lg-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-lg-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-lg-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0%;\n  }\n}\ntable {\n  background-color: transparent;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.428571429;\n  vertical-align: top;\n  border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #dddddd;\n}\n.table .table {\n  background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  float: none;\n  display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #2ecc71;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #29b765;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #3498db;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #258cd1;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #f1c40f;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #dab10d;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #e74c3c;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #e43725;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    overflow-x: auto;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #dddddd;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  min-width: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555;\n  background-color: #ffffff;\n  background-image: none;\n  border: 1px solid #cccccc;\n  border-radius: 0px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n  color: #777777;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #777777;\n}\n.form-control::-webkit-input-placeholder {\n  color: #777777;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eeeeee;\n  opacity: 1;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  line-height: 34px;\n  line-height: 1.428571429 \\0;\n}\ninput[type=\"date\"].input-sm,\ninput[type=\"time\"].input-sm,\ninput[type=\"datetime-local\"].input-sm,\ninput[type=\"month\"].input-sm {\n  line-height: 30px;\n}\ninput[type=\"date\"].input-lg,\ninput[type=\"time\"].input-lg,\ninput[type=\"datetime-local\"].input-lg,\ninput[type=\"month\"].input-lg {\n  line-height: 46px;\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  min-height: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-left: -20px;\n  margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-left: 0;\n  padding-right: 0;\n}\n.input-sm,\n.form-horizontal .form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 0px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.input-lg,\n.form-horizontal .form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 0px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 25px;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n}\n.input-lg + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  border-color: #3c763d;\n  background-color: #2ecc71;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  border-color: #8a6d3b;\n  background-color: #f1c40f;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  border-color: #a94442;\n  background-color: #e74c3c;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  margin-top: 0;\n  margin-bottom: 0;\n  padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n    margin-bottom: 0;\n    padding-top: 7px;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  top: 0;\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 14.3px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n  }\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  white-space: nowrap;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  border-radius: 0px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus {\n  color: #333333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  outline: 0;\n  background-image: none;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  pointer-events: none;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default {\n  color: #333333;\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n.btn-default .badge {\n  color: #ffffff;\n  background-color: #333333;\n}\n.btn-primary {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #ffffff;\n  background-color: #3071a9;\n  border-color: #285e8e;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.btn-primary .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n.btn-success {\n  color: #ffffff;\n  background-color: #2ecc71;\n  border-color: #29b765;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #ffffff;\n  background-color: #25a25a;\n  border-color: #1e854a;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #2ecc71;\n  border-color: #29b765;\n}\n.btn-success .badge {\n  color: #2ecc71;\n  background-color: #ffffff;\n}\n.btn-info {\n  color: #ffffff;\n  background-color: #3498db;\n  border-color: #258cd1;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #ffffff;\n  background-color: #217dbb;\n  border-color: #1c699d;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #3498db;\n  border-color: #258cd1;\n}\n.btn-info .badge {\n  color: #3498db;\n  background-color: #ffffff;\n}\n.btn-warning {\n  color: #ffffff;\n  background-color: #f1c40f;\n  border-color: #dab10d;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #ffffff;\n  background-color: #c29d0b;\n  border-color: #a08209;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f1c40f;\n  border-color: #dab10d;\n}\n.btn-warning .badge {\n  color: #f1c40f;\n  background-color: #ffffff;\n}\n.btn-danger {\n  color: #ffffff;\n  background-color: #e74c3c;\n  border-color: #e43725;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #ffffff;\n  background-color: #d62c1a;\n  border-color: #b62516;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #e74c3c;\n  border-color: #e43725;\n}\n.btn-danger .badge {\n  color: #e74c3c;\n  background-color: #ffffff;\n}\n.btn-link {\n  color: #428bca;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 0px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 0px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 0px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  -o-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n  -o-transition: height 0.35s ease;\n  transition: height 0.35s ease;\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  list-style: none;\n  font-size: 14px;\n  text-align: left;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.428571429;\n  color: #333333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  text-decoration: none;\n  color: #262626;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  outline: 0;\n  background-color: #428bca;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  cursor: not-allowed;\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  left: auto;\n  right: 0;\n}\n.dropdown-menu-left {\n  left: 0;\n  right: auto;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.428571429;\n  color: #777777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0;\n  border-bottom: 4px solid;\n  content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    left: auto;\n    right: 0;\n  }\n  .navbar-right .dropdown-menu-left {\n    left: 0;\n    right: auto;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: 0;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-bottom-left-radius: 0px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  float: none;\n  display: table-cell;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  position: absolute;\n  z-index: -1;\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-left: 0;\n  padding-right: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 0px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 0px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555555;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #cccccc;\n  border-radius: 0px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 0px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 0px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  margin-left: -1px;\n}\n.nav {\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n  color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777777;\n  text-decoration: none;\n  background-color: transparent;\n  cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eeeeee;\n  border-color: #428bca;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.428571429;\n  border: 1px solid transparent;\n  border-radius: 0px 0px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555555;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-bottom-color: transparent;\n  cursor: default;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  text-align: center;\n  margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 0px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #dddddd;\n    border-radius: 0px 0px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #ffffff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 0px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #ffffff;\n  background-color: #428bca;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  text-align: center;\n  margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 0px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #dddddd;\n    border-radius: 0px 0px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #ffffff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 0px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  overflow-x: visible;\n  padding-right: 15px;\n  padding-left: 15px;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n  height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: 15px;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 0px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n  .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\n}\n.navbar-form {\n  margin-left: -15px;\n  margin-right: -15px;\n  padding: 10px 15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-form.navbar-right:last-child {\n    margin-right: -15px;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-left: 15px;\n    margin-right: 15px;\n  }\n  .navbar-text.navbar-right:last-child {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #2e8bcc;\n  border-color: #2e8bcc;\n}\n.navbar-default .navbar-brand {\n  color: #ffffff;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #e6e6e6;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #ffffff;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: #2879b1;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #ffffff;\n  background-color: #2879b1;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #cccccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #2e8bcc;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  background-color: #2879b1;\n  color: #ffffff;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #ffffff;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #ffffff;\n    background-color: #2879b1;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #ffffff;\n    background-color: #2879b1;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #cccccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #ffffff;\n}\n.navbar-default .navbar-link:hover {\n  color: #ffffff;\n}\n.navbar-default .btn-link {\n  color: #ffffff;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #ffffff;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #cccccc;\n}\n.navbar-inverse {\n  background-color: #222222;\n  border-color: #222222;\n}\n.navbar-inverse .navbar-brand {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #777777;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: #555555;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #ffffff;\n  background-color: #3498db;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  background-color: #3498db;\n  color: #ffffff;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #222222;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #222222;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #ffffff;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #ffffff;\n    background-color: #555555;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #ffffff;\n    background-color: #3498db;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #ffffff;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #ffffff;\n}\n.navbar-inverse .btn-link {\n  color: #ffffff;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 0px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  content: \"/\\00a0\";\n  padding: 0 5px;\n  color: #cccccc;\n}\n.breadcrumb > .active {\n  color: #777777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 0px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  line-height: 1.428571429;\n  text-decoration: none;\n  color: #428bca;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-bottom-left-radius: 0px;\n  border-top-left-radius: 0px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-bottom-right-radius: 0px;\n  border-top-right-radius: 0px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  color: #2a6496;\n  background-color: #eeeeee;\n  border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n  cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777777;\n  background-color: #ffffff;\n  border-color: #dddddd;\n  cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-bottom-left-radius: 0px;\n  border-top-left-radius: 0px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-bottom-right-radius: 0px;\n  border-top-right-radius: 0px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-bottom-left-radius: 0px;\n  border-top-left-radius: 0px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-bottom-right-radius: 0px;\n  border-top-right-radius: 0px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  list-style: none;\n  text-align: center;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 0px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777777;\n  background-color: #ffffff;\n  cursor: not-allowed;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #428bca;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n.label-success {\n  background-color: #2ecc71;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #25a25a;\n}\n.label-info {\n  background-color: #3498db;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #217dbb;\n}\n.label-warning {\n  background-color: #f1c40f;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #c29d0b;\n}\n.label-danger {\n  background-color: #e74c3c;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #d62c1a;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  color: #ffffff;\n  line-height: 1;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: #777777;\n  border-radius: 0px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron {\n  border-radius: 0px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-left: 60px;\n    padding-right: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.428571429;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 0px;\n  -webkit-transition: all 0.2s ease-in-out;\n  -o-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-left: auto;\n  margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #428bca;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 0px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  background-color: #2ecc71;\n  border-color: #29b74e;\n  color: #3c763d;\n}\n.alert-success hr {\n  border-top-color: #25a245;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  background-color: #3498db;\n  border-color: #23a1c8;\n  color: #31708f;\n}\n.alert-info hr {\n  border-top-color: #2090b2;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  background-color: #f1c40f;\n  border-color: #da8f0d;\n  color: #8a6d3b;\n}\n.alert-warning hr {\n  border-top-color: #c27f0b;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  background-color: #e74c3c;\n  border-color: #e42533;\n  color: #a94442;\n}\n.alert-danger hr {\n  border-top-color: #d61a28;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  overflow: hidden;\n  height: 20px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border-radius: 0px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #ffffff;\n  text-align: center;\n  background-color: #428bca;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n  -o-transition: width 0.6s ease;\n  transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  -o-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar[aria-valuenow=\"1\"],\n.progress-bar[aria-valuenow=\"2\"] {\n  min-width: 30px;\n}\n.progress-bar[aria-valuenow=\"0\"] {\n  color: #777777;\n  min-width: 30px;\n  background-color: transparent;\n  background-image: none;\n  box-shadow: none;\n}\n.progress-bar-success {\n  background-color: #2ecc71;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #3498db;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f1c40f;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #e74c3c;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media-object {\n  display: block;\n}\n.media-heading {\n  margin: 0 0 5px;\n}\n.media > .pull-left {\n  margin-right: 10px;\n}\n.media > .pull-right {\n  margin-left: 10px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  margin-bottom: 20px;\n  padding-left: 0;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n  border-top-right-radius: 0px;\n  border-top-left-radius: 0px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\na.list-group-item {\n  color: #555555;\n}\na.list-group-item .list-group-item-heading {\n  color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  color: #555555;\n  background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  background-color: #eeeeee;\n  color: #777777;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #e1edf7;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #2ecc71;\n}\na.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #29b765;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #3498db;\n}\na.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #258cd1;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #f1c40f;\n}\na.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #dab10d;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #e74c3c;\n}\na.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #e43725;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #ffffff;\n  border: 1px solid transparent;\n  border-radius: 0px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-right-radius: -1px;\n  border-top-left-radius: -1px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #dddddd;\n  border-bottom-right-radius: -1px;\n  border-bottom-left-radius: -1px;\n}\n.panel > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-right-radius: -1px;\n  border-top-left-radius: -1px;\n}\n.panel > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: -1px;\n  border-bottom-left-radius: -1px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-right-radius: -1px;\n  border-top-left-radius: -1px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: -1px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: -1px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: -1px;\n  border-bottom-left-radius: -1px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: -1px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: -1px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive {\n  border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  border: 0;\n  margin-bottom: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 0px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body {\n  border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n  border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #dddddd;\n}\n.panel-primary {\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #428bca;\n}\n.panel-primary > .panel-heading .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #428bca;\n}\n.panel-success {\n  border-color: #29b74e;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #2ecc71;\n  border-color: #29b74e;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #29b74e;\n}\n.panel-success > .panel-heading .badge {\n  color: #2ecc71;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #29b74e;\n}\n.panel-info {\n  border-color: #23a1c8;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #3498db;\n  border-color: #23a1c8;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #23a1c8;\n}\n.panel-info > .panel-heading .badge {\n  color: #3498db;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #23a1c8;\n}\n.panel-warning {\n  border-color: #da8f0d;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #f1c40f;\n  border-color: #da8f0d;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #da8f0d;\n}\n.panel-warning > .panel-heading .badge {\n  color: #f1c40f;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #da8f0d;\n}\n.panel-danger {\n  border-color: #e42533;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #e74c3c;\n  border-color: #e42533;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #e42533;\n}\n.panel-danger > .panel-heading .badge {\n  color: #e74c3c;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #e42533;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 0px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 0px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 0px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000000;\n  text-shadow: 0 1px 0 #ffffff;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  display: none;\n  overflow: hidden;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transform: translate3d(0, -25%, 0);\n  transform: translate3d(0, -25%, 0);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n  -moz-transition: -moz-transform 0.3s ease-out;\n  -o-transition: -o-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #ffffff;\n  border: 1px solid #999999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0px;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n  outline: 0;\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000000;\n}\n.modal-backdrop.fade {\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n  min-height: 16.428571429px;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.428571429;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-left: 5px;\n  margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  visibility: visible;\n  font-size: 12px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n.tooltip.in {\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n.tooltip.top {\n  margin-top: -3px;\n  padding: 5px 0;\n}\n.tooltip.right {\n  margin-left: 3px;\n  padding: 0 5px;\n}\n.tooltip.bottom {\n  margin-top: 3px;\n  padding: 5px 0;\n}\n.tooltip.left {\n  margin-left: -3px;\n  padding: 0 5px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000000;\n  border-radius: 0px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  background-color: #ffffff;\n  background-clip: padding-box;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  white-space: normal;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  margin: 0;\n  padding: 8px 14px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: -1px -1px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n.popover.top > .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-width: 0;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  bottom: -11px;\n}\n.popover.top > .arrow:after {\n  content: \" \";\n  bottom: 1px;\n  margin-left: -10px;\n  border-bottom-width: 0;\n  border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-left-width: 0;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n  content: \" \";\n  left: 1px;\n  bottom: -10px;\n  border-left-width: 0;\n  border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  top: -11px;\n}\n.popover.bottom > .arrow:after {\n  content: \" \";\n  top: 1px;\n  margin-left: -10px;\n  border-top-width: 0;\n  border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n  content: \" \";\n  right: 1px;\n  border-right-width: 0;\n  border-left-color: #ffffff;\n  bottom: -10px;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n}\n.carousel-inner > .item {\n  display: none;\n  position: relative;\n  -webkit-transition: 0.6s ease-in-out left;\n  -o-transition: 0.6s ease-in-out left;\n  transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: 15%;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  font-size: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n  left: auto;\n  right: 0;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  outline: 0;\n  color: #ffffff;\n  text-decoration: none;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  font-family: serif;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  border: 1px solid #ffffff;\n  border-radius: 10px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n  margin: 0;\n  width: 12px;\n  height: 12px;\n  background-color: #ffffff;\n}\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -15px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -15px;\n  }\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n  content: \" \";\n  display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.affix {\n  position: fixed;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*\n * metro-bootstrap files\n */\n.tile {\n  display: block;\n  cursor: pointer;\n  -webkit-perspective: 0;\n  -webkit-transform-style: preserve-3d;\n  -webkit-transition: -webkit-transform 0.2s;\n  float: left;\n  min-width: 75px;\n  min-height: 75px;\n  text-align: center;\n  opacity: 0.75;\n  background-color: #2e8bcc;\n  z-index: 1;\n  border: 4px #ffffff solid;\n  color: #ffffff;\n}\n.tile h1,\n.tile h2,\n.tile h3,\n.tile h4,\n.tile h5,\n.tile h6 {\n  color: #ffffff;\n  -webkit-user-select: none;\n}\n.tile h2 {\n  margin-top: -20px;\n  margin-left: 0px;\n}\n.tile h3,\n.tile h4 {\n  margin-top: -15px;\n}\n.tile h1.tile-text,\n.tile h2.tile-text,\n.tile h3.tile-text,\n.tile h4.tile-text {\n  margin-top: 20px;\n}\n.tile h1 {\n  font-size: 36px;\n}\n.tile h2 {\n  font-size: 30px;\n}\n.tile h3 {\n  font-size: 24px;\n}\n.tile h4 {\n  font-size: 18px;\n}\n.tile a:hover {\n  text-decoration: none;\n}\n.tile img {\n  border: 0;\n}\n.tile:hover {\n  opacity: 1;\n}\n.tile .tile-label {\n  position: absolute;\n  bottom: 10px;\n  left: 20px;\n  font-size: 14px;\n  color: #ffffff;\n}\n.tile .tile-content .tile-icon-large {\n  margin-left: 0px;\n  vertical-align: middle !important;\n  text-align: center;\n}\n.tile .tile-content {\n  padding-top: 20px;\n  line-height: normal;\n  position: relative;\n  width: 100%;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.tile.tile-blue {\n  background-color: #2e8bcc;\n}\n.tile.tile-green {\n  background-color: #339933;\n}\n.tile.tile-red {\n  background-color: #e51400;\n}\n.tile.tile-yellow {\n  background-color: #ffc40d;\n}\n.tile.tile-orange {\n  background-color: #f39c12;\n}\n.tile.tile-pink {\n  background-color: #e671b8;\n}\n.tile.tile-purple {\n  background-color: #7b4f9d;\n}\n.tile.tile-lime {\n  background-color: #8cbf26;\n}\n.tile.tile-magenta {\n  background-color: #ff0097;\n}\n.tile.tile-teal {\n  background-color: #00aba9;\n}\n.tile.tile-turquoise {\n  background-color: #1abc9c;\n}\n.tile.tile-green-sea {\n  background-color: #16a085;\n}\n.tile.tile-emerald {\n  background-color: #2ecc71;\n}\n.tile.tile-nephritis {\n  background-color: #27ae60;\n}\n.tile.tile-peter-river {\n  background-color: #3498db;\n}\n.tile.tile-belize-hole {\n  background-color: #2980b9;\n}\n.tile.tile-amethyst {\n  background-color: #9b59b6;\n}\n.tile.tile-wisteria {\n  background-color: #8e44ad;\n}\n.tile.tile-wet-asphalt {\n  background-color: #34495e;\n}\n.tile.tile-midnight-blue {\n  background-color: #2c3e50;\n}\n.tile.tile-sun-flower {\n  background-color: #f1c40f;\n}\n.tile.tile-carrot {\n  background-color: #e67e22;\n}\n.tile.tile-pumpkin {\n  background-color: #d35400;\n}\n.tile.tile-alizarin {\n  background-color: #e74c3c;\n}\n.tile.tile-pomegranate {\n  background-color: #c0392b;\n}\n.tile.tile-clouds {\n  background-color: #ecf0f1;\n  color: #34495e;\n}\n.tile.tile-clouds h1,\n.tile.tile-clouds h2,\n.tile.tile-clouds h3,\n.tile.tile-clouds h4,\n.tile.tile-clouds h5,\n.tile.tile-clouds h6 {\n  color: #34495e;\n}\n.tile.tile-clouds .tile-label {\n  color: #34495e;\n}\n.tile.tile-silver {\n  background-color: #bdc3c7;\n}\n.tile.tile-concrete {\n  background-color: #95a5a6;\n}\n.tile.tile-asbestos {\n  background-color: #7f8c8d;\n}\n.tile.tile-info {\n  background-color: #3498db;\n}\n.tile.tile-danger {\n  background-color: #e74c3c;\n}\n.tile.tile-warning {\n  background-color: #f1c40f;\n}\n.tile.tile-success {\n  background-color: #2ecc71;\n}\na.fa-links {\n  color: #ffffff;\n}\na.fa-links:hover,\na.fa-links:focus {\n  color: #ffffff;\n}\n.tile.tile-small {\n  height: 70px;\n  width: 70px;\n}\n.tile.tile-medium {\n  height: 150px;\n  width: 150px;\n}\n.tile.tile-wide,\n.tile.tile-double {\n  height: 150px;\n  width: 310px;\n}\n.tile.tile-large {\n  height: 310px;\n  width: 310px;\n}\n.alert {\n  border: none;\n  color: white;\n}\n.alert .alert-link {\n  color: white;\n  font-weight: bold;\n  font-variant: small-caps;\n}\n.alert-success {\n  background-color: #2ecc71;\n}\n.alert-info {\n  background-color: #428bca;\n}\n.alert-warning {\n  background-color: #f1c40f;\n}\n.alert-danger {\n  background-color: #e74c3c;\n}\n.checkbox {\n  display: inline-block;\n  margin-right: 10px;\n  margin-bottom: 10px;\n  cursor: pointer;\n}\n.checkbox > input[type=checkbox] {\n  position: absolute;\n  opacity: 0;\n}\n.checkbox .checkbox-label {\n  padding-left: 28px;\n  position: relative;\n}\n.checkbox .checkbox-label:before {\n  position: absolute;\n  display: block;\n  height: 24px;\n  width: 24px;\n  content: \"\";\n  text-indent: -9999px;\n  border: 2px #d9d9d9 solid;\n  z-index: 1;\n  opacity: 1;\n  top: 0;\n  left: 0;\n}\n.checkbox input[type=\"checkbox\"]:checked ~ .checkbox-label:after {\n  position: absolute;\n  display: block;\n  content: \"\\f00c\";\n  font-size: 10pt;\n  height: 14px;\n  width: 14px;\n  line-height: 14px;\n  z-index: 2;\n  top: 50%;\n  margin-top: -6px;\n  left: 0;\n  margin-left: 4px;\n  font-family: FontAwesome;\n}\n.radio {\n  display: inline-block;\n  margin-right: 10px;\n  margin-bottom: 10px;\n  cursor: pointer;\n}\n.radio > input[type=radio] {\n  position: absolute;\n  opacity: 0;\n}\n.radio .radio-label {\n  padding-left: 28px;\n  position: relative;\n}\n.radio .radio-label:before {\n  position: absolute;\n  display: block;\n  height: 24px;\n  width: 24px;\n  content: \"\";\n  text-indent: -9999px;\n  border: 2px #d9d9d9 solid;\n  z-index: 1;\n  opacity: 1;\n  top: 0;\n  left: 0;\n  border-radius: 100%;\n}\n.radio input[type=\"radio\"]:checked ~ .radio-label:after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  color: #1a1a1a;\n  z-index: 2;\n  font-size: 16px;\n  font-weight: bold;\n  left: 10px;\n  margin-left: -3px;\n  top: 60%;\n  margin-top: -4px;\n  background-color: #1a1a1a;\n  width: 10px;\n  height: 10px;\n  border-radius: 100%;\n}\n.label {\n  border-radius: 0px;\n}\n.label-default {\n  border-radius: 0px;\n}\n.label-primary {\n  border-radius: 0px;\n}\n.label-success {\n  border-radius: 0px;\n}\n.label-info {\n  border-radius: 0px;\n}\n.label-warning {\n  border-radius: 0px;\n}\n.label-danger {\n  border-radius: 0px;\n}\n.modal-dialog {\n  margin-left: auto;\n  margin-right: auto;\n}\n@media (min-width: 768px) {\n  .navbar-side {\n    width: 225px;\n    margin-left: -225px;\n    left: 225px;\n    position: fixed;\n    height: 100%;\n    z-index: 1000;\n  }\n  .navbar-side .navbar-header {\n    float: none;\n    padding-top: 15px;\n  }\n  .navbar-side .navbar-nav {\n    float: none;\n  }\n  .navbar-side .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n    padding-top: 30px;\n    margin-bottom: 50px;\n  }\n  .navbar-side .navbar-nav > li {\n    float: none;\n  }\n  .navbar-side .navbar-nav > li > a {\n    display: inline-block;\n    width: 100%;\n    padding-left: 25px;\n  }\n  .navbar-side .navbar-nav > li > a:hover {\n    background: rgba(85, 85, 85, 0.5);\n  }\n  .navbar-side.navbar-side-closed {\n    width: 85px;\n    margin-left: -85px;\n    left: 85px;\n  }\n  .navbar-side.navbar-side-closed .navbar-nav .fa {\n    font-size: 2em;\n  }\n  .navbar-side.navbar-side-closed .navbar-nav span {\n    font-size: 12px;\n  }\n  .navbar-side.navbar-side-closed .navbar-nav > li > a {\n    padding-left: 0px;\n    padding-right: 0px;\n    text-align: center;\n  }\n  .navbar-side.navbar-side-closed .navbar-nav > li > a > span {\n    display: list-item;\n  }\n}\n.navbar-side-options {\n  padding-left: 0px;\n  padding-right: 0px;\n  padding-top: 40px;\n  width: 100%;\n  text-align: center;\n}\n@media (max-width: 768px) {\n  .navbar-side-options {\n    display: none;\n  }\n}\n/*# sourceMappingURL=/dist/css/metro-bootstrap.css.map */"
  },
  {
    "path": "src/main/webapp/static/css/simple-line-icons.css",
    "content": "@font-face {\r\n\tfont-family: 'Simple-Line-Icons';\r\n\tsrc:url('../fonts/Simple-Line-Icons.eot');\r\n\tsrc:url('../fonts/Simple-Line-Icons.eot?#iefix') format('embedded-opentype'),\r\n\t\turl('../fonts/Simple-Line-Icons.woff') format('woff'),\r\n\t\turl('../fonts/Simple-Line-Icons.ttf') format('truetype'),\r\n\t\turl('../fonts/Simple-Line-Icons.svg#Simple-Line-Icons') format('svg');\r\n\tfont-weight: normal;\r\n\tfont-style: normal;\r\n}\r\n\r\n/* Use the following CSS code if you want to use data attributes for inserting your icons */\r\n[data-icon]:before {\r\n\tfont-family: 'Simple-Line-Icons';\r\n\tcontent: attr(data-icon);\r\n\tspeak: none;\r\n\tfont-weight: normal;\r\n\tfont-variant: normal;\r\n\ttext-transform: none;\r\n\tline-height: 1;\r\n\t-webkit-font-smoothing: antialiased;\r\n\t-moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\n/* Use the following CSS code if you want to have a class per icon */\r\n/*\r\nInstead of a list of all class selectors,\r\nyou can use the generic selector below, but it's slower:\r\n[class*=\"icon-\"] {\r\n*/\r\n.icon-user-female, .icon-user-follow, .icon-user-following, .icon-user-unfollow, .icon-trophy, .icon-screen-smartphone, .icon-screen-desktop, .icon-plane, .icon-notebook, .icon-moustache, .icon-mouse, .icon-magnet, .icon-energy, .icon-emoticon-smile, .icon-disc, .icon-cursor-move, .icon-crop, .icon-credit-card, .icon-chemistry, .icon-user, .icon-speedometer, .icon-social-youtube, .icon-social-twitter, .icon-social-tumblr, .icon-social-facebook, .icon-social-dropbox, .icon-social-dribbble, .icon-shield, .icon-screen-tablet, .icon-magic-wand, .icon-hourglass, .icon-graduation, .icon-ghost, .icon-game-controller, .icon-fire, .icon-eyeglasses, .icon-envelope-open, .icon-envelope-letter, .icon-bell, .icon-badge, .icon-anchor, .icon-wallet, .icon-vector, .icon-speech, .icon-puzzle, .icon-printer, .icon-present, .icon-playlist, .icon-pin, .icon-picture, .icon-map, .icon-layers, .icon-handbag, .icon-globe-alt, .icon-globe, .icon-frame, .icon-folder-alt, .icon-film, .icon-feed, .icon-earphones-alt, .icon-earphones, .icon-drop, .icon-drawer, .icon-docs, .icon-directions, .icon-direction, .icon-diamond, .icon-cup, .icon-compass, .icon-call-out, .icon-call-in, .icon-call-end, .icon-calculator, .icon-bubbles, .icon-briefcase, .icon-book-open, .icon-basket-loaded, .icon-basket, .icon-bag, .icon-action-undo, .icon-action-redo, .icon-wrench, .icon-umbrella, .icon-trash, .icon-tag, .icon-support, .icon-size-fullscreen, .icon-size-actual, .icon-shuffle, .icon-share-alt, .icon-share, .icon-rocket, .icon-question, .icon-pie-chart, .icon-pencil, .icon-note, .icon-music-tone-alt, .icon-music-tone, .icon-microphone, .icon-loop, .icon-logout, .icon-login, .icon-list, .icon-like, .icon-home, .icon-grid, .icon-graph, .icon-equalizer, .icon-dislike, .icon-cursor, .icon-control-start, .icon-control-rewind, .icon-control-play, .icon-control-pause, .icon-control-forward, .icon-control-end, .icon-calendar, .icon-bulb, .icon-bar-chart, .icon-arrow-up, .icon-arrow-right, .icon-arrow-left, .icon-arrow-down, .icon-ban, .icon-bubble, .icon-camcorder, .icon-camera, .icon-check, .icon-clock, .icon-close, .icon-cloud-download, .icon-cloud-upload, .icon-doc, .icon-envelope, .icon-eye, .icon-flag, .icon-folder, .icon-heart, .icon-info, .icon-key, .icon-link, .icon-lock, .icon-lock-open, .icon-magnifier, .icon-magnifier-add, .icon-magnifier-remove, .icon-paper-clip, .icon-paper-plane, .icon-plus, .icon-pointer, .icon-power, .icon-refresh, .icon-reload, .icon-settings, .icon-star, .icon-symbol-female, .icon-symbol-male, .icon-target, .icon-volume-1, .icon-volume-2, .icon-volume-off, .icon-users {\r\n\tfont-family: 'Simple-Line-Icons';\r\n\tspeak: none;\r\n\tfont-style: normal;\r\n\tfont-weight: normal;\r\n\tfont-variant: normal;\r\n\ttext-transform: none;\r\n\tline-height: 1;\r\n\t-webkit-font-smoothing: antialiased;\r\n}\r\n.icon-user-female:before {\r\n\tcontent: \"\\e000\";\r\n}\r\n.icon-user-follow:before {\r\n\tcontent: \"\\e002\";\r\n}\r\n.icon-user-following:before {\r\n\tcontent: \"\\e003\";\r\n}\r\n.icon-user-unfollow:before {\r\n\tcontent: \"\\e004\";\r\n}\r\n.icon-trophy:before {\r\n\tcontent: \"\\e006\";\r\n}\r\n.icon-screen-smartphone:before {\r\n\tcontent: \"\\e010\";\r\n}\r\n.icon-screen-desktop:before {\r\n\tcontent: \"\\e011\";\r\n}\r\n.icon-plane:before {\r\n\tcontent: \"\\e012\";\r\n}\r\n.icon-notebook:before {\r\n\tcontent: \"\\e013\";\r\n}\r\n.icon-moustache:before {\r\n\tcontent: \"\\e014\";\r\n}\r\n.icon-mouse:before {\r\n\tcontent: \"\\e015\";\r\n}\r\n.icon-magnet:before {\r\n\tcontent: \"\\e016\";\r\n}\r\n.icon-energy:before {\r\n\tcontent: \"\\e020\";\r\n}\r\n.icon-emoticon-smile:before {\r\n\tcontent: \"\\e021\";\r\n}\r\n.icon-disc:before {\r\n\tcontent: \"\\e022\";\r\n}\r\n.icon-cursor-move:before {\r\n\tcontent: \"\\e023\";\r\n}\r\n.icon-crop:before {\r\n\tcontent: \"\\e024\";\r\n}\r\n.icon-credit-card:before {\r\n\tcontent: \"\\e025\";\r\n}\r\n.icon-chemistry:before {\r\n\tcontent: \"\\e026\";\r\n}\r\n.icon-user:before {\r\n\tcontent: \"\\e005\";\r\n}\r\n.icon-speedometer:before {\r\n\tcontent: \"\\e007\";\r\n}\r\n.icon-social-youtube:before {\r\n\tcontent: \"\\e008\";\r\n}\r\n.icon-social-twitter:before {\r\n\tcontent: \"\\e009\";\r\n}\r\n.icon-social-tumblr:before {\r\n\tcontent: \"\\e00a\";\r\n}\r\n.icon-social-facebook:before {\r\n\tcontent: \"\\e00b\";\r\n}\r\n.icon-social-dropbox:before {\r\n\tcontent: \"\\e00c\";\r\n}\r\n.icon-social-dribbble:before {\r\n\tcontent: \"\\e00d\";\r\n}\r\n.icon-shield:before {\r\n\tcontent: \"\\e00e\";\r\n}\r\n.icon-screen-tablet:before {\r\n\tcontent: \"\\e00f\";\r\n}\r\n.icon-magic-wand:before {\r\n\tcontent: \"\\e017\";\r\n}\r\n.icon-hourglass:before {\r\n\tcontent: \"\\e018\";\r\n}\r\n.icon-graduation:before {\r\n\tcontent: \"\\e019\";\r\n}\r\n.icon-ghost:before {\r\n\tcontent: \"\\e01a\";\r\n}\r\n.icon-game-controller:before {\r\n\tcontent: \"\\e01b\";\r\n}\r\n.icon-fire:before {\r\n\tcontent: \"\\e01c\";\r\n}\r\n.icon-eyeglasses:before {\r\n\tcontent: \"\\e01d\";\r\n}\r\n.icon-envelope-open:before {\r\n\tcontent: \"\\e01e\";\r\n}\r\n.icon-envelope-letter:before {\r\n\tcontent: \"\\e01f\";\r\n}\r\n.icon-bell:before {\r\n\tcontent: \"\\e027\";\r\n}\r\n.icon-badge:before {\r\n\tcontent: \"\\e028\";\r\n}\r\n.icon-anchor:before {\r\n\tcontent: \"\\e029\";\r\n}\r\n.icon-wallet:before {\r\n\tcontent: \"\\e02a\";\r\n}\r\n.icon-vector:before {\r\n\tcontent: \"\\e02b\";\r\n}\r\n.icon-speech:before {\r\n\tcontent: \"\\e02c\";\r\n}\r\n.icon-puzzle:before {\r\n\tcontent: \"\\e02d\";\r\n}\r\n.icon-printer:before {\r\n\tcontent: \"\\e02e\";\r\n}\r\n.icon-present:before {\r\n\tcontent: \"\\e02f\";\r\n}\r\n.icon-playlist:before {\r\n\tcontent: \"\\e030\";\r\n}\r\n.icon-pin:before {\r\n\tcontent: \"\\e031\";\r\n}\r\n.icon-picture:before {\r\n\tcontent: \"\\e032\";\r\n}\r\n.icon-map:before {\r\n\tcontent: \"\\e033\";\r\n}\r\n.icon-layers:before {\r\n\tcontent: \"\\e034\";\r\n}\r\n.icon-handbag:before {\r\n\tcontent: \"\\e035\";\r\n}\r\n.icon-globe-alt:before {\r\n\tcontent: \"\\e036\";\r\n}\r\n.icon-globe:before {\r\n\tcontent: \"\\e037\";\r\n}\r\n.icon-frame:before {\r\n\tcontent: \"\\e038\";\r\n}\r\n.icon-folder-alt:before {\r\n\tcontent: \"\\e039\";\r\n}\r\n.icon-film:before {\r\n\tcontent: \"\\e03a\";\r\n}\r\n.icon-feed:before {\r\n\tcontent: \"\\e03b\";\r\n}\r\n.icon-earphones-alt:before {\r\n\tcontent: \"\\e03c\";\r\n}\r\n.icon-earphones:before {\r\n\tcontent: \"\\e03d\";\r\n}\r\n.icon-drop:before {\r\n\tcontent: \"\\e03e\";\r\n}\r\n.icon-drawer:before {\r\n\tcontent: \"\\e03f\";\r\n}\r\n.icon-docs:before {\r\n\tcontent: \"\\e040\";\r\n}\r\n.icon-directions:before {\r\n\tcontent: \"\\e041\";\r\n}\r\n.icon-direction:before {\r\n\tcontent: \"\\e042\";\r\n}\r\n.icon-diamond:before {\r\n\tcontent: \"\\e043\";\r\n}\r\n.icon-cup:before {\r\n\tcontent: \"\\e044\";\r\n}\r\n.icon-compass:before {\r\n\tcontent: \"\\e045\";\r\n}\r\n.icon-call-out:before {\r\n\tcontent: \"\\e046\";\r\n}\r\n.icon-call-in:before {\r\n\tcontent: \"\\e047\";\r\n}\r\n.icon-call-end:before {\r\n\tcontent: \"\\e048\";\r\n}\r\n.icon-calculator:before {\r\n\tcontent: \"\\e049\";\r\n}\r\n.icon-bubbles:before {\r\n\tcontent: \"\\e04a\";\r\n}\r\n.icon-briefcase:before {\r\n\tcontent: \"\\e04b\";\r\n}\r\n.icon-book-open:before {\r\n\tcontent: \"\\e04c\";\r\n}\r\n.icon-basket-loaded:before {\r\n\tcontent: \"\\e04d\";\r\n}\r\n.icon-basket:before {\r\n\tcontent: \"\\e04e\";\r\n}\r\n.icon-bag:before {\r\n\tcontent: \"\\e04f\";\r\n}\r\n.icon-action-undo:before {\r\n\tcontent: \"\\e050\";\r\n}\r\n.icon-action-redo:before {\r\n\tcontent: \"\\e051\";\r\n}\r\n.icon-wrench:before {\r\n\tcontent: \"\\e052\";\r\n}\r\n.icon-umbrella:before {\r\n\tcontent: \"\\e053\";\r\n}\r\n.icon-trash:before {\r\n\tcontent: \"\\e054\";\r\n}\r\n.icon-tag:before {\r\n\tcontent: \"\\e055\";\r\n}\r\n.icon-support:before {\r\n\tcontent: \"\\e056\";\r\n}\r\n.icon-size-fullscreen:before {\r\n\tcontent: \"\\e057\";\r\n}\r\n.icon-size-actual:before {\r\n\tcontent: \"\\e058\";\r\n}\r\n.icon-shuffle:before {\r\n\tcontent: \"\\e059\";\r\n}\r\n.icon-share-alt:before {\r\n\tcontent: \"\\e05a\";\r\n}\r\n.icon-share:before {\r\n\tcontent: \"\\e05b\";\r\n}\r\n.icon-rocket:before {\r\n\tcontent: \"\\e05c\";\r\n}\r\n.icon-question:before {\r\n\tcontent: \"\\e05d\";\r\n}\r\n.icon-pie-chart:before {\r\n\tcontent: \"\\e05e\";\r\n}\r\n.icon-pencil:before {\r\n\tcontent: \"\\e05f\";\r\n}\r\n.icon-note:before {\r\n\tcontent: \"\\e060\";\r\n}\r\n.icon-music-tone-alt:before {\r\n\tcontent: \"\\e061\";\r\n}\r\n.icon-music-tone:before {\r\n\tcontent: \"\\e062\";\r\n}\r\n.icon-microphone:before {\r\n\tcontent: \"\\e063\";\r\n}\r\n.icon-loop:before {\r\n\tcontent: \"\\e064\";\r\n}\r\n.icon-logout:before {\r\n\tcontent: \"\\e065\";\r\n}\r\n.icon-login:before {\r\n\tcontent: \"\\e066\";\r\n}\r\n.icon-list:before {\r\n\tcontent: \"\\e067\";\r\n}\r\n.icon-like:before {\r\n\tcontent: \"\\e068\";\r\n}\r\n.icon-home:before {\r\n\tcontent: \"\\e069\";\r\n}\r\n.icon-grid:before {\r\n\tcontent: \"\\e06a\";\r\n}\r\n.icon-graph:before {\r\n\tcontent: \"\\e06b\";\r\n}\r\n.icon-equalizer:before {\r\n\tcontent: \"\\e06c\";\r\n}\r\n.icon-dislike:before {\r\n\tcontent: \"\\e06d\";\r\n}\r\n.icon-cursor:before {\r\n\tcontent: \"\\e06e\";\r\n}\r\n.icon-control-start:before {\r\n\tcontent: \"\\e06f\";\r\n}\r\n.icon-control-rewind:before {\r\n\tcontent: \"\\e070\";\r\n}\r\n.icon-control-play:before {\r\n\tcontent: \"\\e071\";\r\n}\r\n.icon-control-pause:before {\r\n\tcontent: \"\\e072\";\r\n}\r\n.icon-control-forward:before {\r\n\tcontent: \"\\e073\";\r\n}\r\n.icon-control-end:before {\r\n\tcontent: \"\\e074\";\r\n}\r\n.icon-calendar:before {\r\n\tcontent: \"\\e075\";\r\n}\r\n.icon-bulb:before {\r\n\tcontent: \"\\e076\";\r\n}\r\n.icon-bar-chart:before {\r\n\tcontent: \"\\e077\";\r\n}\r\n.icon-arrow-up:before {\r\n\tcontent: \"\\e078\";\r\n}\r\n.icon-arrow-right:before {\r\n\tcontent: \"\\e079\";\r\n}\r\n.icon-arrow-left:before {\r\n\tcontent: \"\\e07a\";\r\n}\r\n.icon-arrow-down:before {\r\n\tcontent: \"\\e07b\";\r\n}\r\n.icon-ban:before {\r\n\tcontent: \"\\e07c\";\r\n}\r\n.icon-bubble:before {\r\n\tcontent: \"\\e07d\";\r\n}\r\n.icon-camcorder:before {\r\n\tcontent: \"\\e07e\";\r\n}\r\n.icon-camera:before {\r\n\tcontent: \"\\e07f\";\r\n}\r\n.icon-check:before {\r\n\tcontent: \"\\e080\";\r\n}\r\n.icon-clock:before {\r\n\tcontent: \"\\e081\";\r\n}\r\n.icon-close:before {\r\n\tcontent: \"\\e082\";\r\n}\r\n.icon-cloud-download:before {\r\n\tcontent: \"\\e083\";\r\n}\r\n.icon-cloud-upload:before {\r\n\tcontent: \"\\e084\";\r\n}\r\n.icon-doc:before {\r\n\tcontent: \"\\e085\";\r\n}\r\n.icon-envelope:before {\r\n\tcontent: \"\\e086\";\r\n}\r\n.icon-eye:before {\r\n\tcontent: \"\\e087\";\r\n}\r\n.icon-flag:before {\r\n\tcontent: \"\\e088\";\r\n}\r\n.icon-folder:before {\r\n\tcontent: \"\\e089\";\r\n}\r\n.icon-heart:before {\r\n\tcontent: \"\\e08a\";\r\n}\r\n.icon-info:before {\r\n\tcontent: \"\\e08b\";\r\n}\r\n.icon-key:before {\r\n\tcontent: \"\\e08c\";\r\n}\r\n.icon-link:before {\r\n\tcontent: \"\\e08d\";\r\n}\r\n.icon-lock:before {\r\n\tcontent: \"\\e08e\";\r\n}\r\n.icon-lock-open:before {\r\n\tcontent: \"\\e08f\";\r\n}\r\n.icon-magnifier:before {\r\n\tcontent: \"\\e090\";\r\n}\r\n.icon-magnifier-add:before {\r\n\tcontent: \"\\e091\";\r\n}\r\n.icon-magnifier-remove:before {\r\n\tcontent: \"\\e092\";\r\n}\r\n.icon-paper-clip:before {\r\n\tcontent: \"\\e093\";\r\n}\r\n.icon-paper-plane:before {\r\n\tcontent: \"\\e094\";\r\n}\r\n.icon-plus:before {\r\n\tcontent: \"\\e095\";\r\n}\r\n.icon-pointer:before {\r\n\tcontent: \"\\e096\";\r\n}\r\n.icon-power:before {\r\n\tcontent: \"\\e097\";\r\n}\r\n.icon-refresh:before {\r\n\tcontent: \"\\e098\";\r\n}\r\n.icon-reload:before {\r\n\tcontent: \"\\e099\";\r\n}\r\n.icon-settings:before {\r\n\tcontent: \"\\e09a\";\r\n}\r\n.icon-star:before {\r\n\tcontent: \"\\e09b\";\r\n}\r\n.icon-symbol-female:before {\r\n\tcontent: \"\\e09c\";\r\n}\r\n.icon-symbol-male:before {\r\n\tcontent: \"\\e09d\";\r\n}\r\n.icon-target:before {\r\n\tcontent: \"\\e09e\";\r\n}\r\n.icon-volume-1:before {\r\n\tcontent: \"\\e09f\";\r\n}\r\n.icon-volume-2:before {\r\n\tcontent: \"\\e0a0\";\r\n}\r\n.icon-volume-off:before {\r\n\tcontent: \"\\e0a1\";\r\n}\r\n.icon-users:before {\r\n\tcontent: \"\\e001\";\r\n}"
  },
  {
    "path": "src/main/webapp/static/css/style.css",
    "content": "body {\r\n    background-color: transparent;\r\n    font-family: ​Arial,​sans-serif,\"微软雅黑\";\r\n    font-size: 14px;\r\n}\r\n\r\n.bg-white-only {\r\n    background-color: #fff;\r\n}\r\n.box-shadow {\r\n    box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05);\r\n}\r\n\r\n\r\n\r\n.badge, .label {\r\n    font-weight: bold;\r\n    text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);\r\n}\r\n.badge.bg-light, .label.bg-light {\r\n    text-shadow: none;\r\n}\r\n.badge {\r\n    background-color: #cfdadd;\r\n}\r\n.badge.up {\r\n    margin-left: -15px;\r\n    padding: 3px 6px;\r\n    position: relative;\r\n    top: 7px;\r\n}\r\n.badge-sm {\r\n    font-size: 55%;\r\n    padding: 2px 4px !important;\r\n}\r\n.label-sm {\r\n    padding-bottom: 1px;\r\n    padding-top: 0;\r\n}\r\n.badge-white {\r\n    background-color: transparent;\r\n    border: 1px solid rgba(255, 255, 255, 0.35);\r\n    padding: 2px 6px;\r\n}\r\n.badge-empty {\r\n    background-color: transparent;\r\n    border: 1px solid rgba(0, 0, 0, 0.15);\r\n    color: inherit;\r\n}\r\n.text-center-xs {\r\n    text-align: center;\r\n}\r\n.text-left-xs {\r\n    text-align: left;\r\n}\r\n.text-right-xs {\r\n    text-align: right;\r\n}\r\n.no-border-xs {\r\n    border-width: 0;\r\n}\r\n.pull-none-xs {\r\n    float: none !important;\r\n}\r\n.pull-right-xs {\r\n    float: right !important;\r\n}\r\n.pull-left-xs {\r\n    float: left !important;\r\n}\r\n.bg-danger {\r\n\tbackground-color: red;\r\n}\r\n\r\ninput[type=text]{\r\n\tbackground-color: #fff;\r\n\tmargin-right:5px;\r\n    background-image: none;\r\n    border: 1px solid #ddd;\r\n    border-radius: 0;\r\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset;\r\n    color: #555;\r\n    font-size: 14px;\r\n    height: 34px;\r\n    line-height: 1.42857;\r\n    padding: 6px 12px;\r\n    transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;\r\n}\r\n\r\n\r\n/**\r\n    Color\r\n*/\r\n\r\n.green {\r\n\tcolor:#72CB6F;\r\n}\r\n.blue {\r\n\tcolor:#42b4f0;\r\n}\r\n\r\n/**\r\n  panel\r\n*/\r\n\r\n.portal{\r\n\twidth:auto;\r\n\theight:auto;\r\n}\r\n.portalPanel {\r\n\twidth:auto;\r\n\theight:80px;\r\n\tline-height:80px;\r\n\ttext-align:center;\r\n    box-shadow: 0px 1px 3px #ddd;\r\n    margin:6px 6px 6px 6px;\r\n    padding-left:20px;\r\n    padding-right:20px;\r\n    min-width:160px;\r\n    display:inline-block;\r\n    color:#555;\r\n    cursor:pointer;\r\n}\r\n.portalPanel:hover{\r\n\tbackground-color:#f7f7f7;\r\n}\r\n.page-list {\r\n\tfont-size:12px;\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/css/templatemo_style.css",
    "content": "/* \r\n\r\n\r\nCredit: www.cssmoban.com\r\n\t1. General\r\n\t2. login-form-1\r\n\t3. login-form-2\r\n\t4. inline-login\r\n\t5. create-account\r\n\t6. forgot-password\r\n\t7. contact-form-1\r\n\t8. contact-form-2\r\n\t9. payment-form\r\n\t10. Media Queries\r\n\t\r\n--------------------------------------------*/\r\n/* 1. General\r\n--------------------------------------------*/\r\n\r\n*, body { font-family: \"微软雅黑\"; }\r\nbody { margin-bottom: 30px; }\r\nh1 {\r\n\tfont-weight: 300;\r\n\tfont-size: 36px;\r\n\tline-height: normal;\r\n\tmargin: auto;\r\n\tmargin-top: 30px;\r\n\ttext-align: center;\r\n}\r\nh2 {\r\n\tfont-weight: 500;\r\n\tfont-size: 20px;\r\n\tline-height: normal;\r\n\tmargin: auto;\r\n\tmargin-bottom: 30px;\r\n\ttext-align: center;\r\n\tcolor: #09F;\r\n}\r\n\r\n.green { color: #3C3; }\r\n.gray { color: #999; }\r\n\r\n.form-horizontal .control-label { padding-top: 0; }\r\n.form-horizontal.templatemo-payment-form .radio.templatemo-no-padding-top {\tpadding-top: 0; }\r\n.control-wrapper {\r\n\tposition: relative;\r\n\tpadding-left: 30px;\r\n}\r\n.control-wrapper label.fa-label {\r\n\tposition: absolute;\r\n\tleft: 4px;\r\n\ttop: 6px;\r\n}\r\n.form-group:last-child { margin-bottom: 0; }\r\n.form-horizontal .control-label { margin-bottom: 10px; }\r\n.table { margin-bottom: 0; }\r\n.table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, \r\n.table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td {\r\n\tvertical-align: middle;\r\n}\r\n.templatemo-form-list-container { max-width: 600px; }\r\n.templatemo-input-icon-container { position: relative; }\r\n.templatemo-input-icon-container .fa {\r\n\tcolor: gray;\r\n\tposition: absolute;\r\n\tleft: 10px;\r\n\ttop: 10px;\r\n}\r\n.templatemo-input-icon-container input, \r\n.templatemo-input-icon-container textarea {\r\n\tpadding-left: 30px;\r\n}\r\n.templatemo-container {\r\n\tbackground-color: rgba(255,255,255,0.8);\r\n\tborder: 1px solid #dedede;\r\n\tborder-radius: 8px;\r\n\tmargin: 0 auto;\r\n\tpadding: 30px;\r\n}\r\n.templatemo-bg-gray { background-color: #eee; }\r\n.templatemo-bg-gray h1 { color: rgb(74, 164, 180); }\r\n.templatemo-bg-image-1 {\r\n\tbackground-color: rgb(60,60,60);\r\n\tbackground-image: url(hr/static/img/login/templatemo-bg-1.jpg);\t\r\n}\r\n.templatemo-bg-image-2 {\r\n\tbackground-color: rgb(70, 90, 40);\r\n\tbackground-image: url(hr/static/img/login/templatemo-bg-2.jpg);\r\n}\r\n.templatemo-bg-image-1, .templatemo-bg-image-2 {\r\n\tbackground-repeat: no-repeat;\r\n\tbackground-position: center center;\r\n\tbackground-attachment: fixed;\t\r\n}\r\n.templatemo-bg-image-1, .templatemo-bg-image-2 { background-size: cover; }\r\n.font-size-small { font-size: 0.8em; }\r\n.margin-bottom-15 {\tmargin-bottom: 15px; }\r\n.margin-bottom-30 {\tmargin-bottom: 30px; }\r\n.form-group { margin-bottom: 20px; }\r\n.form-group a {\tline-height: 34px; }\r\n.fa { font-size: 16px; }\r\n.fa.login-with {\r\n\tfont-size: 30px;\r\n\tmargin: 0 5px;\r\n}\r\n.fa-medium { font-size: 20px; }\r\n.inline-block { display: inline-block; }\r\n\r\n\r\n/*-------------------------------------\r\n2. login-form-1\r\n---------------------------------------*/\r\n.templatemo-login-form-1 { max-width: 500px; }\r\n.templatemo-login-form-1 a { color: gray; }\r\n.templatemo-login-form-1 a:hover {\r\n\tcolor: black;\r\n\ttext-decoration: none;\r\n\tcursor: pointer;\r\n}\r\n.templatemo-create-new {\r\n\tcolor: #58B4BB;\r\n\tfont-size: 18px;\r\n\tfont-weight: 300;\r\n}\r\n.templatemo-create-new:hover {\r\n\tcolor: #138892;\r\n\ttext-decoration: none;\r\n}\r\n\r\n/*-------------------------------------\r\n3. login-form-2\r\n---------------------------------------*/\r\n.templatemo-login-form-2 {\r\n\tbackground-color: rgba(13,13,13,0.25);\r\n\tborder-radius: 8px;\r\n\tcolor: #fff;\r\n\tfont-weight: 300;\r\n\tmax-width: 650px;\r\n\tpadding: 0 30px 30px 30px;\r\n\tmargin: 30px auto 0 auto;\r\n}\r\n.templatemo-login-form-2 h1 { color: #fff; margin-bottom: 40px; }\r\n.templatemo-login-form-2 a { color: #DBDBDB; }\r\n.templatemo-login-form-2 .form-control {\r\n\tbackground-color: rgba(83, 78, 78, 0.35);\r\n\tborder: 1px solid rgba(255, 255, 255, 0.27);\r\n\tcolor: rgb(255,255,255);\r\n}\r\n.templatemo-login-form-2 .templatemo-input-icon-container .fa {\tcolor: rgb(190, 190, 190); }\r\n.templatemo-login-form-2 .control-label { margin-bottom: 10px; }\r\n.templatemo-login-form-2 .btn {\twidth: 100%; }\r\n.templatemo-login-form-2 .btn-social { max-width: 220px; }\r\n.templatemo-login-form-2 label { font-weight: 400; }\r\n.templatemo-login-form-2 .templatemo-one-signin { border-right: 1px solid rgba(200, 200, 200, 0.5); }\r\n\r\n\r\n/*-------------------------------------\r\n4. inline-login\r\n--------------------------------------*/\r\n.templatemo-header {\r\n\tbackground-color: #0B8290;\r\n\tcolor: white;\r\n\tmin-height: 90px;\r\n}\r\n.templatemo-header .checkbox {\r\n\tdisplay: block;\r\n\tmargin-top: 5px;\r\n}\r\n.templatemo-header form { margin-top: 25px; }\r\n.templatemo-header .form-inline .form-group { vertical-align: top; }\r\n\r\n.logo { margin: 18px; }\r\n\r\n\r\n/*-------------------------------------\r\n5. create-account\r\n---------------------------------------*/\r\n.templatemo-create-account {\r\n\tbackground-color: #fff;\r\n\tborder: none;\r\n\tmax-width: 700px;\t\r\n}\r\n.templatemo-create-account label { font-weight: 400; }\r\n.templatemo-create-account input[type='checkbox'] {\r\n\tmargin-right: 10px;\r\n\tposition: relative;\r\n\ttop: -1.5px;\r\n}\r\n.templatemo-radio-group { margin-top: 30px; }\r\n\r\n\r\n/*-------------------------------------\r\n6. forgot-password\r\n---------------------------------------*/\r\n.templatemo-forgot-password-form {\r\n\tbackground-color: #fff;\t\r\n\tmax-width: 550px;\r\n\tmargin: 0 auto;\r\n\tpadding: 30px;\r\n}\r\n\r\n\r\n/*-------------------------------------\r\n7. contact-form-1\r\n---------------------------------------*/\r\n.templatemo-contact-form-1 {\r\n\tbackground: rgba(0,0,0,0.6);\r\n\tborder-radius: 8px;\r\n\tcolor: rgb(197,197,197);\r\n\tmax-width: 600px;\r\n\tmargin: 30px auto 0 auto;\r\n\tpadding: 0 30px 30px 30px;\r\n}\r\n.templatemo-contact-form-1 h1, .templatemo-contact-form-1 p { color: rgb(255,255,255); }\r\n.templatemo-contact-form-1 a {\r\n\tcolor: #FF9;\r\n\ttext-decoration: underline;\r\n}\r\n.templatemo-contact-form-1 a:hover { color: rgb(255,255,255); }\r\n.templatemo-contact-form-1 label { font-weight: 400;}\r\n.templatemo-contact-form-1 .form-control {\r\n\tfont-size: 16px;\r\n\tpadding: 10px 12px 10px 35px;\r\n}\r\n.templatemo-contact-form-1 input.form-control {\theight: 45px; }\r\n.templatemo-contact-form-1 .fa { font-size: 20px; }\r\n.templatemo-contact-form-1 .form-control {\r\n\tbackground-color: rgba(0, 0, 0, 0.6);\r\n\tborder: 1px solid rgba(176, 176, 176, 0.4);\r\n\tcolor: white;\r\n}\r\n.templatemo-contact-form-1 .form-control:focus {\r\n\tbox-shadow: inset 0 1px 1px rgba(140, 220, 60, 0.7),0 0 10px rgba(140, 220, 60, 0.7);\r\n}\r\n.templatemo-contact-form-1 .templatemo-input-icon-container .fa {\r\n\tcolor: rgb(197,197,197);\r\n\tleft: 12px;\r\n\ttop: 12px;\r\n}\r\n.templatemo-contact-form-1 .templatemo-input-icon-container .fa-envelope-o {\r\n\tfont-size: 18px;\r\n\ttop: 14px;\r\n}\r\n\r\n\r\n/*-------------------------------------\r\n8. contact form 2\r\n---------------------------------------*/\r\n.templatemo-contact-form-2 {\r\n\tborder-radius: 8px;\r\n\tmax-width: 960px;\r\n\tmargin: 0 auto;\r\n\tpadding: 30px 30px 0 30px;\r\n}\r\n.templatemo-contact-form-2 .form-group { margin-bottom: 30px; }\r\n.templatemo-contact-form-2 label { font-weight: 400; }\r\n.templatemo-contact-form-2 textarea { min-height: 225px; }\r\n\r\n\r\n/*-------------------------------------\r\n9. payment-form\r\n---------------------------------------*/\r\n.templatemo-payment-form {\r\n\tbackground-color: #fff;\t\r\n\tmargin: 0 auto;\r\n\tmax-width: 800px;\r\n\tpadding: 30px;\r\n}\r\n.templatemo-payment-form .control-label { margin-bottom: 10px; }\r\n.templatemo-payment-form .btn {\twidth: 150px; }\r\n.templatemo-select-container { padding: 0; }\r\n.cvv2 {\r\n\twidth: 50px;\r\n\tpadding: 5px;\r\n\tdisplay: inline-block;\r\n}\r\n.cvv2-group > div {\tdisplay: inline-block; }\r\n.cvv2-group > div > label {\tdisplay: block; }\r\n.cvv2-group img { vertical-align: bottom; }\r\n.templatemo-card-details label { font-weight: 400; }\r\n.btn-round { border-radius: 30px; }\r\n.templatemo-inline-group {\r\n\tdisplay: inline-block;\r\n\tvertical-align: middle;\r\n\theight: 71px;\r\n\tpadding-right: 20px;\r\n}\r\n.form-horizontal .control-label.text-left {\ttext-align: left; }\r\n.radio-inline {\tmargin-right: 10px; }\r\n.radio-inline+.radio-inline { margin-left: 0; }\r\n.templatemo-radio-container { margin-left: 15px; }\r\n\r\n\r\n/*-------------------------------------\r\n10. Media Queries\r\n---------------------------------------*/\r\n@media screen and (max-width: 767px) {\r\n\t.templatemo-header .col-md-12 {\tline-height: 20px; }\r\n\t.templatemo-header .btn { margin-bottom: 15px; }\r\n\t.templatemo-container {\tpadding: 15px; }\r\n\t.control-wrapper label.fa-label { top: 6px;\t}\r\n\t.templatemo-header form { margin-top: 0; }\r\n}\r\n@media screen and (max-width: 991px) {\r\n\t.templatemo-login-form-2 .templatemo-one-signin {\r\n\t\tborder-right: none;\r\n\t\tborder-bottom: 1px solid rgba(200, 200, 200, 0.5);\r\n\t}\r\n\t.templatemo-login-form-2 .templatemo-other-signin {\tpadding-top: 30px; }\r\n\t.templatemo-login-form-2 .form-group:last-child { margin-bottom: 30px; }\r\n\t.templatemo-create-account .col-md-6, .templatemo-create-account .col-md-12 {\r\n\t\tpadding-top: 5px;\r\n\t\tpadding-bottom: 15px;\r\n\t}\r\n\t.templatemo-create-account .form-group { margin-bottom: 0; }\r\n\t.templatemo-radio-group { margin-top: 0; }\r\n\t.templatemo-contact-form-2 .checkbox {\tmargin-bottom: 15px; }\r\n\t.templatemo-contact-form-2 { padding: 30px 30px 0 30px;\t}\r\n\t.templatemo-radio-container { margin-left: 30px; }\r\n}"
  },
  {
    "path": "src/main/webapp/static/easyui/easyloader.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function(){\nvar _1={draggable:{js:\"jquery.draggable.js\"},droppable:{js:\"jquery.droppable.js\"},resizable:{js:\"jquery.resizable.js\"},linkbutton:{js:\"jquery.linkbutton.js\",css:\"linkbutton.css\"},progressbar:{js:\"jquery.progressbar.js\",css:\"progressbar.css\"},tooltip:{js:\"jquery.tooltip.js\",css:\"tooltip.css\"},pagination:{js:\"jquery.pagination.js\",css:\"pagination.css\",dependencies:[\"linkbutton\"]},datagrid:{js:\"jquery.datagrid.js\",css:\"datagrid.css\",dependencies:[\"panel\",\"resizable\",\"linkbutton\",\"pagination\"]},treegrid:{js:\"jquery.treegrid.js\",css:\"tree.css\",dependencies:[\"datagrid\"]},propertygrid:{js:\"jquery.propertygrid.js\",css:\"propertygrid.css\",dependencies:[\"datagrid\"]},panel:{js:\"jquery.panel.js\",css:\"panel.css\"},window:{js:\"jquery.window.js\",css:\"window.css\",dependencies:[\"resizable\",\"draggable\",\"panel\"]},dialog:{js:\"jquery.dialog.js\",css:\"dialog.css\",dependencies:[\"linkbutton\",\"window\"]},messager:{js:\"jquery.messager.js\",css:\"messager.css\",dependencies:[\"linkbutton\",\"window\",\"progressbar\"]},layout:{js:\"jquery.layout.js\",css:\"layout.css\",dependencies:[\"resizable\",\"panel\"]},form:{js:\"jquery.form.js\"},menu:{js:\"jquery.menu.js\",css:\"menu.css\"},tabs:{js:\"jquery.tabs.js\",css:\"tabs.css\",dependencies:[\"panel\",\"linkbutton\"]},menubutton:{js:\"jquery.menubutton.js\",css:\"menubutton.css\",dependencies:[\"linkbutton\",\"menu\"]},splitbutton:{js:\"jquery.splitbutton.js\",css:\"splitbutton.css\",dependencies:[\"menubutton\"]},accordion:{js:\"jquery.accordion.js\",css:\"accordion.css\",dependencies:[\"panel\"]},calendar:{js:\"jquery.calendar.js\",css:\"calendar.css\"},textbox:{js:\"jquery.textbox.js\",css:\"textbox.css\",dependencies:[\"validatebox\",\"linkbutton\"]},filebox:{js:\"jquery.filebox.js\",css:\"filebox.css\",dependencies:[\"textbox\"]},combo:{js:\"jquery.combo.js\",css:\"combo.css\",dependencies:[\"panel\",\"textbox\"]},combobox:{js:\"jquery.combobox.js\",css:\"combobox.css\",dependencies:[\"combo\"]},combotree:{js:\"jquery.combotree.js\",dependencies:[\"combo\",\"tree\"]},combogrid:{js:\"jquery.combogrid.js\",dependencies:[\"combo\",\"datagrid\"]},validatebox:{js:\"jquery.validatebox.js\",css:\"validatebox.css\",dependencies:[\"tooltip\"]},numberbox:{js:\"jquery.numberbox.js\",dependencies:[\"textbox\"]},searchbox:{js:\"jquery.searchbox.js\",css:\"searchbox.css\",dependencies:[\"menubutton\",\"textbox\"]},spinner:{js:\"jquery.spinner.js\",css:\"spinner.css\",dependencies:[\"textbox\"]},numberspinner:{js:\"jquery.numberspinner.js\",dependencies:[\"spinner\",\"numberbox\"]},timespinner:{js:\"jquery.timespinner.js\",dependencies:[\"spinner\"]},tree:{js:\"jquery.tree.js\",css:\"tree.css\",dependencies:[\"draggable\",\"droppable\"]},datebox:{js:\"jquery.datebox.js\",css:\"datebox.css\",dependencies:[\"calendar\",\"combo\"]},datetimebox:{js:\"jquery.datetimebox.js\",dependencies:[\"datebox\",\"timespinner\"]},slider:{js:\"jquery.slider.js\",dependencies:[\"draggable\"]},tooltip:{js:\"jquery.tooltip.js\"},parser:{js:\"jquery.parser.js\"}};\nvar _2={\"af\":\"easyui-lang-af.js\",\"ar\":\"easyui-lang-ar.js\",\"bg\":\"easyui-lang-bg.js\",\"ca\":\"easyui-lang-ca.js\",\"cs\":\"easyui-lang-cs.js\",\"cz\":\"easyui-lang-cz.js\",\"da\":\"easyui-lang-da.js\",\"de\":\"easyui-lang-de.js\",\"el\":\"easyui-lang-el.js\",\"en\":\"easyui-lang-en.js\",\"es\":\"easyui-lang-es.js\",\"fr\":\"easyui-lang-fr.js\",\"it\":\"easyui-lang-it.js\",\"jp\":\"easyui-lang-jp.js\",\"nl\":\"easyui-lang-nl.js\",\"pl\":\"easyui-lang-pl.js\",\"pt_BR\":\"easyui-lang-pt_BR.js\",\"ru\":\"easyui-lang-ru.js\",\"sv_SE\":\"easyui-lang-sv_SE.js\",\"tr\":\"easyui-lang-tr.js\",\"zh_CN\":\"easyui-lang-zh_CN.js\",\"zh_TW\":\"easyui-lang-zh_TW.js\"};\nvar _3={};\nfunction _4(_5,_6){\nvar _7=false;\nvar _8=document.createElement(\"script\");\n_8.type=\"text/javascript\";\n_8.language=\"javascript\";\n_8.src=_5;\n_8.onload=_8.onreadystatechange=function(){\nif(!_7&&(!_8.readyState||_8.readyState==\"loaded\"||_8.readyState==\"complete\")){\n_7=true;\n_8.onload=_8.onreadystatechange=null;\nif(_6){\n_6.call(_8);\n}\n}\n};\ndocument.getElementsByTagName(\"head\")[0].appendChild(_8);\n};\nfunction _9(_a,_b){\n_4(_a,function(){\ndocument.getElementsByTagName(\"head\")[0].removeChild(this);\nif(_b){\n_b();\n}\n});\n};\nfunction _c(_d,_e){\nvar _f=document.createElement(\"link\");\n_f.rel=\"stylesheet\";\n_f.type=\"text/css\";\n_f.media=\"screen\";\n_f.href=_d;\ndocument.getElementsByTagName(\"head\")[0].appendChild(_f);\nif(_e){\n_e.call(_f);\n}\n};\nfunction _10(_11,_12){\n_3[_11]=\"loading\";\nvar _13=_1[_11];\nvar _14=\"loading\";\nvar _15=(easyloader.css&&_13[\"css\"])?\"loading\":\"loaded\";\nif(easyloader.css&&_13[\"css\"]){\nif(/^http/i.test(_13[\"css\"])){\nvar url=_13[\"css\"];\n}else{\nvar url=easyloader.base+\"themes/\"+easyloader.theme+\"/\"+_13[\"css\"];\n}\n_c(url,function(){\n_15=\"loaded\";\nif(_14==\"loaded\"&&_15==\"loaded\"){\n_16();\n}\n});\n}\nif(/^http/i.test(_13[\"js\"])){\nvar url=_13[\"js\"];\n}else{\nvar url=easyloader.base+\"plugins/\"+_13[\"js\"];\n}\n_4(url,function(){\n_14=\"loaded\";\nif(_14==\"loaded\"&&_15==\"loaded\"){\n_16();\n}\n});\nfunction _16(){\n_3[_11]=\"loaded\";\neasyloader.onProgress(_11);\nif(_12){\n_12();\n}\n};\n};\nfunction _17(_18,_19){\nvar mm=[];\nvar _1a=false;\nif(typeof _18==\"string\"){\nadd(_18);\n}else{\nfor(var i=0;i<_18.length;i++){\nadd(_18[i]);\n}\n}\nfunction add(_1b){\nif(!_1[_1b]){\nreturn;\n}\nvar d=_1[_1b][\"dependencies\"];\nif(d){\nfor(var i=0;i<d.length;i++){\nadd(d[i]);\n}\n}\nmm.push(_1b);\n};\nfunction _1c(){\nif(_19){\n_19();\n}\neasyloader.onLoad(_18);\n};\nvar _1d=0;\nfunction _1e(){\nif(mm.length){\nvar m=mm[0];\nif(!_3[m]){\n_1a=true;\n_10(m,function(){\nmm.shift();\n_1e();\n});\n}else{\nif(_3[m]==\"loaded\"){\nmm.shift();\n_1e();\n}else{\nif(_1d<easyloader.timeout){\n_1d+=10;\nsetTimeout(arguments.callee,10);\n}\n}\n}\n}else{\nif(easyloader.locale&&_1a==true&&_2[easyloader.locale]){\nvar url=easyloader.base+\"locale/\"+_2[easyloader.locale];\n_9(url,function(){\n_1c();\n});\n}else{\n_1c();\n}\n}\n};\n_1e();\n};\neasyloader={modules:_1,locales:_2,base:\".\",theme:\"default\",css:true,locale:null,timeout:2000,load:function(_1f,_20){\nif(/\\.css$/i.test(_1f)){\nif(/^http/i.test(_1f)){\n_c(_1f,_20);\n}else{\n_c(easyloader.base+_1f,_20);\n}\n}else{\nif(/\\.js$/i.test(_1f)){\nif(/^http/i.test(_1f)){\n_4(_1f,_20);\n}else{\n_4(easyloader.base+_1f,_20);\n}\n}else{\n_17(_1f,_20);\n}\n}\n},onProgress:function(_21){\n},onLoad:function(_22){\n}};\nvar _23=document.getElementsByTagName(\"script\");\nfor(var i=0;i<_23.length;i++){\nvar src=_23[i].src;\nif(!src){\ncontinue;\n}\nvar m=src.match(/easyloader\\.js(\\W|$)/i);\nif(m){\neasyloader.base=src.substring(0,m.index);\n}\n}\nwindow.using=easyloader.load;\nif(window.jQuery){\njQuery(function(){\neasyloader.load(\"parser\",function(){\njQuery.parser.parse();\n});\n});\n}\n})();\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/jquery.easyui.patch.js",
    "content": "/**\n * The Patch for jQuery EasyUI 1.4.1\n */\n(function($){\n\tfunction setMe(target){\n\t\tvar opts = $(target).textbox('options');\n\t\tvar tb = $(target).next();\n\t\ttb.removeClass('textbox-disabled textbox-readonly');\n\t\tif (opts.readonly){tb.addClass('textbox-readonly')}\n\t\tif (opts.disabled){tb.addClass('textbox-disabled')}\n\t}\n\n\tvar plugin = $.fn.textbox;\n\t$.fn.textbox = function(options, param){\n\t\tif (typeof options != 'string'){\n\t\t\treturn this.each(function(){\n\t\t\t\tplugin.call($(this), options, param);\n\t\t\t\tsetMe(this);\n\t\t\t})\n\t\t} else {\n\t\t\treturn plugin.call(this, options, param);\n\t\t}\n\t};\n\t$.fn.textbox.methods = plugin.methods;\n\t$.fn.textbox.defaults = plugin.defaults;\n\t$.fn.textbox.parseOptions = plugin.parseOptions;\n\n\tvar enable = $.fn.textbox.methods.enable;\n\t$.fn.textbox.methods.enable = function(jq){\n\t\treturn jq.each(function(){\n\t\t\tenable.call($.fn.textbox.methods, $(this));\n\t\t\t$(this).next().removeClass('textbox-disabled');\n\t\t});\n\t\treturn enable.call($.fn.textbox.methods, jq);\n\t};\n\tvar disable = $.fn.textbox.methods.disable;\n\t$.fn.textbox.methods.disable = function(jq){\n\t\treturn jq.each(function(){\n\t\t\tdisable.call($.fn.textbox.methods, $(this));\n\t\t\t$(this).next().addClass('textbox-disabled');\n\t\t});\n\t};\n\tvar readonly = $.fn.textbox.methods.readonly;\n\t$.fn.textbox.methods.readonly = function(jq, mode){\n\t\treturn jq.each(function(){\n\t\t\treadonly.call($.fn.textbox.methods, $(this), mode);\n\t\t\tvar tb = $(this).next();\n\t\t\ttb.removeClass('textbox-readonly');\n\t\t\tif ($(this).textbox('options').readonly){\n\t\t\t\ttb.addClass('textbox-readonly');\n\t\t\t}\n\t\t});\n\t}\n\t$.extend($.fn.textbox.methods, {\n\t\tsetValue: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar opts = $.data(this, 'textbox').options;\n\t\t\t\tvar oldValue = $(this).textbox('getValue');\n\t\t\t\t$(this).textbox('initValue', value);\n\t\t\t\tif (oldValue != value){\n\t\t\t\t\topts.onChange.call(this, value, oldValue);\n\t\t\t\t\t$(this).closest('form').trigger('_change', [this]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n\n(function($){\n\t$(function(){\n\t\t$(document).unbind(\".combo\").bind(\"mousedown.combo mousewheel.combo\", function(e) {\n\t\t\tvar p = $(e.target).closest(\"span.combo,div.combo-p,div.menu\");\n\t\t\tif (p.length) {\n\t\t\t\tp.find('.combo-f').each(function(){\n\t\t\t\t\tvar p1 = $(this).combo('panel');\n\t\t\t\t\tif (p1.is(':visible')){\n\t\t\t\t\t\tp1.panel('close');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t$(\"body>div.combo-p>div.combo-panel:visible\").panel(\"close\");\n\t\t});\t\t\n\t});\n\n\tfunction setMe(target){\n\t\tvar p = $(target).combo('panel');\n\t\tp.panel('options').onClose = function(){\n\t\t\tvar target = $(this).panel('options').comboTarget;\n\t\t\tvar state = $(target).data('combo');\n\t\t\tif (state){\n\t\t\t\tstate.options.onHidePanel.call(target);\n\t\t\t}\n\t\t}\n\t}\n\tvar plugin = $.fn.combo;\n\t$.fn.combo = function(options, param){\n\t\tif (typeof options != 'string'){\n\t\t\treturn this.each(function(){\n\t\t\t\tplugin.call($(this), options, param);\n\t\t\t\tsetMe(this);\n\t\t\t});\n\t\t} else {\n\t\t\treturn plugin.call(this, options, param);\n\t\t}\n\t};\n\t$.fn.combo.methods = plugin.methods;\n\t$.fn.combo.defaults = plugin.defaults;\n\t$.fn.combo.parseOptions = plugin.parseOptions;\n\n\t$.extend($.fn.combo.methods, {\n\t\tsetValue: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\t$(this).combo('setValues', [value]);\n\t\t\t})\n\t\t},\n\t\tsetValues: function(jq, values){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar target = this;\n\t\t\t\tvar state = $.data(target, 'combo');\n\t\t\t\tvar opts = state.options;\n\t\t\t\tvar combo = state.combo;\n\t\t\t\tif (!$.isArray(values)){values = values.split(opts.separator)}\n\t\t\t\t\n\t\t\t\tvar oldValues = $(target).combo('getValues');\n\t\t\t\tcombo.find('.textbox-value').remove();\n\t\t\t\tvar name = $(target).attr('textboxName') || '';\n\t\t\t\tfor(var i=0; i<values.length; i++){\n\t\t\t\t\tvar input = $('<input type=\"hidden\" class=\"textbox-value\">').appendTo(combo);\n\t\t\t\t\tinput.attr('name', name);\n\t\t\t\t\tif (opts.disabled){\n\t\t\t\t\t\tinput.attr('disabled', 'disabled');\n\t\t\t\t\t}\n\t\t\t\t\tinput.val(values[i]);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar changed = (function(){\n\t\t\t\t\tif (oldValues.length != values.length){return true;}\n\t\t\t\t\tvar a1 = $.extend(true, [], oldValues);\n\t\t\t\t\tvar a2 = $.extend(true, [], values);\n\t\t\t\t\ta1.sort();\n\t\t\t\t\ta2.sort();\n\t\t\t\t\tfor(var i=0; i<a1.length; i++){\n\t\t\t\t\t\tif (a1[i] != a2[i]){return true;}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t})();\n\t\t\t\t\n\t\t\t\tif (changed){\n\t\t\t\t\tif (opts.multiple){\n\t\t\t\t\t\topts.onChange.call(target, values, oldValues);\n\t\t\t\t\t} else {\n\t\t\t\t\t\topts.onChange.call(target, values[0], oldValues[0]);\n\t\t\t\t\t}\n\t\t\t\t\t$(this).closest('form').trigger('_change', [this]);\n\t\t\t\t}\n\n\t\t\t})\n\t\t}\n\t})\n\n})(jQuery);\n\n(function($){\n\tfunction setValues(target, values, remainText){\n\t\tvar opts = $.data(target, 'combobox').options;\n\t\tvar panel = $(target).combo('panel');\n\t\t\n\t\tif (!$.isArray(values)){values = values.split(opts.separator)}\n\t\tpanel.find('div.combobox-item-selected').removeClass('combobox-item-selected');\n\t\tvar vv = [], ss = [];\n\t\tfor(var i=0; i<values.length; i++){\n\t\t\tvar v = values[i];\n\t\t\tvar s = v;\n\t\t\topts.finder.getEl(target, v).addClass('combobox-item-selected');\n\t\t\tvar row = opts.finder.getRow(target, v);\n\t\t\tif (row){\n\t\t\t\ts = row[opts.textField];\n\t\t\t}\n\t\t\tvv.push(v);\n\t\t\tss.push(s);\n\t\t}\n\t\t\n\t\t$(target).combo('setValues', vv);\n\t\tif (!remainText){\n\t\t\t$(target).combo('setText', ss.join(opts.separator));\n\t\t}\n\t}\n\n\tvar query = $.fn.combobox.defaults.keyHandler.query;\n\t$.fn.combobox.defaults.keyHandler.query = function(q){\n\t\tquery.call(this, q);\n\t\tvar opts = $(this).combobox('options');\n\t\tvar vv = $(this).combobox('getValues');\n\t\tif (!vv.length){\n\t\t\tif (opts.multiple && !q){\n\t\t\t\tsetValues(this, [], true);\n\t\t\t} else {\n\t\t\t\tsetValues(this, [q], true);\n\t\t\t}\n\t\t}\n\t}\n})(jQuery);\n\n(function($){\n\tfunction setMe(target){\n\t\tvar opts = $(target).combogrid('options');\n\t\tvar onShowPanel = opts.onShowPanel;\n\t\t$(target).combogrid('options').onShowPanel = $(target).combo('options').onShowPanel = function(){\n\t\t\tvar p = $(this).combogrid('panel');\n\t\t\tvar distance = p.outerHeight() - p.height();\n\t\t\tvar minHeight = p._size('minHeight');\n\t\t\tvar maxHeight = p._size('maxHeight');\n\t\t\tvar dg = $(this).combogrid('grid');\n\t\t\tdg.datagrid('resize', {\n\t\t\t\twidth: '100%',\n\t\t\t\theight: (isNaN(parseInt(opts.panelHeight)) ? 'auto' : '100%'),\n\t\t\t\tminHeight: (minHeight ? minHeight-distance : ''),\n\t\t\t\tmaxHeight: (maxHeight ? maxHeight-distance : '')\n\t\t\t});\n\t\t\tvar row = dg.datagrid('getSelected');\n\t\t\tif (row){\n\t\t\t\tdg.datagrid('scrollTo', dg.datagrid('getRowIndex', row));\n\t\t\t}\n\t\t\tonShowPanel.call(this);\n\t\t}\n\t}\n\n\tvar plugin = $.fn.combogrid;\n\t$.fn.combogrid = function(options, param){\n\t\tif (typeof options != 'string'){\n\t\t\treturn this.each(function(){\n\t\t\t\tplugin.call($(this), options, param);\n\t\t\t\tsetMe(this);\n\t\t\t});\n\t\t} else {\n\t\t\treturn plugin.call(this, options, param);\n\t\t}\n\t};\n\t$.fn.combogrid.methods = plugin.methods;\n\t$.fn.combogrid.defaults = plugin.defaults;\n\t$.fn.combogrid.parseOptions = plugin.parseOptions;\n})(jQuery);\n\n(function($){\n\tvar FILE_INDEX = 0;\n\tfunction buildFileBox(target){\n\t\tvar state = $.data(target, 'filebox');\n\t\tvar opts = state.options;\n\t\tvar id = 'filebox_file_id_' + (++FILE_INDEX);\n\t\t$(target).addClass('filebox-f').textbox(opts);\n\t\t$(target).textbox('textbox').attr('readonly','readonly');\n\t\tstate.filebox = $(target).next().addClass('filebox');\n\t\tstate.filebox.find('.textbox-value').remove();\n\t\topts.oldValue = \"\";\n\t\tvar file = $('<input type=\"file\" class=\"textbox-value\">').appendTo(state.filebox);\n\t\tfile.attr('id', id).attr('name', $(target).attr('textboxName')||'');\n\t\tfile.change(function(){\n\t\t\t$(target).filebox('setText', this.value);\n\t\t\topts.onChange.call(target, this.value, opts.oldValue);\n\t\t\topts.oldValue = this.value;\n\t\t});\n\t\tvar btn = $(target).filebox('button');\n\t\tif (btn.length){\n\t\t\t$('<label class=\"filebox-label\" for=\"'+id+'\"></label>').appendTo(btn);\n\t\t\tif (btn.linkbutton('options').disabled){\n\t\t\t\tfile.attr('disabled', 'disabled');\n\t\t\t} else {\n\t\t\t\tfile.removeAttr('disabled');\n\t\t\t}\t\t\t\n\t\t}\n\t}\n\tfunction initCss(){\n\t\tif (!$('#easyui-filebox-style').length){\n\t\t\t$('head').append(\n\t\t\t\t'<style id=\"easyui-filebox-style\">' +\n\t\t\t\t'.filebox-label{display:inline-block;position:absolute;cursor:pointer;left:0;top:0;width:100%;height:100%;z-index:10;}' +\n\t\t\t\t'.l-btn-disabled .filebox-label{cursor:default;}' +\n\t\t\t\t'</style>'\n\t\t\t);\n\t\t}\n\t}\n\t\n\tinitCss();\n\t\n\tvar plugin = $.fn.filebox;\n\t$.fn.filebox = function(options, param){\n\t\tif (typeof options != 'string'){\n\t\t\treturn this.each(function(){\n\t\t\t\tplugin.call($(this), options, param);\n\t\t\t\tbuildFileBox(this);\n\t\t\t})\n\t\t} else {\n\t\t\treturn plugin.call(this, options, param);\n\t\t}\n\t};\n\t$.fn.filebox.methods = plugin.methods;\n\t$.fn.filebox.defaults = plugin.defaults;\n\t$.fn.filebox.parseOptions = plugin.parseOptions;\n\t\n})(jQuery);\n\n(function($){\n\tvar plugin = $.fn.form;\n\t$.fn.form = function(options, param){\n\t\tif (typeof options == 'string'){\n\t\t\treturn plugin.call(this, options, param);\n\t\t} else {\n\t\t\treturn this.each(function(){\n\t\t\t\tplugin.call($(this), options, param);\n\t\t\t\tvar opts = $(this).form('options');\n\t\t\t\t$(this).unbind('.form').bind('change.form', function(e){\n\t\t\t\t\tif (!$(e.target).hasClass('textbox-text')){\n\t\t\t\t\t\tif (opts.onChange){\n\t\t\t\t\t\t\topts.onChange.call(this, e.target);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}).bind('_change.form', function(e, target){\n\t\t\t\t\tif (opts.onChange){\n\t\t\t\t\t\topts.onChange.call(this, target);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t};\n\t$.fn.form.methods = plugin.methods;\n\t$.fn.form.defaults = plugin.defaults;\n\t$.fn.form.parseOptions = plugin.parseOptions;\n\t\n\tfunction load(target, data){\n\t\tvar opts = $.data(target, 'form').options;\n\t\t\n\t\tif (typeof data == 'string'){\n\t\t\tvar param = {};\n\t\t\tif (opts.onBeforeLoad.call(target, param) == false) return;\n\t\t\t\n\t\t\t$.ajax({\n\t\t\t\turl: data,\n\t\t\t\tdata: param,\n\t\t\t\tdataType: 'json',\n\t\t\t\tsuccess: function(data){\n\t\t\t\t\t_load(data);\n\t\t\t\t},\n\t\t\t\terror: function(){\n\t\t\t\t\topts.onLoadError.apply(target, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t_load(data);\n\t\t}\n\t\t\n\t\tfunction _load(data){\n\t\t\tvar form = $(target);\n\t\t\tfor(var name in data){\n\t\t\t\tvar val = data[name];\n\t\t\t\tif (!_checkField(name, val)){\n\t\t\t\t\tif (!_loadBox(name, val)){\n\t\t\t\t\t\tform.find('input[name=\"'+name+'\"]').val(val);\n\t\t\t\t\t\tform.find('textarea[name=\"'+name+'\"]').val(val);\n\t\t\t\t\t\tform.find('select[name=\"'+name+'\"]').val(val);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\topts.onLoadSuccess.call(target, data);\n\t\t\tform.form('validate');\n\t\t}\n\t\t\n\t\t/**\n\t\t * check the checkbox and radio fields\n\t\t */\n\t\tfunction _checkField(name, val){\n\t\t\tvar cc = $(target).find('input[name=\"'+name+'\"][type=radio], input[name=\"'+name+'\"][type=checkbox]');\n\t\t\tif (cc.length){\n\t\t\t\tcc._propAttr('checked', false);\n\t\t\t\tcc.each(function(){\n\t\t\t\t\tvar f = $(this);\n\t\t\t\t\tif (f.val() == String(val) || $.inArray(f.val(), $.isArray(val)?val:[val]) >= 0){\n\t\t\t\t\t\tf._propAttr('checked', true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tfunction _loadBox(name, val){\n\t\t\tvar field = $(target).find('[textboxName=\"'+name+'\"],[sliderName=\"'+name+'\"]');\n\t\t\tif (field.length){\n\t\t\t\tfor(var i=0; i<opts.fieldTypes.length; i++){\n\t\t\t\t\tvar type = opts.fieldTypes[i];\n\t\t\t\t\tvar state = field.data(type);\n\t\t\t\t\tif (state){\n\t\t\t\t\t\tif (state.options.multiple || state.options.range){\n\t\t\t\t\t\t\tfield[type]('setValues', val);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfield[type]('setValue', val);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\t$.extend($.fn.form.defaults, {\n\t\tfieldTypes: ['combobox','combotree','combogrid','datetimebox','datebox','combo',\n\t\t        'datetimespinner','timespinner','numberspinner','spinner',\n\t\t        'slider','searchbox','numberbox','textbox']\n\t});\n\t$.extend($.fn.form.methods, {\n\t\tload: function(jq, data){\n\t\t\treturn jq.each(function(){\n\t\t\t\tload(this, data);\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n\n(function($){\n\tfunction setBodySize(target){\n\t\tvar state = $.data(target, 'datagrid');\n\t\tvar opts = state.options;\n\t\tvar dc = state.dc;\n\t\tvar wrap = state.panel;\n\t\tvar innerWidth = wrap.width();\n\t\tvar innerHeight = wrap.height();\n\t\t\n\t\tvar view = dc.view;\n\t\tvar view1 = dc.view1;\n\t\tvar view2 = dc.view2;\n\t\tvar header1 = view1.children('div.datagrid-header');\n\t\tvar header2 = view2.children('div.datagrid-header');\n\t\tvar table1 = header1.find('table');\n\t\tvar table2 = header2.find('table');\n\t\t\n\t\t// set view width\n\t\tview.width(innerWidth);\n\t\tvar headerInner = header1.children('div.datagrid-header-inner').show();\n\t\tview1.width(headerInner.find('table').width());\n\t\tif (!opts.showHeader) headerInner.hide();\n\t\tview2.width(innerWidth - view1._outerWidth());\n\t\tview1.children('div.datagrid-header,div.datagrid-body,div.datagrid-footer').width(view1.width());\n\t\tview2.children('div.datagrid-header,div.datagrid-body,div.datagrid-footer').width(view2.width());\n\t\t\n\t\t// set header height\n\t\tvar hh;\n\t\theader1.add(header2).css('height', '');\n\t\ttable1.add(table2).css('height', '');\n\t\thh = Math.max(table1.height(), table2.height());\n\t\ttable1.add(table2).height(hh);\n\t\theader1.add(header2)._outerHeight(hh);\n\t\t\n\t\t// set body height\n\t\tdc.body1.add(dc.body2).children('table.datagrid-btable-frozen').css({\n\t\t\tposition: 'absolute',\n\t\t\ttop: dc.header2._outerHeight()\n\t\t});\n\t\tvar frozenHeight = dc.body2.children('table.datagrid-btable-frozen')._outerHeight();\n\t\tvar fixedHeight = frozenHeight\n\t\t\t\t+ view2.children('div.datagrid-header')._outerHeight()\n\t\t\t\t+ view2.children('div.datagrid-footer')._outerHeight()\n\t\t\t\t+ wrap.children('div.datagrid-toolbar')._outerHeight();\n\t\twrap.children('div.datagrid-pager').each(function(){\n\t\t\tfixedHeight += $(this)._outerHeight();\n\t\t});\n\t\tvar distance = wrap.outerHeight() - wrap.height();\n\t\tvar minHeight = wrap._size('minHeight') || '';\n\t\tvar maxHeight = wrap._size('maxHeight') || '';\n\t\tview1.add(view2).children('div.datagrid-body').css({\n\t\t\tmarginTop: frozenHeight,\n\t\t\theight: (isNaN(parseInt(opts.height)) ? '' : (innerHeight-fixedHeight)),\n\t\t\tminHeight: (minHeight ? minHeight-distance-fixedHeight : ''),\n\t\t\tmaxHeight: (maxHeight ? maxHeight-distance-fixedHeight : '')\n\t\t});\n\t\t\n\t\tview.height(view2.height());\n\t}\n\tfunction setMe(target){\n\t\tvar state = $.data(target, 'datagrid');\n\t\tvar opts = state.options;\n\t\tvar panel = state.panel;\n\t\tpanel.panel('options').onResize = function(width, height){\n\t\t\tsetBodySize(target);\n\t\t\t$(target).datagrid('fitColumns');\n\t\t\topts.onResize.call(panel, width, height);\n\t\t}\n\t\t\n\t\tvar dc = state.dc;\n\t\tvar header = dc.header1.add(dc.header2);\n\t\theader.find('div.datagrid-cell').each(function(){\n\t\t\tvar ropts = $(this).resizable('options');\n\t\t\tvar onStopResize = ropts.onStopResize;\n\t\t\tropts.onStopResize = function(e){\n\t\t\t\tsetGroupWidth();\n\t\t\t\tonStopResize.call(this, e);\n\t\t\t\tsetGroupWidth(true);\n\t\t\t}\n\t\t});\n\t\tsetGroupWidth();\n\t\tsetTimeout(function(){\n\t\t\tsetGroupWidth(true);\n\t\t}, 0);\n\t\t\n\t\tfunction setGroupWidth(fit){\n\t\t\tvar groups = header.find('.datagrid-cell-group');\n\t\t\tif (groups.length){\n\t\t\t\tgroups.each(function(){\n\t\t\t\t\t$(this)._outerWidth(fit ? $(this).parent().width() : 10);\n\t\t\t\t});\n\t\t\t\tif (fit){\n\t\t\t\t\tsetBodySize(target);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar plugin = $.fn.datagrid;\n\t$.fn.datagrid = function(options, param){\n\t\tif (typeof options != 'string'){\n\t\t\treturn this.each(function(){\n\t\t\t\tplugin.call($(this), options, param);\n\t\t\t\tsetMe(this);\n\t\t\t});\n\t\t} else {\n\t\t\treturn plugin.call(this, options, param);\n\t\t}\n\t};\n\t$.fn.datagrid.methods = plugin.methods;\n\t$.fn.datagrid.defaults = plugin.defaults;\n\t$.fn.datagrid.parseOptions = plugin.parseOptions;\n\t$.fn.datagrid.parseData = plugin.parseData;\n\n})(jQuery);\n\n(function($){\n\t$(document).bind('mousedown.propertygrid', function(e){\n\t\tvar p = $(e.target).closest('div.datagrid-view,div.combo-panel');\n\t\tif (p.length){return;}\n\t\t$('.propertygrid').find('.datagrid-f').each(function(){\n\t\t\tvar opts = $(this).propertygrid('options');\n\t\t\topts.editIndex = undefined;\n\t\t})\n\t});\n})(jQuery);\n\n(function($){\n\tfunction setMe(target){\n\t\tvar opts = $.data(target, 'treegrid').options;\n\t\tvar dgOpts = $.data(target, 'datagrid').options;\n\t\topts.columns = dgOpts.columns;\n\t\topts.frozenColumns = dgOpts.frozenColumns;\n\t\tdgOpts.onBeginEdit = function(index, row){\n\t\t\topts.onBeginEdit.call(this, row);\n\t\t};\n\t\tdgOpts.onEndEdit = function(index, row){\n\t\t\topts.onEndEdit.call(this, row);\n\t\t}\n\t}\n\t\n\tvar plugin = $.fn.treegrid;\n\t$.fn.treegrid = function(options, param){\n\t\tif (typeof options != 'string'){\n\t\t\treturn this.each(function(){\n\t\t\t\tplugin.call($(this), options, param);\n\t\t\t\tsetMe(this);\n\t\t\t});\n\t\t} else {\n\t\t\treturn plugin.call(this, options, param);\n\t\t}\n\t};\n\t$.fn.treegrid.methods = plugin.methods;\n\t$.fn.treegrid.defaults = plugin.defaults;\n\t$.fn.treegrid.parseOptions = plugin.parseOptions;\n\t\n})(jQuery);\n\n(function($){\n\tvar resizing = false;\n\tfunction splitMe(container, region){\n\t\tvar cc = $(container);\n\t\tvar handles = '';\n\t\tvar dir = region;\n\t\tif (dir == 'north') handles = 's';\n\t\tif (dir == 'south') handles = 'n';\n\t\tif (dir == 'east') handles = 'w';\n\t\tif (dir == 'west') handles = 'e';\n\t\tvar pp = cc.layout('panel', region);\n\t\tpp.panel('options').split = true;\n\t\tvar panel = pp.panel('panel');\n\t\tpanel.addClass('layout-split-'+region);\n\t\tpanel.resizable({\n\t\t\tdisabled:false,\n\t\t\thandles:handles,\n\t\t\tonStartResize: function(e){\n\t\t\t\tresizing = true;\n\t\t\t\t\n\t\t\t\tif (dir == 'north' || dir == 'south'){\n\t\t\t\t\tvar proxy = $('>div.layout-split-proxy-v', container);\n\t\t\t\t} else {\n\t\t\t\t\tvar proxy = $('>div.layout-split-proxy-h', container);\n\t\t\t\t}\n\t\t\t\tvar top=0,left=0,width=0,height=0;\n\t\t\t\tvar pos = {display: 'block'};\n\t\t\t\tif (dir == 'north'){\n\t\t\t\t\tpos.top = parseInt(panel.css('top')) + panel.outerHeight() - proxy.height();\n\t\t\t\t\tpos.left = parseInt(panel.css('left'));\n\t\t\t\t\tpos.width = panel.outerWidth();\n\t\t\t\t\tpos.height = proxy.height();\n\t\t\t\t} else if (dir == 'south'){\n\t\t\t\t\tpos.top = parseInt(panel.css('top'));\n\t\t\t\t\tpos.left = parseInt(panel.css('left'));\n\t\t\t\t\tpos.width = panel.outerWidth();\n\t\t\t\t\tpos.height = proxy.height();\n\t\t\t\t} else if (dir == 'east'){\n\t\t\t\t\tpos.top = parseInt(panel.css('top')) || 0;\n\t\t\t\t\tpos.left = parseInt(panel.css('left')) || 0;\n\t\t\t\t\tpos.width = proxy.width();\n\t\t\t\t\tpos.height = panel.outerHeight();\n\t\t\t\t} else if (dir == 'west'){\n\t\t\t\t\tpos.top = parseInt(panel.css('top')) || 0;\n\t\t\t\t\tpos.left = panel.outerWidth() - proxy.width();\n\t\t\t\t\tpos.width = proxy.width();\n\t\t\t\t\tpos.height = panel.outerHeight();\n\t\t\t\t}\n\t\t\t\tproxy.css(pos);\n\t\t\t\t\n\t\t\t\t$('<div class=\"layout-mask\"></div>').css({\n\t\t\t\t\tleft:0,\n\t\t\t\t\ttop:0,\n\t\t\t\t\twidth:cc.width(),\n\t\t\t\t\theight:cc.height()\n\t\t\t\t}).appendTo(cc);\n\t\t\t},\n\t\t\tonResize: function(e){\n\t\t\t\tif (dir == 'north' || dir == 'south'){\n\t\t\t\t\tvar proxy = $('>div.layout-split-proxy-v', container);\n\t\t\t\t\tproxy.css('top', e.pageY - $(container).offset().top - proxy.height()/2);\n\t\t\t\t} else {\n\t\t\t\t\tvar proxy = $('>div.layout-split-proxy-h', container);\n\t\t\t\t\tproxy.css('left', e.pageX - $(container).offset().left - proxy.width()/2);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tonStopResize: function(e){\n\t\t\t\tcc.children('div.layout-split-proxy-v,div.layout-split-proxy-h').hide();\n\t\t\t\tpp.panel('resize',e.data);\n\t\t\t\t\n\t\t\t\tcc.layout('resize');\n\t\t\t\tresizing = false;\n\t\t\t\t\n\t\t\t\tcc.find('>div.layout-mask').remove();\n\t\t\t}\n\n\t\t})\n\t}\n\n\t$.extend($.fn.layout.methods, {\n\t\tsplit: function(jq, region){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsplitMe(this, region);\n\t\t\t\t$(this).layout('resize');\n\t\t\t});\n\t\t},\n\t\tunsplit: function(jq, region){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar p = $(this).layout('panel', region);\n\t\t\t\tp.panel('options').split = false;\n\t\t\t\tp.panel('panel').removeClass('layout-split-'+region).resizable({disabled:true});\n\t\t\t\t$(this).layout('resize');\n\t\t\t})\n\t\t}\n\t})\n})(jQuery);\n\n(function($){\n\t$(function(){\n\t\t$(document).unbind('.messager').bind('keydown.messager', function(e){\n\t\t\tif (e.keyCode == 27){\t//ESC\n\t\t\t\t$('body').children('div.messager-window').children('div.messager-body').each(function(){\n\t\t\t\t\t$(this).window('close');\n\t\t\t\t});\n\t\t\t} else if (e.keyCode == 9){\t//TAB\n\t\t\t\tvar win = $('body').children('div.messager-window').children('div.messager-body');\n\t\t\t\tif (!win.length){return}\n\t\t\t\tvar buttons = win.find('.messager-input,.messager-button .l-btn');\n\t\t\t\tfor(var i=0; i<buttons.length; i++){\n\t\t\t\t\tif ($(buttons[i]).is(':focus')){\n\t\t\t\t\t\t$(buttons[i>=buttons.length-1?0:i+1]).focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\tvar prompt = $.messager.prompt;\n\t$.messager.prompt = function(title, msg, fn){\n\t\tvar win = prompt(title, msg, fn);\n\t\twin.find('.messager-input').focus();\n\t\treturn win;\n\t};\n})(jQuery);\n\n(function($){\n\tfunction bindEvents(container){\n\t\tvar state = $.data(container, 'tabs')\n\t\tvar opts = state.options;\n\t\t$(container).children('div.tabs-header').unbind().bind('click', function(e){\n\t\t\tif ($(e.target).hasClass('tabs-scroller-left')){\n\t\t\t\t$(container).tabs('scrollBy', -opts.scrollIncrement);\n\t\t\t} else if ($(e.target).hasClass('tabs-scroller-right')){\n\t\t\t\t$(container).tabs('scrollBy', opts.scrollIncrement);\n\t\t\t} else {\n\t\t\t\tvar li = $(e.target).closest('li');\n\t\t\t\tif (li.hasClass('tabs-disabled')){return false;}\n\t\t\t\tvar a = $(e.target).closest('a.tabs-close');\n\t\t\t\tif (a.length){\n\t\t\t\t\t$(container).tabs('close', getLiIndex(li));\n\t\t\t\t} else if (li.length){\n\t\t\t\t\tvar index = getLiIndex(li);\n\t\t\t\t\tvar popts = state.tabs[index].panel('options');\n\t\t\t\t\tif (popts.collapsible){\n\t\t\t\t\t\t$(container).tabs(popts.closed ? 'select' : 'unselect', index);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(container).tabs('select', index);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}).bind('contextmenu', function(e){\n\t\t\tvar li = $(e.target).closest('li');\n\t\t\tif (li.hasClass('tabs-disabled')){return;}\n\t\t\tif (li.length){\n\t\t\t\topts.onContextMenu.call(container, e, li.find('span.tabs-title').html(), getLiIndex(li));\n\t\t\t}\n\t\t});\n\t\t\n\t\tfunction getLiIndex(li){\n\t\t\tvar index = 0;\n\t\t\tli.parent().children('li').each(function(i){\n\t\t\t\tif (li[0] == this){\n\t\t\t\t\tindex = i;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn index;\n\t\t}\n\t}\n\n\tvar plugin = $.fn.tabs;\n\t$.fn.tabs = function(options, param){\n\t\tif (typeof options != 'string'){\n\t\t\treturn this.each(function(){\n\t\t\t\tplugin.call($(this), options, param);\n\t\t\t\tbindEvents(this);\n\t\t\t})\n\t\t} else {\n\t\t\treturn plugin.call(this, options, param);\n\t\t}\n\t};\n\t$.fn.tabs.methods = plugin.methods;\n\t$.fn.tabs.defaults = plugin.defaults;\n\t$.fn.tabs.parseOptions = plugin.parseOptions;\n\t$.extend($.fn.tabs.defaults, {\n\t\tonBeforeSelect: function(title, index){},\n\t\tonBeforeUnselect: function(title, index){}\n\t});\n\tvar selectMethod = $.fn.tabs.methods.select;\n\t$.fn.tabs.methods.select = function(jq, which){\n\t\treturn jq.each(function(){\n\t\t\tvar opts = $(this).tabs('options');\n\t\t\tvar tab = $(this).tabs('getTab', which);\n\t\t\tvar title = tab.panel('options').title;\n\t\t\tvar index = $(this).tabs('getTabIndex', tab);\n\t\t\tif (opts.onBeforeSelect.call(this, title, index) == false){return}\n\t\t\tselectMethod.call($.fn.tabs.methods, $(this), which);\n\t\t});\n\t};\n\tvar unselectMethod = $.fn.tabs.methods.unselect;\n\t$.fn.tabs.methods.unselect = function(jq, which){\n\t\treturn jq.each(function(){\n\t\t\tvar opts = $(this).tabs('options');\n\t\t\tvar tab = $(this).tabs('getTab', which);\n\t\t\tvar title = tab.panel('options').title;\n\t\t\tvar index = $(this).tabs('getTabIndex', tab);\n\t\t\tif (opts.onBeforeUnselect.call(this, title, index) == false){return}\n\t\t\tunselectMethod.call($.fn.tabs.methods, $(this), which);\n\t\t});\n\t}\n})(jQuery);\n\n(function($){\n\tfunction forNodes(data, callback){\n\t\tvar nodes = [];\n\t\tfor(var i=0; i<data.length; i++){\n\t\t\tnodes.push(data[i]);\n\t\t}\n\t\twhile(nodes.length){\n\t\t\tvar node = nodes.shift();\n\t\t\tif (callback(node) == false){return;}\n\t\t\tif (node.children){\n\t\t\t\tfor(var i=node.children.length-1; i>=0; i--){\n\t\t\t\t\tnodes.unshift(node.children[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction getCheckedNode(target, state){\n\t\tstate = state || 'checked';\n\t\tif (!$.isArray(state)){state = [state]}\n\t\t\n\t\tvar selectors = [];\n\t\tfor(var i=0; i<state.length; i++){\n\t\t\tvar s = state[i];\n\t\t\tif (s == 'checked'){\n\t\t\t\tselectors.push('span.tree-checkbox1');\n\t\t\t} else if (s == 'unchecked'){\n\t\t\t\tselectors.push('span.tree-checkbox0');\n\t\t\t} else if (s == 'indeterminate'){\n\t\t\t\tselectors.push('span.tree-checkbox2');\n\t\t\t}\n\t\t}\n\t\t\n\t\tvar nodes = [];\n\t\t$(target).find(selectors.join(',')).each(function(){\n\t\t\tvar node = $(this).parent();\n\t\t\tif (!node.hasClass('tree-node-hidden')){\n\t\t\t\tnodes.push($(target).tree('getNode', node[0]));\n\t\t\t}\n\t\t});\n\t\treturn nodes;\n\t}\n\tfunction getSelectedNode(target){\n\t\tvar node = $(target).find('div.tree-node-selected:not(.tree-node-hidden)');\n\t\treturn node.length ? $(target).tree('getNode', node[0]) : null;\n\t}\n\n\t$.extend($.fn.tree.methods, {\n\t\tgetChecked: function(jq, state){\t// the state available values are: 'checked','unchecked','indeterminate', default is 'checked'.\n\t\t\treturn getCheckedNode(jq[0], state);\n\t\t},\n\t\tgetSelected: function(jq){\n\t\t\treturn getSelectedNode(jq[0]);\n\t\t},\n\t\tdoFilter: function(jq, text){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar target = this;\n\t\t\t\tvar data = $.data(target, 'tree').data;\n\t\t\t\tvar ids = {};\n\t\t\t\tforNodes(data, function(node){\n\t\t\t\t\tif (node.text.toLowerCase().indexOf(text.toLowerCase()) == -1){\n\t\t\t\t\t\t$('#'+node.domId).addClass('tree-node-hidden').hide();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$('#'+node.domId).removeClass('tree-node-hidden').show();\n\t\t\t\t\t\tids[node.domId] = 1;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tfor(var id in ids){\n\t\t\t\t\tshowParents(id);\n\t\t\t\t}\n\n\t\t\t\tfunction showParents(domId){\n\t\t\t\t\tvar p = $(target).tree('getParent', $('#'+domId)[0]);\n\t\t\t\t\twhile(p){\n\t\t\t\t\t\t$(p.target).removeClass('tree-node-hidden').show();\n\t\t\t\t\t\tp = $(target).tree('getParent', p.target);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n})(jQuery);\n\n(function($){\n\tfunction setValues(target, values){\n\t\tvar state = $.data(target, 'combotree');\n\t\tvar opts = state.options;\n\t\tvar tree = state.tree;\n\t\tvar topts = tree.tree('options');\n\t\tvar onCheck = topts.onCheck;\n\t\tvar onSelect = topts.onSelect;\n\t\ttopts.onCheck = topts.onSelect = function(){};\n\t\t\n\t\ttree.find('span.tree-checkbox').addClass('tree-checkbox0').removeClass('tree-checkbox1 tree-checkbox2');\n\t\tif (!$.isArray(values)){values = values.split(opts.separator)}\n\t\tvar vv = $.map(values, function(value){return String(value)});\n\t\tvar ss = [];\n\t\t$.map(vv, function(v){\n\t\t\tvar node = tree.tree('find', v);\n\t\t\tif (node){\n\t\t\t\ttree.tree('check', node.target).tree('select', node.target);\n\t\t\t\tss.push(node.text);\n\t\t\t} else {\n\t\t\t\tss.push(v);\n\t\t\t}\n\t\t});\n\t\tif (opts.multiple){\n\t\t\tvar nodes = tree.tree('getChecked');\n\t\t\t$.map(nodes, function(node){\n\t\t\t\tvar id = String(node.id);\n\t\t\t\tif ($.inArray(id, vv) == -1){\n\t\t\t\t\tvv.push(id);\n\t\t\t\t\tss.push(node.text);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\ttopts.onCheck = onCheck;\n\t\ttopts.onSelect = onSelect;\n//\t\tretrieveValues(target);\n\t\t$(target).combo('setText', ss.join(opts.separator)).combo('setValues', opts.multiple?vv:(vv.length?vv:['']));\n\t}\n\t\n\t$.extend($.fn.combotree.methods, {\n\t\tsetValues: function(jq, values){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetValues(this, values);\n\t\t\t});\n\t\t},\n\t\tsetValue: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\tsetValues(this, [value]);\n\t\t\t});\n\t\t}\n\t});\n})(jQuery);\n\n(function($){\n\t$.extend($.fn.numberbox.methods, {\n\t\tsetValue: function(jq, value){\n\t\t\treturn jq.each(function(){\n\t\t\t\tvar target = this;\n\t\t\t\tvar state = $.data(target, 'numberbox');\n\t\t\t\tvar opts = state.options;\n\t\t\t\tvalue = opts.parser.call(target, value);\n\t\t\t\tvar text = opts.formatter.call(target, value);\n\t\t\t\topts.value = value;\n\t\t\t\t$(target).textbox('setText', text).textbox('setValue', value);\n\t\t\t\ttext = opts.formatter.call(target, $(target).textbox('getValue'));\n\t\t\t\t$(target).textbox('setText', text);\n\t\t\t})\n\t\t}\n\t});\n})(jQuery);\n\n(function($){\n\t$.fn.datebox.defaults.buttons[0].handler = function(target){\n\t\tvar now = new Date();\n\t\t$(target).datebox('calendar').calendar({\n\t\t\tyear:now.getFullYear(),\n\t\t\tmonth:now.getMonth()+1,\n\t\t\tcurrent:new Date(now.getFullYear(), now.getMonth(), now.getDate())\n\t\t});\n\t\tvar e = new $.Event('keydown');\n\t\te.keyCode = 13;\n\t\t$(target).datebox('textbox').trigger(e);\n\t}\n})(jQuery);\n\n(function($){\n    $.fn.datagrid.defaults.data = [];\n    var onAfterRender = $.fn.datagrid.defaults.view.onAfterRender;\n    $.extend($.fn.datagrid.defaults.view, {\n        renderTable: function(target, index, rows, frozen){\n            var state = $.data(target, 'datagrid');\n            var opts = state.options;\n\n            if (frozen){\n                if (!(opts.rownumbers || (opts.frozenColumns && opts.frozenColumns.length))){\n                    return '';\n                }\n            }\n            \n            var fields = $(target).datagrid('getColumnFields', frozen);\n            var table = ['<table class=\"datagrid-btable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>'];\n            for(var i=0; i<rows.length; i++){\n                var row = rows[i];\n                // get the class and style attributes for this row\n                var css = opts.rowStyler ? opts.rowStyler.call(target, index, row) : '';\n                var classValue = '';\n                var styleValue = '';\n                if (typeof css == 'string'){\n                    styleValue = css;\n                } else if (css){\n                    classValue = css['class'] || '';\n                    styleValue = css['style'] || '';\n                }\n                \n                var cls = 'class=\"datagrid-row ' + (index % 2 && opts.striped ? 'datagrid-row-alt ' : ' ') + classValue + '\"';\n                var style = styleValue ? 'style=\"' + styleValue + '\"' : '';\n                var rowId = state.rowIdPrefix + '-' + (frozen?1:2) + '-' + index;\n                table.push('<tr id=\"' + rowId + '\" datagrid-row-index=\"' + index + '\" ' + cls + ' ' + style + '>');\n                table.push(this.renderRow.call(this, target, fields, frozen, index, row));\n                table.push('</tr>');\n\n                index++;\n            }\n            table.push('</tbody></table>');\n            return table.join('');\n        },\n        onAfterRender:function(target){\n            onAfterRender.call(this,target);\n            var opts = $.data(target, 'datagrid').options;\n            if (opts.finder.getRows(target).length == 0){\n            \tthis.renderEmptyRow(target);\n            }\n        },\n\t\trenderEmptyRow: function(target){\n\t\t\tvar dc = $.data(target, 'datagrid').dc;\n\t\t\tdc.body2.html(this.renderTable(target, 0, [{}], false));\n\t\t\tdc.body2.find('.datagrid-row').removeClass('datagrid-row').removeAttr('datagrid-row-index');\n\t\t\tdc.body2.find('tbody *').css({\n\t\t\t\theight: 1,\n\t\t\t\tborderColor: 'transparent',\n\t\t\t\tbackground: 'transparent'\n\t\t\t});\n\t\t}\n    });\n})(jQuery);\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-af.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Bladsy';\r\n\t$.fn.pagination.defaults.afterPageText = 'Van {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Wys (from) tot (to) van (total) items';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Verwerking, wag asseblief ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ok';\r\n\t$.messager.defaults.cancel = 'Die styl';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Die veld is verpligtend.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = \"Gee 'n geldige e-pos adres.\";\r\n\t$.fn.validatebox.defaults.rules.url.message = \"Gee 'n geldige URL nie.\";\r\n\t$.fn.validatebox.defaults.rules.length.message = \"Voer 'n waarde tussen {0} en {1}.\";\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Vandag';\r\n\t$.fn.datebox.defaults.closeText = 'Sluit';\r\n\t$.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-am.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Էջ';\r\n\t$.fn.pagination.defaults.afterPageText = 'ից {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Դիտել {from}-ից {to}-ը {total} գրառումից';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Մշակվում է, խնդրում ենք սպասել ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Այո';\r\n\t$.messager.defaults.cancel = 'Փակել';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Այս դաշտը պարտադիր է.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Խնդրում ենք մուտքագրել գործող e-mail հասցե.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Խնդրում ենք մուտքագրել գործող URL.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Խնդրում ենք մուտքագրել արժեք {0}  {1}.';\r\n\t$.fn.validatebox.defaults.rules.remote.message = 'Խնդրում ենք ուղղել այս դաշտը.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.firstDay = 1;\r\n\t$.fn.calendar.defaults.weeks  = ['Կ.','Ե.','Ե.','Չ.','Հ.','Ու.','Շ.'];\r\n\t$.fn.calendar.defaults.months = ['Հունվար', 'Փետրվար', 'Մարտ', 'Ապրիլ', 'Մայիս', 'Հունիս', 'Հուլիս', 'Օգոստոս', 'Սեպտեմբեր', 'Հոկտեմբեր', 'Նոյեմբեր', 'Դեկտեմբեր'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Այսօր';\r\n\t$.fn.datebox.defaults.closeText = 'Փակել';\r\n\t$.fn.datebox.defaults.okText = 'Այո';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-ar.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'صفحة';\r\n\t$.fn.pagination.defaults.afterPageText = 'من {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'عرض {from} إلى {to} من {total} عنصر';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'معالجة, الرجاء الإنتظار ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'موافق';\r\n\t$.messager.defaults.cancel = 'إلغاء';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'هذا الحقل مطلوب.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'الرجاء إدخال بريد إلكتروني صحيح.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'الرجاء إدخال رابط صحيح.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'الرجاء إدخال قيمة بين {0} و {1}.';\r\n\t$.fn.validatebox.defaults.rules.remote.message = 'الرجاء التأكد من الحقل.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'اليوم';\r\n\t$.fn.datebox.defaults.closeText = 'إغلاق';\r\n\t$.fn.datebox.defaults.okText = 'موافق';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-bg.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Страница';\r\n\t$.fn.pagination.defaults.afterPageText = 'от {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Показани {from} за {to} от {total} продукти';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Обработка, моля изчакайте ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Добре';\r\n\t$.messager.defaults.cancel = 'Задрасквам';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Това поле е задължително.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Моля, въведете валиден имейл адрес.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Моля въведете валиден URL.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Моля, въведете стойност между {0} и {1}.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Днес';\r\n\t$.fn.datebox.defaults.closeText = 'Близо';\r\n\t$.fn.datebox.defaults.okText = 'Добре';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-ca.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Pàgina';\r\n\t$.fn.pagination.defaults.afterPageText = 'de {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = \"Veient {from} a {to} de {total} d'articles\";\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Elaboració, si us plau esperi ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ok';\r\n\t$.messager.defaults.cancel = 'Cancel';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Aquest camp és obligatori.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Introduïu una adreça de correu electrònic vàlida.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Si us plau, introduïu un URL vàlida.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Si us plau, introduïu un valor entre {0} i {1}.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Avui';\r\n\t$.fn.datebox.defaults.closeText = 'Tancar';\r\n\t$.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-cs.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Strana';\r\n\t$.fn.pagination.defaults.afterPageText = 'z {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Zobrazuji {from} do {to} z {total} položky';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Zpracování, čekejte prosím ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ok';\r\n\t$.messager.defaults.cancel = 'Zrušit';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Toto pole je vyžadováno.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Zadejte prosím platnou e-mailovou adresu.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Zadejte prosím platnou adresu URL.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Prosím, zadejte hodnotu mezi {0} a {1}.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Dnes';\r\n\t$.fn.datebox.defaults.closeText = 'Zavřít';\r\n\t$.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-cz.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Strana';\r\n\t$.fn.pagination.defaults.afterPageText = 'z {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Zobrazuji záznam {from} až {to} z {total}.';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Pracuji, čekejte prosím…';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ok';\r\n\t$.messager.defaults.cancel = 'Zrušit';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Toto pole je vyžadováno.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Zadejte, prosím, platnou e-mailovou adresu.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Zadejte, prosím, platnou adresu URL.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Zadejte, prosím, hodnotu mezi {0} a {1}.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['N','P','Ú','S','Č','P','S']; //neděle pondělí úterý středa čtvrtek pátek sobota\r\n\t$.fn.calendar.defaults.months = ['led', 'únr', 'bře', 'dub', 'kvě', 'čvn', 'čvc', 'srp', 'zář', 'říj', 'lis', 'pro']; //leden únor březen duben květen červen červenec srpen září říjen listopad prosinec\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Dnes';\r\n\t$.fn.datebox.defaults.closeText = 'Zavřít';\r\n\t$.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-da.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Page';\r\n\t$.fn.pagination.defaults.afterPageText = 'af {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Viser {from} til {to} af {total} poster';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Behandling, vent venligst ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ok';\r\n\t$.messager.defaults.cancel = 'Annuller';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Dette felt er påkrævet.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Angiv en gyldig e-mail-adresse.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Angiv en gyldig webadresse.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Angiv en værdi mellem {0} og {1}.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'I dag';\r\n\t$.fn.datebox.defaults.closeText = 'Luk';\r\n\t$.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-de.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Seite';\r\n\t$.fn.pagination.defaults.afterPageText = 'von {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = '{from} bis {to} von {total} Datensätzen';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Verarbeitung läuft, bitte warten ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'OK';\r\n\t$.messager.defaults.cancel = 'Abbruch';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Dieses Feld wird benötigt.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Bitte geben Sie eine gültige E-Mail-Adresse ein.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Bitte geben Sie eine gültige URL ein.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Bitte geben Sie einen Wert zwischen {0} und {1} ein.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.firstDay = 1;\r\n\t$.fn.calendar.defaults.weeks  = ['S','M','D','M','D','F','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Heute';\r\n\t$.fn.datebox.defaults.closeText = 'Schließen';\r\n\t$.fn.datebox.defaults.okText = 'OK';\r\n\t$.fn.datebox.defaults.formatter = function(date){\r\n\t\tvar y = date.getFullYear();\r\n\t\tvar m = date.getMonth()+1;\r\n\t\tvar d = date.getDate();\r\n\t\treturn (d<10?('0'+d):d)+'.'+(m<10?('0'+m):m)+'.'+y;\r\n\t};\r\n\t$.fn.datebox.defaults.parser = function(s){\r\n\t\tif (!s) return new Date();\r\n\t\tvar ss = s.split('.');\r\n\t\tvar m = parseInt(ss[1],10);\r\n\t\tvar d = parseInt(ss[0],10);\r\n\t\tvar y = parseInt(ss[2],10);\r\n\t\tif (!isNaN(y) && !isNaN(m) && !isNaN(d)){\r\n\t\t\treturn new Date(y,m-1,d);\r\n\t\t} else {\r\n\t\t\treturn new Date();\r\n\t\t}\r\n\t};\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-el.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Σελίδα';\r\n\t$.fn.pagination.defaults.afterPageText = 'από {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Εμφάνιση {from} εώς {to} από {total} αντικείμενα';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Γίνεται Επεξεργασία, Παρακαλώ Περιμένετε ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Εντάξει';\r\n\t$.messager.defaults.cancel = 'Άκυρο';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Το πεδίο είναι υποχρεωτικό.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Παρακαλώ εισάγετε σωστή Ηλ.Διεύθυνση.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Παρακαλώ εισάγετε σωστό σύνδεσμο.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Παρακαλώ εισάγετε τιμή μεταξύ {0} και {1}.';\r\n\t$.fn.validatebox.defaults.rules.remote.message = 'Παρακαλώ διορθώστε αυτό το πεδίο.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['Κυρ','Δευ','Τρι','Τετ','Πεμ','Παρ','Σαβ'];\r\n\t$.fn.calendar.defaults.months = ['Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μαϊ', 'Ιου', 'Ιου', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Σήμερα';\r\n\t$.fn.datebox.defaults.closeText = 'Κλείσιμο';\r\n\t$.fn.datebox.defaults.okText = 'Εντάξει';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-en.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Page';\r\n\t$.fn.pagination.defaults.afterPageText = 'of {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Displaying {from} to {to} of {total} items';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Processing, please wait ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ok';\r\n\t$.messager.defaults.cancel = 'Cancel';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'This field is required.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Please enter a valid email address.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Please enter a valid URL.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Please enter a value between {0} and {1}.';\r\n\t$.fn.validatebox.defaults.rules.remote.message = 'Please fix this field.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Today';\r\n\t$.fn.datebox.defaults.closeText = 'Close';\r\n\t$.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-es.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'P&aacute;gina';\r\n\t$.fn.pagination.defaults.afterPageText = 'de {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Mostrando {from} a {to} de {total} elementos';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Procesando, por favor espere ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Aceptar';\r\n\t$.messager.defaults.cancel = 'Cancelar';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Este campo es obligatorio.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Por favor ingrese una direcci&oacute;n de correo v&aacute;lida.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Por favor ingrese una URL v&aacute;lida.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Por favor ingrese un valor entre {0} y {1}.';\r\n\t$.fn.validatebox.defaults.rules.remote.message = 'Por favor corrija este campo.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'];\r\n\t$.fn.calendar.defaults.months = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Hoy';\r\n\t$.fn.datebox.defaults.closeText = 'Cerrar';\r\n\t$.fn.datebox.defaults.okText = 'Aceptar';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-fr.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Page';\r\n\t$.fn.pagination.defaults.afterPageText = 'de {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Affichage de {from} et {to} au {total} des articles';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = \"Traitement, s'il vous plaît patienter ...\";\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ok';\r\n\t$.messager.defaults.cancel = 'Annuler';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Ce champ est obligatoire.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = \"S'il vous plaît entrer une adresse email valide.\";\r\n\t$.fn.validatebox.defaults.rules.url.message = \"S'il vous plaît entrer une URL valide.\";\r\n\t$.fn.validatebox.defaults.rules.length.message = \"S'il vous plaît entrez une valeur comprise entre {0} et {1}.\";\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = \"Aujourd'hui\";\r\n\t$.fn.datebox.defaults.closeText = 'Fermer';\r\n\t$.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-it.js",
    "content": "if ($.fn.pagination){\n\t$.fn.pagination.defaults.beforePageText = 'Pagina';\n\t$.fn.pagination.defaults.afterPageText = 'di {pages}';\n\t$.fn.pagination.defaults.displayMsg = 'Visualizzazione {from} a {to} di {total} elementi';\n}\nif ($.fn.datagrid){\n\t$.fn.datagrid.defaults.loadMsg = 'In lavorazione, attendere ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n\t$.messager.defaults.ok = 'Ok';\n\t$.messager.defaults.cancel = 'Annulla';\n}\n$.map(['validatebox','textbox','filebox','searchbox',\n\t\t'combo','combobox','combogrid','combotree',\n\t\t'datebox','datetimebox','numberbox',\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n\tif ($.fn[plugin]){\n\t\t$.fn[plugin].defaults.missingMessage = 'Questo campo è richiesto.';\n\t}\n});\nif ($.fn.validatebox){\n\t$.fn.validatebox.defaults.rules.email.message = 'Inserisci un indirizzo email valido.';\n\t$.fn.validatebox.defaults.rules.url.message = 'Inserisci un URL valido.';\n\t$.fn.validatebox.defaults.rules.length.message = 'Inserisci un valore tra {0} e {1}.';\n\t$.fn.validatebox.defaults.rules.remote.message = 'Aggiusta questo campo.';\n}\nif ($.fn.calendar){\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\n\t$.fn.calendar.defaults.months = ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'];\n}\nif ($.fn.datebox){\n\t$.fn.datebox.defaults.currentText = 'Oggi';\n\t$.fn.datebox.defaults.closeText = 'Chiudi';\n\t$.fn.datebox.defaults.okText = 'Ok';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n\t$.extend($.fn.datetimebox.defaults,{\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\n\t\tcloseText: $.fn.datebox.defaults.closeText,\n\t\tokText: $.fn.datebox.defaults.okText\n\t});\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-jp.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'ページ';\r\n\t$.fn.pagination.defaults.afterPageText = '{pages} 中';\r\n\t$.fn.pagination.defaults.displayMsg = '全 {total} アイテム中 {from} から {to} を表示中';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = '処理中です。少々お待ちください...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'OK';\r\n\t$.messager.defaults.cancel = 'キャンセル';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = '入力は必須です。';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = '正しいメールアドレスを入力してください。';\r\n\t$.fn.validatebox.defaults.rules.url.message = '正しいURLを入力してください。';\r\n\t$.fn.validatebox.defaults.rules.length.message = '{0} から {1} の範囲の正しい値を入力してください。';\r\n\t$.fn.validatebox.defaults.rules.remote.message = 'このフィールドを修正してください。';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['日','月','火','水','木','金','土'];\r\n\t$.fn.calendar.defaults.months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = '今日';\r\n\t$.fn.datebox.defaults.closeText = '閉じる';\r\n\t$.fn.datebox.defaults.okText = 'OK';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-nl.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Pagina';\r\n\t$.fn.pagination.defaults.afterPageText = 'van {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Tonen van {from} tot {to} van de {total} items';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Verwerking, even geduld ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ok';\r\n\t$.messager.defaults.cancel = 'Annuleren';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Dit veld is verplicht.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Geef een geldig e-mailadres.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Vul een geldige URL.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Voer een waarde tussen {0} en {1}.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['S','M','T','W','T','F','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Vandaag';\r\n\t$.fn.datebox.defaults.closeText = 'Dicht';\r\n\t$.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-pl.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Strona';\r\n\t$.fn.pagination.defaults.afterPageText = 'z {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Wyświetlono elementy od {from} do {to} z {total}';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Przetwarzanie, proszę czekać ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ok';\r\n\t$.messager.defaults.cancel = 'Cancel';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'To pole jest wymagane.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Wprowadź poprawny adres email.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Wprowadź poprawny adres URL.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Wprowadź wartość z zakresu od {0} do {1}.';\r\n\t$.fn.validatebox.defaults.rules.remote.message = 'Proszę poprawić to pole.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['N','P','W','Ś','C','P','S'];\r\n\t$.fn.calendar.defaults.months = ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze', 'Lip', 'Sie', 'Wrz', 'Paź', 'Lis', 'Gru'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Dzisiaj';\r\n\t$.fn.datebox.defaults.closeText = 'Zamknij';\r\n\t$.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-pt_BR.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Página';\r\n\t$.fn.pagination.defaults.afterPageText = 'de {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Mostrando {from} a {to} de {total} itens';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Processando, aguarde ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ok';\r\n\t$.messager.defaults.cancel = 'Cancelar';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Esse campo é requerido.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Insira um endereço de email válido.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Insira uma URL válida.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Insira uma valor entre {0} e {1}.';\r\n\t$.fn.validatebox.defaults.rules.remote.message = 'Corrija esse campo.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['D','S','T','Q','Q','S','S'];\r\n\t$.fn.calendar.defaults.months = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Hoje';\r\n\t$.fn.datebox.defaults.closeText = 'Fechar';\r\n\t$.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-ru.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = 'Страница';\r\n\t$.fn.pagination.defaults.afterPageText = 'из {pages}';\r\n\t$.fn.pagination.defaults.displayMsg = 'Просмотр {from} до {to} из {total} записей';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = 'Обрабатывается, пожалуйста ждите ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = 'Ок';\r\n\t$.messager.defaults.cancel = 'Закрыть';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = 'Это поле необходимо.';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = 'Пожалуйста введите корректный e-mail адрес.';\r\n\t$.fn.validatebox.defaults.rules.url.message = 'Пожалуйста введите корректный URL.';\r\n\t$.fn.validatebox.defaults.rules.length.message = 'Пожалуйста введите зачение между {0} и {1}.';\r\n\t$.fn.validatebox.defaults.rules.remote.message = 'Пожалуйста исправте это поле.';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.firstDay = 1;\r\n\t$.fn.calendar.defaults.weeks  = ['В','П','В','С','Ч','П','С'];\r\n\t$.fn.calendar.defaults.months = ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = 'Сегодня';\r\n\t$.fn.datebox.defaults.closeText = 'Закрыть';\r\n\t$.fn.datebox.defaults.okText = 'Ок';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-sv_SE.js",
    "content": "if ($.fn.pagination) {\r\n    $.fn.pagination.defaults.beforePageText = 'Sida';\r\n    $.fn.pagination.defaults.afterPageText = 'av {pages}';\r\n    $.fn.pagination.defaults.displayMsg = 'Visar {from} till {to} av {total} poster';\r\n}\r\nif ($.fn.datagrid) {\r\n    $.fn.datagrid.defaults.loadMsg = 'Bearbetar, vänligen vänta ...';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid) {\r\n    $.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager) {\r\n    $.messager.defaults.ok = 'Ok';\r\n    $.messager.defaults.cancel = 'Avbryt';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n        'combo','combobox','combogrid','combotree',\r\n        'datebox','datetimebox','numberbox',\r\n        'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n    if ($.fn[plugin]){\r\n        $.fn[plugin].defaults.missingMessage = 'Detta fält är obligatoriskt.';\r\n    }\r\n});\r\nif ($.fn.validatebox) {\r\n    $.fn.validatebox.defaults.rules.email.message = 'Vänligen ange en korrekt e-post adress.';\r\n    $.fn.validatebox.defaults.rules.url.message = 'Vänligen ange en korrekt URL.';\r\n    $.fn.validatebox.defaults.rules.length.message = 'Vänligen ange ett nummer mellan {0} och {1}.';\r\n    $.fn.validatebox.defaults.rules.remote.message = 'Vänligen åtgärda detta fält.';\r\n}\r\nif ($.fn.calendar) {\r\n    $.fn.calendar.defaults.weeks = ['Sön', 'Mån', 'Tis', 'Ons', 'Tors', 'Fre', 'Lör'];\r\n    $.fn.calendar.defaults.months = ['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'];\r\n}\r\nif ($.fn.datebox) {\r\n    $.fn.datebox.defaults.currentText = 'I dag';\r\n    $.fn.datebox.defaults.closeText = 'Stäng';\r\n    $.fn.datebox.defaults.okText = 'Ok';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox) {\r\n    $.extend($.fn.datetimebox.defaults, {\r\n        currentText: $.fn.datebox.defaults.currentText,\r\n        closeText: $.fn.datebox.defaults.closeText,\r\n        okText: $.fn.datebox.defaults.okText\r\n    });\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-tr.js",
    "content": "if ($.fn.pagination){\n    $.fn.pagination.defaults.beforePageText = 'Sayfa';\n    $.fn.pagination.defaults.afterPageText = ' / {pages}';\n    $.fn.pagination.defaults.displayMsg = '{from} ile {to} arası gösteriliyor, toplam {total} kayıt';\n}\nif ($.fn.datagrid){\n    $.fn.panel.defaults.loadingMessage = \"Yükleniyor...\";\n}\n\nif ($.fn.datagrid){\n    $.fn.datagrid.defaults.loadingMessage = \"Yükleniyor...\";\n    $.fn.datagrid.defaults.loadMsg = 'İşleminiz Yapılıyor, lütfen bekleyin ...';\n}\nif ($.fn.treegrid && $.fn.datagrid){\n    $.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\n}\nif ($.messager){\n    $.messager.defaults.ok = 'Tamam';\n    $.messager.defaults.cancel = 'İptal';\n}\n$.map(['validatebox','textbox','filebox','searchbox',\n        'combo','combobox','combogrid','combotree',\n        'datebox','datetimebox','numberbox',\n        'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\n    if ($.fn[plugin]){\n        $.fn[plugin].defaults.missingMessage = 'Bu alan zorunludur.';\n    }\n});\nif ($.fn.validatebox){\n    $.fn.validatebox.defaults.rules.email.message = 'Lütfen geçerli bir email adresi giriniz.';\n    $.fn.validatebox.defaults.rules.url.message = 'Lütfen geçerli bir URL giriniz.';\n    $.fn.validatebox.defaults.rules.length.message = 'Lütfen {0} ile {1} arasında bir değer giriniz.';\n    $.fn.validatebox.defaults.rules.remote.message = 'Lütfen bu alanı düzeltiniz.';\n}\nif ($.fn.calendar){\n    $.fn.calendar.defaults.weeks = ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'];\n    $.fn.calendar.defaults.months = ['Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz', 'Tem', 'Ağu', 'Eyl', 'Eki', 'Kas', 'Ara'];\n}\nif ($.fn.datebox){\n    $.fn.datebox.defaults.currentText = 'Bugün';\n    $.fn.datebox.defaults.closeText = 'Kapat';\n    $.fn.datebox.defaults.okText = 'Tamam';\n}\nif ($.fn.datetimebox && $.fn.datebox){\n    $.extend($.fn.datetimebox.defaults,{\n        currentText: $.fn.datebox.defaults.currentText,\n        closeText: $.fn.datebox.defaults.closeText,\n        okText: $.fn.datebox.defaults.okText\n    });\n    \n    $.fn.datebox.defaults.formatter=function(date){\n        var y=date.getFullYear();\n        var m=date.getMonth()+1;\n        var d=date.getDate();\n        if(m<10){m=\"0\"+m;}\n        if(d<10){d=\"0\"+d;}\n        return d+\".\"+m+\".\"+y;\n    };\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-zh_CN.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = '第';\r\n\t$.fn.pagination.defaults.afterPageText = '共{pages}页';\r\n\t$.fn.pagination.defaults.displayMsg = '显示{from}到{to},共{total}记录';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = '正在处理，请稍待。。。';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = '确定';\r\n\t$.messager.defaults.cancel = '取消';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = '该输入项为必输项';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = '请输入有效的电子邮件地址';\r\n\t$.fn.validatebox.defaults.rules.url.message = '请输入有效的URL地址';\r\n\t$.fn.validatebox.defaults.rules.length.message = '输入内容长度必须介于{0}和{1}之间';\r\n\t$.fn.validatebox.defaults.rules.remote.message = '请修正该字段';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六'];\r\n\t$.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = '今天';\r\n\t$.fn.datebox.defaults.closeText = '关闭';\r\n\t$.fn.datebox.defaults.okText = '确定';\r\n\t$.fn.datebox.defaults.formatter = function(date){\r\n\t\tvar y = date.getFullYear();\r\n\t\tvar m = date.getMonth()+1;\r\n\t\tvar d = date.getDate();\r\n\t\treturn y+'-'+(m<10?('0'+m):m)+'-'+(d<10?('0'+d):d);\r\n\t};\r\n\t$.fn.datebox.defaults.parser = function(s){\r\n\t\tif (!s) return new Date();\r\n\t\tvar ss = s.split('-');\r\n\t\tvar y = parseInt(ss[0],10);\r\n\t\tvar m = parseInt(ss[1],10);\r\n\t\tvar d = parseInt(ss[2],10);\r\n\t\tif (!isNaN(y) && !isNaN(m) && !isNaN(d)){\r\n\t\t\treturn new Date(y,m-1,d);\r\n\t\t} else {\r\n\t\t\treturn new Date();\r\n\t\t}\r\n\t};\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\nif ($.fn.datetimespinner){\r\n\t$.fn.datetimespinner.defaults.selections = [[0,4],[5,7],[8,10],[11,13],[14,16],[17,19]]\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/locale/easyui-lang-zh_TW.js",
    "content": "if ($.fn.pagination){\r\n\t$.fn.pagination.defaults.beforePageText = '第';\r\n\t$.fn.pagination.defaults.afterPageText = '共{pages}頁';\r\n\t$.fn.pagination.defaults.displayMsg = '顯示{from}到{to},共{total}記錄';\r\n}\r\nif ($.fn.datagrid){\r\n\t$.fn.datagrid.defaults.loadMsg = '正在處理，請稍待。。。';\r\n}\r\nif ($.fn.treegrid && $.fn.datagrid){\r\n\t$.fn.treegrid.defaults.loadMsg = $.fn.datagrid.defaults.loadMsg;\r\n}\r\nif ($.messager){\r\n\t$.messager.defaults.ok = '確定';\r\n\t$.messager.defaults.cancel = '取消';\r\n}\r\n$.map(['validatebox','textbox','filebox','searchbox',\r\n\t\t'combo','combobox','combogrid','combotree',\r\n\t\t'datebox','datetimebox','numberbox',\r\n\t\t'spinner','numberspinner','timespinner','datetimespinner'], function(plugin){\r\n\tif ($.fn[plugin]){\r\n\t\t$.fn[plugin].defaults.missingMessage = '該輸入項為必輸項';\r\n\t}\r\n});\r\nif ($.fn.validatebox){\r\n\t$.fn.validatebox.defaults.rules.email.message = '請輸入有效的電子郵件地址';\r\n\t$.fn.validatebox.defaults.rules.url.message = '請輸入有效的URL地址';\r\n\t$.fn.validatebox.defaults.rules.length.message = '輸入內容長度必須介於{0}和{1}之間';\r\n\t$.fn.validatebox.defaults.rules.remote.message = '請修正此欄位';\r\n}\r\nif ($.fn.calendar){\r\n\t$.fn.calendar.defaults.weeks = ['日','一','二','三','四','五','六'];\r\n\t$.fn.calendar.defaults.months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];\r\n}\r\nif ($.fn.datebox){\r\n\t$.fn.datebox.defaults.currentText = '今天';\r\n\t$.fn.datebox.defaults.closeText = '關閉';\r\n\t$.fn.datebox.defaults.okText = '確定';\r\n}\r\nif ($.fn.datetimebox && $.fn.datebox){\r\n\t$.extend($.fn.datetimebox.defaults,{\r\n\t\tcurrentText: $.fn.datebox.defaults.currentText,\r\n\t\tcloseText: $.fn.datebox.defaults.closeText,\r\n\t\tokText: $.fn.datebox.defaults.okText\r\n\t});\r\n}\r\nif ($.fn.datetimespinner){\r\n\t$.fn.datetimespinner.defaults.selections = [[0,4],[5,7],[8,10],[11,13],[14,16],[17,19]]\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.accordion.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"accordion\");\nvar _5=_4.options;\nvar _6=_4.panels;\nvar cc=$(_2);\nif(_3){\n$.extend(_5,{width:_3.width,height:_3.height});\n}\ncc._size(_5);\nvar _7=0;\nvar _8=\"auto\";\nvar _9=cc.find(\">div.panel>div.accordion-header\");\nif(_9.length){\n_7=$(_9[0]).css(\"height\",\"\")._outerHeight();\n}\nif(!isNaN(parseInt(_5.height))){\n_8=cc.height()-_7*_9.length;\n}\n_a(true,_8-_a(false)+1);\nfunction _a(_b,_c){\nvar _d=0;\nfor(var i=0;i<_6.length;i++){\nvar p=_6[i];\nvar h=p.panel(\"header\")._outerHeight(_7);\nif(p.panel(\"options\").collapsible==_b){\nvar _e=isNaN(_c)?undefined:(_c+_7*h.length);\np.panel(\"resize\",{width:cc.width(),height:(_b?_e:undefined)});\n_d+=p.panel(\"panel\").outerHeight()-_7*h.length;\n}\n}\nreturn _d;\n};\n};\nfunction _f(_10,_11,_12,all){\nvar _13=$.data(_10,\"accordion\").panels;\nvar pp=[];\nfor(var i=0;i<_13.length;i++){\nvar p=_13[i];\nif(_11){\nif(p.panel(\"options\")[_11]==_12){\npp.push(p);\n}\n}else{\nif(p[0]==$(_12)[0]){\nreturn i;\n}\n}\n}\nif(_11){\nreturn all?pp:(pp.length?pp[0]:null);\n}else{\nreturn -1;\n}\n};\nfunction _14(_15){\nreturn _f(_15,\"collapsed\",false,true);\n};\nfunction _16(_17){\nvar pp=_14(_17);\nreturn pp.length?pp[0]:null;\n};\nfunction _18(_19,_1a){\nreturn _f(_19,null,_1a);\n};\nfunction _1b(_1c,_1d){\nvar _1e=$.data(_1c,\"accordion\").panels;\nif(typeof _1d==\"number\"){\nif(_1d<0||_1d>=_1e.length){\nreturn null;\n}else{\nreturn _1e[_1d];\n}\n}\nreturn _f(_1c,\"title\",_1d);\n};\nfunction _1f(_20){\nvar _21=$.data(_20,\"accordion\").options;\nvar cc=$(_20);\nif(_21.border){\ncc.removeClass(\"accordion-noborder\");\n}else{\ncc.addClass(\"accordion-noborder\");\n}\n};\nfunction _22(_23){\nvar _24=$.data(_23,\"accordion\");\nvar cc=$(_23);\ncc.addClass(\"accordion\");\n_24.panels=[];\ncc.children(\"div\").each(function(){\nvar _25=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr(\"selected\")?true:undefined)});\nvar pp=$(this);\n_24.panels.push(pp);\n_27(_23,pp,_25);\n});\ncc.bind(\"_resize\",function(e,_26){\nif($(this).hasClass(\"easyui-fluid\")||_26){\n_1(_23);\n}\nreturn false;\n});\n};\nfunction _27(_28,pp,_29){\nvar _2a=$.data(_28,\"accordion\").options;\npp.panel($.extend({},{collapsible:true,minimizable:false,maximizable:false,closable:false,doSize:false,collapsed:true,headerCls:\"accordion-header\",bodyCls:\"accordion-body\"},_29,{onBeforeExpand:function(){\nif(_29.onBeforeExpand){\nif(_29.onBeforeExpand.call(this)==false){\nreturn false;\n}\n}\nif(!_2a.multiple){\nvar all=$.grep(_14(_28),function(p){\nreturn p.panel(\"options\").collapsible;\n});\nfor(var i=0;i<all.length;i++){\n_35(_28,_18(_28,all[i]));\n}\n}\nvar _2b=$(this).panel(\"header\");\n_2b.addClass(\"accordion-header-selected\");\n_2b.find(\".accordion-collapse\").removeClass(\"accordion-expand\");\n},onExpand:function(){\nif(_29.onExpand){\n_29.onExpand.call(this);\n}\n_2a.onSelect.call(_28,$(this).panel(\"options\").title,_18(_28,this));\n},onBeforeCollapse:function(){\nif(_29.onBeforeCollapse){\nif(_29.onBeforeCollapse.call(this)==false){\nreturn false;\n}\n}\nvar _2c=$(this).panel(\"header\");\n_2c.removeClass(\"accordion-header-selected\");\n_2c.find(\".accordion-collapse\").addClass(\"accordion-expand\");\n},onCollapse:function(){\nif(_29.onCollapse){\n_29.onCollapse.call(this);\n}\n_2a.onUnselect.call(_28,$(this).panel(\"options\").title,_18(_28,this));\n}}));\nvar _2d=pp.panel(\"header\");\nvar _2e=_2d.children(\"div.panel-tool\");\n_2e.children(\"a.panel-tool-collapse\").hide();\nvar t=$(\"<a href=\\\"javascript:void(0)\\\"></a>\").addClass(\"accordion-collapse accordion-expand\").appendTo(_2e);\nt.bind(\"click\",function(){\nvar _2f=_18(_28,pp);\nif(pp.panel(\"options\").collapsed){\n_30(_28,_2f);\n}else{\n_35(_28,_2f);\n}\nreturn false;\n});\npp.panel(\"options\").collapsible?t.show():t.hide();\n_2d.click(function(){\n$(this).find(\"a.accordion-collapse:visible\").triggerHandler(\"click\");\nreturn false;\n});\n};\nfunction _30(_31,_32){\nvar p=_1b(_31,_32);\nif(!p){\nreturn;\n}\n_33(_31);\nvar _34=$.data(_31,\"accordion\").options;\np.panel(\"expand\",_34.animate);\n};\nfunction _35(_36,_37){\nvar p=_1b(_36,_37);\nif(!p){\nreturn;\n}\n_33(_36);\nvar _38=$.data(_36,\"accordion\").options;\np.panel(\"collapse\",_38.animate);\n};\nfunction _39(_3a){\nvar _3b=$.data(_3a,\"accordion\").options;\nvar p=_f(_3a,\"selected\",true);\nif(p){\n_3c(_18(_3a,p));\n}else{\n_3c(_3b.selected);\n}\nfunction _3c(_3d){\nvar _3e=_3b.animate;\n_3b.animate=false;\n_30(_3a,_3d);\n_3b.animate=_3e;\n};\n};\nfunction _33(_3f){\nvar _40=$.data(_3f,\"accordion\").panels;\nfor(var i=0;i<_40.length;i++){\n_40[i].stop(true,true);\n}\n};\nfunction add(_41,_42){\nvar _43=$.data(_41,\"accordion\");\nvar _44=_43.options;\nvar _45=_43.panels;\nif(_42.selected==undefined){\n_42.selected=true;\n}\n_33(_41);\nvar pp=$(\"<div></div>\").appendTo(_41);\n_45.push(pp);\n_27(_41,pp,_42);\n_1(_41);\n_44.onAdd.call(_41,_42.title,_45.length-1);\nif(_42.selected){\n_30(_41,_45.length-1);\n}\n};\nfunction _46(_47,_48){\nvar _49=$.data(_47,\"accordion\");\nvar _4a=_49.options;\nvar _4b=_49.panels;\n_33(_47);\nvar _4c=_1b(_47,_48);\nvar _4d=_4c.panel(\"options\").title;\nvar _4e=_18(_47,_4c);\nif(!_4c){\nreturn;\n}\nif(_4a.onBeforeRemove.call(_47,_4d,_4e)==false){\nreturn;\n}\n_4b.splice(_4e,1);\n_4c.panel(\"destroy\");\nif(_4b.length){\n_1(_47);\nvar _4f=_16(_47);\nif(!_4f){\n_30(_47,0);\n}\n}\n_4a.onRemove.call(_47,_4d,_4e);\n};\n$.fn.accordion=function(_50,_51){\nif(typeof _50==\"string\"){\nreturn $.fn.accordion.methods[_50](this,_51);\n}\n_50=_50||{};\nreturn this.each(function(){\nvar _52=$.data(this,\"accordion\");\nif(_52){\n$.extend(_52.options,_50);\n}else{\n$.data(this,\"accordion\",{options:$.extend({},$.fn.accordion.defaults,$.fn.accordion.parseOptions(this),_50),accordion:$(this).addClass(\"accordion\"),panels:[]});\n_22(this);\n}\n_1f(this);\n_1(this);\n_39(this);\n});\n};\n$.fn.accordion.methods={options:function(jq){\nreturn $.data(jq[0],\"accordion\").options;\n},panels:function(jq){\nreturn $.data(jq[0],\"accordion\").panels;\n},resize:function(jq,_53){\nreturn jq.each(function(){\n_1(this,_53);\n});\n},getSelections:function(jq){\nreturn _14(jq[0]);\n},getSelected:function(jq){\nreturn _16(jq[0]);\n},getPanel:function(jq,_54){\nreturn _1b(jq[0],_54);\n},getPanelIndex:function(jq,_55){\nreturn _18(jq[0],_55);\n},select:function(jq,_56){\nreturn jq.each(function(){\n_30(this,_56);\n});\n},unselect:function(jq,_57){\nreturn jq.each(function(){\n_35(this,_57);\n});\n},add:function(jq,_58){\nreturn jq.each(function(){\nadd(this,_58);\n});\n},remove:function(jq,_59){\nreturn jq.each(function(){\n_46(this,_59);\n});\n}};\n$.fn.accordion.parseOptions=function(_5a){\nvar t=$(_5a);\nreturn $.extend({},$.parser.parseOptions(_5a,[\"width\",\"height\",{fit:\"boolean\",border:\"boolean\",animate:\"boolean\",multiple:\"boolean\",selected:\"number\"}]));\n};\n$.fn.accordion.defaults={width:\"auto\",height:\"auto\",fit:false,border:true,animate:true,multiple:false,selected:0,onSelect:function(_5b,_5c){\n},onUnselect:function(_5d,_5e){\n},onAdd:function(_5f,_60){\n},onBeforeRemove:function(_61,_62){\n},onRemove:function(_63,_64){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.calendar.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"calendar\").options;\nvar t=$(_2);\nif(_3){\n$.extend(_4,{width:_3.width,height:_3.height});\n}\nt._size(_4,t.parent());\nt.find(\".calendar-body\")._outerHeight(t.height()-t.find(\".calendar-header\")._outerHeight());\nif(t.find(\".calendar-menu\").is(\":visible\")){\n_5(_2);\n}\n};\nfunction _6(_7){\n$(_7).addClass(\"calendar\").html(\"<div class=\\\"calendar-header\\\">\"+\"<div class=\\\"calendar-nav calendar-prevmonth\\\"></div>\"+\"<div class=\\\"calendar-nav calendar-nextmonth\\\"></div>\"+\"<div class=\\\"calendar-nav calendar-prevyear\\\"></div>\"+\"<div class=\\\"calendar-nav calendar-nextyear\\\"></div>\"+\"<div class=\\\"calendar-title\\\">\"+\"<span class=\\\"calendar-text\\\"></span>\"+\"</div>\"+\"</div>\"+\"<div class=\\\"calendar-body\\\">\"+\"<div class=\\\"calendar-menu\\\">\"+\"<div class=\\\"calendar-menu-year-inner\\\">\"+\"<span class=\\\"calendar-nav calendar-menu-prev\\\"></span>\"+\"<span><input class=\\\"calendar-menu-year\\\" type=\\\"text\\\"></input></span>\"+\"<span class=\\\"calendar-nav calendar-menu-next\\\"></span>\"+\"</div>\"+\"<div class=\\\"calendar-menu-month-inner\\\">\"+\"</div>\"+\"</div>\"+\"</div>\");\n$(_7).bind(\"_resize\",function(e,_8){\nif($(this).hasClass(\"easyui-fluid\")||_8){\n_1(_7);\n}\nreturn false;\n});\n};\nfunction _9(_a){\nvar _b=$.data(_a,\"calendar\").options;\nvar _c=$(_a).find(\".calendar-menu\");\n_c.find(\".calendar-menu-year\").unbind(\".calendar\").bind(\"keypress.calendar\",function(e){\nif(e.keyCode==13){\n_d(true);\n}\n});\n$(_a).unbind(\".calendar\").bind(\"mouseover.calendar\",function(e){\nvar t=_e(e.target);\nif(t.hasClass(\"calendar-nav\")||t.hasClass(\"calendar-text\")||(t.hasClass(\"calendar-day\")&&!t.hasClass(\"calendar-disabled\"))){\nt.addClass(\"calendar-nav-hover\");\n}\n}).bind(\"mouseout.calendar\",function(e){\nvar t=_e(e.target);\nif(t.hasClass(\"calendar-nav\")||t.hasClass(\"calendar-text\")||(t.hasClass(\"calendar-day\")&&!t.hasClass(\"calendar-disabled\"))){\nt.removeClass(\"calendar-nav-hover\");\n}\n}).bind(\"click.calendar\",function(e){\nvar t=_e(e.target);\nif(t.hasClass(\"calendar-menu-next\")||t.hasClass(\"calendar-nextyear\")){\n_f(1);\n}else{\nif(t.hasClass(\"calendar-menu-prev\")||t.hasClass(\"calendar-prevyear\")){\n_f(-1);\n}else{\nif(t.hasClass(\"calendar-menu-month\")){\n_c.find(\".calendar-selected\").removeClass(\"calendar-selected\");\nt.addClass(\"calendar-selected\");\n_d(true);\n}else{\nif(t.hasClass(\"calendar-prevmonth\")){\n_10(-1);\n}else{\nif(t.hasClass(\"calendar-nextmonth\")){\n_10(1);\n}else{\nif(t.hasClass(\"calendar-text\")){\nif(_c.is(\":visible\")){\n_c.hide();\n}else{\n_5(_a);\n}\n}else{\nif(t.hasClass(\"calendar-day\")){\nif(t.hasClass(\"calendar-disabled\")){\nreturn;\n}\nvar _11=_b.current;\nt.closest(\"div.calendar-body\").find(\".calendar-selected\").removeClass(\"calendar-selected\");\nt.addClass(\"calendar-selected\");\nvar _12=t.attr(\"abbr\").split(\",\");\nvar y=parseInt(_12[0]);\nvar m=parseInt(_12[1]);\nvar d=parseInt(_12[2]);\n_b.current=new Date(y,m-1,d);\n_b.onSelect.call(_a,_b.current);\nif(!_11||_11.getTime()!=_b.current.getTime()){\n_b.onChange.call(_a,_b.current,_11);\n}\nif(_b.year!=y||_b.month!=m){\n_b.year=y;\n_b.month=m;\n_19(_a);\n}\n}\n}\n}\n}\n}\n}\n}\n});\nfunction _e(t){\nvar day=$(t).closest(\".calendar-day\");\nif(day.length){\nreturn day;\n}else{\nreturn $(t);\n}\n};\nfunction _d(_13){\nvar _14=$(_a).find(\".calendar-menu\");\nvar _15=_14.find(\".calendar-menu-year\").val();\nvar _16=_14.find(\".calendar-selected\").attr(\"abbr\");\nif(!isNaN(_15)){\n_b.year=parseInt(_15);\n_b.month=parseInt(_16);\n_19(_a);\n}\nif(_13){\n_14.hide();\n}\n};\nfunction _f(_17){\n_b.year+=_17;\n_19(_a);\n_c.find(\".calendar-menu-year\").val(_b.year);\n};\nfunction _10(_18){\n_b.month+=_18;\nif(_b.month>12){\n_b.year++;\n_b.month=1;\n}else{\nif(_b.month<1){\n_b.year--;\n_b.month=12;\n}\n}\n_19(_a);\n_c.find(\"td.calendar-selected\").removeClass(\"calendar-selected\");\n_c.find(\"td:eq(\"+(_b.month-1)+\")\").addClass(\"calendar-selected\");\n};\n};\nfunction _5(_1a){\nvar _1b=$.data(_1a,\"calendar\").options;\n$(_1a).find(\".calendar-menu\").show();\nif($(_1a).find(\".calendar-menu-month-inner\").is(\":empty\")){\n$(_1a).find(\".calendar-menu-month-inner\").empty();\nvar t=$(\"<table class=\\\"calendar-mtable\\\"></table>\").appendTo($(_1a).find(\".calendar-menu-month-inner\"));\nvar idx=0;\nfor(var i=0;i<3;i++){\nvar tr=$(\"<tr></tr>\").appendTo(t);\nfor(var j=0;j<4;j++){\n$(\"<td class=\\\"calendar-nav calendar-menu-month\\\"></td>\").html(_1b.months[idx++]).attr(\"abbr\",idx).appendTo(tr);\n}\n}\n}\nvar _1c=$(_1a).find(\".calendar-body\");\nvar _1d=$(_1a).find(\".calendar-menu\");\nvar _1e=_1d.find(\".calendar-menu-year-inner\");\nvar _1f=_1d.find(\".calendar-menu-month-inner\");\n_1e.find(\"input\").val(_1b.year).focus();\n_1f.find(\"td.calendar-selected\").removeClass(\"calendar-selected\");\n_1f.find(\"td:eq(\"+(_1b.month-1)+\")\").addClass(\"calendar-selected\");\n_1d._outerWidth(_1c._outerWidth());\n_1d._outerHeight(_1c._outerHeight());\n_1f._outerHeight(_1d.height()-_1e._outerHeight());\n};\nfunction _20(_21,_22,_23){\nvar _24=$.data(_21,\"calendar\").options;\nvar _25=[];\nvar _26=new Date(_22,_23,0).getDate();\nfor(var i=1;i<=_26;i++){\n_25.push([_22,_23,i]);\n}\nvar _27=[],_28=[];\nvar _29=-1;\nwhile(_25.length>0){\nvar _2a=_25.shift();\n_28.push(_2a);\nvar day=new Date(_2a[0],_2a[1]-1,_2a[2]).getDay();\nif(_29==day){\nday=0;\n}else{\nif(day==(_24.firstDay==0?7:_24.firstDay)-1){\n_27.push(_28);\n_28=[];\n}\n}\n_29=day;\n}\nif(_28.length){\n_27.push(_28);\n}\nvar _2b=_27[0];\nif(_2b.length<7){\nwhile(_2b.length<7){\nvar _2c=_2b[0];\nvar _2a=new Date(_2c[0],_2c[1]-1,_2c[2]-1);\n_2b.unshift([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);\n}\n}else{\nvar _2c=_2b[0];\nvar _28=[];\nfor(var i=1;i<=7;i++){\nvar _2a=new Date(_2c[0],_2c[1]-1,_2c[2]-i);\n_28.unshift([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);\n}\n_27.unshift(_28);\n}\nvar _2d=_27[_27.length-1];\nwhile(_2d.length<7){\nvar _2e=_2d[_2d.length-1];\nvar _2a=new Date(_2e[0],_2e[1]-1,_2e[2]+1);\n_2d.push([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);\n}\nif(_27.length<6){\nvar _2e=_2d[_2d.length-1];\nvar _28=[];\nfor(var i=1;i<=7;i++){\nvar _2a=new Date(_2e[0],_2e[1]-1,_2e[2]+i);\n_28.push([_2a.getFullYear(),_2a.getMonth()+1,_2a.getDate()]);\n}\n_27.push(_28);\n}\nreturn _27;\n};\nfunction _19(_2f){\nvar _30=$.data(_2f,\"calendar\").options;\nif(_30.current&&!_30.validator.call(_2f,_30.current)){\n_30.current=null;\n}\nvar now=new Date();\nvar _31=now.getFullYear()+\",\"+(now.getMonth()+1)+\",\"+now.getDate();\nvar _32=_30.current?(_30.current.getFullYear()+\",\"+(_30.current.getMonth()+1)+\",\"+_30.current.getDate()):\"\";\nvar _33=6-_30.firstDay;\nvar _34=_33+1;\nif(_33>=7){\n_33-=7;\n}\nif(_34>=7){\n_34-=7;\n}\n$(_2f).find(\".calendar-title span\").html(_30.months[_30.month-1]+\" \"+_30.year);\nvar _35=$(_2f).find(\"div.calendar-body\");\n_35.children(\"table\").remove();\nvar _36=[\"<table class=\\\"calendar-dtable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\">\"];\n_36.push(\"<thead><tr>\");\nfor(var i=_30.firstDay;i<_30.weeks.length;i++){\n_36.push(\"<th>\"+_30.weeks[i]+\"</th>\");\n}\nfor(var i=0;i<_30.firstDay;i++){\n_36.push(\"<th>\"+_30.weeks[i]+\"</th>\");\n}\n_36.push(\"</tr></thead>\");\n_36.push(\"<tbody>\");\nvar _37=_20(_2f,_30.year,_30.month);\nfor(var i=0;i<_37.length;i++){\nvar _38=_37[i];\nvar cls=\"\";\nif(i==0){\ncls=\"calendar-first\";\n}else{\nif(i==_37.length-1){\ncls=\"calendar-last\";\n}\n}\n_36.push(\"<tr class=\\\"\"+cls+\"\\\">\");\nfor(var j=0;j<_38.length;j++){\nvar day=_38[j];\nvar s=day[0]+\",\"+day[1]+\",\"+day[2];\nvar _39=new Date(day[0],parseInt(day[1])-1,day[2]);\nvar d=_30.formatter.call(_2f,_39);\nvar css=_30.styler.call(_2f,_39);\nvar _3a=\"\";\nvar _3b=\"\";\nif(typeof css==\"string\"){\n_3b=css;\n}else{\nif(css){\n_3a=css[\"class\"]||\"\";\n_3b=css[\"style\"]||\"\";\n}\n}\nvar cls=\"calendar-day\";\nif(!(_30.year==day[0]&&_30.month==day[1])){\ncls+=\" calendar-other-month\";\n}\nif(s==_31){\ncls+=\" calendar-today\";\n}\nif(s==_32){\ncls+=\" calendar-selected\";\n}\nif(j==_33){\ncls+=\" calendar-saturday\";\n}else{\nif(j==_34){\ncls+=\" calendar-sunday\";\n}\n}\nif(j==0){\ncls+=\" calendar-first\";\n}else{\nif(j==_38.length-1){\ncls+=\" calendar-last\";\n}\n}\ncls+=\" \"+_3a;\nif(!_30.validator.call(_2f,_39)){\ncls+=\" calendar-disabled\";\n}\n_36.push(\"<td class=\\\"\"+cls+\"\\\" abbr=\\\"\"+s+\"\\\" style=\\\"\"+_3b+\"\\\">\"+d+\"</td>\");\n}\n_36.push(\"</tr>\");\n}\n_36.push(\"</tbody>\");\n_36.push(\"</table>\");\n_35.append(_36.join(\"\"));\n_35.children(\"table.calendar-dtable\").prependTo(_35);\n_30.onNavigate.call(_2f,_30.year,_30.month);\n};\n$.fn.calendar=function(_3c,_3d){\nif(typeof _3c==\"string\"){\nreturn $.fn.calendar.methods[_3c](this,_3d);\n}\n_3c=_3c||{};\nreturn this.each(function(){\nvar _3e=$.data(this,\"calendar\");\nif(_3e){\n$.extend(_3e.options,_3c);\n}else{\n_3e=$.data(this,\"calendar\",{options:$.extend({},$.fn.calendar.defaults,$.fn.calendar.parseOptions(this),_3c)});\n_6(this);\n}\nif(_3e.options.border==false){\n$(this).addClass(\"calendar-noborder\");\n}\n_1(this);\n_9(this);\n_19(this);\n$(this).find(\"div.calendar-menu\").hide();\n});\n};\n$.fn.calendar.methods={options:function(jq){\nreturn $.data(jq[0],\"calendar\").options;\n},resize:function(jq,_3f){\nreturn jq.each(function(){\n_1(this,_3f);\n});\n},moveTo:function(jq,_40){\nreturn jq.each(function(){\nvar _41=$(this).calendar(\"options\");\nif(_41.validator.call(this,_40)){\nvar _42=_41.current;\n$(this).calendar({year:_40.getFullYear(),month:_40.getMonth()+1,current:_40});\nif(!_42||_42.getTime()!=_40.getTime()){\n_41.onChange.call(this,_41.current,_42);\n}\n}\n});\n}};\n$.fn.calendar.parseOptions=function(_43){\nvar t=$(_43);\nreturn $.extend({},$.parser.parseOptions(_43,[{firstDay:\"number\",fit:\"boolean\",border:\"boolean\"}]));\n};\n$.fn.calendar.defaults={width:180,height:180,fit:false,border:true,firstDay:0,weeks:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],months:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],year:new Date().getFullYear(),month:new Date().getMonth()+1,current:(function(){\nvar d=new Date();\nreturn new Date(d.getFullYear(),d.getMonth(),d.getDate());\n})(),formatter:function(_44){\nreturn _44.getDate();\n},styler:function(_45){\nreturn \"\";\n},validator:function(_46){\nreturn true;\n},onSelect:function(_47){\n},onChange:function(_48,_49){\n},onNavigate:function(_4a,_4b){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.combo.js",
    "content": "/**\n * jQuery EasyUI 1.4.1\n * \n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\n * To use it on other terms please contact us at info@jeasyui.com\n *\n */\n(function($){\n$(function(){\n$(document).unbind(\".combo\").bind(\"mousedown.combo mousewheel.combo\",function(e){\nvar p=$(e.target).closest(\"span.combo,div.combo-p\");\nif(p.length){\n_1(p);\nreturn;\n}\n$(\"body>div.combo-p>div.combo-panel:visible\").panel(\"close\");\n});\n});\nfunction _2(_3){\nvar _4=$.data(_3,\"combo\");\nvar _5=_4.options;\nif(!_4.panel){\n_4.panel=$(\"<div class=\\\"combo-panel\\\"></div>\").appendTo(\"body\");\n_4.panel.panel({minWidth:_5.panelMinWidth,maxWidth:_5.panelMaxWidth,minHeight:_5.panelMinHeight,maxHeight:_5.panelMaxHeight,doSize:false,closed:true,cls:\"combo-p\",style:{position:\"absolute\",zIndex:10},onOpen:function(){\nvar _6=$(this).panel(\"options\").comboTarget;\nvar _7=$.data(_6,\"combo\");\nif(_7){\n_7.options.onShowPanel.call(_6);\n}\n},onBeforeClose:function(){\n_1(this);\n},onClose:function(){\nvar _8=$(this).panel(\"options\").comboTarget;\nvar _9=$.data(_8,\"combo\");\nif(_9){\n_9.options.onHidePanel.call(_8);\n}\n}});\n}\nvar _a=$.extend(true,[],_5.icons);\nif(_5.hasDownArrow){\n_a.push({iconCls:\"combo-arrow\",handler:function(e){\n_f(e.data.target);\n}});\n}\n$(_3).addClass(\"combo-f\").textbox($.extend({},_5,{icons:_a,onChange:function(){\n}}));\n$(_3).attr(\"comboName\",$(_3).attr(\"textboxName\"));\n_4.combo=$(_3).next();\n_4.combo.addClass(\"combo\");\n};\nfunction _b(_c){\nvar _d=$.data(_c,\"combo\");\nvar _e=_d.options;\nvar p=_d.panel;\nif(p.is(\":visible\")){\np.panel(\"close\");\n}\nif(!_e.cloned){\np.panel(\"destroy\");\n}\n$(_c).textbox(\"destroy\");\n};\nfunction _f(_10){\nvar _11=$.data(_10,\"combo\").panel;\nif(_11.is(\":visible\")){\n_12(_10);\n}else{\nvar p=$(_10).closest(\"div.combo-panel\");\n$(\"div.combo-panel:visible\").not(_11).not(p).panel(\"close\");\n$(_10).combo(\"showPanel\");\n}\n$(_10).combo(\"textbox\").focus();\n};\nfunction _1(_13){\n$(_13).find(\".combo-f\").each(function(){\nvar p=$(this).combo(\"panel\");\nif(p.is(\":visible\")){\np.panel(\"close\");\n}\n});\n};\nfunction _14(e){\nvar _15=e.data.target;\nvar _16=$.data(_15,\"combo\");\nvar _17=_16.options;\nvar _18=_16.panel;\nif(!_17.editable){\n_f(_15);\n}else{\nvar p=$(_15).closest(\"div.combo-panel\");\n$(\"div.combo-panel:visible\").not(_18).not(p).panel(\"close\");\n}\n};\nfunction _19(e){\nvar _1a=e.data.target;\nvar t=$(_1a);\nvar _1b=t.data(\"combo\");\nvar _1c=t.combo(\"options\");\nswitch(e.keyCode){\ncase 38:\n_1c.keyHandler.up.call(_1a,e);\nbreak;\ncase 40:\n_1c.keyHandler.down.call(_1a,e);\nbreak;\ncase 37:\n_1c.keyHandler.left.call(_1a,e);\nbreak;\ncase 39:\n_1c.keyHandler.right.call(_1a,e);\nbreak;\ncase 13:\ne.preventDefault();\n_1c.keyHandler.enter.call(_1a,e);\nreturn false;\ncase 9:\ncase 27:\n_12(_1a);\nbreak;\ndefault:\nif(_1c.editable){\nif(_1b.timer){\nclearTimeout(_1b.timer);\n}\n_1b.timer=setTimeout(function(){\nvar q=t.combo(\"getText\");\nif(_1b.previousText!=q){\n_1b.previousText=q;\nt.combo(\"showPanel\");\n_1c.keyHandler.query.call(_1a,q,e);\nt.combo(\"validate\");\n}\n},_1c.delay);\n}\n}\n};\nfunction _1d(_1e){\nvar _1f=$.data(_1e,\"combo\");\nvar _20=_1f.combo;\nvar _21=_1f.panel;\nvar _22=$(_1e).combo(\"options\");\nvar _23=_21.panel(\"options\");\n_23.comboTarget=_1e;\nif(_23.closed){\n_21.panel(\"panel\").show().css({zIndex:($.fn.menu?$.fn.menu.defaults.zIndex++:$.fn.window.defaults.zIndex++),left:-999999});\n_21.panel(\"resize\",{width:(_22.panelWidth?_22.panelWidth:_20._outerWidth()),height:_22.panelHeight});\n_21.panel(\"panel\").hide();\n_21.panel(\"open\");\n}\n(function(){\nif(_21.is(\":visible\")){\n_21.panel(\"move\",{left:_24(),top:_25()});\nsetTimeout(arguments.callee,200);\n}\n})();\nfunction _24(){\nvar _26=_20.offset().left;\nif(_22.panelAlign==\"right\"){\n_26+=_20._outerWidth()-_21._outerWidth();\n}\nif(_26+_21._outerWidth()>$(window)._outerWidth()+$(document).scrollLeft()){\n_26=$(window)._outerWidth()+$(document).scrollLeft()-_21._outerWidth();\n}\nif(_26<0){\n_26=0;\n}\nreturn _26;\n};\nfunction _25(){\nvar top=_20.offset().top+_20._outerHeight();\nif(top+_21._outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){\ntop=_20.offset().top-_21._outerHeight();\n}\nif(top<$(document).scrollTop()){\ntop=_20.offset().top+_20._outerHeight();\n}\nreturn top;\n};\n};\nfunction _12(_27){\nvar _28=$.data(_27,\"combo\").panel;\n_28.panel(\"close\");\n};\nfunction _29(_2a){\nvar _2b=$.data(_2a,\"combo\");\nvar _2c=_2b.options;\nvar _2d=_2b.combo;\n$(_2a).textbox(\"clear\");\nif(_2c.multiple){\n_2d.find(\".textbox-value\").remove();\n}else{\n_2d.find(\".textbox-value\").val(\"\");\n}\n};\nfunction _2e(_2f,_30){\nvar _31=$.data(_2f,\"combo\");\nvar _32=$(_2f).textbox(\"getText\");\nif(_32!=_30){\n$(_2f).textbox(\"setText\",_30);\n_31.previousText=_30;\n}\n};\nfunction _33(_34){\nvar _35=[];\nvar _36=$.data(_34,\"combo\").combo;\n_36.find(\".textbox-value\").each(function(){\n_35.push($(this).val());\n});\nreturn _35;\n};\nfunction _37(_38,_39){\nvar _3a=$.data(_38,\"combo\");\nvar _3b=_3a.options;\nvar _3c=_3a.combo;\nif(!$.isArray(_39)){\n_39=_39.split(_3b.separator);\n}\nvar _3d=_33(_38);\n_3c.find(\".textbox-value\").remove();\nvar _3e=$(_38).attr(\"textboxName\")||\"\";\nfor(var i=0;i<_39.length;i++){\nvar _3f=$(\"<input type=\\\"hidden\\\" class=\\\"textbox-value\\\">\").appendTo(_3c);\n_3f.attr(\"name\",_3e);\nif(_3b.disabled){\n_3f.attr(\"disabled\",\"disabled\");\n}\n_3f.val(_39[i]);\n}\nvar _40=(function(){\nif(_3d.length!=_39.length){\nreturn true;\n}\nvar a1=$.extend(true,[],_3d);\nvar a2=$.extend(true,[],_39);\na1.sort();\na2.sort();\nfor(var i=0;i<a1.length;i++){\nif(a1[i]!=a2[i]){\nreturn true;\n}\n}\nreturn false;\n})();\nif(_40){\nif(_3b.multiple){\n_3b.onChange.call(_38,_39,_3d);\n}else{\n_3b.onChange.call(_38,_39[0],_3d[0]);\n}\n}\n};\nfunction _41(_42){\nvar _43=_33(_42);\nreturn _43[0];\n};\nfunction _44(_45,_46){\n_37(_45,[_46]);\n};\nfunction _47(_48){\nvar _49=$.data(_48,\"combo\").options;\nvar _4a=_49.onChange;\n_49.onChange=function(){\n};\nif(_49.multiple){\n_37(_48,_49.value?_49.value:[]);\n}else{\n_44(_48,_49.value);\n}\n_49.onChange=_4a;\n};\n$.fn.combo=function(_4b,_4c){\nif(typeof _4b==\"string\"){\nvar _4d=$.fn.combo.methods[_4b];\nif(_4d){\nreturn _4d(this,_4c);\n}else{\nreturn this.textbox(_4b,_4c);\n}\n}\n_4b=_4b||{};\nreturn this.each(function(){\nvar _4e=$.data(this,\"combo\");\nif(_4e){\n$.extend(_4e.options,_4b);\nif(_4b.value!=undefined){\n_4e.options.originalValue=_4b.value;\n}\n}else{\n_4e=$.data(this,\"combo\",{options:$.extend({},$.fn.combo.defaults,$.fn.combo.parseOptions(this),_4b),previousText:\"\"});\n_4e.options.originalValue=_4e.options.value;\n}\n_2(this);\n_47(this);\n});\n};\n$.fn.combo.methods={options:function(jq){\nvar _4f=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"combo\").options,{width:_4f.width,height:_4f.height,disabled:_4f.disabled,readonly:_4f.readonly});\n},cloneFrom:function(jq,_50){\nreturn jq.each(function(){\n$(this).textbox(\"cloneFrom\",_50);\n$.data(this,\"combo\",{options:$.extend(true,{cloned:true},$(_50).combo(\"options\")),combo:$(this).next(),panel:$(_50).combo(\"panel\")});\n$(this).addClass(\"combo-f\").attr(\"comboName\",$(this).attr(\"textboxName\"));\n});\n},panel:function(jq){\nreturn $.data(jq[0],\"combo\").panel;\n},destroy:function(jq){\nreturn jq.each(function(){\n_b(this);\n});\n},showPanel:function(jq){\nreturn jq.each(function(){\n_1d(this);\n});\n},hidePanel:function(jq){\nreturn jq.each(function(){\n_12(this);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_29(this);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _51=$.data(this,\"combo\").options;\nif(_51.multiple){\n$(this).combo(\"setValues\",_51.originalValue);\n}else{\n$(this).combo(\"setValue\",_51.originalValue);\n}\n});\n},setText:function(jq,_52){\nreturn jq.each(function(){\n_2e(this,_52);\n});\n},getValues:function(jq){\nreturn _33(jq[0]);\n},setValues:function(jq,_53){\nreturn jq.each(function(){\n_37(this,_53);\n});\n},getValue:function(jq){\nreturn _41(jq[0]);\n},setValue:function(jq,_54){\nreturn jq.each(function(){\n_44(this,_54);\n});\n}};\n$.fn.combo.parseOptions=function(_55){\nvar t=$(_55);\nreturn $.extend({},$.fn.textbox.parseOptions(_55),$.parser.parseOptions(_55,[\"separator\",\"panelAlign\",{panelWidth:\"number\",hasDownArrow:\"boolean\",delay:\"number\",selectOnNavigation:\"boolean\"},{panelMinWidth:\"number\",panelMaxWidth:\"number\",panelMinHeight:\"number\",panelMaxHeight:\"number\"}]),{panelHeight:(t.attr(\"panelHeight\")==\"auto\"?\"auto\":parseInt(t.attr(\"panelHeight\"))||undefined),multiple:(t.attr(\"multiple\")?true:undefined)});\n};\n$.fn.combo.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{click:_14,keydown:_19,paste:_19,drop:_19},panelWidth:null,panelHeight:200,panelMinWidth:null,panelMaxWidth:null,panelMinHeight:null,panelMaxHeight:null,panelAlign:\"left\",multiple:false,selectOnNavigation:true,separator:\",\",hasDownArrow:true,delay:200,keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n},query:function(q,e){\n}},onShowPanel:function(){\n},onHidePanel:function(){\n},onChange:function(_56,_57){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.combobox.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nvar _1=0;\nfunction _2(_3,_4){\nvar _5=$.data(_3,\"combobox\");\nvar _6=_5.options;\nvar _7=_5.data;\nfor(var i=0;i<_7.length;i++){\nif(_7[i][_6.valueField]==_4){\nreturn i;\n}\n}\nreturn -1;\n};\nfunction _8(_9,_a){\nvar _b=$.data(_9,\"combobox\").options;\nvar _c=$(_9).combo(\"panel\");\nvar _d=_b.finder.getEl(_9,_a);\nif(_d.length){\nif(_d.position().top<=0){\nvar h=_c.scrollTop()+_d.position().top;\n_c.scrollTop(h);\n}else{\nif(_d.position().top+_d.outerHeight()>_c.height()){\nvar h=_c.scrollTop()+_d.position().top+_d.outerHeight()-_c.height();\n_c.scrollTop(h);\n}\n}\n}\n};\nfunction _e(_f,dir){\nvar _10=$.data(_f,\"combobox\").options;\nvar _11=$(_f).combobox(\"panel\");\nvar _12=_11.children(\"div.combobox-item-hover\");\nif(!_12.length){\n_12=_11.children(\"div.combobox-item-selected\");\n}\n_12.removeClass(\"combobox-item-hover\");\nvar _13=\"div.combobox-item:visible:not(.combobox-item-disabled):first\";\nvar _14=\"div.combobox-item:visible:not(.combobox-item-disabled):last\";\nif(!_12.length){\n_12=_11.children(dir==\"next\"?_13:_14);\n}else{\nif(dir==\"next\"){\n_12=_12.nextAll(_13);\nif(!_12.length){\n_12=_11.children(_13);\n}\n}else{\n_12=_12.prevAll(_13);\nif(!_12.length){\n_12=_11.children(_14);\n}\n}\n}\nif(_12.length){\n_12.addClass(\"combobox-item-hover\");\nvar row=_10.finder.getRow(_f,_12);\nif(row){\n_8(_f,row[_10.valueField]);\nif(_10.selectOnNavigation){\n_15(_f,row[_10.valueField]);\n}\n}\n}\n};\nfunction _15(_16,_17){\nvar _18=$.data(_16,\"combobox\").options;\nvar _19=$(_16).combo(\"getValues\");\nif($.inArray(_17+\"\",_19)==-1){\nif(_18.multiple){\n_19.push(_17);\n}else{\n_19=[_17];\n}\n_1a(_16,_19);\n_18.onSelect.call(_16,_18.finder.getRow(_16,_17));\n}\n};\nfunction _1b(_1c,_1d){\nvar _1e=$.data(_1c,\"combobox\").options;\nvar _1f=$(_1c).combo(\"getValues\");\nvar _20=$.inArray(_1d+\"\",_1f);\nif(_20>=0){\n_1f.splice(_20,1);\n_1a(_1c,_1f);\n_1e.onUnselect.call(_1c,_1e.finder.getRow(_1c,_1d));\n}\n};\nfunction _1a(_21,_22,_23){\nvar _24=$.data(_21,\"combobox\").options;\nvar _25=$(_21).combo(\"panel\");\nif(!$.isArray(_22)){\n_22=_22.split(_24.separator);\n}\n_25.find(\"div.combobox-item-selected\").removeClass(\"combobox-item-selected\");\nvar vv=[],ss=[];\nfor(var i=0;i<_22.length;i++){\nvar v=_22[i];\nvar s=v;\n_24.finder.getEl(_21,v).addClass(\"combobox-item-selected\");\nvar row=_24.finder.getRow(_21,v);\nif(row){\ns=row[_24.textField];\n}\nvv.push(v);\nss.push(s);\n}\n$(_21).combo(\"setValues\",vv);\nif(!_23){\n$(_21).combo(\"setText\",ss.join(_24.separator));\n}\n};\nfunction _26(_27,_28,_29){\nvar _2a=$.data(_27,\"combobox\");\nvar _2b=_2a.options;\n_2a.data=_2b.loadFilter.call(_27,_28);\n_2a.groups=[];\n_28=_2a.data;\nvar _2c=$(_27).combobox(\"getValues\");\nvar dd=[];\nvar _2d=undefined;\nfor(var i=0;i<_28.length;i++){\nvar row=_28[i];\nvar v=row[_2b.valueField]+\"\";\nvar s=row[_2b.textField];\nvar g=row[_2b.groupField];\nif(g){\nif(_2d!=g){\n_2d=g;\n_2a.groups.push(g);\ndd.push(\"<div id=\\\"\"+(_2a.groupIdPrefix+\"_\"+(_2a.groups.length-1))+\"\\\" class=\\\"combobox-group\\\">\");\ndd.push(_2b.groupFormatter?_2b.groupFormatter.call(_27,g):g);\ndd.push(\"</div>\");\n}\n}else{\n_2d=undefined;\n}\nvar cls=\"combobox-item\"+(row.disabled?\" combobox-item-disabled\":\"\")+(g?\" combobox-gitem\":\"\");\ndd.push(\"<div id=\\\"\"+(_2a.itemIdPrefix+\"_\"+i)+\"\\\" class=\\\"\"+cls+\"\\\">\");\ndd.push(_2b.formatter?_2b.formatter.call(_27,row):s);\ndd.push(\"</div>\");\nif(row[\"selected\"]&&$.inArray(v,_2c)==-1){\n_2c.push(v);\n}\n}\n$(_27).combo(\"panel\").html(dd.join(\"\"));\nif(_2b.multiple){\n_1a(_27,_2c,_29);\n}else{\n_1a(_27,_2c.length?[_2c[_2c.length-1]]:[],_29);\n}\n_2b.onLoadSuccess.call(_27,_28);\n};\nfunction _2e(_2f,url,_30,_31){\nvar _32=$.data(_2f,\"combobox\").options;\nif(url){\n_32.url=url;\n}\n_30=_30||{};\nif(_32.onBeforeLoad.call(_2f,_30)==false){\nreturn;\n}\n_32.loader.call(_2f,_30,function(_33){\n_26(_2f,_33,_31);\n},function(){\n_32.onLoadError.apply(this,arguments);\n});\n};\nfunction _34(_35,q){\nvar _36=$.data(_35,\"combobox\");\nvar _37=_36.options;\nif(_37.multiple&&!q){\n_1a(_35,[],true);\n}else{\n_1a(_35,[q],true);\n}\nif(_37.mode==\"remote\"){\n_2e(_35,null,{q:q},true);\n}else{\nvar _38=$(_35).combo(\"panel\");\n_38.find(\"div.combobox-item-selected,div.combobox-item-hover\").removeClass(\"combobox-item-selected combobox-item-hover\");\n_38.find(\"div.combobox-item,div.combobox-group\").hide();\nvar _39=_36.data;\nvar vv=[];\nvar qq=_37.multiple?q.split(_37.separator):[q];\n$.map(qq,function(q){\nq=$.trim(q);\nvar _3a=undefined;\nfor(var i=0;i<_39.length;i++){\nvar row=_39[i];\nif(_37.filter.call(_35,q,row)){\nvar v=row[_37.valueField];\nvar s=row[_37.textField];\nvar g=row[_37.groupField];\nvar _3b=_37.finder.getEl(_35,v).show();\nif(s.toLowerCase()==q.toLowerCase()){\nvv.push(v);\n_3b.addClass(\"combobox-item-selected\");\n}\nif(_37.groupField&&_3a!=g){\n$(\"#\"+_36.groupIdPrefix+\"_\"+$.inArray(g,_36.groups)).show();\n_3a=g;\n}\n}\n}\n});\n_1a(_35,vv,true);\n}\n};\nfunction _3c(_3d){\nvar t=$(_3d);\nvar _3e=t.combobox(\"options\");\nvar _3f=t.combobox(\"panel\");\nvar _40=_3f.children(\"div.combobox-item-hover\");\nif(_40.length){\nvar row=_3e.finder.getRow(_3d,_40);\nvar _41=row[_3e.valueField];\nif(_3e.multiple){\nif(_40.hasClass(\"combobox-item-selected\")){\nt.combobox(\"unselect\",_41);\n}else{\nt.combobox(\"select\",_41);\n}\n}else{\nt.combobox(\"select\",_41);\n}\n}\nvar vv=[];\n$.map(t.combobox(\"getValues\"),function(v){\nif(_2(_3d,v)>=0){\nvv.push(v);\n}\n});\nt.combobox(\"setValues\",vv);\nif(!_3e.multiple){\nt.combobox(\"hidePanel\");\n}\n};\nfunction _42(_43){\nvar _44=$.data(_43,\"combobox\");\nvar _45=_44.options;\n_1++;\n_44.itemIdPrefix=\"_easyui_combobox_i\"+_1;\n_44.groupIdPrefix=\"_easyui_combobox_g\"+_1;\n$(_43).addClass(\"combobox-f\");\n$(_43).combo($.extend({},_45,{onShowPanel:function(){\n$(_43).combo(\"panel\").find(\"div.combobox-item,div.combobox-group\").show();\n_8(_43,$(_43).combobox(\"getValue\"));\n_45.onShowPanel.call(_43);\n}}));\n$(_43).combo(\"panel\").unbind().bind(\"mouseover\",function(e){\n$(this).children(\"div.combobox-item-hover\").removeClass(\"combobox-item-hover\");\nvar _46=$(e.target).closest(\"div.combobox-item\");\nif(!_46.hasClass(\"combobox-item-disabled\")){\n_46.addClass(\"combobox-item-hover\");\n}\ne.stopPropagation();\n}).bind(\"mouseout\",function(e){\n$(e.target).closest(\"div.combobox-item\").removeClass(\"combobox-item-hover\");\ne.stopPropagation();\n}).bind(\"click\",function(e){\nvar _47=$(e.target).closest(\"div.combobox-item\");\nif(!_47.length||_47.hasClass(\"combobox-item-disabled\")){\nreturn;\n}\nvar row=_45.finder.getRow(_43,_47);\nif(!row){\nreturn;\n}\nvar _48=row[_45.valueField];\nif(_45.multiple){\nif(_47.hasClass(\"combobox-item-selected\")){\n_1b(_43,_48);\n}else{\n_15(_43,_48);\n}\n}else{\n_15(_43,_48);\n$(_43).combo(\"hidePanel\");\n}\ne.stopPropagation();\n});\n};\n$.fn.combobox=function(_49,_4a){\nif(typeof _49==\"string\"){\nvar _4b=$.fn.combobox.methods[_49];\nif(_4b){\nreturn _4b(this,_4a);\n}else{\nreturn this.combo(_49,_4a);\n}\n}\n_49=_49||{};\nreturn this.each(function(){\nvar _4c=$.data(this,\"combobox\");\nif(_4c){\n$.extend(_4c.options,_49);\n_42(this);\n}else{\n_4c=$.data(this,\"combobox\",{options:$.extend({},$.fn.combobox.defaults,$.fn.combobox.parseOptions(this),_49),data:[]});\n_42(this);\nvar _4d=$.fn.combobox.parseData(this);\nif(_4d.length){\n_26(this,_4d);\n}\n}\nif(_4c.options.data){\n_26(this,_4c.options.data);\n}\n_2e(this);\n});\n};\n$.fn.combobox.methods={options:function(jq){\nvar _4e=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combobox\").options,{width:_4e.width,height:_4e.height,originalValue:_4e.originalValue,disabled:_4e.disabled,readonly:_4e.readonly});\n},getData:function(jq){\nreturn $.data(jq[0],\"combobox\").data;\n},setValues:function(jq,_4f){\nreturn jq.each(function(){\n_1a(this,_4f);\n});\n},setValue:function(jq,_50){\nreturn jq.each(function(){\n_1a(this,[_50]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).combo(\"clear\");\nvar _51=$(this).combo(\"panel\");\n_51.find(\"div.combobox-item-selected\").removeClass(\"combobox-item-selected\");\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _52=$(this).combobox(\"options\");\nif(_52.multiple){\n$(this).combobox(\"setValues\",_52.originalValue);\n}else{\n$(this).combobox(\"setValue\",_52.originalValue);\n}\n});\n},loadData:function(jq,_53){\nreturn jq.each(function(){\n_26(this,_53);\n});\n},reload:function(jq,url){\nreturn jq.each(function(){\n_2e(this,url);\n});\n},select:function(jq,_54){\nreturn jq.each(function(){\n_15(this,_54);\n});\n},unselect:function(jq,_55){\nreturn jq.each(function(){\n_1b(this,_55);\n});\n}};\n$.fn.combobox.parseOptions=function(_56){\nvar t=$(_56);\nreturn $.extend({},$.fn.combo.parseOptions(_56),$.parser.parseOptions(_56,[\"valueField\",\"textField\",\"groupField\",\"mode\",\"method\",\"url\"]));\n};\n$.fn.combobox.parseData=function(_57){\nvar _58=[];\nvar _59=$(_57).combobox(\"options\");\n$(_57).children().each(function(){\nif(this.tagName.toLowerCase()==\"optgroup\"){\nvar _5a=$(this).attr(\"label\");\n$(this).children().each(function(){\n_5b(this,_5a);\n});\n}else{\n_5b(this);\n}\n});\nreturn _58;\nfunction _5b(el,_5c){\nvar t=$(el);\nvar row={};\nrow[_59.valueField]=t.attr(\"value\")!=undefined?t.attr(\"value\"):t.text();\nrow[_59.textField]=t.text();\nrow[\"selected\"]=t.is(\":selected\");\nrow[\"disabled\"]=t.is(\":disabled\");\nif(_5c){\n_59.groupField=_59.groupField||\"group\";\nrow[_59.groupField]=_5c;\n}\n_58.push(row);\n};\n};\n$.fn.combobox.defaults=$.extend({},$.fn.combo.defaults,{valueField:\"value\",textField:\"text\",groupField:null,groupFormatter:function(_5d){\nreturn _5d;\n},mode:\"local\",method:\"post\",url:null,data:null,keyHandler:{up:function(e){\n_e(this,\"prev\");\ne.preventDefault();\n},down:function(e){\n_e(this,\"next\");\ne.preventDefault();\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_3c(this);\n},query:function(q,e){\n_34(this,q);\n}},filter:function(q,row){\nvar _5e=$(this).combobox(\"options\");\nreturn row[_5e.textField].toLowerCase().indexOf(q.toLowerCase())==0;\n},formatter:function(row){\nvar _5f=$(this).combobox(\"options\");\nreturn row[_5f.textField];\n},loader:function(_60,_61,_62){\nvar _63=$(this).combobox(\"options\");\nif(!_63.url){\nreturn false;\n}\n$.ajax({type:_63.method,url:_63.url,data:_60,dataType:\"json\",success:function(_64){\n_61(_64);\n},error:function(){\n_62.apply(this,arguments);\n}});\n},loadFilter:function(_65){\nreturn _65;\n},finder:{getEl:function(_66,_67){\nvar _68=_2(_66,_67);\nvar id=$.data(_66,\"combobox\").itemIdPrefix+\"_\"+_68;\nreturn $(\"#\"+id);\n},getRow:function(_69,p){\nvar _6a=$.data(_69,\"combobox\");\nvar _6b=(p instanceof jQuery)?p.attr(\"id\").substr(_6a.itemIdPrefix.length+1):_2(_69,p);\nreturn _6a.data[parseInt(_6b)];\n}},onBeforeLoad:function(_6c){\n},onLoadSuccess:function(){\n},onLoadError:function(){\n},onSelect:function(_6d){\n},onUnselect:function(_6e){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.combogrid.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"combogrid\");\nvar _4=_3.options;\nvar _5=_3.grid;\n$(_2).addClass(\"combogrid-f\").combo($.extend({},_4,{onShowPanel:function(){\nvar p=$(this).combogrid(\"panel\");\nvar _6=p.outerHeight()-p.height();\nvar _7=p._size(\"minHeight\");\nvar _8=p._size(\"maxHeight\");\n$(this).combogrid(\"grid\").datagrid(\"resize\",{width:\"100%\",height:(isNaN(parseInt(_4.panelHeight))?\"auto\":\"100%\"),minHeight:(_7?_7-_6:\"\"),maxHeight:(_8?_8-_6:\"\")});\n_4.onShowPanel.call(this);\n}}));\nvar _9=$(_2).combo(\"panel\");\nif(!_5){\n_5=$(\"<table></table>\").appendTo(_9);\n_3.grid=_5;\n}\n_5.datagrid($.extend({},_4,{border:false,singleSelect:(!_4.multiple),onLoadSuccess:function(_a){\nvar _b=$(_2).combo(\"getValues\");\nvar _c=_4.onSelect;\n_4.onSelect=function(){\n};\n_1c(_2,_b,_3.remainText);\n_4.onSelect=_c;\n_4.onLoadSuccess.apply(_2,arguments);\n},onClickRow:_d,onSelect:function(_e,_f){\n_10();\n_4.onSelect.call(this,_e,_f);\n},onUnselect:function(_11,row){\n_10();\n_4.onUnselect.call(this,_11,row);\n},onSelectAll:function(_12){\n_10();\n_4.onSelectAll.call(this,_12);\n},onUnselectAll:function(_13){\nif(_4.multiple){\n_10();\n}\n_4.onUnselectAll.call(this,_13);\n}}));\nfunction _d(_14,row){\n_3.remainText=false;\n_10();\nif(!_4.multiple){\n$(_2).combo(\"hidePanel\");\n}\n_4.onClickRow.call(this,_14,row);\n};\nfunction _10(){\nvar _15=_5.datagrid(\"getSelections\");\nvar vv=[],ss=[];\nfor(var i=0;i<_15.length;i++){\nvv.push(_15[i][_4.idField]);\nss.push(_15[i][_4.textField]);\n}\nif(!_4.multiple){\n$(_2).combo(\"setValues\",(vv.length?vv:[\"\"]));\n}else{\n$(_2).combo(\"setValues\",vv);\n}\nif(!_3.remainText){\n$(_2).combo(\"setText\",ss.join(_4.separator));\n}\n};\n};\nfunction nav(_16,dir){\nvar _17=$.data(_16,\"combogrid\");\nvar _18=_17.options;\nvar _19=_17.grid;\nvar _1a=_19.datagrid(\"getRows\").length;\nif(!_1a){\nreturn;\n}\nvar tr=_18.finder.getTr(_19[0],null,\"highlight\");\nif(!tr.length){\ntr=_18.finder.getTr(_19[0],null,\"selected\");\n}\nvar _1b;\nif(!tr.length){\n_1b=(dir==\"next\"?0:_1a-1);\n}else{\nvar _1b=parseInt(tr.attr(\"datagrid-row-index\"));\n_1b+=(dir==\"next\"?1:-1);\nif(_1b<0){\n_1b=_1a-1;\n}\nif(_1b>=_1a){\n_1b=0;\n}\n}\n_19.datagrid(\"highlightRow\",_1b);\nif(_18.selectOnNavigation){\n_17.remainText=false;\n_19.datagrid(\"selectRow\",_1b);\n}\n};\nfunction _1c(_1d,_1e,_1f){\nvar _20=$.data(_1d,\"combogrid\");\nvar _21=_20.options;\nvar _22=_20.grid;\nvar _23=_22.datagrid(\"getRows\");\nvar ss=[];\nvar _24=$(_1d).combo(\"getValues\");\nvar _25=$(_1d).combo(\"options\");\nvar _26=_25.onChange;\n_25.onChange=function(){\n};\n_22.datagrid(\"clearSelections\");\nif(!$.isArray(_1e)){\n_1e=_1e.split(_21.separator);\n}\nfor(var i=0;i<_1e.length;i++){\nvar _27=_22.datagrid(\"getRowIndex\",_1e[i]);\nif(_27>=0){\n_22.datagrid(\"selectRow\",_27);\nss.push(_23[_27][_21.textField]);\n}else{\nss.push(_1e[i]);\n}\n}\n$(_1d).combo(\"setValues\",_24);\n_25.onChange=_26;\n$(_1d).combo(\"setValues\",_1e);\nif(!_1f){\nvar s=ss.join(_21.separator);\nif($(_1d).combo(\"getText\")!=s){\n$(_1d).combo(\"setText\",s);\n}\n}\n};\nfunction _28(_29,q){\nvar _2a=$.data(_29,\"combogrid\");\nvar _2b=_2a.options;\nvar _2c=_2a.grid;\n_2a.remainText=true;\nif(_2b.multiple&&!q){\n_1c(_29,[],true);\n}else{\n_1c(_29,[q],true);\n}\nif(_2b.mode==\"remote\"){\n_2c.datagrid(\"clearSelections\");\n_2c.datagrid(\"load\",$.extend({},_2b.queryParams,{q:q}));\n}else{\nif(!q){\nreturn;\n}\n_2c.datagrid(\"clearSelections\").datagrid(\"highlightRow\",-1);\nvar _2d=_2c.datagrid(\"getRows\");\nvar qq=_2b.multiple?q.split(_2b.separator):[q];\n$.map(qq,function(q){\nq=$.trim(q);\nif(q){\n$.map(_2d,function(row,i){\nif(q==row[_2b.textField]){\n_2c.datagrid(\"selectRow\",i);\n}else{\nif(_2b.filter.call(_29,q,row)){\n_2c.datagrid(\"highlightRow\",i);\n}\n}\n});\n}\n});\n}\n};\nfunction _2e(_2f){\nvar _30=$.data(_2f,\"combogrid\");\nvar _31=_30.options;\nvar _32=_30.grid;\nvar tr=_31.finder.getTr(_32[0],null,\"highlight\");\n_30.remainText=false;\nif(tr.length){\nvar _33=parseInt(tr.attr(\"datagrid-row-index\"));\nif(_31.multiple){\nif(tr.hasClass(\"datagrid-row-selected\")){\n_32.datagrid(\"unselectRow\",_33);\n}else{\n_32.datagrid(\"selectRow\",_33);\n}\n}else{\n_32.datagrid(\"selectRow\",_33);\n}\n}\nvar vv=[];\n$.map(_32.datagrid(\"getSelections\"),function(row){\nvv.push(row[_31.idField]);\n});\n$(_2f).combogrid(\"setValues\",vv);\nif(!_31.multiple){\n$(_2f).combogrid(\"hidePanel\");\n}\n};\n$.fn.combogrid=function(_34,_35){\nif(typeof _34==\"string\"){\nvar _36=$.fn.combogrid.methods[_34];\nif(_36){\nreturn _36(this,_35);\n}else{\nreturn this.combo(_34,_35);\n}\n}\n_34=_34||{};\nreturn this.each(function(){\nvar _37=$.data(this,\"combogrid\");\nif(_37){\n$.extend(_37.options,_34);\n}else{\n_37=$.data(this,\"combogrid\",{options:$.extend({},$.fn.combogrid.defaults,$.fn.combogrid.parseOptions(this),_34)});\n}\n_1(this);\n});\n};\n$.fn.combogrid.methods={options:function(jq){\nvar _38=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combogrid\").options,{width:_38.width,height:_38.height,originalValue:_38.originalValue,disabled:_38.disabled,readonly:_38.readonly});\n},grid:function(jq){\nreturn $.data(jq[0],\"combogrid\").grid;\n},setValues:function(jq,_39){\nreturn jq.each(function(){\n_1c(this,_39);\n});\n},setValue:function(jq,_3a){\nreturn jq.each(function(){\n_1c(this,[_3a]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).combogrid(\"grid\").datagrid(\"clearSelections\");\n$(this).combo(\"clear\");\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _3b=$(this).combogrid(\"options\");\nif(_3b.multiple){\n$(this).combogrid(\"setValues\",_3b.originalValue);\n}else{\n$(this).combogrid(\"setValue\",_3b.originalValue);\n}\n});\n}};\n$.fn.combogrid.parseOptions=function(_3c){\nvar t=$(_3c);\nreturn $.extend({},$.fn.combo.parseOptions(_3c),$.fn.datagrid.parseOptions(_3c),$.parser.parseOptions(_3c,[\"idField\",\"textField\",\"mode\"]));\n};\n$.fn.combogrid.defaults=$.extend({},$.fn.combo.defaults,$.fn.datagrid.defaults,{height:22,loadMsg:null,idField:null,textField:null,mode:\"local\",keyHandler:{up:function(e){\nnav(this,\"prev\");\ne.preventDefault();\n},down:function(e){\nnav(this,\"next\");\ne.preventDefault();\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_2e(this);\n},query:function(q,e){\n_28(this,q);\n}},filter:function(q,row){\nvar _3d=$(this).combogrid(\"options\");\nreturn row[_3d.textField].toLowerCase().indexOf(q.toLowerCase())==0;\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.combotree.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"combotree\");\nvar _4=_3.options;\nvar _5=_3.tree;\n$(_2).addClass(\"combotree-f\");\n$(_2).combo(_4);\nvar _6=$(_2).combo(\"panel\");\nif(!_5){\n_5=$(\"<ul></ul>\").appendTo(_6);\n$.data(_2,\"combotree\").tree=_5;\n}\n_5.tree($.extend({},_4,{checkbox:_4.multiple,onLoadSuccess:function(_7,_8){\nvar _9=$(_2).combotree(\"getValues\");\nif(_4.multiple){\nvar _a=_5.tree(\"getChecked\");\nfor(var i=0;i<_a.length;i++){\nvar id=_a[i].id;\n(function(){\nfor(var i=0;i<_9.length;i++){\nif(id==_9[i]){\nreturn;\n}\n}\n_9.push(id);\n})();\n}\n}\n$(_2).combotree(\"setValues\",_9);\n_4.onLoadSuccess.call(this,_7,_8);\n},onClick:function(_b){\nif(_4.multiple){\n$(this).tree(_b.checked?\"uncheck\":\"check\",_b.target);\n}else{\n$(_2).combo(\"hidePanel\");\n}\n_e(_2);\n_4.onClick.call(this,_b);\n},onCheck:function(_c,_d){\n_e(_2);\n_4.onCheck.call(this,_c,_d);\n}}));\n};\nfunction _e(_f){\nvar _10=$.data(_f,\"combotree\");\nvar _11=_10.options;\nvar _12=_10.tree;\nvar vv=[],ss=[];\nif(_11.multiple){\nvar _13=_12.tree(\"getChecked\");\nfor(var i=0;i<_13.length;i++){\nvv.push(_13[i].id);\nss.push(_13[i].text);\n}\n}else{\nvar _14=_12.tree(\"getSelected\");\nif(_14){\nvv.push(_14.id);\nss.push(_14.text);\n}\n}\n$(_f).combo(\"setValues\",vv).combo(\"setText\",ss.join(_11.separator));\n};\nfunction _15(_16,_17){\nvar _18=$.data(_16,\"combotree\");\nvar _19=_18.options;\nvar _1a=_18.tree;\nvar _1b=_1a.tree(\"options\");\nvar _1c=_1b.onCheck;\nvar _1d=_1b.onSelect;\n_1b.onCheck=_1b.onSelect=function(){\n};\n_1a.find(\"span.tree-checkbox\").addClass(\"tree-checkbox0\").removeClass(\"tree-checkbox1 tree-checkbox2\");\nif(!$.isArray(_17)){\n_17=_17.split(_19.separator);\n}\nfor(var i=0;i<_17.length;i++){\nvar _1e=_1a.tree(\"find\",_17[i]);\nif(_1e){\n_1a.tree(\"check\",_1e.target);\n_1a.tree(\"select\",_1e.target);\n}\n}\n_1b.onCheck=_1c;\n_1b.onSelect=_1d;\n_e(_16);\n};\n$.fn.combotree=function(_1f,_20){\nif(typeof _1f==\"string\"){\nvar _21=$.fn.combotree.methods[_1f];\nif(_21){\nreturn _21(this,_20);\n}else{\nreturn this.combo(_1f,_20);\n}\n}\n_1f=_1f||{};\nreturn this.each(function(){\nvar _22=$.data(this,\"combotree\");\nif(_22){\n$.extend(_22.options,_1f);\n}else{\n$.data(this,\"combotree\",{options:$.extend({},$.fn.combotree.defaults,$.fn.combotree.parseOptions(this),_1f)});\n}\n_1(this);\n});\n};\n$.fn.combotree.methods={options:function(jq){\nvar _23=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"combotree\").options,{width:_23.width,height:_23.height,originalValue:_23.originalValue,disabled:_23.disabled,readonly:_23.readonly});\n},clone:function(jq,_24){\nvar t=jq.combo(\"clone\",_24);\nt.data(\"combotree\",{options:$.extend(true,{},jq.combotree(\"options\")),tree:jq.combotree(\"tree\")});\nreturn t;\n},tree:function(jq){\nreturn $.data(jq[0],\"combotree\").tree;\n},loadData:function(jq,_25){\nreturn jq.each(function(){\nvar _26=$.data(this,\"combotree\").options;\n_26.data=_25;\nvar _27=$.data(this,\"combotree\").tree;\n_27.tree(\"loadData\",_25);\n});\n},reload:function(jq,url){\nreturn jq.each(function(){\nvar _28=$.data(this,\"combotree\").options;\nvar _29=$.data(this,\"combotree\").tree;\nif(url){\n_28.url=url;\n}\n_29.tree({url:_28.url});\n});\n},setValues:function(jq,_2a){\nreturn jq.each(function(){\n_15(this,_2a);\n});\n},setValue:function(jq,_2b){\nreturn jq.each(function(){\n_15(this,[_2b]);\n});\n},clear:function(jq){\nreturn jq.each(function(){\nvar _2c=$.data(this,\"combotree\").tree;\n_2c.find(\"div.tree-node-selected\").removeClass(\"tree-node-selected\");\nvar cc=_2c.tree(\"getChecked\");\nfor(var i=0;i<cc.length;i++){\n_2c.tree(\"uncheck\",cc[i].target);\n}\n$(this).combo(\"clear\");\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _2d=$(this).combotree(\"options\");\nif(_2d.multiple){\n$(this).combotree(\"setValues\",_2d.originalValue);\n}else{\n$(this).combotree(\"setValue\",_2d.originalValue);\n}\n});\n}};\n$.fn.combotree.parseOptions=function(_2e){\nreturn $.extend({},$.fn.combo.parseOptions(_2e),$.fn.tree.parseOptions(_2e));\n};\n$.fn.combotree.defaults=$.extend({},$.fn.combo.defaults,$.fn.tree.defaults,{editable:false});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.datagrid.js",
    "content": "/**\n * jQuery EasyUI 1.4.1\n * \n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\n * To use it on other terms please contact us at info@jeasyui.com\n *\n */\n(function($){\nvar _1=0;\nfunction _2(a,o){\nfor(var i=0,_3=a.length;i<_3;i++){\nif(a[i]==o){\nreturn i;\n}\n}\nreturn -1;\n};\nfunction _4(a,o,id){\nif(typeof o==\"string\"){\nfor(var i=0,_5=a.length;i<_5;i++){\nif(a[i][o]==id){\na.splice(i,1);\nreturn;\n}\n}\n}else{\nvar _6=_2(a,o);\nif(_6!=-1){\na.splice(_6,1);\n}\n}\n};\nfunction _7(a,o,r){\nfor(var i=0,_8=a.length;i<_8;i++){\nif(a[i][o]==r[o]){\nreturn;\n}\n}\na.push(r);\n};\nfunction _9(_a){\nvar _b=$.data(_a,\"datagrid\");\nvar _c=_b.options;\nvar _d=_b.panel;\nvar dc=_b.dc;\nvar ss=null;\nif(_c.sharedStyleSheet){\nss=typeof _c.sharedStyleSheet==\"boolean\"?\"head\":_c.sharedStyleSheet;\n}else{\nss=_d.closest(\"div.datagrid-view\");\nif(!ss.length){\nss=dc.view;\n}\n}\nvar cc=$(ss);\nvar _e=$.data(cc[0],\"ss\");\nif(!_e){\n_e=$.data(cc[0],\"ss\",{cache:{},dirty:[]});\n}\nreturn {add:function(_f){\nvar ss=[\"<style type=\\\"text/css\\\" easyui=\\\"true\\\">\"];\nfor(var i=0;i<_f.length;i++){\n_e.cache[_f[i][0]]={width:_f[i][1]};\n}\nvar _10=0;\nfor(var s in _e.cache){\nvar _11=_e.cache[s];\n_11.index=_10++;\nss.push(s+\"{width:\"+_11.width+\"}\");\n}\nss.push(\"</style>\");\n$(ss.join(\"\\n\")).appendTo(cc);\ncc.children(\"style[easyui]:not(:last)\").remove();\n},getRule:function(_12){\nvar _13=cc.children(\"style[easyui]:last\")[0];\nvar _14=_13.styleSheet?_13.styleSheet:(_13.sheet||document.styleSheets[document.styleSheets.length-1]);\nvar _15=_14.cssRules||_14.rules;\nreturn _15[_12];\n},set:function(_16,_17){\nvar _18=_e.cache[_16];\nif(_18){\n_18.width=_17;\nvar _19=this.getRule(_18.index);\nif(_19){\n_19.style[\"width\"]=_17;\n}\n}\n},remove:function(_1a){\nvar tmp=[];\nfor(var s in _e.cache){\nif(s.indexOf(_1a)==-1){\ntmp.push([s,_e.cache[s].width]);\n}\n}\n_e.cache={};\nthis.add(tmp);\n},dirty:function(_1b){\nif(_1b){\n_e.dirty.push(_1b);\n}\n},clean:function(){\nfor(var i=0;i<_e.dirty.length;i++){\nthis.remove(_e.dirty[i]);\n}\n_e.dirty=[];\n}};\n};\nfunction _1c(_1d,_1e){\nvar _1f=$.data(_1d,\"datagrid\");\nvar _20=_1f.options;\nvar _21=_1f.panel;\nif(_1e){\n$.extend(_20,_1e);\n}\nif(_20.fit==true){\nvar p=_21.panel(\"panel\").parent();\n_20.width=p.width();\n_20.height=p.height();\n}\n_21.panel(\"resize\",_20);\n};\nfunction _22(_23){\nvar _24=$.data(_23,\"datagrid\");\nvar _25=_24.options;\nvar dc=_24.dc;\nvar _26=_24.panel;\nvar _27=_26.width();\nvar _28=_26.height();\nvar _29=dc.view;\nvar _2a=dc.view1;\nvar _2b=dc.view2;\nvar _2c=_2a.children(\"div.datagrid-header\");\nvar _2d=_2b.children(\"div.datagrid-header\");\nvar _2e=_2c.find(\"table\");\nvar _2f=_2d.find(\"table\");\n_29.width(_27);\nvar _30=_2c.children(\"div.datagrid-header-inner\").show();\n_2a.width(_30.find(\"table\").width());\nif(!_25.showHeader){\n_30.hide();\n}\n_2b.width(_27-_2a._outerWidth());\n_2a.children(\"div.datagrid-header,div.datagrid-body,div.datagrid-footer\").width(_2a.width());\n_2b.children(\"div.datagrid-header,div.datagrid-body,div.datagrid-footer\").width(_2b.width());\nvar hh;\n_2c.add(_2d).css(\"height\",\"\");\n_2e.add(_2f).css(\"height\",\"\");\nhh=Math.max(_2e.height(),_2f.height());\n_2e.add(_2f).height(hh);\n_2c.add(_2d)._outerHeight(hh);\ndc.body1.add(dc.body2).children(\"table.datagrid-btable-frozen\").css({position:\"absolute\",top:dc.header2._outerHeight()});\nvar _31=dc.body2.children(\"table.datagrid-btable-frozen\")._outerHeight();\nvar _32=_31+_2b.children(\"div.datagrid-header\")._outerHeight()+_2b.children(\"div.datagrid-footer\")._outerHeight()+_26.children(\"div.datagrid-toolbar\")._outerHeight();\n_26.children(\"div.datagrid-pager\").each(function(){\n_32+=$(this)._outerHeight();\n});\nvar _33=_26.outerHeight()-_26.height();\nvar _34=_26._size(\"minHeight\")||\"\";\nvar _35=_26._size(\"maxHeight\")||\"\";\n_2a.add(_2b).children(\"div.datagrid-body\").css({marginTop:_31,height:(isNaN(parseInt(_25.height))?\"\":(_28-_32)),minHeight:(_34?_34-_33-_32:\"\"),maxHeight:(_35?_35-_33-_32:\"\")});\n_29.height(_2b.height());\n};\nfunction _36(_37,_38,_39){\nvar _3a=$.data(_37,\"datagrid\").data.rows;\nvar _3b=$.data(_37,\"datagrid\").options;\nvar dc=$.data(_37,\"datagrid\").dc;\nif(!dc.body1.is(\":empty\")&&(!_3b.nowrap||_3b.autoRowHeight||_39)){\nif(_38!=undefined){\nvar tr1=_3b.finder.getTr(_37,_38,\"body\",1);\nvar tr2=_3b.finder.getTr(_37,_38,\"body\",2);\n_3c(tr1,tr2);\n}else{\nvar tr1=_3b.finder.getTr(_37,0,\"allbody\",1);\nvar tr2=_3b.finder.getTr(_37,0,\"allbody\",2);\n_3c(tr1,tr2);\nif(_3b.showFooter){\nvar tr1=_3b.finder.getTr(_37,0,\"allfooter\",1);\nvar tr2=_3b.finder.getTr(_37,0,\"allfooter\",2);\n_3c(tr1,tr2);\n}\n}\n}\n_22(_37);\nif(_3b.height==\"auto\"){\nvar _3d=dc.body1.parent();\nvar _3e=dc.body2;\nvar _3f=_40(_3e);\nvar _41=_3f.height;\nif(_3f.width>_3e.width()){\n_41+=18;\n}\n_41-=parseInt(_3e.css(\"marginTop\"))||0;\n_3d.height(_41);\n_3e.height(_41);\ndc.view.height(dc.view2.height());\n}\ndc.body2.triggerHandler(\"scroll\");\nfunction _3c(_42,_43){\nfor(var i=0;i<_43.length;i++){\nvar tr1=$(_42[i]);\nvar tr2=$(_43[i]);\ntr1.css(\"height\",\"\");\ntr2.css(\"height\",\"\");\nvar _44=Math.max(tr1.height(),tr2.height());\ntr1.css(\"height\",_44);\ntr2.css(\"height\",_44);\n}\n};\nfunction _40(cc){\nvar _45=0;\nvar _46=0;\n$(cc).children().each(function(){\nvar c=$(this);\nif(c.is(\":visible\")){\n_46+=c._outerHeight();\nif(_45<c._outerWidth()){\n_45=c._outerWidth();\n}\n}\n});\nreturn {width:_45,height:_46};\n};\n};\nfunction _47(_48,_49){\nvar _4a=$.data(_48,\"datagrid\");\nvar _4b=_4a.options;\nvar dc=_4a.dc;\nif(!dc.body2.children(\"table.datagrid-btable-frozen\").length){\ndc.body1.add(dc.body2).prepend(\"<table class=\\\"datagrid-btable datagrid-btable-frozen\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"></table>\");\n}\n_4c(true);\n_4c(false);\n_22(_48);\nfunction _4c(_4d){\nvar _4e=_4d?1:2;\nvar tr=_4b.finder.getTr(_48,_49,\"body\",_4e);\n(_4d?dc.body1:dc.body2).children(\"table.datagrid-btable-frozen\").append(tr);\n};\n};\nfunction _4f(_50,_51){\nfunction _52(){\nvar _53=[];\nvar _54=[];\n$(_50).children(\"thead\").each(function(){\nvar opt=$.parser.parseOptions(this,[{frozen:\"boolean\"}]);\n$(this).find(\"tr\").each(function(){\nvar _55=[];\n$(this).find(\"th\").each(function(){\nvar th=$(this);\nvar col=$.extend({},$.parser.parseOptions(this,[\"field\",\"align\",\"halign\",\"order\",\"width\",{sortable:\"boolean\",checkbox:\"boolean\",resizable:\"boolean\",fixed:\"boolean\"},{rowspan:\"number\",colspan:\"number\"}]),{title:(th.html()||undefined),hidden:(th.attr(\"hidden\")?true:undefined),formatter:(th.attr(\"formatter\")?eval(th.attr(\"formatter\")):undefined),styler:(th.attr(\"styler\")?eval(th.attr(\"styler\")):undefined),sorter:(th.attr(\"sorter\")?eval(th.attr(\"sorter\")):undefined)});\nif(col.width&&String(col.width).indexOf(\"%\")==-1){\ncol.width=parseInt(col.width);\n}\nif(th.attr(\"editor\")){\nvar s=$.trim(th.attr(\"editor\"));\nif(s.substr(0,1)==\"{\"){\ncol.editor=eval(\"(\"+s+\")\");\n}else{\ncol.editor=s;\n}\n}\n_55.push(col);\n});\nopt.frozen?_53.push(_55):_54.push(_55);\n});\n});\nreturn [_53,_54];\n};\nvar _56=$(\"<div class=\\\"datagrid-wrap\\\">\"+\"<div class=\\\"datagrid-view\\\">\"+\"<div class=\\\"datagrid-view1\\\">\"+\"<div class=\\\"datagrid-header\\\">\"+\"<div class=\\\"datagrid-header-inner\\\"></div>\"+\"</div>\"+\"<div class=\\\"datagrid-body\\\">\"+\"<div class=\\\"datagrid-body-inner\\\"></div>\"+\"</div>\"+\"<div class=\\\"datagrid-footer\\\">\"+\"<div class=\\\"datagrid-footer-inner\\\"></div>\"+\"</div>\"+\"</div>\"+\"<div class=\\\"datagrid-view2\\\">\"+\"<div class=\\\"datagrid-header\\\">\"+\"<div class=\\\"datagrid-header-inner\\\"></div>\"+\"</div>\"+\"<div class=\\\"datagrid-body\\\"></div>\"+\"<div class=\\\"datagrid-footer\\\">\"+\"<div class=\\\"datagrid-footer-inner\\\"></div>\"+\"</div>\"+\"</div>\"+\"</div>\"+\"</div>\").insertAfter(_50);\n_56.panel({doSize:false,cls:\"datagrid\"});\n$(_50).addClass(\"datagrid-f\").hide().appendTo(_56.children(\"div.datagrid-view\"));\nvar cc=_52();\nvar _57=_56.children(\"div.datagrid-view\");\nvar _58=_57.children(\"div.datagrid-view1\");\nvar _59=_57.children(\"div.datagrid-view2\");\nreturn {panel:_56,frozenColumns:cc[0],columns:cc[1],dc:{view:_57,view1:_58,view2:_59,header1:_58.children(\"div.datagrid-header\").children(\"div.datagrid-header-inner\"),header2:_59.children(\"div.datagrid-header\").children(\"div.datagrid-header-inner\"),body1:_58.children(\"div.datagrid-body\").children(\"div.datagrid-body-inner\"),body2:_59.children(\"div.datagrid-body\"),footer1:_58.children(\"div.datagrid-footer\").children(\"div.datagrid-footer-inner\"),footer2:_59.children(\"div.datagrid-footer\").children(\"div.datagrid-footer-inner\")}};\n};\nfunction _5a(_5b){\nvar _5c=$.data(_5b,\"datagrid\");\nvar _5d=_5c.options;\nvar dc=_5c.dc;\nvar _5e=_5c.panel;\n_5c.ss=$(_5b).datagrid(\"createStyleSheet\");\n_5e.panel($.extend({},_5d,{id:null,doSize:false,onResize:function(_5f,_60){\nsetTimeout(function(){\nif($.data(_5b,\"datagrid\")){\n_22(_5b);\n_b0(_5b);\n_5d.onResize.call(_5e,_5f,_60);\n}\n},0);\n},onExpand:function(){\n_36(_5b);\n_5d.onExpand.call(_5e);\n}}));\n_5c.rowIdPrefix=\"datagrid-row-r\"+(++_1);\n_5c.cellClassPrefix=\"datagrid-cell-c\"+_1;\n_61(dc.header1,_5d.frozenColumns,true);\n_61(dc.header2,_5d.columns,false);\n_62();\ndc.header1.add(dc.header2).css(\"display\",_5d.showHeader?\"block\":\"none\");\ndc.footer1.add(dc.footer2).css(\"display\",_5d.showFooter?\"block\":\"none\");\nif(_5d.toolbar){\nif($.isArray(_5d.toolbar)){\n$(\"div.datagrid-toolbar\",_5e).remove();\nvar tb=$(\"<div class=\\\"datagrid-toolbar\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"><tr></tr></table></div>\").prependTo(_5e);\nvar tr=tb.find(\"tr\");\nfor(var i=0;i<_5d.toolbar.length;i++){\nvar btn=_5d.toolbar[i];\nif(btn==\"-\"){\n$(\"<td><div class=\\\"datagrid-btn-separator\\\"></div></td>\").appendTo(tr);\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\nvar _63=$(\"<a href=\\\"javascript:void(0)\\\"></a>\").appendTo(td);\n_63[0].onclick=eval(btn.handler||function(){\n});\n_63.linkbutton($.extend({},btn,{plain:true}));\n}\n}\n}else{\n$(_5d.toolbar).addClass(\"datagrid-toolbar\").prependTo(_5e);\n$(_5d.toolbar).show();\n}\n}else{\n$(\"div.datagrid-toolbar\",_5e).remove();\n}\n$(\"div.datagrid-pager\",_5e).remove();\nif(_5d.pagination){\nvar _64=$(\"<div class=\\\"datagrid-pager\\\"></div>\");\nif(_5d.pagePosition==\"bottom\"){\n_64.appendTo(_5e);\n}else{\nif(_5d.pagePosition==\"top\"){\n_64.addClass(\"datagrid-pager-top\").prependTo(_5e);\n}else{\nvar _65=$(\"<div class=\\\"datagrid-pager datagrid-pager-top\\\"></div>\").prependTo(_5e);\n_64.appendTo(_5e);\n_64=_64.add(_65);\n}\n}\n_64.pagination({total:(_5d.pageNumber*_5d.pageSize),pageNumber:_5d.pageNumber,pageSize:_5d.pageSize,pageList:_5d.pageList,onSelectPage:function(_66,_67){\n_5d.pageNumber=_66||1;\n_5d.pageSize=_67;\n_64.pagination(\"refresh\",{pageNumber:_66,pageSize:_67});\n_ae(_5b);\n}});\n_5d.pageSize=_64.pagination(\"options\").pageSize;\n}\nfunction _61(_68,_69,_6a){\nif(!_69){\nreturn;\n}\n$(_68).show();\n$(_68).empty();\nvar _6b=[];\nvar _6c=[];\nif(_5d.sortName){\n_6b=_5d.sortName.split(\",\");\n_6c=_5d.sortOrder.split(\",\");\n}\nvar t=$(\"<table class=\\\"datagrid-htable\\\" border=\\\"0\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"><tbody></tbody></table>\").appendTo(_68);\nfor(var i=0;i<_69.length;i++){\nvar tr=$(\"<tr class=\\\"datagrid-header-row\\\"></tr>\").appendTo($(\"tbody\",t));\nvar _6d=_69[i];\nfor(var j=0;j<_6d.length;j++){\nvar col=_6d[j];\nvar _6e=\"\";\nif(col.rowspan){\n_6e+=\"rowspan=\\\"\"+col.rowspan+\"\\\" \";\n}\nif(col.colspan){\n_6e+=\"colspan=\\\"\"+col.colspan+\"\\\" \";\n}\nvar td=$(\"<td \"+_6e+\"></td>\").appendTo(tr);\nif(col.checkbox){\ntd.attr(\"field\",col.field);\n$(\"<div class=\\\"datagrid-header-check\\\"></div>\").html(\"<input type=\\\"checkbox\\\"/>\").appendTo(td);\n}else{\nif(col.field){\ntd.attr(\"field\",col.field);\ntd.append(\"<div class=\\\"datagrid-cell\\\"><span></span><span class=\\\"datagrid-sort-icon\\\"></span></div>\");\n$(\"span\",td).html(col.title);\n$(\"span.datagrid-sort-icon\",td).html(\"&nbsp;\");\nvar _6f=td.find(\"div.datagrid-cell\");\nvar pos=_2(_6b,col.field);\nif(pos>=0){\n_6f.addClass(\"datagrid-sort-\"+_6c[pos]);\n}\nif(col.resizable==false){\n_6f.attr(\"resizable\",\"false\");\n}\nif(col.width){\nvar _70=$.parser.parseValue(\"width\",col.width,dc.view,_5d.scrollbarSize);\n_6f._outerWidth(_70-1);\ncol.boxWidth=parseInt(_6f[0].style.width);\ncol.deltaWidth=_70-col.boxWidth;\n}else{\ncol.auto=true;\n}\n_6f.css(\"text-align\",(col.halign||col.align||\"\"));\ncol.cellClass=_5c.cellClassPrefix+\"-\"+col.field.replace(/[\\.|\\s]/g,\"-\");\n_6f.addClass(col.cellClass).css(\"width\",\"\");\n}else{\n$(\"<div class=\\\"datagrid-cell-group\\\"></div>\").html(col.title).appendTo(td);\n}\n}\nif(col.hidden){\ntd.hide();\n}\n}\n}\nif(_6a&&_5d.rownumbers){\nvar td=$(\"<td rowspan=\\\"\"+_5d.frozenColumns.length+\"\\\"><div class=\\\"datagrid-header-rownumber\\\"></div></td>\");\nif($(\"tr\",t).length==0){\ntd.wrap(\"<tr class=\\\"datagrid-header-row\\\"></tr>\").parent().appendTo($(\"tbody\",t));\n}else{\ntd.prependTo($(\"tr:first\",t));\n}\n}\n};\nfunction _62(){\nvar _71=[];\nvar _72=_73(_5b,true).concat(_73(_5b));\nfor(var i=0;i<_72.length;i++){\nvar col=_74(_5b,_72[i]);\nif(col&&!col.checkbox){\n_71.push([\".\"+col.cellClass,col.boxWidth?col.boxWidth+\"px\":\"auto\"]);\n}\n}\n_5c.ss.add(_71);\n_5c.ss.dirty(_5c.cellSelectorPrefix);\n_5c.cellSelectorPrefix=\".\"+_5c.cellClassPrefix;\n};\n};\nfunction _75(_76){\nvar _77=$.data(_76,\"datagrid\");\nvar _78=_77.panel;\nvar _79=_77.options;\nvar dc=_77.dc;\nvar _7a=dc.header1.add(dc.header2);\n_7a.find(\"input[type=checkbox]\").unbind(\".datagrid\").bind(\"click.datagrid\",function(e){\nif(_79.singleSelect&&_79.selectOnCheck){\nreturn false;\n}\nif($(this).is(\":checked\")){\n_123(_76);\n}else{\n_129(_76);\n}\ne.stopPropagation();\n});\nvar _7b=_7a.find(\"div.datagrid-cell\");\n_7b.closest(\"td\").unbind(\".datagrid\").bind(\"mouseenter.datagrid\",function(){\nif(_77.resizing){\nreturn;\n}\n$(this).addClass(\"datagrid-header-over\");\n}).bind(\"mouseleave.datagrid\",function(){\n$(this).removeClass(\"datagrid-header-over\");\n}).bind(\"contextmenu.datagrid\",function(e){\nvar _7c=$(this).attr(\"field\");\n_79.onHeaderContextMenu.call(_76,e,_7c);\n});\n_7b.unbind(\".datagrid\").bind(\"click.datagrid\",function(e){\nvar p1=$(this).offset().left+5;\nvar p2=$(this).offset().left+$(this)._outerWidth()-5;\nif(e.pageX<p2&&e.pageX>p1){\n_a2(_76,$(this).parent().attr(\"field\"));\n}\n}).bind(\"dblclick.datagrid\",function(e){\nvar p1=$(this).offset().left+5;\nvar p2=$(this).offset().left+$(this)._outerWidth()-5;\nvar _7d=_79.resizeHandle==\"right\"?(e.pageX>p2):(_79.resizeHandle==\"left\"?(e.pageX<p1):(e.pageX<p1||e.pageX>p2));\nif(_7d){\nvar _7e=$(this).parent().attr(\"field\");\nvar col=_74(_76,_7e);\nif(col.resizable==false){\nreturn;\n}\n$(_76).datagrid(\"autoSizeColumn\",_7e);\ncol.auto=false;\n}\n});\nvar _7f=_79.resizeHandle==\"right\"?\"e\":(_79.resizeHandle==\"left\"?\"w\":\"e,w\");\n_7b.each(function(){\n$(this).resizable({handles:_7f,disabled:($(this).attr(\"resizable\")?$(this).attr(\"resizable\")==\"false\":false),minWidth:25,onStartResize:function(e){\n_77.resizing=true;\n_7a.css(\"cursor\",$(\"body\").css(\"cursor\"));\nif(!_77.proxy){\n_77.proxy=$(\"<div class=\\\"datagrid-resize-proxy\\\"></div>\").appendTo(dc.view);\n}\n_77.proxy.css({left:e.pageX-$(_78).offset().left-1,display:\"none\"});\nsetTimeout(function(){\nif(_77.proxy){\n_77.proxy.show();\n}\n},500);\n},onResize:function(e){\n_77.proxy.css({left:e.pageX-$(_78).offset().left-1,display:\"block\"});\nreturn false;\n},onStopResize:function(e){\n_7a.css(\"cursor\",\"\");\n$(this).css(\"height\",\"\");\nvar _80=$(this).parent().attr(\"field\");\nvar col=_74(_76,_80);\ncol.width=$(this)._outerWidth();\ncol.boxWidth=col.width-col.deltaWidth;\ncol.auto=undefined;\n$(this).css(\"width\",\"\");\n_d1(_76,_80);\n_77.proxy.remove();\n_77.proxy=null;\nif($(this).parents(\"div:first.datagrid-header\").parent().hasClass(\"datagrid-view1\")){\n_22(_76);\n}\n_b0(_76);\n_79.onResizeColumn.call(_76,_80,col.width);\nsetTimeout(function(){\n_77.resizing=false;\n},0);\n}});\n});\nvar bb=dc.body1.add(dc.body2);\nbb.unbind();\nfor(var _81 in _79.rowEvents){\nbb.bind(_81,_79.rowEvents[_81]);\n}\ndc.body1.bind(\"mousewheel DOMMouseScroll\",function(e){\nvar e1=e.originalEvent||window.event;\nvar _82=e1.wheelDelta||e1.detail*(-1);\nvar dg=$(e.target).closest(\"div.datagrid-view\").children(\".datagrid-f\");\nvar dc=dg.data(\"datagrid\").dc;\ndc.body2.scrollTop(dc.body2.scrollTop()-_82);\n});\ndc.body2.bind(\"scroll\",function(){\nvar b1=dc.view1.children(\"div.datagrid-body\");\nb1.scrollTop($(this).scrollTop());\nvar c1=dc.body1.children(\":first\");\nvar c2=dc.body2.children(\":first\");\nif(c1.length&&c2.length){\nvar _83=c1.offset().top;\nvar _84=c2.offset().top;\nif(_83!=_84){\nb1.scrollTop(b1.scrollTop()+_83-_84);\n}\n}\ndc.view2.children(\"div.datagrid-header,div.datagrid-footer\")._scrollLeft($(this)._scrollLeft());\ndc.body2.children(\"table.datagrid-btable-frozen\").css(\"left\",-$(this)._scrollLeft());\n});\n};\nfunction _85(_86){\nreturn function(e){\nvar tr=_87(e.target);\nif(!tr){\nreturn;\n}\nvar _88=_89(tr);\nif($.data(_88,\"datagrid\").resizing){\nreturn;\n}\nvar _8a=_8b(tr);\nif(_86){\n_8c(_88,_8a);\n}else{\nvar _8d=$.data(_88,\"datagrid\").options;\n_8d.finder.getTr(_88,_8a).removeClass(\"datagrid-row-over\");\n}\n};\n};\nfunction _8e(e){\nvar tr=_87(e.target);\nif(!tr){\nreturn;\n}\nvar _8f=_89(tr);\nvar _90=$.data(_8f,\"datagrid\").options;\nvar _91=_8b(tr);\nvar tt=$(e.target);\nif(tt.parent().hasClass(\"datagrid-cell-check\")){\nif(_90.singleSelect&&_90.selectOnCheck){\ntt._propAttr(\"checked\",!tt.is(\":checked\"));\n_92(_8f,_91);\n}else{\nif(tt.is(\":checked\")){\ntt._propAttr(\"checked\",false);\n_92(_8f,_91);\n}else{\ntt._propAttr(\"checked\",true);\n_93(_8f,_91);\n}\n}\n}else{\nvar row=_90.finder.getRow(_8f,_91);\nvar td=tt.closest(\"td[field]\",tr);\nif(td.length){\nvar _94=td.attr(\"field\");\n_90.onClickCell.call(_8f,_91,_94,row[_94]);\n}\nif(_90.singleSelect==true){\n_95(_8f,_91);\n}else{\nif(_90.ctrlSelect){\nif(e.ctrlKey){\nif(tr.hasClass(\"datagrid-row-selected\")){\n_96(_8f,_91);\n}else{\n_95(_8f,_91);\n}\n}else{\nif(e.shiftKey){\n$(_8f).datagrid(\"clearSelections\");\nvar _97=Math.min(_90.lastSelectedIndex||0,_91);\nvar _98=Math.max(_90.lastSelectedIndex||0,_91);\nfor(var i=_97;i<=_98;i++){\n_95(_8f,i);\n}\n}else{\n$(_8f).datagrid(\"clearSelections\");\n_95(_8f,_91);\n_90.lastSelectedIndex=_91;\n}\n}\n}else{\nif(tr.hasClass(\"datagrid-row-selected\")){\n_96(_8f,_91);\n}else{\n_95(_8f,_91);\n}\n}\n}\n_90.onClickRow.call(_8f,_91,row);\n}\n};\nfunction _99(e){\nvar tr=_87(e.target);\nif(!tr){\nreturn;\n}\nvar _9a=_89(tr);\nvar _9b=$.data(_9a,\"datagrid\").options;\nvar _9c=_8b(tr);\nvar row=_9b.finder.getRow(_9a,_9c);\nvar td=$(e.target).closest(\"td[field]\",tr);\nif(td.length){\nvar _9d=td.attr(\"field\");\n_9b.onDblClickCell.call(_9a,_9c,_9d,row[_9d]);\n}\n_9b.onDblClickRow.call(_9a,_9c,row);\n};\nfunction _9e(e){\nvar tr=_87(e.target);\nif(!tr){\nreturn;\n}\nvar _9f=_89(tr);\nvar _a0=$.data(_9f,\"datagrid\").options;\nvar _a1=_8b(tr);\nvar row=_a0.finder.getRow(_9f,_a1);\n_a0.onRowContextMenu.call(_9f,e,_a1,row);\n};\nfunction _89(t){\nreturn $(t).closest(\"div.datagrid-view\").children(\".datagrid-f\")[0];\n};\nfunction _87(t){\nvar tr=$(t).closest(\"tr.datagrid-row\");\nif(tr.length&&tr.parent().length){\nreturn tr;\n}else{\nreturn undefined;\n}\n};\nfunction _8b(tr){\nif(tr.attr(\"datagrid-row-index\")){\nreturn parseInt(tr.attr(\"datagrid-row-index\"));\n}else{\nreturn tr.attr(\"node-id\");\n}\n};\nfunction _a2(_a3,_a4){\nvar _a5=$.data(_a3,\"datagrid\");\nvar _a6=_a5.options;\n_a4=_a4||{};\nvar _a7={sortName:_a6.sortName,sortOrder:_a6.sortOrder};\nif(typeof _a4==\"object\"){\n$.extend(_a7,_a4);\n}\nvar _a8=[];\nvar _a9=[];\nif(_a7.sortName){\n_a8=_a7.sortName.split(\",\");\n_a9=_a7.sortOrder.split(\",\");\n}\nif(typeof _a4==\"string\"){\nvar _aa=_a4;\nvar col=_74(_a3,_aa);\nif(!col.sortable||_a5.resizing){\nreturn;\n}\nvar _ab=col.order||\"asc\";\nvar pos=_2(_a8,_aa);\nif(pos>=0){\nvar _ac=_a9[pos]==\"asc\"?\"desc\":\"asc\";\nif(_a6.multiSort&&_ac==_ab){\n_a8.splice(pos,1);\n_a9.splice(pos,1);\n}else{\n_a9[pos]=_ac;\n}\n}else{\nif(_a6.multiSort){\n_a8.push(_aa);\n_a9.push(_ab);\n}else{\n_a8=[_aa];\n_a9=[_ab];\n}\n}\n_a7.sortName=_a8.join(\",\");\n_a7.sortOrder=_a9.join(\",\");\n}\nif(_a6.onBeforeSortColumn.call(_a3,_a7.sortName,_a7.sortOrder)==false){\nreturn;\n}\n$.extend(_a6,_a7);\nvar dc=_a5.dc;\nvar _ad=dc.header1.add(dc.header2);\n_ad.find(\"div.datagrid-cell\").removeClass(\"datagrid-sort-asc datagrid-sort-desc\");\nfor(var i=0;i<_a8.length;i++){\nvar col=_74(_a3,_a8[i]);\n_ad.find(\"div.\"+col.cellClass).addClass(\"datagrid-sort-\"+_a9[i]);\n}\nif(_a6.remoteSort){\n_ae(_a3);\n}else{\n_af(_a3,$(_a3).datagrid(\"getData\"));\n}\n_a6.onSortColumn.call(_a3,_a6.sortName,_a6.sortOrder);\n};\nfunction _b0(_b1){\nvar _b2=$.data(_b1,\"datagrid\");\nvar _b3=_b2.options;\nvar dc=_b2.dc;\nvar _b4=dc.view2.children(\"div.datagrid-header\");\ndc.body2.css(\"overflow-x\",\"\");\n_b5();\n_b6();\nif(_b4.width()>=_b4.find(\"table\").width()){\ndc.body2.css(\"overflow-x\",\"hidden\");\n}\nfunction _b6(){\nif(!_b3.fitColumns){\nreturn;\n}\nif(!_b2.leftWidth){\n_b2.leftWidth=0;\n}\nvar _b7=0;\nvar cc=[];\nvar _b8=_73(_b1,false);\nfor(var i=0;i<_b8.length;i++){\nvar col=_74(_b1,_b8[i]);\nif(_b9(col)){\n_b7+=col.width;\ncc.push({field:col.field,col:col,addingWidth:0});\n}\n}\nif(!_b7){\nreturn;\n}\ncc[cc.length-1].addingWidth-=_b2.leftWidth;\nvar _ba=_b4.children(\"div.datagrid-header-inner\").show();\nvar _bb=_b4.width()-_b4.find(\"table\").width()-_b3.scrollbarSize+_b2.leftWidth;\nvar _bc=_bb/_b7;\nif(!_b3.showHeader){\n_ba.hide();\n}\nfor(var i=0;i<cc.length;i++){\nvar c=cc[i];\nvar _bd=parseInt(c.col.width*_bc);\nc.addingWidth+=_bd;\n_bb-=_bd;\n}\ncc[cc.length-1].addingWidth+=_bb;\nfor(var i=0;i<cc.length;i++){\nvar c=cc[i];\nif(c.col.boxWidth+c.addingWidth>0){\nc.col.boxWidth+=c.addingWidth;\nc.col.width+=c.addingWidth;\n}\n}\n_b2.leftWidth=_bb;\n_d1(_b1);\n};\nfunction _b5(){\nvar _be=false;\nvar _bf=_73(_b1,true).concat(_73(_b1,false));\n$.map(_bf,function(_c0){\nvar col=_74(_b1,_c0);\nif(String(col.width||\"\").indexOf(\"%\")>=0){\nvar _c1=$.parser.parseValue(\"width\",col.width,dc.view,_b3.scrollbarSize)-col.deltaWidth;\nif(_c1>0){\ncol.boxWidth=_c1;\n_be=true;\n}\n}\n});\nif(_be){\n_d1(_b1);\n}\n};\nfunction _b9(col){\nif(String(col.width||\"\").indexOf(\"%\")>=0){\nreturn false;\n}\nif(!col.hidden&&!col.checkbox&&!col.auto&&!col.fixed){\nreturn true;\n}\n};\n};\nfunction _c2(_c3,_c4){\nvar _c5=$.data(_c3,\"datagrid\");\nvar _c6=_c5.options;\nvar dc=_c5.dc;\nvar tmp=$(\"<div class=\\\"datagrid-cell\\\" style=\\\"position:absolute;left:-9999px\\\"></div>\").appendTo(\"body\");\nif(_c4){\n_1c(_c4);\nif(_c6.fitColumns){\n_22(_c3);\n_b0(_c3);\n}\n}else{\nvar _c7=false;\nvar _c8=_73(_c3,true).concat(_73(_c3,false));\nfor(var i=0;i<_c8.length;i++){\nvar _c4=_c8[i];\nvar col=_74(_c3,_c4);\nif(col.auto){\n_1c(_c4);\n_c7=true;\n}\n}\nif(_c7&&_c6.fitColumns){\n_22(_c3);\n_b0(_c3);\n}\n}\ntmp.remove();\nfunction _1c(_c9){\nvar _ca=dc.view.find(\"div.datagrid-header td[field=\\\"\"+_c9+\"\\\"] div.datagrid-cell\");\n_ca.css(\"width\",\"\");\nvar col=$(_c3).datagrid(\"getColumnOption\",_c9);\ncol.width=undefined;\ncol.boxWidth=undefined;\ncol.auto=true;\n$(_c3).datagrid(\"fixColumnSize\",_c9);\nvar _cb=Math.max(_cc(\"header\"),_cc(\"allbody\"),_cc(\"allfooter\"))+1;\n_ca._outerWidth(_cb-1);\ncol.width=_cb;\ncol.boxWidth=parseInt(_ca[0].style.width);\ncol.deltaWidth=_cb-col.boxWidth;\n_ca.css(\"width\",\"\");\n$(_c3).datagrid(\"fixColumnSize\",_c9);\n_c6.onResizeColumn.call(_c3,_c9,col.width);\nfunction _cc(_cd){\nvar _ce=0;\nif(_cd==\"header\"){\n_ce=_cf(_ca);\n}else{\n_c6.finder.getTr(_c3,0,_cd).find(\"td[field=\\\"\"+_c9+\"\\\"] div.datagrid-cell\").each(function(){\nvar w=_cf($(this));\nif(_ce<w){\n_ce=w;\n}\n});\n}\nreturn _ce;\nfunction _cf(_d0){\nreturn _d0.is(\":visible\")?_d0._outerWidth():tmp.html(_d0.html())._outerWidth();\n};\n};\n};\n};\nfunction _d1(_d2,_d3){\nvar _d4=$.data(_d2,\"datagrid\");\nvar _d5=_d4.options;\nvar dc=_d4.dc;\nvar _d6=dc.view.find(\"table.datagrid-btable,table.datagrid-ftable\");\n_d6.css(\"table-layout\",\"fixed\");\nif(_d3){\nfix(_d3);\n}else{\nvar ff=_73(_d2,true).concat(_73(_d2,false));\nfor(var i=0;i<ff.length;i++){\nfix(ff[i]);\n}\n}\n_d6.css(\"table-layout\",\"auto\");\n_d7(_d2);\n_36(_d2);\n_d8(_d2);\nfunction fix(_d9){\nvar col=_74(_d2,_d9);\nif(col.cellClass){\n_d4.ss.set(\".\"+col.cellClass,col.boxWidth?col.boxWidth+\"px\":\"auto\");\n}\n};\n};\nfunction _d7(_da){\nvar dc=$.data(_da,\"datagrid\").dc;\ndc.view.find(\"td.datagrid-td-merged\").each(function(){\nvar td=$(this);\nvar _db=td.attr(\"colspan\")||1;\nvar col=_74(_da,td.attr(\"field\"));\nvar _dc=col.boxWidth+col.deltaWidth-1;\nfor(var i=1;i<_db;i++){\ntd=td.next();\ncol=_74(_da,td.attr(\"field\"));\n_dc+=col.boxWidth+col.deltaWidth;\n}\n$(this).children(\"div.datagrid-cell\")._outerWidth(_dc);\n});\n};\nfunction _d8(_dd){\nvar dc=$.data(_dd,\"datagrid\").dc;\ndc.view.find(\"div.datagrid-editable\").each(function(){\nvar _de=$(this);\nvar _df=_de.parent().attr(\"field\");\nvar col=$(_dd).datagrid(\"getColumnOption\",_df);\n_de._outerWidth(col.boxWidth+col.deltaWidth-1);\nvar ed=$.data(this,\"datagrid.editor\");\nif(ed.actions.resize){\ned.actions.resize(ed.target,_de.width());\n}\n});\n};\nfunction _74(_e0,_e1){\nfunction _e2(_e3){\nif(_e3){\nfor(var i=0;i<_e3.length;i++){\nvar cc=_e3[i];\nfor(var j=0;j<cc.length;j++){\nvar c=cc[j];\nif(c.field==_e1){\nreturn c;\n}\n}\n}\n}\nreturn null;\n};\nvar _e4=$.data(_e0,\"datagrid\").options;\nvar col=_e2(_e4.columns);\nif(!col){\ncol=_e2(_e4.frozenColumns);\n}\nreturn col;\n};\nfunction _73(_e5,_e6){\nvar _e7=$.data(_e5,\"datagrid\").options;\nvar _e8=(_e6==true)?(_e7.frozenColumns||[[]]):_e7.columns;\nif(_e8.length==0){\nreturn [];\n}\nvar aa=[];\nvar _e9=_ea();\nfor(var i=0;i<_e8.length;i++){\naa[i]=new Array(_e9);\n}\nfor(var _eb=0;_eb<_e8.length;_eb++){\n$.map(_e8[_eb],function(col){\nvar _ec=_ed(aa[_eb]);\nif(_ec>=0){\nvar _ee=col.field||\"\";\nfor(var c=0;c<(col.colspan||1);c++){\nfor(var r=0;r<(col.rowspan||1);r++){\naa[_eb+r][_ec]=_ee;\n}\n_ec++;\n}\n}\n});\n}\nreturn aa[aa.length-1];\nfunction _ea(){\nvar _ef=0;\n$.map(_e8[0],function(col){\n_ef+=col.colspan||1;\n});\nreturn _ef;\n};\nfunction _ed(a){\nfor(var i=0;i<a.length;i++){\nif(a[i]==undefined){\nreturn i;\n}\n}\nreturn -1;\n};\n};\nfunction _af(_f0,_f1){\nvar _f2=$.data(_f0,\"datagrid\");\nvar _f3=_f2.options;\nvar dc=_f2.dc;\n_f1=_f3.loadFilter.call(_f0,_f1);\n_f1.total=parseInt(_f1.total);\n_f2.data=_f1;\nif(_f1.footer){\n_f2.footer=_f1.footer;\n}\nif(!_f3.remoteSort&&_f3.sortName){\nvar _f4=_f3.sortName.split(\",\");\nvar _f5=_f3.sortOrder.split(\",\");\n_f1.rows.sort(function(r1,r2){\nvar r=0;\nfor(var i=0;i<_f4.length;i++){\nvar sn=_f4[i];\nvar so=_f5[i];\nvar col=_74(_f0,sn);\nvar _f6=col.sorter||function(a,b){\nreturn a==b?0:(a>b?1:-1);\n};\nr=_f6(r1[sn],r2[sn])*(so==\"asc\"?1:-1);\nif(r!=0){\nreturn r;\n}\n}\nreturn r;\n});\n}\nif(_f3.view.onBeforeRender){\n_f3.view.onBeforeRender.call(_f3.view,_f0,_f1.rows);\n}\n_f3.view.render.call(_f3.view,_f0,dc.body2,false);\n_f3.view.render.call(_f3.view,_f0,dc.body1,true);\nif(_f3.showFooter){\n_f3.view.renderFooter.call(_f3.view,_f0,dc.footer2,false);\n_f3.view.renderFooter.call(_f3.view,_f0,dc.footer1,true);\n}\nif(_f3.view.onAfterRender){\n_f3.view.onAfterRender.call(_f3.view,_f0);\n}\n_f2.ss.clean();\nvar _f7=$(_f0).datagrid(\"getPager\");\nif(_f7.length){\nvar _f8=_f7.pagination(\"options\");\nif(_f8.total!=_f1.total){\n_f7.pagination(\"refresh\",{total:_f1.total});\nif(_f3.pageNumber!=_f8.pageNumber&&_f8.pageNumber>0){\n_f3.pageNumber=_f8.pageNumber;\n_ae(_f0);\n}\n}\n}\n_36(_f0);\ndc.body2.triggerHandler(\"scroll\");\n$(_f0).datagrid(\"setSelectionState\");\n$(_f0).datagrid(\"autoSizeColumn\");\n_f3.onLoadSuccess.call(_f0,_f1);\n};\nfunction _f9(_fa){\nvar _fb=$.data(_fa,\"datagrid\");\nvar _fc=_fb.options;\nvar dc=_fb.dc;\ndc.header1.add(dc.header2).find(\"input[type=checkbox]\")._propAttr(\"checked\",false);\nif(_fc.idField){\nvar _fd=$.data(_fa,\"treegrid\")?true:false;\nvar _fe=_fc.onSelect;\nvar _ff=_fc.onCheck;\n_fc.onSelect=_fc.onCheck=function(){\n};\nvar rows=_fc.finder.getRows(_fa);\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nvar _100=_fd?row[_fc.idField]:i;\nif(_101(_fb.selectedRows,row)){\n_95(_fa,_100,true);\n}\nif(_101(_fb.checkedRows,row)){\n_92(_fa,_100,true);\n}\n}\n_fc.onSelect=_fe;\n_fc.onCheck=_ff;\n}\nfunction _101(a,r){\nfor(var i=0;i<a.length;i++){\nif(a[i][_fc.idField]==r[_fc.idField]){\na[i]=r;\nreturn true;\n}\n}\nreturn false;\n};\n};\nfunction _102(_103,row){\nvar _104=$.data(_103,\"datagrid\");\nvar opts=_104.options;\nvar rows=_104.data.rows;\nif(typeof row==\"object\"){\nreturn _2(rows,row);\n}else{\nfor(var i=0;i<rows.length;i++){\nif(rows[i][opts.idField]==row){\nreturn i;\n}\n}\nreturn -1;\n}\n};\nfunction _105(_106){\nvar _107=$.data(_106,\"datagrid\");\nvar opts=_107.options;\nvar data=_107.data;\nif(opts.idField){\nreturn _107.selectedRows;\n}else{\nvar rows=[];\nopts.finder.getTr(_106,\"\",\"selected\",2).each(function(){\nrows.push(opts.finder.getRow(_106,$(this)));\n});\nreturn rows;\n}\n};\nfunction _108(_109){\nvar _10a=$.data(_109,\"datagrid\");\nvar opts=_10a.options;\nif(opts.idField){\nreturn _10a.checkedRows;\n}else{\nvar rows=[];\nopts.finder.getTr(_109,\"\",\"checked\",2).each(function(){\nrows.push(opts.finder.getRow(_109,$(this)));\n});\nreturn rows;\n}\n};\nfunction _10b(_10c,_10d){\nvar _10e=$.data(_10c,\"datagrid\");\nvar dc=_10e.dc;\nvar opts=_10e.options;\nvar tr=opts.finder.getTr(_10c,_10d);\nif(tr.length){\nif(tr.closest(\"table\").hasClass(\"datagrid-btable-frozen\")){\nreturn;\n}\nvar _10f=dc.view2.children(\"div.datagrid-header\")._outerHeight();\nvar _110=dc.body2;\nvar _111=_110.outerHeight(true)-_110.outerHeight();\nvar top=tr.position().top-_10f-_111;\nif(top<0){\n_110.scrollTop(_110.scrollTop()+top);\n}else{\nif(top+tr._outerHeight()>_110.height()-18){\n_110.scrollTop(_110.scrollTop()+top+tr._outerHeight()-_110.height()+18);\n}\n}\n}\n};\nfunction _8c(_112,_113){\nvar _114=$.data(_112,\"datagrid\");\nvar opts=_114.options;\nopts.finder.getTr(_112,_114.highlightIndex).removeClass(\"datagrid-row-over\");\nopts.finder.getTr(_112,_113).addClass(\"datagrid-row-over\");\n_114.highlightIndex=_113;\n};\nfunction _95(_115,_116,_117){\nvar _118=$.data(_115,\"datagrid\");\nvar opts=_118.options;\nvar row=opts.finder.getRow(_115,_116);\nif(opts.onBeforeSelect.call(_115,_116,row)==false){\nreturn;\n}\nif(opts.singleSelect){\n_119(_115,true);\n_118.selectedRows=[];\n}\nif(!_117&&opts.checkOnSelect){\n_92(_115,_116,true);\n}\nif(opts.idField){\n_7(_118.selectedRows,opts.idField,row);\n}\nopts.finder.getTr(_115,_116).addClass(\"datagrid-row-selected\");\nopts.onSelect.call(_115,_116,row);\n_10b(_115,_116);\n};\nfunction _96(_11a,_11b,_11c){\nvar _11d=$.data(_11a,\"datagrid\");\nvar dc=_11d.dc;\nvar opts=_11d.options;\nvar row=opts.finder.getRow(_11a,_11b);\nif(opts.onBeforeUnselect.call(_11a,_11b,row)==false){\nreturn;\n}\nif(!_11c&&opts.checkOnSelect){\n_93(_11a,_11b,true);\n}\nopts.finder.getTr(_11a,_11b).removeClass(\"datagrid-row-selected\");\nif(opts.idField){\n_4(_11d.selectedRows,opts.idField,row[opts.idField]);\n}\nopts.onUnselect.call(_11a,_11b,row);\n};\nfunction _11e(_11f,_120){\nvar _121=$.data(_11f,\"datagrid\");\nvar opts=_121.options;\nvar rows=opts.finder.getRows(_11f);\nvar _122=$.data(_11f,\"datagrid\").selectedRows;\nif(!_120&&opts.checkOnSelect){\n_123(_11f,true);\n}\nopts.finder.getTr(_11f,\"\",\"allbody\").addClass(\"datagrid-row-selected\");\nif(opts.idField){\nfor(var _124=0;_124<rows.length;_124++){\n_7(_122,opts.idField,rows[_124]);\n}\n}\nopts.onSelectAll.call(_11f,rows);\n};\nfunction _119(_125,_126){\nvar _127=$.data(_125,\"datagrid\");\nvar opts=_127.options;\nvar rows=opts.finder.getRows(_125);\nvar _128=$.data(_125,\"datagrid\").selectedRows;\nif(!_126&&opts.checkOnSelect){\n_129(_125,true);\n}\nopts.finder.getTr(_125,\"\",\"selected\").removeClass(\"datagrid-row-selected\");\nif(opts.idField){\nfor(var _12a=0;_12a<rows.length;_12a++){\n_4(_128,opts.idField,rows[_12a][opts.idField]);\n}\n}\nopts.onUnselectAll.call(_125,rows);\n};\nfunction _92(_12b,_12c,_12d){\nvar _12e=$.data(_12b,\"datagrid\");\nvar opts=_12e.options;\nvar row=opts.finder.getRow(_12b,_12c);\nif(opts.onBeforeCheck.call(_12b,_12c,row)==false){\nreturn;\n}\nif(opts.singleSelect&&opts.selectOnCheck){\n_129(_12b,true);\n_12e.checkedRows=[];\n}\nif(!_12d&&opts.selectOnCheck){\n_95(_12b,_12c,true);\n}\nvar tr=opts.finder.getTr(_12b,_12c).addClass(\"datagrid-row-checked\");\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",true);\ntr=opts.finder.getTr(_12b,\"\",\"checked\",2);\nif(tr.length==opts.finder.getRows(_12b).length){\nvar dc=_12e.dc;\ndc.header1.add(dc.header2).find(\"input[type=checkbox]\")._propAttr(\"checked\",true);\n}\nif(opts.idField){\n_7(_12e.checkedRows,opts.idField,row);\n}\nopts.onCheck.call(_12b,_12c,row);\n};\nfunction _93(_12f,_130,_131){\nvar _132=$.data(_12f,\"datagrid\");\nvar opts=_132.options;\nvar row=opts.finder.getRow(_12f,_130);\nif(opts.onBeforeUncheck.call(_12f,_130,row)==false){\nreturn;\n}\nif(!_131&&opts.selectOnCheck){\n_96(_12f,_130,true);\n}\nvar tr=opts.finder.getTr(_12f,_130).removeClass(\"datagrid-row-checked\");\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",false);\nvar dc=_132.dc;\nvar _133=dc.header1.add(dc.header2);\n_133.find(\"input[type=checkbox]\")._propAttr(\"checked\",false);\nif(opts.idField){\n_4(_132.checkedRows,opts.idField,row[opts.idField]);\n}\nopts.onUncheck.call(_12f,_130,row);\n};\nfunction _123(_134,_135){\nvar _136=$.data(_134,\"datagrid\");\nvar opts=_136.options;\nvar rows=opts.finder.getRows(_134);\nif(!_135&&opts.selectOnCheck){\n_11e(_134,true);\n}\nvar dc=_136.dc;\nvar hck=dc.header1.add(dc.header2).find(\"input[type=checkbox]\");\nvar bck=opts.finder.getTr(_134,\"\",\"allbody\").addClass(\"datagrid-row-checked\").find(\"div.datagrid-cell-check input[type=checkbox]\");\nhck.add(bck)._propAttr(\"checked\",true);\nif(opts.idField){\nfor(var i=0;i<rows.length;i++){\n_7(_136.checkedRows,opts.idField,rows[i]);\n}\n}\nopts.onCheckAll.call(_134,rows);\n};\nfunction _129(_137,_138){\nvar _139=$.data(_137,\"datagrid\");\nvar opts=_139.options;\nvar rows=opts.finder.getRows(_137);\nif(!_138&&opts.selectOnCheck){\n_119(_137,true);\n}\nvar dc=_139.dc;\nvar hck=dc.header1.add(dc.header2).find(\"input[type=checkbox]\");\nvar bck=opts.finder.getTr(_137,\"\",\"checked\").removeClass(\"datagrid-row-checked\").find(\"div.datagrid-cell-check input[type=checkbox]\");\nhck.add(bck)._propAttr(\"checked\",false);\nif(opts.idField){\nfor(var i=0;i<rows.length;i++){\n_4(_139.checkedRows,opts.idField,rows[i][opts.idField]);\n}\n}\nopts.onUncheckAll.call(_137,rows);\n};\nfunction _13a(_13b,_13c){\nvar opts=$.data(_13b,\"datagrid\").options;\nvar tr=opts.finder.getTr(_13b,_13c);\nvar row=opts.finder.getRow(_13b,_13c);\nif(tr.hasClass(\"datagrid-row-editing\")){\nreturn;\n}\nif(opts.onBeforeEdit.call(_13b,_13c,row)==false){\nreturn;\n}\ntr.addClass(\"datagrid-row-editing\");\n_13d(_13b,_13c);\n_d8(_13b);\ntr.find(\"div.datagrid-editable\").each(function(){\nvar _13e=$(this).parent().attr(\"field\");\nvar ed=$.data(this,\"datagrid.editor\");\ned.actions.setValue(ed.target,row[_13e]);\n});\n_13f(_13b,_13c);\nopts.onBeginEdit.call(_13b,_13c,row);\n};\nfunction _140(_141,_142,_143){\nvar _144=$.data(_141,\"datagrid\");\nvar opts=_144.options;\nvar _145=_144.updatedRows;\nvar _146=_144.insertedRows;\nvar tr=opts.finder.getTr(_141,_142);\nvar row=opts.finder.getRow(_141,_142);\nif(!tr.hasClass(\"datagrid-row-editing\")){\nreturn;\n}\nif(!_143){\nif(!_13f(_141,_142)){\nreturn;\n}\nvar _147=false;\nvar _148={};\ntr.find(\"div.datagrid-editable\").each(function(){\nvar _149=$(this).parent().attr(\"field\");\nvar ed=$.data(this,\"datagrid.editor\");\nvar t=$(ed.target);\nvar _14a=t.data(\"textbox\")?t.textbox(\"textbox\"):t;\n_14a.triggerHandler(\"blur\");\nvar _14b=ed.actions.getValue(ed.target);\nif(row[_149]!=_14b){\nrow[_149]=_14b;\n_147=true;\n_148[_149]=_14b;\n}\n});\nif(_147){\nif(_2(_146,row)==-1){\nif(_2(_145,row)==-1){\n_145.push(row);\n}\n}\n}\nopts.onEndEdit.call(_141,_142,row,_148);\n}\ntr.removeClass(\"datagrid-row-editing\");\n_14c(_141,_142);\n$(_141).datagrid(\"refreshRow\",_142);\nif(!_143){\nopts.onAfterEdit.call(_141,_142,row,_148);\n}else{\nopts.onCancelEdit.call(_141,_142,row);\n}\n};\nfunction _14d(_14e,_14f){\nvar opts=$.data(_14e,\"datagrid\").options;\nvar tr=opts.finder.getTr(_14e,_14f);\nvar _150=[];\ntr.children(\"td\").each(function(){\nvar cell=$(this).find(\"div.datagrid-editable\");\nif(cell.length){\nvar ed=$.data(cell[0],\"datagrid.editor\");\n_150.push(ed);\n}\n});\nreturn _150;\n};\nfunction _151(_152,_153){\nvar _154=_14d(_152,_153.index!=undefined?_153.index:_153.id);\nfor(var i=0;i<_154.length;i++){\nif(_154[i].field==_153.field){\nreturn _154[i];\n}\n}\nreturn null;\n};\nfunction _13d(_155,_156){\nvar opts=$.data(_155,\"datagrid\").options;\nvar tr=opts.finder.getTr(_155,_156);\ntr.children(\"td\").each(function(){\nvar cell=$(this).find(\"div.datagrid-cell\");\nvar _157=$(this).attr(\"field\");\nvar col=_74(_155,_157);\nif(col&&col.editor){\nvar _158,_159;\nif(typeof col.editor==\"string\"){\n_158=col.editor;\n}else{\n_158=col.editor.type;\n_159=col.editor.options;\n}\nvar _15a=opts.editors[_158];\nif(_15a){\nvar _15b=cell.html();\nvar _15c=cell._outerWidth();\ncell.addClass(\"datagrid-editable\");\ncell._outerWidth(_15c);\ncell.html(\"<table border=\\\"0\\\" cellspacing=\\\"0\\\" cellpadding=\\\"1\\\"><tr><td></td></tr></table>\");\ncell.children(\"table\").bind(\"click dblclick contextmenu\",function(e){\ne.stopPropagation();\n});\n$.data(cell[0],\"datagrid.editor\",{actions:_15a,target:_15a.init(cell.find(\"td\"),_159),field:_157,type:_158,oldHtml:_15b});\n}\n}\n});\n_36(_155,_156,true);\n};\nfunction _14c(_15d,_15e){\nvar opts=$.data(_15d,\"datagrid\").options;\nvar tr=opts.finder.getTr(_15d,_15e);\ntr.children(\"td\").each(function(){\nvar cell=$(this).find(\"div.datagrid-editable\");\nif(cell.length){\nvar ed=$.data(cell[0],\"datagrid.editor\");\nif(ed.actions.destroy){\ned.actions.destroy(ed.target);\n}\ncell.html(ed.oldHtml);\n$.removeData(cell[0],\"datagrid.editor\");\ncell.removeClass(\"datagrid-editable\");\ncell.css(\"width\",\"\");\n}\n});\n};\nfunction _13f(_15f,_160){\nvar tr=$.data(_15f,\"datagrid\").options.finder.getTr(_15f,_160);\nif(!tr.hasClass(\"datagrid-row-editing\")){\nreturn true;\n}\nvar vbox=tr.find(\".validatebox-text\");\nvbox.validatebox(\"validate\");\nvbox.trigger(\"mouseleave\");\nvar _161=tr.find(\".validatebox-invalid\");\nreturn _161.length==0;\n};\nfunction _162(_163,_164){\nvar _165=$.data(_163,\"datagrid\").insertedRows;\nvar _166=$.data(_163,\"datagrid\").deletedRows;\nvar _167=$.data(_163,\"datagrid\").updatedRows;\nif(!_164){\nvar rows=[];\nrows=rows.concat(_165);\nrows=rows.concat(_166);\nrows=rows.concat(_167);\nreturn rows;\n}else{\nif(_164==\"inserted\"){\nreturn _165;\n}else{\nif(_164==\"deleted\"){\nreturn _166;\n}else{\nif(_164==\"updated\"){\nreturn _167;\n}\n}\n}\n}\nreturn [];\n};\nfunction _168(_169,_16a){\nvar _16b=$.data(_169,\"datagrid\");\nvar opts=_16b.options;\nvar data=_16b.data;\nvar _16c=_16b.insertedRows;\nvar _16d=_16b.deletedRows;\n$(_169).datagrid(\"cancelEdit\",_16a);\nvar row=opts.finder.getRow(_169,_16a);\nif(_2(_16c,row)>=0){\n_4(_16c,row);\n}else{\n_16d.push(row);\n}\n_4(_16b.selectedRows,opts.idField,row[opts.idField]);\n_4(_16b.checkedRows,opts.idField,row[opts.idField]);\nopts.view.deleteRow.call(opts.view,_169,_16a);\nif(opts.height==\"auto\"){\n_36(_169);\n}\n$(_169).datagrid(\"getPager\").pagination(\"refresh\",{total:data.total});\n};\nfunction _16e(_16f,_170){\nvar data=$.data(_16f,\"datagrid\").data;\nvar view=$.data(_16f,\"datagrid\").options.view;\nvar _171=$.data(_16f,\"datagrid\").insertedRows;\nview.insertRow.call(view,_16f,_170.index,_170.row);\n_171.push(_170.row);\n$(_16f).datagrid(\"getPager\").pagination(\"refresh\",{total:data.total});\n};\nfunction _172(_173,row){\nvar data=$.data(_173,\"datagrid\").data;\nvar view=$.data(_173,\"datagrid\").options.view;\nvar _174=$.data(_173,\"datagrid\").insertedRows;\nview.insertRow.call(view,_173,null,row);\n_174.push(row);\n$(_173).datagrid(\"getPager\").pagination(\"refresh\",{total:data.total});\n};\nfunction _175(_176){\nvar _177=$.data(_176,\"datagrid\");\nvar data=_177.data;\nvar rows=data.rows;\nvar _178=[];\nfor(var i=0;i<rows.length;i++){\n_178.push($.extend({},rows[i]));\n}\n_177.originalRows=_178;\n_177.updatedRows=[];\n_177.insertedRows=[];\n_177.deletedRows=[];\n};\nfunction _179(_17a){\nvar data=$.data(_17a,\"datagrid\").data;\nvar ok=true;\nfor(var i=0,len=data.rows.length;i<len;i++){\nif(_13f(_17a,i)){\n$(_17a).datagrid(\"endEdit\",i);\n}else{\nok=false;\n}\n}\nif(ok){\n_175(_17a);\n}\n};\nfunction _17b(_17c){\nvar _17d=$.data(_17c,\"datagrid\");\nvar opts=_17d.options;\nvar _17e=_17d.originalRows;\nvar _17f=_17d.insertedRows;\nvar _180=_17d.deletedRows;\nvar _181=_17d.selectedRows;\nvar _182=_17d.checkedRows;\nvar data=_17d.data;\nfunction _183(a){\nvar ids=[];\nfor(var i=0;i<a.length;i++){\nids.push(a[i][opts.idField]);\n}\nreturn ids;\n};\nfunction _184(ids,_185){\nfor(var i=0;i<ids.length;i++){\nvar _186=_102(_17c,ids[i]);\nif(_186>=0){\n(_185==\"s\"?_95:_92)(_17c,_186,true);\n}\n}\n};\nfor(var i=0;i<data.rows.length;i++){\n$(_17c).datagrid(\"cancelEdit\",i);\n}\nvar _187=_183(_181);\nvar _188=_183(_182);\n_181.splice(0,_181.length);\n_182.splice(0,_182.length);\ndata.total+=_180.length-_17f.length;\ndata.rows=_17e;\n_af(_17c,data);\n_184(_187,\"s\");\n_184(_188,\"c\");\n_175(_17c);\n};\nfunction _ae(_189,_18a){\nvar opts=$.data(_189,\"datagrid\").options;\nif(_18a){\nopts.queryParams=_18a;\n}\nvar _18b=$.extend({},opts.queryParams);\nif(opts.pagination){\n$.extend(_18b,{page:opts.pageNumber||1,rows:opts.pageSize});\n}\nif(opts.sortName){\n$.extend(_18b,{sort:opts.sortName,order:opts.sortOrder});\n}\nif(opts.onBeforeLoad.call(_189,_18b)==false){\nreturn;\n}\n$(_189).datagrid(\"loading\");\nsetTimeout(function(){\n_18c();\n},0);\nfunction _18c(){\nvar _18d=opts.loader.call(_189,_18b,function(data){\nsetTimeout(function(){\n$(_189).datagrid(\"loaded\");\n},0);\n_af(_189,data);\nsetTimeout(function(){\n_175(_189);\n},0);\n},function(){\nsetTimeout(function(){\n$(_189).datagrid(\"loaded\");\n},0);\nopts.onLoadError.apply(_189,arguments);\n});\nif(_18d==false){\n$(_189).datagrid(\"loaded\");\n}\n};\n};\nfunction _18e(_18f,_190){\nvar opts=$.data(_18f,\"datagrid\").options;\n_190.type=_190.type||\"body\";\n_190.rowspan=_190.rowspan||1;\n_190.colspan=_190.colspan||1;\nif(_190.rowspan==1&&_190.colspan==1){\nreturn;\n}\nvar tr=opts.finder.getTr(_18f,(_190.index!=undefined?_190.index:_190.id),_190.type);\nif(!tr.length){\nreturn;\n}\nvar td=tr.find(\"td[field=\\\"\"+_190.field+\"\\\"]\");\ntd.attr(\"rowspan\",_190.rowspan).attr(\"colspan\",_190.colspan);\ntd.addClass(\"datagrid-td-merged\");\n_191(td.next(),_190.colspan-1);\nfor(var i=1;i<_190.rowspan;i++){\ntr=tr.next();\nif(!tr.length){\nbreak;\n}\ntd=tr.find(\"td[field=\\\"\"+_190.field+\"\\\"]\");\n_191(td,_190.colspan);\n}\n_d7(_18f);\nfunction _191(td,_192){\nfor(var i=0;i<_192;i++){\ntd.hide();\ntd=td.next();\n}\n};\n};\n$.fn.datagrid=function(_193,_194){\nif(typeof _193==\"string\"){\nreturn $.fn.datagrid.methods[_193](this,_194);\n}\n_193=_193||{};\nreturn this.each(function(){\nvar _195=$.data(this,\"datagrid\");\nvar opts;\nif(_195){\nopts=$.extend(_195.options,_193);\n_195.options=opts;\n}else{\nopts=$.extend({},$.extend({},$.fn.datagrid.defaults,{queryParams:{}}),$.fn.datagrid.parseOptions(this),_193);\n$(this).css(\"width\",\"\").css(\"height\",\"\");\nvar _196=_4f(this,opts.rownumbers);\nif(!opts.columns){\nopts.columns=_196.columns;\n}\nif(!opts.frozenColumns){\nopts.frozenColumns=_196.frozenColumns;\n}\nopts.columns=$.extend(true,[],opts.columns);\nopts.frozenColumns=$.extend(true,[],opts.frozenColumns);\nopts.view=$.extend({},opts.view);\n$.data(this,\"datagrid\",{options:opts,panel:_196.panel,dc:_196.dc,ss:null,selectedRows:[],checkedRows:[],data:{total:0,rows:[]},originalRows:[],updatedRows:[],insertedRows:[],deletedRows:[]});\n}\n_5a(this);\n_75(this);\n_1c(this);\nif(opts.data){\n_af(this,opts.data);\n_175(this);\n}else{\nvar data=$.fn.datagrid.parseData(this);\nif(data.total>0){\n_af(this,data);\n_175(this);\n}\n}\n_ae(this);\n});\n};\nfunction _197(_198){\nvar _199={};\n$.map(_198,function(name){\n_199[name]=_19a(name);\n});\nreturn _199;\nfunction _19a(name){\nfunction isA(_19b){\nreturn $.data($(_19b)[0],name)!=undefined;\n};\nreturn {init:function(_19c,_19d){\nvar _19e=$(\"<input type=\\\"text\\\" class=\\\"datagrid-editable-input\\\">\").appendTo(_19c);\nif(_19e[name]&&name!=\"text\"){\nreturn _19e[name](_19d);\n}else{\nreturn _19e;\n}\n},destroy:function(_19f){\nif(isA(_19f,name)){\n$(_19f)[name](\"destroy\");\n}\n},getValue:function(_1a0){\nif(isA(_1a0,name)){\nvar opts=$(_1a0)[name](\"options\");\nif(opts.multiple){\nreturn $(_1a0)[name](\"getValues\").join(opts.separator);\n}else{\nreturn $(_1a0)[name](\"getValue\");\n}\n}else{\nreturn $(_1a0).val();\n}\n},setValue:function(_1a1,_1a2){\nif(isA(_1a1,name)){\nvar opts=$(_1a1)[name](\"options\");\nif(opts.multiple){\nif(_1a2){\n$(_1a1)[name](\"setValues\",_1a2.split(opts.separator));\n}else{\n$(_1a1)[name](\"clear\");\n}\n}else{\n$(_1a1)[name](\"setValue\",_1a2);\n}\n}else{\n$(_1a1).val(_1a2);\n}\n},resize:function(_1a3,_1a4){\nif(isA(_1a3,name)){\n$(_1a3)[name](\"resize\",_1a4);\n}else{\n$(_1a3)._outerWidth(_1a4)._outerHeight(22);\n}\n}};\n};\n};\nvar _1a5=$.extend({},_197([\"text\",\"textbox\",\"numberbox\",\"numberspinner\",\"combobox\",\"combotree\",\"combogrid\",\"datebox\",\"datetimebox\",\"timespinner\",\"datetimespinner\"]),{textarea:{init:function(_1a6,_1a7){\nvar _1a8=$(\"<textarea class=\\\"datagrid-editable-input\\\"></textarea>\").appendTo(_1a6);\nreturn _1a8;\n},getValue:function(_1a9){\nreturn $(_1a9).val();\n},setValue:function(_1aa,_1ab){\n$(_1aa).val(_1ab);\n},resize:function(_1ac,_1ad){\n$(_1ac)._outerWidth(_1ad);\n}},checkbox:{init:function(_1ae,_1af){\nvar _1b0=$(\"<input type=\\\"checkbox\\\">\").appendTo(_1ae);\n_1b0.val(_1af.on);\n_1b0.attr(\"offval\",_1af.off);\nreturn _1b0;\n},getValue:function(_1b1){\nif($(_1b1).is(\":checked\")){\nreturn $(_1b1).val();\n}else{\nreturn $(_1b1).attr(\"offval\");\n}\n},setValue:function(_1b2,_1b3){\nvar _1b4=false;\nif($(_1b2).val()==_1b3){\n_1b4=true;\n}\n$(_1b2)._propAttr(\"checked\",_1b4);\n}},validatebox:{init:function(_1b5,_1b6){\nvar _1b7=$(\"<input type=\\\"text\\\" class=\\\"datagrid-editable-input\\\">\").appendTo(_1b5);\n_1b7.validatebox(_1b6);\nreturn _1b7;\n},destroy:function(_1b8){\n$(_1b8).validatebox(\"destroy\");\n},getValue:function(_1b9){\nreturn $(_1b9).val();\n},setValue:function(_1ba,_1bb){\n$(_1ba).val(_1bb);\n},resize:function(_1bc,_1bd){\n$(_1bc)._outerWidth(_1bd)._outerHeight(22);\n}}});\n$.fn.datagrid.methods={options:function(jq){\nvar _1be=$.data(jq[0],\"datagrid\").options;\nvar _1bf=$.data(jq[0],\"datagrid\").panel.panel(\"options\");\nvar opts=$.extend(_1be,{width:_1bf.width,height:_1bf.height,closed:_1bf.closed,collapsed:_1bf.collapsed,minimized:_1bf.minimized,maximized:_1bf.maximized});\nreturn opts;\n},setSelectionState:function(jq){\nreturn jq.each(function(){\n_f9(this);\n});\n},createStyleSheet:function(jq){\nreturn _9(jq[0]);\n},getPanel:function(jq){\nreturn $.data(jq[0],\"datagrid\").panel;\n},getPager:function(jq){\nreturn $.data(jq[0],\"datagrid\").panel.children(\"div.datagrid-pager\");\n},getColumnFields:function(jq,_1c0){\nreturn _73(jq[0],_1c0);\n},getColumnOption:function(jq,_1c1){\nreturn _74(jq[0],_1c1);\n},resize:function(jq,_1c2){\nreturn jq.each(function(){\n_1c(this,_1c2);\n});\n},load:function(jq,_1c3){\nreturn jq.each(function(){\nvar opts=$(this).datagrid(\"options\");\nif(typeof _1c3==\"string\"){\nopts.url=_1c3;\n_1c3=null;\n}\nopts.pageNumber=1;\nvar _1c4=$(this).datagrid(\"getPager\");\n_1c4.pagination(\"refresh\",{pageNumber:1});\n_ae(this,_1c3);\n});\n},reload:function(jq,_1c5){\nreturn jq.each(function(){\nvar opts=$(this).datagrid(\"options\");\nif(typeof _1c5==\"string\"){\nopts.url=_1c5;\n_1c5=null;\n}\n_ae(this,_1c5);\n});\n},reloadFooter:function(jq,_1c6){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\nvar dc=$.data(this,\"datagrid\").dc;\nif(_1c6){\n$.data(this,\"datagrid\").footer=_1c6;\n}\nif(opts.showFooter){\nopts.view.renderFooter.call(opts.view,this,dc.footer2,false);\nopts.view.renderFooter.call(opts.view,this,dc.footer1,true);\nif(opts.view.onAfterRender){\nopts.view.onAfterRender.call(opts.view,this);\n}\n$(this).datagrid(\"fixRowHeight\");\n}\n});\n},loading:function(jq){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\n$(this).datagrid(\"getPager\").pagination(\"loading\");\nif(opts.loadMsg){\nvar _1c7=$(this).datagrid(\"getPanel\");\nif(!_1c7.children(\"div.datagrid-mask\").length){\n$(\"<div class=\\\"datagrid-mask\\\" style=\\\"display:block\\\"></div>\").appendTo(_1c7);\nvar msg=$(\"<div class=\\\"datagrid-mask-msg\\\" style=\\\"display:block;left:50%\\\"></div>\").html(opts.loadMsg).appendTo(_1c7);\nmsg._outerHeight(40);\nmsg.css({marginLeft:(-msg.outerWidth()/2),lineHeight:(msg.height()+\"px\")});\n}\n}\n});\n},loaded:function(jq){\nreturn jq.each(function(){\n$(this).datagrid(\"getPager\").pagination(\"loaded\");\nvar _1c8=$(this).datagrid(\"getPanel\");\n_1c8.children(\"div.datagrid-mask-msg\").remove();\n_1c8.children(\"div.datagrid-mask\").remove();\n});\n},fitColumns:function(jq){\nreturn jq.each(function(){\n_b0(this);\n});\n},fixColumnSize:function(jq,_1c9){\nreturn jq.each(function(){\n_d1(this,_1c9);\n});\n},fixRowHeight:function(jq,_1ca){\nreturn jq.each(function(){\n_36(this,_1ca);\n});\n},freezeRow:function(jq,_1cb){\nreturn jq.each(function(){\n_47(this,_1cb);\n});\n},autoSizeColumn:function(jq,_1cc){\nreturn jq.each(function(){\n_c2(this,_1cc);\n});\n},loadData:function(jq,data){\nreturn jq.each(function(){\n_af(this,data);\n_175(this);\n});\n},getData:function(jq){\nreturn $.data(jq[0],\"datagrid\").data;\n},getRows:function(jq){\nreturn $.data(jq[0],\"datagrid\").data.rows;\n},getFooterRows:function(jq){\nreturn $.data(jq[0],\"datagrid\").footer;\n},getRowIndex:function(jq,id){\nreturn _102(jq[0],id);\n},getChecked:function(jq){\nreturn _108(jq[0]);\n},getSelected:function(jq){\nvar rows=_105(jq[0]);\nreturn rows.length>0?rows[0]:null;\n},getSelections:function(jq){\nreturn _105(jq[0]);\n},clearSelections:function(jq){\nreturn jq.each(function(){\nvar _1cd=$.data(this,\"datagrid\");\nvar _1ce=_1cd.selectedRows;\nvar _1cf=_1cd.checkedRows;\n_1ce.splice(0,_1ce.length);\n_119(this);\nif(_1cd.options.checkOnSelect){\n_1cf.splice(0,_1cf.length);\n}\n});\n},clearChecked:function(jq){\nreturn jq.each(function(){\nvar _1d0=$.data(this,\"datagrid\");\nvar _1d1=_1d0.selectedRows;\nvar _1d2=_1d0.checkedRows;\n_1d2.splice(0,_1d2.length);\n_129(this);\nif(_1d0.options.selectOnCheck){\n_1d1.splice(0,_1d1.length);\n}\n});\n},scrollTo:function(jq,_1d3){\nreturn jq.each(function(){\n_10b(this,_1d3);\n});\n},highlightRow:function(jq,_1d4){\nreturn jq.each(function(){\n_8c(this,_1d4);\n_10b(this,_1d4);\n});\n},selectAll:function(jq){\nreturn jq.each(function(){\n_11e(this);\n});\n},unselectAll:function(jq){\nreturn jq.each(function(){\n_119(this);\n});\n},selectRow:function(jq,_1d5){\nreturn jq.each(function(){\n_95(this,_1d5);\n});\n},selectRecord:function(jq,id){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\nif(opts.idField){\nvar _1d6=_102(this,id);\nif(_1d6>=0){\n$(this).datagrid(\"selectRow\",_1d6);\n}\n}\n});\n},unselectRow:function(jq,_1d7){\nreturn jq.each(function(){\n_96(this,_1d7);\n});\n},checkRow:function(jq,_1d8){\nreturn jq.each(function(){\n_92(this,_1d8);\n});\n},uncheckRow:function(jq,_1d9){\nreturn jq.each(function(){\n_93(this,_1d9);\n});\n},checkAll:function(jq){\nreturn jq.each(function(){\n_123(this);\n});\n},uncheckAll:function(jq){\nreturn jq.each(function(){\n_129(this);\n});\n},beginEdit:function(jq,_1da){\nreturn jq.each(function(){\n_13a(this,_1da);\n});\n},endEdit:function(jq,_1db){\nreturn jq.each(function(){\n_140(this,_1db,false);\n});\n},cancelEdit:function(jq,_1dc){\nreturn jq.each(function(){\n_140(this,_1dc,true);\n});\n},getEditors:function(jq,_1dd){\nreturn _14d(jq[0],_1dd);\n},getEditor:function(jq,_1de){\nreturn _151(jq[0],_1de);\n},refreshRow:function(jq,_1df){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\nopts.view.refreshRow.call(opts.view,this,_1df);\n});\n},validateRow:function(jq,_1e0){\nreturn _13f(jq[0],_1e0);\n},updateRow:function(jq,_1e1){\nreturn jq.each(function(){\nvar opts=$.data(this,\"datagrid\").options;\nopts.view.updateRow.call(opts.view,this,_1e1.index,_1e1.row);\n});\n},appendRow:function(jq,row){\nreturn jq.each(function(){\n_172(this,row);\n});\n},insertRow:function(jq,_1e2){\nreturn jq.each(function(){\n_16e(this,_1e2);\n});\n},deleteRow:function(jq,_1e3){\nreturn jq.each(function(){\n_168(this,_1e3);\n});\n},getChanges:function(jq,_1e4){\nreturn _162(jq[0],_1e4);\n},acceptChanges:function(jq){\nreturn jq.each(function(){\n_179(this);\n});\n},rejectChanges:function(jq){\nreturn jq.each(function(){\n_17b(this);\n});\n},mergeCells:function(jq,_1e5){\nreturn jq.each(function(){\n_18e(this,_1e5);\n});\n},showColumn:function(jq,_1e6){\nreturn jq.each(function(){\nvar _1e7=$(this).datagrid(\"getPanel\");\n_1e7.find(\"td[field=\\\"\"+_1e6+\"\\\"]\").show();\n$(this).datagrid(\"getColumnOption\",_1e6).hidden=false;\n$(this).datagrid(\"fitColumns\");\n});\n},hideColumn:function(jq,_1e8){\nreturn jq.each(function(){\nvar _1e9=$(this).datagrid(\"getPanel\");\n_1e9.find(\"td[field=\\\"\"+_1e8+\"\\\"]\").hide();\n$(this).datagrid(\"getColumnOption\",_1e8).hidden=true;\n$(this).datagrid(\"fitColumns\");\n});\n},sort:function(jq,_1ea){\nreturn jq.each(function(){\n_a2(this,_1ea);\n});\n}};\n$.fn.datagrid.parseOptions=function(_1eb){\nvar t=$(_1eb);\nreturn $.extend({},$.fn.panel.parseOptions(_1eb),$.parser.parseOptions(_1eb,[\"url\",\"toolbar\",\"idField\",\"sortName\",\"sortOrder\",\"pagePosition\",\"resizeHandle\",{sharedStyleSheet:\"boolean\",fitColumns:\"boolean\",autoRowHeight:\"boolean\",striped:\"boolean\",nowrap:\"boolean\"},{rownumbers:\"boolean\",singleSelect:\"boolean\",ctrlSelect:\"boolean\",checkOnSelect:\"boolean\",selectOnCheck:\"boolean\"},{pagination:\"boolean\",pageSize:\"number\",pageNumber:\"number\"},{multiSort:\"boolean\",remoteSort:\"boolean\",showHeader:\"boolean\",showFooter:\"boolean\"},{scrollbarSize:\"number\"}]),{pageList:(t.attr(\"pageList\")?eval(t.attr(\"pageList\")):undefined),loadMsg:(t.attr(\"loadMsg\")!=undefined?t.attr(\"loadMsg\"):undefined),rowStyler:(t.attr(\"rowStyler\")?eval(t.attr(\"rowStyler\")):undefined)});\n};\n$.fn.datagrid.parseData=function(_1ec){\nvar t=$(_1ec);\nvar data={total:0,rows:[]};\nvar _1ed=t.datagrid(\"getColumnFields\",true).concat(t.datagrid(\"getColumnFields\",false));\nt.find(\"tbody tr\").each(function(){\ndata.total++;\nvar row={};\n$.extend(row,$.parser.parseOptions(this,[\"iconCls\",\"state\"]));\nfor(var i=0;i<_1ed.length;i++){\nrow[_1ed[i]]=$(this).find(\"td:eq(\"+i+\")\").html();\n}\ndata.rows.push(row);\n});\nreturn data;\n};\nvar _1ee={render:function(_1ef,_1f0,_1f1){\nvar _1f2=$.data(_1ef,\"datagrid\");\nvar opts=_1f2.options;\nvar rows=_1f2.data.rows;\nvar _1f3=$(_1ef).datagrid(\"getColumnFields\",_1f1);\nif(_1f1){\nif(!(opts.rownumbers||(opts.frozenColumns&&opts.frozenColumns.length))){\nreturn;\n}\n}\nvar _1f4=[\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<rows.length;i++){\nvar css=opts.rowStyler?opts.rowStyler.call(_1ef,i,rows[i]):\"\";\nvar _1f5=\"\";\nvar _1f6=\"\";\nif(typeof css==\"string\"){\n_1f6=css;\n}else{\nif(css){\n_1f5=css[\"class\"]||\"\";\n_1f6=css[\"style\"]||\"\";\n}\n}\nvar cls=\"class=\\\"datagrid-row \"+(i%2&&opts.striped?\"datagrid-row-alt \":\" \")+_1f5+\"\\\"\";\nvar _1f7=_1f6?\"style=\\\"\"+_1f6+\"\\\"\":\"\";\nvar _1f8=_1f2.rowIdPrefix+\"-\"+(_1f1?1:2)+\"-\"+i;\n_1f4.push(\"<tr id=\\\"\"+_1f8+\"\\\" datagrid-row-index=\\\"\"+i+\"\\\" \"+cls+\" \"+_1f7+\">\");\n_1f4.push(this.renderRow.call(this,_1ef,_1f3,_1f1,i,rows[i]));\n_1f4.push(\"</tr>\");\n}\n_1f4.push(\"</tbody></table>\");\n$(_1f0).html(_1f4.join(\"\"));\n},renderFooter:function(_1f9,_1fa,_1fb){\nvar opts=$.data(_1f9,\"datagrid\").options;\nvar rows=$.data(_1f9,\"datagrid\").footer||[];\nvar _1fc=$(_1f9).datagrid(\"getColumnFields\",_1fb);\nvar _1fd=[\"<table class=\\\"datagrid-ftable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<rows.length;i++){\n_1fd.push(\"<tr class=\\\"datagrid-row\\\" datagrid-row-index=\\\"\"+i+\"\\\">\");\n_1fd.push(this.renderRow.call(this,_1f9,_1fc,_1fb,i,rows[i]));\n_1fd.push(\"</tr>\");\n}\n_1fd.push(\"</tbody></table>\");\n$(_1fa).html(_1fd.join(\"\"));\n},renderRow:function(_1fe,_1ff,_200,_201,_202){\nvar opts=$.data(_1fe,\"datagrid\").options;\nvar cc=[];\nif(_200&&opts.rownumbers){\nvar _203=_201+1;\nif(opts.pagination){\n_203+=(opts.pageNumber-1)*opts.pageSize;\n}\ncc.push(\"<td class=\\\"datagrid-td-rownumber\\\"><div class=\\\"datagrid-cell-rownumber\\\">\"+_203+\"</div></td>\");\n}\nfor(var i=0;i<_1ff.length;i++){\nvar _204=_1ff[i];\nvar col=$(_1fe).datagrid(\"getColumnOption\",_204);\nif(col){\nvar _205=_202[_204];\nvar css=col.styler?(col.styler(_205,_202,_201)||\"\"):\"\";\nvar _206=\"\";\nvar _207=\"\";\nif(typeof css==\"string\"){\n_207=css;\n}else{\nif(css){\n_206=css[\"class\"]||\"\";\n_207=css[\"style\"]||\"\";\n}\n}\nvar cls=_206?\"class=\\\"\"+_206+\"\\\"\":\"\";\nvar _208=col.hidden?\"style=\\\"display:none;\"+_207+\"\\\"\":(_207?\"style=\\\"\"+_207+\"\\\"\":\"\");\ncc.push(\"<td field=\\\"\"+_204+\"\\\" \"+cls+\" \"+_208+\">\");\nvar _208=\"\";\nif(!col.checkbox){\nif(col.align){\n_208+=\"text-align:\"+col.align+\";\";\n}\nif(!opts.nowrap){\n_208+=\"white-space:normal;height:auto;\";\n}else{\nif(opts.autoRowHeight){\n_208+=\"height:auto;\";\n}\n}\n}\ncc.push(\"<div style=\\\"\"+_208+\"\\\" \");\ncc.push(col.checkbox?\"class=\\\"datagrid-cell-check\\\"\":\"class=\\\"datagrid-cell \"+col.cellClass+\"\\\"\");\ncc.push(\">\");\nif(col.checkbox){\ncc.push(\"<input type=\\\"checkbox\\\" \"+(_202.checked?\"checked=\\\"checked\\\"\":\"\"));\ncc.push(\" name=\\\"\"+_204+\"\\\" value=\\\"\"+(_205!=undefined?_205:\"\")+\"\\\">\");\n}else{\nif(col.formatter){\ncc.push(col.formatter(_205,_202,_201));\n}else{\ncc.push(_205);\n}\n}\ncc.push(\"</div>\");\ncc.push(\"</td>\");\n}\n}\nreturn cc.join(\"\");\n},refreshRow:function(_209,_20a){\nthis.updateRow.call(this,_209,_20a,{});\n},updateRow:function(_20b,_20c,row){\nvar opts=$.data(_20b,\"datagrid\").options;\nvar rows=$(_20b).datagrid(\"getRows\");\nvar _20d=_20e(_20c);\n$.extend(rows[_20c],row);\nvar _20f=_20e(_20c);\nvar _210=_20d.c;\nvar _211=_20f.s;\nvar _212=\"datagrid-row \"+(_20c%2&&opts.striped?\"datagrid-row-alt \":\" \")+_20f.c;\nfunction _20e(_213){\nvar css=opts.rowStyler?opts.rowStyler.call(_20b,_213,rows[_213]):\"\";\nvar _214=\"\";\nvar _215=\"\";\nif(typeof css==\"string\"){\n_215=css;\n}else{\nif(css){\n_214=css[\"class\"]||\"\";\n_215=css[\"style\"]||\"\";\n}\n}\nreturn {c:_214,s:_215};\n};\nfunction _216(_217){\nvar _218=$(_20b).datagrid(\"getColumnFields\",_217);\nvar tr=opts.finder.getTr(_20b,_20c,\"body\",(_217?1:2));\nvar _219=tr.find(\"div.datagrid-cell-check input[type=checkbox]\").is(\":checked\");\ntr.html(this.renderRow.call(this,_20b,_218,_217,_20c,rows[_20c]));\ntr.attr(\"style\",_211).removeClass(_210).addClass(_212);\nif(_219){\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",true);\n}\n};\n_216.call(this,true);\n_216.call(this,false);\n$(_20b).datagrid(\"fixRowHeight\",_20c);\n},insertRow:function(_21a,_21b,row){\nvar _21c=$.data(_21a,\"datagrid\");\nvar opts=_21c.options;\nvar dc=_21c.dc;\nvar data=_21c.data;\nif(_21b==undefined||_21b==null){\n_21b=data.rows.length;\n}\nif(_21b>data.rows.length){\n_21b=data.rows.length;\n}\nfunction _21d(_21e){\nvar _21f=_21e?1:2;\nfor(var i=data.rows.length-1;i>=_21b;i--){\nvar tr=opts.finder.getTr(_21a,i,\"body\",_21f);\ntr.attr(\"datagrid-row-index\",i+1);\ntr.attr(\"id\",_21c.rowIdPrefix+\"-\"+_21f+\"-\"+(i+1));\nif(_21e&&opts.rownumbers){\nvar _220=i+2;\nif(opts.pagination){\n_220+=(opts.pageNumber-1)*opts.pageSize;\n}\ntr.find(\"div.datagrid-cell-rownumber\").html(_220);\n}\nif(opts.striped){\ntr.removeClass(\"datagrid-row-alt\").addClass((i+1)%2?\"datagrid-row-alt\":\"\");\n}\n}\n};\nfunction _221(_222){\nvar _223=_222?1:2;\nvar _224=$(_21a).datagrid(\"getColumnFields\",_222);\nvar _225=_21c.rowIdPrefix+\"-\"+_223+\"-\"+_21b;\nvar tr=\"<tr id=\\\"\"+_225+\"\\\" class=\\\"datagrid-row\\\" datagrid-row-index=\\\"\"+_21b+\"\\\"></tr>\";\nif(_21b>=data.rows.length){\nif(data.rows.length){\nopts.finder.getTr(_21a,\"\",\"last\",_223).after(tr);\n}else{\nvar cc=_222?dc.body1:dc.body2;\ncc.html(\"<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"+tr+\"</tbody></table>\");\n}\n}else{\nopts.finder.getTr(_21a,_21b+1,\"body\",_223).before(tr);\n}\n};\n_21d.call(this,true);\n_21d.call(this,false);\n_221.call(this,true);\n_221.call(this,false);\ndata.total+=1;\ndata.rows.splice(_21b,0,row);\nthis.refreshRow.call(this,_21a,_21b);\n},deleteRow:function(_226,_227){\nvar _228=$.data(_226,\"datagrid\");\nvar opts=_228.options;\nvar data=_228.data;\nfunction _229(_22a){\nvar _22b=_22a?1:2;\nfor(var i=_227+1;i<data.rows.length;i++){\nvar tr=opts.finder.getTr(_226,i,\"body\",_22b);\ntr.attr(\"datagrid-row-index\",i-1);\ntr.attr(\"id\",_228.rowIdPrefix+\"-\"+_22b+\"-\"+(i-1));\nif(_22a&&opts.rownumbers){\nvar _22c=i;\nif(opts.pagination){\n_22c+=(opts.pageNumber-1)*opts.pageSize;\n}\ntr.find(\"div.datagrid-cell-rownumber\").html(_22c);\n}\nif(opts.striped){\ntr.removeClass(\"datagrid-row-alt\").addClass((i-1)%2?\"datagrid-row-alt\":\"\");\n}\n}\n};\nopts.finder.getTr(_226,_227).remove();\n_229.call(this,true);\n_229.call(this,false);\ndata.total-=1;\ndata.rows.splice(_227,1);\n},onBeforeRender:function(_22d,rows){\n},onAfterRender:function(_22e){\nvar opts=$.data(_22e,\"datagrid\").options;\nif(opts.showFooter){\nvar _22f=$(_22e).datagrid(\"getPanel\").find(\"div.datagrid-footer\");\n_22f.find(\"div.datagrid-cell-rownumber,div.datagrid-cell-check\").css(\"visibility\",\"hidden\");\n}\n}};\n$.fn.datagrid.defaults=$.extend({},$.fn.panel.defaults,{sharedStyleSheet:false,frozenColumns:undefined,columns:undefined,fitColumns:false,resizeHandle:\"right\",autoRowHeight:true,toolbar:null,striped:false,method:\"post\",nowrap:true,idField:null,url:null,data:null,loadMsg:\"Processing, please wait ...\",rownumbers:false,singleSelect:false,ctrlSelect:false,selectOnCheck:true,checkOnSelect:true,pagination:false,pagePosition:\"bottom\",pageNumber:1,pageSize:10,pageList:[10,20,30,40,50],queryParams:{},sortName:null,sortOrder:\"asc\",multiSort:false,remoteSort:true,showHeader:true,showFooter:false,scrollbarSize:18,rowEvents:{mouseover:_85(true),mouseout:_85(false),click:_8e,dblclick:_99,contextmenu:_9e},rowStyler:function(_230,_231){\n},loader:function(_232,_233,_234){\nvar opts=$(this).datagrid(\"options\");\nif(!opts.url){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.url,data:_232,dataType:\"json\",success:function(data){\n_233(data);\n},error:function(){\n_234.apply(this,arguments);\n}});\n},loadFilter:function(data){\nif(typeof data.length==\"number\"&&typeof data.splice==\"function\"){\nreturn {total:data.length,rows:data};\n}else{\nreturn data;\n}\n},editors:_1a5,finder:{getTr:function(_235,_236,type,_237){\ntype=type||\"body\";\n_237=_237||0;\nvar _238=$.data(_235,\"datagrid\");\nvar dc=_238.dc;\nvar opts=_238.options;\nif(_237==0){\nvar tr1=opts.finder.getTr(_235,_236,type,1);\nvar tr2=opts.finder.getTr(_235,_236,type,2);\nreturn tr1.add(tr2);\n}else{\nif(type==\"body\"){\nvar tr=$(\"#\"+_238.rowIdPrefix+\"-\"+_237+\"-\"+_236);\nif(!tr.length){\ntr=(_237==1?dc.body1:dc.body2).find(\">table>tbody>tr[datagrid-row-index=\"+_236+\"]\");\n}\nreturn tr;\n}else{\nif(type==\"footer\"){\nreturn (_237==1?dc.footer1:dc.footer2).find(\">table>tbody>tr[datagrid-row-index=\"+_236+\"]\");\n}else{\nif(type==\"selected\"){\nreturn (_237==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-selected\");\n}else{\nif(type==\"highlight\"){\nreturn (_237==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-over\");\n}else{\nif(type==\"checked\"){\nreturn (_237==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-checked\");\n}else{\nif(type==\"editing\"){\nreturn (_237==1?dc.body1:dc.body2).find(\">table>tbody>tr.datagrid-row-editing\");\n}else{\nif(type==\"last\"){\nreturn (_237==1?dc.body1:dc.body2).find(\">table>tbody>tr[datagrid-row-index]:last\");\n}else{\nif(type==\"allbody\"){\nreturn (_237==1?dc.body1:dc.body2).find(\">table>tbody>tr[datagrid-row-index]\");\n}else{\nif(type==\"allfooter\"){\nreturn (_237==1?dc.footer1:dc.footer2).find(\">table>tbody>tr[datagrid-row-index]\");\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\n},getRow:function(_239,p){\nvar _23a=(typeof p==\"object\")?p.attr(\"datagrid-row-index\"):p;\nreturn $.data(_239,\"datagrid\").data.rows[parseInt(_23a)];\n},getRows:function(_23b){\nreturn $(_23b).datagrid(\"getRows\");\n}},view:_1ee,onBeforeLoad:function(_23c){\n},onLoadSuccess:function(){\n},onLoadError:function(){\n},onClickRow:function(_23d,_23e){\n},onDblClickRow:function(_23f,_240){\n},onClickCell:function(_241,_242,_243){\n},onDblClickCell:function(_244,_245,_246){\n},onBeforeSortColumn:function(sort,_247){\n},onSortColumn:function(sort,_248){\n},onResizeColumn:function(_249,_24a){\n},onBeforeSelect:function(_24b,_24c){\n},onSelect:function(_24d,_24e){\n},onBeforeUnselect:function(_24f,_250){\n},onUnselect:function(_251,_252){\n},onSelectAll:function(rows){\n},onUnselectAll:function(rows){\n},onBeforeCheck:function(_253,_254){\n},onCheck:function(_255,_256){\n},onBeforeUncheck:function(_257,_258){\n},onUncheck:function(_259,_25a){\n},onCheckAll:function(rows){\n},onUncheckAll:function(rows){\n},onBeforeEdit:function(_25b,_25c){\n},onBeginEdit:function(_25d,_25e){\n},onEndEdit:function(_25f,_260,_261){\n},onAfterEdit:function(_262,_263,_264){\n},onCancelEdit:function(_265,_266){\n},onHeaderContextMenu:function(e,_267){\n},onRowContextMenu:function(e,_268,_269){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.datebox.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"datebox\");\nvar _4=_3.options;\n$(_2).addClass(\"datebox-f\").combo($.extend({},_4,{onShowPanel:function(){\n_5(this);\n_6(this);\n_7(this);\n_18(this,$(this).datebox(\"getText\"),true);\n_4.onShowPanel.call(this);\n}}));\nif(!_3.calendar){\nvar _8=$(_2).combo(\"panel\").css(\"overflow\",\"hidden\");\n_8.panel(\"options\").onBeforeDestroy=function(){\nvar c=$(this).find(\".calendar-shared\");\nif(c.length){\nc.insertBefore(c[0].pholder);\n}\n};\nvar cc=$(\"<div class=\\\"datebox-calendar-inner\\\"></div>\").prependTo(_8);\nif(_4.sharedCalendar){\nvar c=$(_4.sharedCalendar);\nif(!c[0].pholder){\nc[0].pholder=$(\"<div class=\\\"calendar-pholder\\\" style=\\\"display:none\\\"></div>\").insertAfter(c);\n}\nc.addClass(\"calendar-shared\").appendTo(cc);\nif(!c.hasClass(\"calendar\")){\nc.calendar();\n}\n_3.calendar=c;\n}else{\n_3.calendar=$(\"<div></div>\").appendTo(cc).calendar();\n}\n$.extend(_3.calendar.calendar(\"options\"),{fit:true,border:false,onSelect:function(_9){\nvar _a=this.target;\nvar _b=$(_a).datebox(\"options\");\n_18(_a,_b.formatter.call(_a,_9));\n$(_a).combo(\"hidePanel\");\n_b.onSelect.call(_a,_9);\n}});\n}\n$(_2).combo(\"textbox\").parent().addClass(\"datebox\");\n$(_2).datebox(\"initValue\",_4.value);\nfunction _5(_c){\nvar _d=$(_c).datebox(\"options\");\nvar _e=$(_c).combo(\"panel\");\n_e.unbind(\".datebox\").bind(\"click.datebox\",function(e){\nif($(e.target).hasClass(\"datebox-button-a\")){\nvar _f=parseInt($(e.target).attr(\"datebox-button-index\"));\n_d.buttons[_f].handler.call(e.target,_c);\n}\n});\n};\nfunction _6(_10){\nvar _11=$(_10).combo(\"panel\");\nif(_11.children(\"div.datebox-button\").length){\nreturn;\n}\nvar _12=$(\"<div class=\\\"datebox-button\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" style=\\\"width:100%\\\"><tr></tr></table></div>\").appendTo(_11);\nvar tr=_12.find(\"tr\");\nfor(var i=0;i<_4.buttons.length;i++){\nvar td=$(\"<td></td>\").appendTo(tr);\nvar btn=_4.buttons[i];\nvar t=$(\"<a class=\\\"datebox-button-a\\\" href=\\\"javascript:void(0)\\\"></a>\").html($.isFunction(btn.text)?btn.text(_10):btn.text).appendTo(td);\nt.attr(\"datebox-button-index\",i);\n}\ntr.find(\"td\").css(\"width\",(100/_4.buttons.length)+\"%\");\n};\nfunction _7(_13){\nvar _14=$(_13).combo(\"panel\");\nvar cc=_14.children(\"div.datebox-calendar-inner\");\n_14.children()._outerWidth(_14.width());\n_3.calendar.appendTo(cc);\n_3.calendar[0].target=_13;\nif(_4.panelHeight!=\"auto\"){\nvar _15=_14.height();\n_14.children().not(cc).each(function(){\n_15-=$(this).outerHeight();\n});\ncc._outerHeight(_15);\n}\n_3.calendar.calendar(\"resize\");\n};\n};\nfunction _16(_17,q){\n_18(_17,q,true);\n};\nfunction _19(_1a){\nvar _1b=$.data(_1a,\"datebox\");\nvar _1c=_1b.options;\nvar _1d=_1b.calendar.calendar(\"options\").current;\nif(_1d){\n_18(_1a,_1c.formatter.call(_1a,_1d));\n$(_1a).combo(\"hidePanel\");\n}\n};\nfunction _18(_1e,_1f,_20){\nvar _21=$.data(_1e,\"datebox\");\nvar _22=_21.options;\nvar _23=_21.calendar;\n$(_1e).combo(\"setValue\",_1f);\n_23.calendar(\"moveTo\",_22.parser.call(_1e,_1f));\nif(!_20){\nif(_1f){\n_1f=_22.formatter.call(_1e,_23.calendar(\"options\").current);\n$(_1e).combo(\"setValue\",_1f).combo(\"setText\",_1f);\n}else{\n$(_1e).combo(\"setText\",_1f);\n}\n}\n};\n$.fn.datebox=function(_24,_25){\nif(typeof _24==\"string\"){\nvar _26=$.fn.datebox.methods[_24];\nif(_26){\nreturn _26(this,_25);\n}else{\nreturn this.combo(_24,_25);\n}\n}\n_24=_24||{};\nreturn this.each(function(){\nvar _27=$.data(this,\"datebox\");\nif(_27){\n$.extend(_27.options,_24);\n}else{\n$.data(this,\"datebox\",{options:$.extend({},$.fn.datebox.defaults,$.fn.datebox.parseOptions(this),_24)});\n}\n_1(this);\n});\n};\n$.fn.datebox.methods={options:function(jq){\nvar _28=jq.combo(\"options\");\nreturn $.extend($.data(jq[0],\"datebox\").options,{width:_28.width,height:_28.height,originalValue:_28.originalValue,disabled:_28.disabled,readonly:_28.readonly});\n},cloneFrom:function(jq,_29){\nreturn jq.each(function(){\n$(this).combo(\"cloneFrom\",_29);\n$.data(this,\"datebox\",{options:$.extend(true,{},$(_29).datebox(\"options\")),calendar:$(_29).datebox(\"calendar\")});\n$(this).addClass(\"datebox-f\");\n});\n},calendar:function(jq){\nreturn $.data(jq[0],\"datebox\").calendar;\n},initValue:function(jq,_2a){\nreturn jq.each(function(){\nvar _2b=$(this).datebox(\"options\");\nvar _2c=_2b.value;\nif(_2c){\n_2c=_2b.formatter.call(this,_2b.parser.call(this,_2c));\n}\n$(this).combo(\"initValue\",_2c).combo(\"setText\",_2c);\n});\n},setValue:function(jq,_2d){\nreturn jq.each(function(){\n_18(this,_2d);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _2e=$(this).datebox(\"options\");\n$(this).datebox(\"setValue\",_2e.originalValue);\n});\n}};\n$.fn.datebox.parseOptions=function(_2f){\nreturn $.extend({},$.fn.combo.parseOptions(_2f),$.parser.parseOptions(_2f,[\"sharedCalendar\"]));\n};\n$.fn.datebox.defaults=$.extend({},$.fn.combo.defaults,{panelWidth:180,panelHeight:\"auto\",sharedCalendar:null,keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_19(this);\n},query:function(q,e){\n_16(this,q);\n}},currentText:\"Today\",closeText:\"Close\",okText:\"Ok\",buttons:[{text:function(_30){\nreturn $(_30).datebox(\"options\").currentText;\n},handler:function(_31){\n$(_31).datebox(\"calendar\").calendar({year:new Date().getFullYear(),month:new Date().getMonth()+1,current:new Date()});\n_19(_31);\n}},{text:function(_32){\nreturn $(_32).datebox(\"options\").closeText;\n},handler:function(_33){\n$(this).closest(\"div.combo-panel\").panel(\"close\");\n}}],formatter:function(_34){\nvar y=_34.getFullYear();\nvar m=_34.getMonth()+1;\nvar d=_34.getDate();\nreturn (m<10?(\"0\"+m):m)+\"/\"+(d<10?(\"0\"+d):d)+\"/\"+y;\n},parser:function(s){\nif(!s){\nreturn new Date();\n}\nvar ss=s.split(\"/\");\nvar m=parseInt(ss[0],10);\nvar d=parseInt(ss[1],10);\nvar y=parseInt(ss[2],10);\nif(!isNaN(y)&&!isNaN(m)&&!isNaN(d)){\nreturn new Date(y,m-1,d);\n}else{\nreturn new Date();\n}\n},onSelect:function(_35){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.datetimebox.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"datetimebox\");\nvar _4=_3.options;\n$(_2).datebox($.extend({},_4,{onShowPanel:function(){\nvar _5=$(this).datetimebox(\"getValue\");\n_d(this,_5,true);\n_4.onShowPanel.call(this);\n},formatter:$.fn.datebox.defaults.formatter,parser:$.fn.datebox.defaults.parser}));\n$(_2).removeClass(\"datebox-f\").addClass(\"datetimebox-f\");\n$(_2).datebox(\"calendar\").calendar({onSelect:function(_6){\n_4.onSelect.call(this.target,_6);\n}});\nif(!_3.spinner){\nvar _7=$(_2).datebox(\"panel\");\nvar p=$(\"<div style=\\\"padding:2px\\\"><input></div>\").insertAfter(_7.children(\"div.datebox-calendar-inner\"));\n_3.spinner=p.children(\"input\");\n}\n_3.spinner.timespinner({width:_4.spinnerWidth,showSeconds:_4.showSeconds,separator:_4.timeSeparator});\n$(_2).datetimebox(\"initValue\",_4.value);\n};\nfunction _8(_9){\nvar c=$(_9).datetimebox(\"calendar\");\nvar t=$(_9).datetimebox(\"spinner\");\nvar _a=c.calendar(\"options\").current;\nreturn new Date(_a.getFullYear(),_a.getMonth(),_a.getDate(),t.timespinner(\"getHours\"),t.timespinner(\"getMinutes\"),t.timespinner(\"getSeconds\"));\n};\nfunction _b(_c,q){\n_d(_c,q,true);\n};\nfunction _e(_f){\nvar _10=$.data(_f,\"datetimebox\").options;\nvar _11=_8(_f);\n_d(_f,_10.formatter.call(_f,_11));\n$(_f).combo(\"hidePanel\");\n};\nfunction _d(_12,_13,_14){\nvar _15=$.data(_12,\"datetimebox\").options;\n$(_12).combo(\"setValue\",_13);\nif(!_14){\nif(_13){\nvar _16=_15.parser.call(_12,_13);\n$(_12).combo(\"setValue\",_15.formatter.call(_12,_16));\n$(_12).combo(\"setText\",_15.formatter.call(_12,_16));\n}else{\n$(_12).combo(\"setText\",_13);\n}\n}\nvar _16=_15.parser.call(_12,_13);\n$(_12).datetimebox(\"calendar\").calendar(\"moveTo\",_16);\n$(_12).datetimebox(\"spinner\").timespinner(\"setValue\",_17(_16));\nfunction _17(_18){\nfunction _19(_1a){\nreturn (_1a<10?\"0\":\"\")+_1a;\n};\nvar tt=[_19(_18.getHours()),_19(_18.getMinutes())];\nif(_15.showSeconds){\ntt.push(_19(_18.getSeconds()));\n}\nreturn tt.join($(_12).datetimebox(\"spinner\").timespinner(\"options\").separator);\n};\n};\n$.fn.datetimebox=function(_1b,_1c){\nif(typeof _1b==\"string\"){\nvar _1d=$.fn.datetimebox.methods[_1b];\nif(_1d){\nreturn _1d(this,_1c);\n}else{\nreturn this.datebox(_1b,_1c);\n}\n}\n_1b=_1b||{};\nreturn this.each(function(){\nvar _1e=$.data(this,\"datetimebox\");\nif(_1e){\n$.extend(_1e.options,_1b);\n}else{\n$.data(this,\"datetimebox\",{options:$.extend({},$.fn.datetimebox.defaults,$.fn.datetimebox.parseOptions(this),_1b)});\n}\n_1(this);\n});\n};\n$.fn.datetimebox.methods={options:function(jq){\nvar _1f=jq.datebox(\"options\");\nreturn $.extend($.data(jq[0],\"datetimebox\").options,{originalValue:_1f.originalValue,disabled:_1f.disabled,readonly:_1f.readonly});\n},cloneFrom:function(jq,_20){\nreturn jq.each(function(){\n$(this).datebox(\"cloneFrom\",_20);\n$.data(this,\"datetimebox\",{options:$.extend(true,{},$(_20).datetimebox(\"options\")),spinner:$(_20).datetimebox(\"spinner\")});\n$(this).removeClass(\"datebox-f\").addClass(\"datetimebox-f\");\n});\n},spinner:function(jq){\nreturn $.data(jq[0],\"datetimebox\").spinner;\n},initValue:function(jq,_21){\nreturn jq.each(function(){\nvar _22=$(this).datetimebox(\"options\");\nvar _23=_22.value;\nif(_23){\n_23=_22.formatter.call(this,_22.parser.call(this,_23));\n}\n$(this).combo(\"initValue\",_23).combo(\"setText\",_23);\n});\n},setValue:function(jq,_24){\nreturn jq.each(function(){\n_d(this,_24);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _25=$(this).datetimebox(\"options\");\n$(this).datetimebox(\"setValue\",_25.originalValue);\n});\n}};\n$.fn.datetimebox.parseOptions=function(_26){\nvar t=$(_26);\nreturn $.extend({},$.fn.datebox.parseOptions(_26),$.parser.parseOptions(_26,[\"timeSeparator\",\"spinnerWidth\",{showSeconds:\"boolean\"}]));\n};\n$.fn.datetimebox.defaults=$.extend({},$.fn.datebox.defaults,{spinnerWidth:\"100%\",showSeconds:true,timeSeparator:\":\",keyHandler:{up:function(e){\n},down:function(e){\n},left:function(e){\n},right:function(e){\n},enter:function(e){\n_e(this);\n},query:function(q,e){\n_b(this,q);\n}},buttons:[{text:function(_27){\nreturn $(_27).datetimebox(\"options\").currentText;\n},handler:function(_28){\nvar _29=$(_28).datetimebox(\"options\");\n_d(_28,_29.formatter.call(_28,new Date()));\n$(_28).datetimebox(\"hidePanel\");\n}},{text:function(_2a){\nreturn $(_2a).datetimebox(\"options\").okText;\n},handler:function(_2b){\n_e(_2b);\n}},{text:function(_2c){\nreturn $(_2c).datetimebox(\"options\").closeText;\n},handler:function(_2d){\n$(_2d).datetimebox(\"hidePanel\");\n}}],formatter:function(_2e){\nvar h=_2e.getHours();\nvar M=_2e.getMinutes();\nvar s=_2e.getSeconds();\nfunction _2f(_30){\nreturn (_30<10?\"0\":\"\")+_30;\n};\nvar _31=$(this).datetimebox(\"spinner\").timespinner(\"options\").separator;\nvar r=$.fn.datebox.defaults.formatter(_2e)+\" \"+_2f(h)+_31+_2f(M);\nif($(this).datetimebox(\"options\").showSeconds){\nr+=_31+_2f(s);\n}\nreturn r;\n},parser:function(s){\nif($.trim(s)==\"\"){\nreturn new Date();\n}\nvar dt=s.split(\" \");\nvar d=$.fn.datebox.defaults.parser(dt[0]);\nif(dt.length<2){\nreturn d;\n}\nvar _32=$(this).datetimebox(\"spinner\").timespinner(\"options\").separator;\nvar tt=dt[1].split(_32);\nvar _33=parseInt(tt[0],10)||0;\nvar _34=parseInt(tt[1],10)||0;\nvar _35=parseInt(tt[2],10)||0;\nreturn new Date(d.getFullYear(),d.getMonth(),d.getDate(),_33,_34,_35);\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.datetimespinner.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"datetimespinner\").options;\n$(_2).addClass(\"datetimespinner-f\").timespinner(_3);\n};\n$.fn.datetimespinner=function(_4,_5){\nif(typeof _4==\"string\"){\nvar _6=$.fn.datetimespinner.methods[_4];\nif(_6){\nreturn _6(this,_5);\n}else{\nreturn this.timespinner(_4,_5);\n}\n}\n_4=_4||{};\nreturn this.each(function(){\nvar _7=$.data(this,\"datetimespinner\");\nif(_7){\n$.extend(_7.options,_4);\n}else{\n$.data(this,\"datetimespinner\",{options:$.extend({},$.fn.datetimespinner.defaults,$.fn.datetimespinner.parseOptions(this),_4)});\n}\n_1(this);\n});\n};\n$.fn.datetimespinner.methods={options:function(jq){\nvar _8=jq.timespinner(\"options\");\nreturn $.extend($.data(jq[0],\"datetimespinner\").options,{width:_8.width,value:_8.value,originalValue:_8.originalValue,disabled:_8.disabled,readonly:_8.readonly});\n}};\n$.fn.datetimespinner.parseOptions=function(_9){\nreturn $.extend({},$.fn.timespinner.parseOptions(_9),$.parser.parseOptions(_9,[]));\n};\n$.fn.datetimespinner.defaults=$.extend({},$.fn.timespinner.defaults,{formatter:function(_a){\nif(!_a){\nreturn \"\";\n}\nreturn $.fn.datebox.defaults.formatter.call(this,_a)+\" \"+$.fn.timespinner.defaults.formatter.call(this,_a);\n},parser:function(s){\ns=$.trim(s);\nif(!s){\nreturn null;\n}\nvar dt=s.split(\" \");\nvar _b=$.fn.datebox.defaults.parser.call(this,dt[0]);\nif(dt.length<2){\nreturn _b;\n}\nvar _c=$.fn.timespinner.defaults.parser.call(this,dt[1]);\nreturn new Date(_b.getFullYear(),_b.getMonth(),_b.getDate(),_c.getHours(),_c.getMinutes(),_c.getSeconds());\n},selections:[[0,2],[3,5],[6,10],[11,13],[14,16],[17,19]]});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.dialog.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"dialog\").options;\n_3.inited=false;\n$(_2).window($.extend({},_3,{onResize:function(w,h){\nif(_3.inited){\n_a(this);\n_3.onResize.call(this,w,h);\n}\n}}));\nvar _4=$(_2).window(\"window\");\nif(_3.toolbar){\nif($.isArray(_3.toolbar)){\n$(_2).siblings(\"div.dialog-toolbar\").remove();\nvar _5=$(\"<div class=\\\"dialog-toolbar\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\"><tr></tr></table></div>\").appendTo(_4);\nvar tr=_5.find(\"tr\");\nfor(var i=0;i<_3.toolbar.length;i++){\nvar _6=_3.toolbar[i];\nif(_6==\"-\"){\n$(\"<td><div class=\\\"dialog-tool-separator\\\"></div></td>\").appendTo(tr);\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\nvar _7=$(\"<a href=\\\"javascript:void(0)\\\"></a>\").appendTo(td);\n_7[0].onclick=eval(_6.handler||function(){\n});\n_7.linkbutton($.extend({},_6,{plain:true}));\n}\n}\n}else{\n$(_3.toolbar).addClass(\"dialog-toolbar\").appendTo(_4);\n$(_3.toolbar).show();\n}\n}else{\n$(_2).siblings(\"div.dialog-toolbar\").remove();\n}\nif(_3.buttons){\nif($.isArray(_3.buttons)){\n$(_2).siblings(\"div.dialog-button\").remove();\nvar _8=$(\"<div class=\\\"dialog-button\\\"></div>\").appendTo(_4);\nfor(var i=0;i<_3.buttons.length;i++){\nvar p=_3.buttons[i];\nvar _9=$(\"<a href=\\\"javascript:void(0)\\\"></a>\").appendTo(_8);\nif(p.handler){\n_9[0].onclick=p.handler;\n}\n_9.linkbutton(p);\n}\n}else{\n$(_3.buttons).addClass(\"dialog-button\").appendTo(_4);\n$(_3.buttons).show();\n}\n}else{\n$(_2).siblings(\"div.dialog-button\").remove();\n}\n_3.inited=true;\n_4.show();\n$(_2).window(\"resize\");\nif(_3.closed){\n_4.hide();\n}\n};\nfunction _a(_b,_c){\nvar t=$(_b);\nvar _d=t.dialog(\"options\");\nvar _e=_d.noheader;\nvar tb=t.siblings(\".dialog-toolbar\");\nvar bb=t.siblings(\".dialog-button\");\ntb.insertBefore(_b).css({position:\"relative\",borderTopWidth:(_e?1:0),top:(_e?tb.length:0)});\nbb.insertAfter(_b).css({position:\"relative\",top:-1});\nif(!isNaN(parseInt(_d.height))){\nt._outerHeight(t._outerHeight()-tb._outerHeight()-bb._outerHeight());\n}\ntb.add(bb)._outerWidth(t._outerWidth());\nvar _f=$.data(_b,\"window\").shadow;\nif(_f){\nvar cc=t.panel(\"panel\");\n_f.css({width:cc._outerWidth(),height:cc._outerHeight()});\n}\n};\n$.fn.dialog=function(_10,_11){\nif(typeof _10==\"string\"){\nvar _12=$.fn.dialog.methods[_10];\nif(_12){\nreturn _12(this,_11);\n}else{\nreturn this.window(_10,_11);\n}\n}\n_10=_10||{};\nreturn this.each(function(){\nvar _13=$.data(this,\"dialog\");\nif(_13){\n$.extend(_13.options,_10);\n}else{\n$.data(this,\"dialog\",{options:$.extend({},$.fn.dialog.defaults,$.fn.dialog.parseOptions(this),_10)});\n}\n_1(this);\n});\n};\n$.fn.dialog.methods={options:function(jq){\nvar _14=$.data(jq[0],\"dialog\").options;\nvar _15=jq.panel(\"options\");\n$.extend(_14,{width:_15.width,height:_15.height,left:_15.left,top:_15.top,closed:_15.closed,collapsed:_15.collapsed,minimized:_15.minimized,maximized:_15.maximized});\nreturn _14;\n},dialog:function(jq){\nreturn jq.window(\"window\");\n}};\n$.fn.dialog.parseOptions=function(_16){\nreturn $.extend({},$.fn.window.parseOptions(_16),$.parser.parseOptions(_16,[\"toolbar\",\"buttons\"]));\n};\n$.fn.dialog.defaults=$.extend({},$.fn.window.defaults,{title:\"New Dialog\",collapsible:false,minimizable:false,maximizable:false,resizable:false,toolbar:null,buttons:null});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.draggable.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(e){\nvar _2=$.data(e.data.target,\"draggable\");\nvar _3=_2.options;\nvar _4=_2.proxy;\nvar _5=e.data;\nvar _6=_5.startLeft+e.pageX-_5.startX;\nvar _7=_5.startTop+e.pageY-_5.startY;\nif(_4){\nif(_4.parent()[0]==document.body){\nif(_3.deltaX!=null&&_3.deltaX!=undefined){\n_6=e.pageX+_3.deltaX;\n}else{\n_6=e.pageX-e.data.offsetWidth;\n}\nif(_3.deltaY!=null&&_3.deltaY!=undefined){\n_7=e.pageY+_3.deltaY;\n}else{\n_7=e.pageY-e.data.offsetHeight;\n}\n}else{\nif(_3.deltaX!=null&&_3.deltaX!=undefined){\n_6+=e.data.offsetWidth+_3.deltaX;\n}\nif(_3.deltaY!=null&&_3.deltaY!=undefined){\n_7+=e.data.offsetHeight+_3.deltaY;\n}\n}\n}\nif(e.data.parent!=document.body){\n_6+=$(e.data.parent).scrollLeft();\n_7+=$(e.data.parent).scrollTop();\n}\nif(_3.axis==\"h\"){\n_5.left=_6;\n}else{\nif(_3.axis==\"v\"){\n_5.top=_7;\n}else{\n_5.left=_6;\n_5.top=_7;\n}\n}\n};\nfunction _8(e){\nvar _9=$.data(e.data.target,\"draggable\");\nvar _a=_9.options;\nvar _b=_9.proxy;\nif(!_b){\n_b=$(e.data.target);\n}\n_b.css({left:e.data.left,top:e.data.top});\n$(\"body\").css(\"cursor\",_a.cursor);\n};\nfunction _c(e){\n$.fn.draggable.isDragging=true;\nvar _d=$.data(e.data.target,\"draggable\");\nvar _e=_d.options;\nvar _f=$(\".droppable\").filter(function(){\nreturn e.data.target!=this;\n}).filter(function(){\nvar _10=$.data(this,\"droppable\").options.accept;\nif(_10){\nreturn $(_10).filter(function(){\nreturn this==e.data.target;\n}).length>0;\n}else{\nreturn true;\n}\n});\n_d.droppables=_f;\nvar _11=_d.proxy;\nif(!_11){\nif(_e.proxy){\nif(_e.proxy==\"clone\"){\n_11=$(e.data.target).clone().insertAfter(e.data.target);\n}else{\n_11=_e.proxy.call(e.data.target,e.data.target);\n}\n_d.proxy=_11;\n}else{\n_11=$(e.data.target);\n}\n}\n_11.css(\"position\",\"absolute\");\n_1(e);\n_8(e);\n_e.onStartDrag.call(e.data.target,e);\nreturn false;\n};\nfunction _12(e){\nvar _13=$.data(e.data.target,\"draggable\");\n_1(e);\nif(_13.options.onDrag.call(e.data.target,e)!=false){\n_8(e);\n}\nvar _14=e.data.target;\n_13.droppables.each(function(){\nvar _15=$(this);\nif(_15.droppable(\"options\").disabled){\nreturn;\n}\nvar p2=_15.offset();\nif(e.pageX>p2.left&&e.pageX<p2.left+_15.outerWidth()&&e.pageY>p2.top&&e.pageY<p2.top+_15.outerHeight()){\nif(!this.entered){\n$(this).trigger(\"_dragenter\",[_14]);\nthis.entered=true;\n}\n$(this).trigger(\"_dragover\",[_14]);\n}else{\nif(this.entered){\n$(this).trigger(\"_dragleave\",[_14]);\nthis.entered=false;\n}\n}\n});\nreturn false;\n};\nfunction _16(e){\n$.fn.draggable.isDragging=false;\n_12(e);\nvar _17=$.data(e.data.target,\"draggable\");\nvar _18=_17.proxy;\nvar _19=_17.options;\nif(_19.revert){\nif(_1a()==true){\n$(e.data.target).css({position:e.data.startPosition,left:e.data.startLeft,top:e.data.startTop});\n}else{\nif(_18){\nvar _1b,top;\nif(_18.parent()[0]==document.body){\n_1b=e.data.startX-e.data.offsetWidth;\ntop=e.data.startY-e.data.offsetHeight;\n}else{\n_1b=e.data.startLeft;\ntop=e.data.startTop;\n}\n_18.animate({left:_1b,top:top},function(){\n_1c();\n});\n}else{\n$(e.data.target).animate({left:e.data.startLeft,top:e.data.startTop},function(){\n$(e.data.target).css(\"position\",e.data.startPosition);\n});\n}\n}\n}else{\n$(e.data.target).css({position:\"absolute\",left:e.data.left,top:e.data.top});\n_1a();\n}\n_19.onStopDrag.call(e.data.target,e);\n$(document).unbind(\".draggable\");\nsetTimeout(function(){\n$(\"body\").css(\"cursor\",\"\");\n},100);\nfunction _1c(){\nif(_18){\n_18.remove();\n}\n_17.proxy=null;\n};\nfunction _1a(){\nvar _1d=false;\n_17.droppables.each(function(){\nvar _1e=$(this);\nif(_1e.droppable(\"options\").disabled){\nreturn;\n}\nvar p2=_1e.offset();\nif(e.pageX>p2.left&&e.pageX<p2.left+_1e.outerWidth()&&e.pageY>p2.top&&e.pageY<p2.top+_1e.outerHeight()){\nif(_19.revert){\n$(e.data.target).css({position:e.data.startPosition,left:e.data.startLeft,top:e.data.startTop});\n}\n$(this).trigger(\"_drop\",[e.data.target]);\n_1c();\n_1d=true;\nthis.entered=false;\nreturn false;\n}\n});\nif(!_1d&&!_19.revert){\n_1c();\n}\nreturn _1d;\n};\nreturn false;\n};\n$.fn.draggable=function(_1f,_20){\nif(typeof _1f==\"string\"){\nreturn $.fn.draggable.methods[_1f](this,_20);\n}\nreturn this.each(function(){\nvar _21;\nvar _22=$.data(this,\"draggable\");\nif(_22){\n_22.handle.unbind(\".draggable\");\n_21=$.extend(_22.options,_1f);\n}else{\n_21=$.extend({},$.fn.draggable.defaults,$.fn.draggable.parseOptions(this),_1f||{});\n}\nvar _23=_21.handle?(typeof _21.handle==\"string\"?$(_21.handle,this):_21.handle):$(this);\n$.data(this,\"draggable\",{options:_21,handle:_23});\nif(_21.disabled){\n$(this).css(\"cursor\",\"\");\nreturn;\n}\n_23.unbind(\".draggable\").bind(\"mousemove.draggable\",{target:this},function(e){\nif($.fn.draggable.isDragging){\nreturn;\n}\nvar _24=$.data(e.data.target,\"draggable\").options;\nif(_25(e)){\n$(this).css(\"cursor\",_24.cursor);\n}else{\n$(this).css(\"cursor\",\"\");\n}\n}).bind(\"mouseleave.draggable\",{target:this},function(e){\n$(this).css(\"cursor\",\"\");\n}).bind(\"mousedown.draggable\",{target:this},function(e){\nif(_25(e)==false){\nreturn;\n}\n$(this).css(\"cursor\",\"\");\nvar _26=$(e.data.target).position();\nvar _27=$(e.data.target).offset();\nvar _28={startPosition:$(e.data.target).css(\"position\"),startLeft:_26.left,startTop:_26.top,left:_26.left,top:_26.top,startX:e.pageX,startY:e.pageY,offsetWidth:(e.pageX-_27.left),offsetHeight:(e.pageY-_27.top),target:e.data.target,parent:$(e.data.target).parent()[0]};\n$.extend(e.data,_28);\nvar _29=$.data(e.data.target,\"draggable\").options;\nif(_29.onBeforeDrag.call(e.data.target,e)==false){\nreturn;\n}\n$(document).bind(\"mousedown.draggable\",e.data,_c);\n$(document).bind(\"mousemove.draggable\",e.data,_12);\n$(document).bind(\"mouseup.draggable\",e.data,_16);\n});\nfunction _25(e){\nvar _2a=$.data(e.data.target,\"draggable\");\nvar _2b=_2a.handle;\nvar _2c=$(_2b).offset();\nvar _2d=$(_2b).outerWidth();\nvar _2e=$(_2b).outerHeight();\nvar t=e.pageY-_2c.top;\nvar r=_2c.left+_2d-e.pageX;\nvar b=_2c.top+_2e-e.pageY;\nvar l=e.pageX-_2c.left;\nreturn Math.min(t,r,b,l)>_2a.options.edge;\n};\n});\n};\n$.fn.draggable.methods={options:function(jq){\nreturn $.data(jq[0],\"draggable\").options;\n},proxy:function(jq){\nreturn $.data(jq[0],\"draggable\").proxy;\n},enable:function(jq){\nreturn jq.each(function(){\n$(this).draggable({disabled:false});\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$(this).draggable({disabled:true});\n});\n}};\n$.fn.draggable.parseOptions=function(_2f){\nvar t=$(_2f);\nreturn $.extend({},$.parser.parseOptions(_2f,[\"cursor\",\"handle\",\"axis\",{\"revert\":\"boolean\",\"deltaX\":\"number\",\"deltaY\":\"number\",\"edge\":\"number\"}]),{disabled:(t.attr(\"disabled\")?true:undefined)});\n};\n$.fn.draggable.defaults={proxy:null,revert:false,cursor:\"move\",deltaX:null,deltaY:null,handle:null,disabled:false,edge:0,axis:null,onBeforeDrag:function(e){\n},onStartDrag:function(e){\n},onDrag:function(e){\n},onStopDrag:function(e){\n}};\n$.fn.draggable.isDragging=false;\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.droppable.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"droppable\");\n$(_2).bind(\"_dragenter\",function(e,_3){\n$.data(_2,\"droppable\").options.onDragEnter.apply(_2,[e,_3]);\n});\n$(_2).bind(\"_dragleave\",function(e,_4){\n$.data(_2,\"droppable\").options.onDragLeave.apply(_2,[e,_4]);\n});\n$(_2).bind(\"_dragover\",function(e,_5){\n$.data(_2,\"droppable\").options.onDragOver.apply(_2,[e,_5]);\n});\n$(_2).bind(\"_drop\",function(e,_6){\n$.data(_2,\"droppable\").options.onDrop.apply(_2,[e,_6]);\n});\n};\n$.fn.droppable=function(_7,_8){\nif(typeof _7==\"string\"){\nreturn $.fn.droppable.methods[_7](this,_8);\n}\n_7=_7||{};\nreturn this.each(function(){\nvar _9=$.data(this,\"droppable\");\nif(_9){\n$.extend(_9.options,_7);\n}else{\n_1(this);\n$.data(this,\"droppable\",{options:$.extend({},$.fn.droppable.defaults,$.fn.droppable.parseOptions(this),_7)});\n}\n});\n};\n$.fn.droppable.methods={options:function(jq){\nreturn $.data(jq[0],\"droppable\").options;\n},enable:function(jq){\nreturn jq.each(function(){\n$(this).droppable({disabled:false});\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$(this).droppable({disabled:true});\n});\n}};\n$.fn.droppable.parseOptions=function(_a){\nvar t=$(_a);\nreturn $.extend({},$.parser.parseOptions(_a,[\"accept\"]),{disabled:(t.attr(\"disabled\")?true:undefined)});\n};\n$.fn.droppable.defaults={accept:null,disabled:false,onDragEnter:function(e,_b){\n},onDragOver:function(e,_c){\n},onDragLeave:function(e,_d){\n},onDrop:function(e,_e){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.filebox.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nvar _1=0;\nfunction _2(_3){\nvar _4=$.data(_3,\"filebox\");\nvar _5=_4.options;\nvar id=\"filebox_file_id_\"+(++_1);\n$(_3).addClass(\"filebox-f\").textbox($.extend({},_5,{buttonText:_5.buttonText?(\"<label for=\\\"\"+id+\"\\\">\"+_5.buttonText+\"</label>\"):\"\"}));\n$(_3).textbox(\"textbox\").attr(\"readonly\",\"readonly\");\n_4.filebox=$(_3).next().addClass(\"filebox\");\n_4.filebox.find(\".textbox-value\").remove();\n_5.oldValue=\"\";\nvar _6=$(\"<input type=\\\"file\\\" class=\\\"textbox-value\\\">\").appendTo(_4.filebox);\n_6.attr(\"id\",id).attr(\"name\",$(_3).attr(\"textboxName\")||\"\");\n_6.change(function(){\n$(_3).filebox(\"setText\",this.value);\n_5.onChange.call(_3,this.value,_5.oldValue);\n_5.oldValue=this.value;\n});\nvar _7=$(_3).filebox(\"button\");\nif(_7.length){\nif(_7.linkbutton(\"options\").disabled){\n_6.attr(\"disabled\",\"disabled\");\n}else{\n_6.removeAttr(\"disabled\");\n}\n}\n};\n$.fn.filebox=function(_8,_9){\nif(typeof _8==\"string\"){\nvar _a=$.fn.filebox.methods[_8];\nif(_a){\nreturn _a(this,_9);\n}else{\nreturn this.textbox(_8,_9);\n}\n}\n_8=_8||{};\nreturn this.each(function(){\nvar _b=$.data(this,\"filebox\");\nif(_b){\n$.extend(_b.options,_8);\n}else{\n$.data(this,\"filebox\",{options:$.extend({},$.fn.filebox.defaults,$.fn.filebox.parseOptions(this),_8)});\n}\n_2(this);\n});\n};\n$.fn.filebox.methods={options:function(jq){\nvar _c=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"filebox\").options,{width:_c.width,value:_c.value,originalValue:_c.originalValue,disabled:_c.disabled,readonly:_c.readonly});\n}};\n$.fn.filebox.parseOptions=function(_d){\nreturn $.extend({},$.fn.textbox.parseOptions(_d),{});\n};\n$.fn.filebox.defaults=$.extend({},$.fn.textbox.defaults,{buttonIcon:null,buttonText:\"Choose File\",buttonAlign:\"right\",inputEvents:{}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.form.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"form\").options;\n$.extend(_4,_3||{});\nvar _5=$.extend({},_4.queryParams);\nif(_4.onSubmit.call(_2,_5)==false){\nreturn;\n}\n$(_2).find(\".textbox-text:focus\").blur();\nvar _6=\"easyui_frame_\"+(new Date().getTime());\nvar _7=$(\"<iframe id=\"+_6+\" name=\"+_6+\"></iframe>\").appendTo(\"body\");\n_7.attr(\"src\",window.ActiveXObject?\"javascript:false\":\"about:blank\");\n_7.css({position:\"absolute\",top:-1000,left:-1000});\n_7.bind(\"load\",cb);\n_8(_5);\nfunction _8(_9){\nvar _a=$(_2);\nif(_4.url){\n_a.attr(\"action\",_4.url);\n}\nvar t=_a.attr(\"target\"),a=_a.attr(\"action\");\n_a.attr(\"target\",_6);\nvar _b=$();\ntry{\nfor(var n in _9){\nvar _c=$(\"<input type=\\\"hidden\\\" name=\\\"\"+n+\"\\\">\").val(_9[n]).appendTo(_a);\n_b=_b.add(_c);\n}\n_d();\n_a[0].submit();\n}\nfinally{\n_a.attr(\"action\",a);\nt?_a.attr(\"target\",t):_a.removeAttr(\"target\");\n_b.remove();\n}\n};\nfunction _d(){\nvar f=$(\"#\"+_6);\nif(!f.length){\nreturn;\n}\ntry{\nvar s=f.contents()[0].readyState;\nif(s&&s.toLowerCase()==\"uninitialized\"){\nsetTimeout(_d,100);\n}\n}\ncatch(e){\ncb();\n}\n};\nvar _e=10;\nfunction cb(){\nvar f=$(\"#\"+_6);\nif(!f.length){\nreturn;\n}\nf.unbind();\nvar _f=\"\";\ntry{\nvar _10=f.contents().find(\"body\");\n_f=_10.html();\nif(_f==\"\"){\nif(--_e){\nsetTimeout(cb,100);\nreturn;\n}\n}\nvar ta=_10.find(\">textarea\");\nif(ta.length){\n_f=ta.val();\n}else{\nvar pre=_10.find(\">pre\");\nif(pre.length){\n_f=pre.html();\n}\n}\n}\ncatch(e){\n}\n_4.success(_f);\nsetTimeout(function(){\nf.unbind();\nf.remove();\n},100);\n};\n};\nfunction _11(_12,_13){\nvar _14=$.data(_12,\"form\").options;\nif(typeof _13==\"string\"){\nvar _15={};\nif(_14.onBeforeLoad.call(_12,_15)==false){\nreturn;\n}\n$.ajax({url:_13,data:_15,dataType:\"json\",success:function(_16){\n_17(_16);\n},error:function(){\n_14.onLoadError.apply(_12,arguments);\n}});\n}else{\n_17(_13);\n}\nfunction _17(_18){\nvar _19=$(_12);\nfor(var _1a in _18){\nvar val=_18[_1a];\nvar rr=_1b(_1a,val);\nif(!rr.length){\nvar _1c=_1d(_1a,val);\nif(!_1c){\n$(\"input[name=\\\"\"+_1a+\"\\\"]\",_19).val(val);\n$(\"textarea[name=\\\"\"+_1a+\"\\\"]\",_19).val(val);\n$(\"select[name=\\\"\"+_1a+\"\\\"]\",_19).val(val);\n}\n}\n_1e(_1a,val);\n}\n_14.onLoadSuccess.call(_12,_18);\n_2b(_12);\n};\nfunction _1b(_1f,val){\nvar rr=$(_12).find(\"input[name=\\\"\"+_1f+\"\\\"][type=radio], input[name=\\\"\"+_1f+\"\\\"][type=checkbox]\");\nrr._propAttr(\"checked\",false);\nrr.each(function(){\nvar f=$(this);\nif(f.val()==String(val)||$.inArray(f.val(),$.isArray(val)?val:[val])>=0){\nf._propAttr(\"checked\",true);\n}\n});\nreturn rr;\n};\nfunction _1d(_20,val){\nvar _21=0;\nvar pp=[\"textbox\",\"numberbox\",\"slider\"];\nfor(var i=0;i<pp.length;i++){\nvar p=pp[i];\nvar f=$(_12).find(\"input[\"+p+\"Name=\\\"\"+_20+\"\\\"]\");\nif(f.length){\nf[p](\"setValue\",val);\n_21+=f.length;\n}\n}\nreturn _21;\n};\nfunction _1e(_22,val){\nvar _23=$(_12);\nvar cc=[\"combobox\",\"combotree\",\"combogrid\",\"datetimebox\",\"datebox\",\"combo\"];\nvar c=_23.find(\"[comboName=\\\"\"+_22+\"\\\"]\");\nif(c.length){\nfor(var i=0;i<cc.length;i++){\nvar _24=cc[i];\nif(c.hasClass(_24+\"-f\")){\nif(c[_24](\"options\").multiple){\nc[_24](\"setValues\",val);\n}else{\nc[_24](\"setValue\",val);\n}\nreturn;\n}\n}\n}\n};\n};\nfunction _25(_26){\n$(\"input,select,textarea\",_26).each(function(){\nvar t=this.type,tag=this.tagName.toLowerCase();\nif(t==\"text\"||t==\"hidden\"||t==\"password\"||tag==\"textarea\"){\nthis.value=\"\";\n}else{\nif(t==\"file\"){\nvar _27=$(this);\nif(!_27.hasClass(\"textbox-value\")){\nvar _28=_27.clone().val(\"\");\n_28.insertAfter(_27);\nif(_27.data(\"validatebox\")){\n_27.validatebox(\"destroy\");\n_28.validatebox();\n}else{\n_27.remove();\n}\n}\n}else{\nif(t==\"checkbox\"||t==\"radio\"){\nthis.checked=false;\n}else{\nif(tag==\"select\"){\nthis.selectedIndex=-1;\n}\n}\n}\n}\n});\nvar t=$(_26);\nvar _29=[\"textbox\",\"combo\",\"combobox\",\"combotree\",\"combogrid\",\"slider\"];\nfor(var i=0;i<_29.length;i++){\nvar _2a=_29[i];\nvar r=t.find(\".\"+_2a+\"-f\");\nif(r.length&&r[_2a]){\nr[_2a](\"clear\");\n}\n}\n_2b(_26);\n};\nfunction _2c(_2d){\n_2d.reset();\nvar t=$(_2d);\nvar _2e=[\"textbox\",\"combo\",\"combobox\",\"combotree\",\"combogrid\",\"datebox\",\"datetimebox\",\"spinner\",\"timespinner\",\"numberbox\",\"numberspinner\",\"slider\"];\nfor(var i=0;i<_2e.length;i++){\nvar _2f=_2e[i];\nvar r=t.find(\".\"+_2f+\"-f\");\nif(r.length&&r[_2f]){\nr[_2f](\"reset\");\n}\n}\n_2b(_2d);\n};\nfunction _30(_31){\nvar _32=$.data(_31,\"form\").options;\n$(_31).unbind(\".form\");\nif(_32.ajax){\n$(_31).bind(\"submit.form\",function(){\nsetTimeout(function(){\n_1(_31,_32);\n},0);\nreturn false;\n});\n}\n_33(_31,_32.novalidate);\n};\nfunction _34(_35,_36){\n_36=_36||{};\nvar _37=$.data(_35,\"form\");\nif(_37){\n$.extend(_37.options,_36);\n}else{\n$.data(_35,\"form\",{options:$.extend({},$.fn.form.defaults,$.fn.form.parseOptions(_35),_36)});\n}\n};\nfunction _2b(_38){\nif($.fn.validatebox){\nvar t=$(_38);\nt.find(\".validatebox-text:not(:disabled)\").validatebox(\"validate\");\nvar _39=t.find(\".validatebox-invalid\");\n_39.filter(\":not(:disabled):first\").focus();\nreturn _39.length==0;\n}\nreturn true;\n};\nfunction _33(_3a,_3b){\nvar _3c=$.data(_3a,\"form\").options;\n_3c.novalidate=_3b;\n$(_3a).find(\".validatebox-text:not(:disabled)\").validatebox(_3b?\"disableValidation\":\"enableValidation\");\n};\n$.fn.form=function(_3d,_3e){\nif(typeof _3d==\"string\"){\nthis.each(function(){\n_34(this);\n});\nreturn $.fn.form.methods[_3d](this,_3e);\n}\nreturn this.each(function(){\n_34(this,_3d);\n_30(this);\n});\n};\n$.fn.form.methods={options:function(jq){\nreturn $.data(jq[0],\"form\").options;\n},submit:function(jq,_3f){\nreturn jq.each(function(){\n_1(this,_3f);\n});\n},load:function(jq,_40){\nreturn jq.each(function(){\n_11(this,_40);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n_25(this);\n});\n},reset:function(jq){\nreturn jq.each(function(){\n_2c(this);\n});\n},validate:function(jq){\nreturn _2b(jq[0]);\n},disableValidation:function(jq){\nreturn jq.each(function(){\n_33(this,true);\n});\n},enableValidation:function(jq){\nreturn jq.each(function(){\n_33(this,false);\n});\n}};\n$.fn.form.parseOptions=function(_41){\nvar t=$(_41);\nreturn $.extend({},$.parser.parseOptions(_41,[{ajax:\"boolean\"}]),{url:(t.attr(\"action\")?t.attr(\"action\"):undefined)});\n};\n$.fn.form.defaults={novalidate:false,ajax:true,url:null,queryParams:{},onSubmit:function(_42){\nreturn $(this).form(\"validate\");\n},success:function(_43){\n},onBeforeLoad:function(_44){\n},onLoadSuccess:function(_45){\n},onLoadError:function(){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.layout.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nvar _1=false;\nfunction _2(_3,_4){\nvar _5=$.data(_3,\"layout\");\nvar _6=_5.options;\nvar _7=_5.panels;\nvar cc=$(_3);\nif(_4){\n$.extend(_6,{width:_4.width,height:_4.height});\n}\nif(_3.tagName.toLowerCase()==\"body\"){\ncc._size(\"fit\");\n}else{\ncc._size(_6);\n}\nvar _8={top:0,left:0,width:cc.width(),height:cc.height()};\n_9(_a(_7.expandNorth)?_7.expandNorth:_7.north,\"n\");\n_9(_a(_7.expandSouth)?_7.expandSouth:_7.south,\"s\");\n_b(_a(_7.expandEast)?_7.expandEast:_7.east,\"e\");\n_b(_a(_7.expandWest)?_7.expandWest:_7.west,\"w\");\n_7.center.panel(\"resize\",_8);\nfunction _9(pp,_c){\nif(!pp.length||!_a(pp)){\nreturn;\n}\nvar _d=pp.panel(\"options\");\npp.panel(\"resize\",{width:cc.width(),height:_d.height});\nvar _e=pp.panel(\"panel\").outerHeight();\npp.panel(\"move\",{left:0,top:(_c==\"n\"?0:cc.height()-_e)});\n_8.height-=_e;\nif(_c==\"n\"){\n_8.top+=_e;\nif(!_d.split&&_d.border){\n_8.top--;\n}\n}\nif(!_d.split&&_d.border){\n_8.height++;\n}\n};\nfunction _b(pp,_f){\nif(!pp.length||!_a(pp)){\nreturn;\n}\nvar _10=pp.panel(\"options\");\npp.panel(\"resize\",{width:_10.width,height:_8.height});\nvar _11=pp.panel(\"panel\").outerWidth();\npp.panel(\"move\",{left:(_f==\"e\"?cc.width()-_11:0),top:_8.top});\n_8.width-=_11;\nif(_f==\"w\"){\n_8.left+=_11;\nif(!_10.split&&_10.border){\n_8.left--;\n}\n}\nif(!_10.split&&_10.border){\n_8.width++;\n}\n};\n};\nfunction _12(_13){\nvar cc=$(_13);\ncc.addClass(\"layout\");\nfunction _14(cc){\ncc.children(\"div\").each(function(){\nvar _15=$.fn.layout.parsePanelOptions(this);\nif(\"north,south,east,west,center\".indexOf(_15.region)>=0){\n_17(_13,_15,this);\n}\n});\n};\ncc.children(\"form\").length?_14(cc.children(\"form\")):_14(cc);\ncc.append(\"<div class=\\\"layout-split-proxy-h\\\"></div><div class=\\\"layout-split-proxy-v\\\"></div>\");\ncc.bind(\"_resize\",function(e,_16){\nif($(this).hasClass(\"easyui-fluid\")||_16){\n_2(_13);\n}\nreturn false;\n});\n};\nfunction _17(_18,_19,el){\n_19.region=_19.region||\"center\";\nvar _1a=$.data(_18,\"layout\").panels;\nvar cc=$(_18);\nvar dir=_19.region;\nif(_1a[dir].length){\nreturn;\n}\nvar pp=$(el);\nif(!pp.length){\npp=$(\"<div></div>\").appendTo(cc);\n}\nvar _1b=$.extend({},$.fn.layout.paneldefaults,{width:(pp.length?parseInt(pp[0].style.width)||pp.outerWidth():\"auto\"),height:(pp.length?parseInt(pp[0].style.height)||pp.outerHeight():\"auto\"),doSize:false,collapsible:true,cls:(\"layout-panel layout-panel-\"+dir),bodyCls:\"layout-body\",onOpen:function(){\nvar _1c=$(this).panel(\"header\").children(\"div.panel-tool\");\n_1c.children(\"a.panel-tool-collapse\").hide();\nvar _1d={north:\"up\",south:\"down\",east:\"right\",west:\"left\"};\nif(!_1d[dir]){\nreturn;\n}\nvar _1e=\"layout-button-\"+_1d[dir];\nvar t=_1c.children(\"a.\"+_1e);\nif(!t.length){\nt=$(\"<a href=\\\"javascript:void(0)\\\"></a>\").addClass(_1e).appendTo(_1c);\nt.bind(\"click\",{dir:dir},function(e){\n_2b(_18,e.data.dir);\nreturn false;\n});\n}\n$(this).panel(\"options\").collapsible?t.show():t.hide();\n}},_19);\npp.panel(_1b);\n_1a[dir]=pp;\nif(pp.panel(\"options\").split){\nvar _1f=pp.panel(\"panel\");\n_1f.addClass(\"layout-split-\"+dir);\nvar _20=\"\";\nif(dir==\"north\"){\n_20=\"s\";\n}\nif(dir==\"south\"){\n_20=\"n\";\n}\nif(dir==\"east\"){\n_20=\"w\";\n}\nif(dir==\"west\"){\n_20=\"e\";\n}\n_1f.resizable($.extend({},{handles:_20,onStartResize:function(e){\n_1=true;\nif(dir==\"north\"||dir==\"south\"){\nvar _21=$(\">div.layout-split-proxy-v\",_18);\n}else{\nvar _21=$(\">div.layout-split-proxy-h\",_18);\n}\nvar top=0,_22=0,_23=0,_24=0;\nvar pos={display:\"block\"};\nif(dir==\"north\"){\npos.top=parseInt(_1f.css(\"top\"))+_1f.outerHeight()-_21.height();\npos.left=parseInt(_1f.css(\"left\"));\npos.width=_1f.outerWidth();\npos.height=_21.height();\n}else{\nif(dir==\"south\"){\npos.top=parseInt(_1f.css(\"top\"));\npos.left=parseInt(_1f.css(\"left\"));\npos.width=_1f.outerWidth();\npos.height=_21.height();\n}else{\nif(dir==\"east\"){\npos.top=parseInt(_1f.css(\"top\"))||0;\npos.left=parseInt(_1f.css(\"left\"))||0;\npos.width=_21.width();\npos.height=_1f.outerHeight();\n}else{\nif(dir==\"west\"){\npos.top=parseInt(_1f.css(\"top\"))||0;\npos.left=_1f.outerWidth()-_21.width();\npos.width=_21.width();\npos.height=_1f.outerHeight();\n}\n}\n}\n}\n_21.css(pos);\n$(\"<div class=\\\"layout-mask\\\"></div>\").css({left:0,top:0,width:cc.width(),height:cc.height()}).appendTo(cc);\n},onResize:function(e){\nif(dir==\"north\"||dir==\"south\"){\nvar _25=$(\">div.layout-split-proxy-v\",_18);\n_25.css(\"top\",e.pageY-$(_18).offset().top-_25.height()/2);\n}else{\nvar _25=$(\">div.layout-split-proxy-h\",_18);\n_25.css(\"left\",e.pageX-$(_18).offset().left-_25.width()/2);\n}\nreturn false;\n},onStopResize:function(e){\ncc.children(\"div.layout-split-proxy-v,div.layout-split-proxy-h\").hide();\npp.panel(\"resize\",e.data);\n_2(_18);\n_1=false;\ncc.find(\">div.layout-mask\").remove();\n}},_19));\n}\n};\nfunction _26(_27,_28){\nvar _29=$.data(_27,\"layout\").panels;\nif(_29[_28].length){\n_29[_28].panel(\"destroy\");\n_29[_28]=$();\nvar _2a=\"expand\"+_28.substring(0,1).toUpperCase()+_28.substring(1);\nif(_29[_2a]){\n_29[_2a].panel(\"destroy\");\n_29[_2a]=undefined;\n}\n}\n};\nfunction _2b(_2c,_2d,_2e){\nif(_2e==undefined){\n_2e=\"normal\";\n}\nvar _2f=$.data(_2c,\"layout\").panels;\nvar p=_2f[_2d];\nvar _30=p.panel(\"options\");\nif(_30.onBeforeCollapse.call(p)==false){\nreturn;\n}\nvar _31=\"expand\"+_2d.substring(0,1).toUpperCase()+_2d.substring(1);\nif(!_2f[_31]){\n_2f[_31]=_32(_2d);\n_2f[_31].panel(\"panel\").bind(\"click\",function(){\np.panel(\"expand\",false).panel(\"open\");\nvar _33=_34();\np.panel(\"resize\",_33.collapse);\np.panel(\"panel\").animate(_33.expand,function(){\n$(this).unbind(\".layout\").bind(\"mouseleave.layout\",{region:_2d},function(e){\nif(_1==true){\nreturn;\n}\nif($(\"body>div.combo-p>div.combo-panel:visible\").length){\nreturn;\n}\n_2b(_2c,e.data.region);\n});\n});\nreturn false;\n});\n}\nvar _35=_34();\nif(!_a(_2f[_31])){\n_2f.center.panel(\"resize\",_35.resizeC);\n}\np.panel(\"panel\").animate(_35.collapse,_2e,function(){\np.panel(\"collapse\",false).panel(\"close\");\n_2f[_31].panel(\"open\").panel(\"resize\",_35.expandP);\n$(this).unbind(\".layout\");\n});\nfunction _32(dir){\nvar _36;\nif(dir==\"east\"){\n_36=\"layout-button-left\";\n}else{\nif(dir==\"west\"){\n_36=\"layout-button-right\";\n}else{\nif(dir==\"north\"){\n_36=\"layout-button-down\";\n}else{\nif(dir==\"south\"){\n_36=\"layout-button-up\";\n}\n}\n}\n}\nvar p=$(\"<div></div>\").appendTo(_2c);\np.panel($.extend({},$.fn.layout.paneldefaults,{cls:(\"layout-expand layout-expand-\"+dir),title:\"&nbsp;\",closed:true,minWidth:0,minHeight:0,doSize:false,tools:[{iconCls:_36,handler:function(){\n_3c(_2c,_2d);\nreturn false;\n}}]}));\np.panel(\"panel\").hover(function(){\n$(this).addClass(\"layout-expand-over\");\n},function(){\n$(this).removeClass(\"layout-expand-over\");\n});\nreturn p;\n};\nfunction _34(){\nvar cc=$(_2c);\nvar _37=_2f.center.panel(\"options\");\nvar _38=_30.collapsedSize;\nif(_2d==\"east\"){\nvar _39=p.panel(\"panel\")._outerWidth();\nvar _3a=_37.width+_39-_38;\nif(_30.split||!_30.border){\n_3a++;\n}\nreturn {resizeC:{width:_3a},expand:{left:cc.width()-_39},expandP:{top:_37.top,left:cc.width()-_38,width:_38,height:_37.height},collapse:{left:cc.width(),top:_37.top,height:_37.height}};\n}else{\nif(_2d==\"west\"){\nvar _39=p.panel(\"panel\")._outerWidth();\nvar _3a=_37.width+_39-_38;\nif(_30.split||!_30.border){\n_3a++;\n}\nreturn {resizeC:{width:_3a,left:_38-1},expand:{left:0},expandP:{left:0,top:_37.top,width:_38,height:_37.height},collapse:{left:-_39,top:_37.top,height:_37.height}};\n}else{\nif(_2d==\"north\"){\nvar _3b=p.panel(\"panel\")._outerHeight();\nvar hh=_37.height;\nif(!_a(_2f.expandNorth)){\nhh+=_3b-_38+((_30.split||!_30.border)?1:0);\n}\n_2f.east.add(_2f.west).add(_2f.expandEast).add(_2f.expandWest).panel(\"resize\",{top:_38-1,height:hh});\nreturn {resizeC:{top:_38-1,height:hh},expand:{top:0},expandP:{top:0,left:0,width:cc.width(),height:_38},collapse:{top:-_3b,width:cc.width()}};\n}else{\nif(_2d==\"south\"){\nvar _3b=p.panel(\"panel\")._outerHeight();\nvar hh=_37.height;\nif(!_a(_2f.expandSouth)){\nhh+=_3b-_38+((_30.split||!_30.border)?1:0);\n}\n_2f.east.add(_2f.west).add(_2f.expandEast).add(_2f.expandWest).panel(\"resize\",{height:hh});\nreturn {resizeC:{height:hh},expand:{top:cc.height()-_3b},expandP:{top:cc.height()-_38,left:0,width:cc.width(),height:_38},collapse:{top:cc.height(),width:cc.width()}};\n}\n}\n}\n}\n};\n};\nfunction _3c(_3d,_3e){\nvar _3f=$.data(_3d,\"layout\").panels;\nvar p=_3f[_3e];\nvar _40=p.panel(\"options\");\nif(_40.onBeforeExpand.call(p)==false){\nreturn;\n}\nvar _41=\"expand\"+_3e.substring(0,1).toUpperCase()+_3e.substring(1);\nif(_3f[_41]){\n_3f[_41].panel(\"close\");\np.panel(\"panel\").stop(true,true);\np.panel(\"expand\",false).panel(\"open\");\nvar _42=_43();\np.panel(\"resize\",_42.collapse);\np.panel(\"panel\").animate(_42.expand,function(){\n_2(_3d);\n});\n}\nfunction _43(){\nvar cc=$(_3d);\nvar _44=_3f.center.panel(\"options\");\nif(_3e==\"east\"&&_3f.expandEast){\nreturn {collapse:{left:cc.width(),top:_44.top,height:_44.height},expand:{left:cc.width()-p.panel(\"panel\")._outerWidth()}};\n}else{\nif(_3e==\"west\"&&_3f.expandWest){\nreturn {collapse:{left:-p.panel(\"panel\")._outerWidth(),top:_44.top,height:_44.height},expand:{left:0}};\n}else{\nif(_3e==\"north\"&&_3f.expandNorth){\nreturn {collapse:{top:-p.panel(\"panel\")._outerHeight(),width:cc.width()},expand:{top:0}};\n}else{\nif(_3e==\"south\"&&_3f.expandSouth){\nreturn {collapse:{top:cc.height(),width:cc.width()},expand:{top:cc.height()-p.panel(\"panel\")._outerHeight()}};\n}\n}\n}\n}\n};\n};\nfunction _a(pp){\nif(!pp){\nreturn false;\n}\nif(pp.length){\nreturn pp.panel(\"panel\").is(\":visible\");\n}else{\nreturn false;\n}\n};\nfunction _45(_46){\nvar _47=$.data(_46,\"layout\").panels;\nif(_47.east.length&&_47.east.panel(\"options\").collapsed){\n_2b(_46,\"east\",0);\n}\nif(_47.west.length&&_47.west.panel(\"options\").collapsed){\n_2b(_46,\"west\",0);\n}\nif(_47.north.length&&_47.north.panel(\"options\").collapsed){\n_2b(_46,\"north\",0);\n}\nif(_47.south.length&&_47.south.panel(\"options\").collapsed){\n_2b(_46,\"south\",0);\n}\n};\n$.fn.layout=function(_48,_49){\nif(typeof _48==\"string\"){\nreturn $.fn.layout.methods[_48](this,_49);\n}\n_48=_48||{};\nreturn this.each(function(){\nvar _4a=$.data(this,\"layout\");\nif(_4a){\n$.extend(_4a.options,_48);\n}else{\nvar _4b=$.extend({},$.fn.layout.defaults,$.fn.layout.parseOptions(this),_48);\n$.data(this,\"layout\",{options:_4b,panels:{center:$(),north:$(),south:$(),east:$(),west:$()}});\n_12(this);\n}\n_2(this);\n_45(this);\n});\n};\n$.fn.layout.methods={options:function(jq){\nreturn $.data(jq[0],\"layout\").options;\n},resize:function(jq,_4c){\nreturn jq.each(function(){\n_2(this,_4c);\n});\n},panel:function(jq,_4d){\nreturn $.data(jq[0],\"layout\").panels[_4d];\n},collapse:function(jq,_4e){\nreturn jq.each(function(){\n_2b(this,_4e);\n});\n},expand:function(jq,_4f){\nreturn jq.each(function(){\n_3c(this,_4f);\n});\n},add:function(jq,_50){\nreturn jq.each(function(){\n_17(this,_50);\n_2(this);\nif($(this).layout(\"panel\",_50.region).panel(\"options\").collapsed){\n_2b(this,_50.region,0);\n}\n});\n},remove:function(jq,_51){\nreturn jq.each(function(){\n_26(this,_51);\n_2(this);\n});\n}};\n$.fn.layout.parseOptions=function(_52){\nreturn $.extend({},$.parser.parseOptions(_52,[{fit:\"boolean\"}]));\n};\n$.fn.layout.defaults={fit:false};\n$.fn.layout.parsePanelOptions=function(_53){\nvar t=$(_53);\nreturn $.extend({},$.fn.panel.parseOptions(_53),$.parser.parseOptions(_53,[\"region\",{split:\"boolean\",collpasedSize:\"number\",minWidth:\"number\",minHeight:\"number\",maxWidth:\"number\",maxHeight:\"number\"}]));\n};\n$.fn.layout.paneldefaults=$.extend({},$.fn.panel.defaults,{region:null,split:false,collapsedSize:28,minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.linkbutton.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"linkbutton\").options;\nif(_3){\n$.extend(_4,_3);\n}\nif(_4.width||_4.height||_4.fit){\nvar _5=$(_2);\nvar _6=_5.parent();\nvar _7=_5.is(\":visible\");\nif(!_7){\nvar _8=$(\"<div style=\\\"display:none\\\"></div>\").insertBefore(_2);\nvar _9={position:_5.css(\"position\"),display:_5.css(\"display\"),left:_5.css(\"left\")};\n_5.appendTo(\"body\");\n_5.css({position:\"absolute\",display:\"inline-block\",left:-20000});\n}\n_5._size(_4,_6);\nvar _a=_5.find(\".l-btn-left\");\n_a.css(\"margin-top\",0);\n_a.css(\"margin-top\",parseInt((_5.height()-_a.height())/2)+\"px\");\nif(!_7){\n_5.insertAfter(_8);\n_5.css(_9);\n_8.remove();\n}\n}\n};\nfunction _b(_c){\nvar _d=$.data(_c,\"linkbutton\").options;\nvar t=$(_c).empty();\nt.addClass(\"l-btn\").removeClass(\"l-btn-plain l-btn-selected l-btn-plain-selected\");\nt.removeClass(\"l-btn-small l-btn-medium l-btn-large\").addClass(\"l-btn-\"+_d.size);\nif(_d.plain){\nt.addClass(\"l-btn-plain\");\n}\nif(_d.selected){\nt.addClass(_d.plain?\"l-btn-selected l-btn-plain-selected\":\"l-btn-selected\");\n}\nt.attr(\"group\",_d.group||\"\");\nt.attr(\"id\",_d.id||\"\");\nvar _e=$(\"<span class=\\\"l-btn-left\\\"></span>\").appendTo(t);\nif(_d.text){\n$(\"<span class=\\\"l-btn-text\\\"></span>\").html(_d.text).appendTo(_e);\n}else{\n$(\"<span class=\\\"l-btn-text l-btn-empty\\\">&nbsp;</span>\").appendTo(_e);\n}\nif(_d.iconCls){\n$(\"<span class=\\\"l-btn-icon\\\">&nbsp;</span>\").addClass(_d.iconCls).appendTo(_e);\n_e.addClass(\"l-btn-icon-\"+_d.iconAlign);\n}\nt.unbind(\".linkbutton\").bind(\"focus.linkbutton\",function(){\nif(!_d.disabled){\n$(this).addClass(\"l-btn-focus\");\n}\n}).bind(\"blur.linkbutton\",function(){\n$(this).removeClass(\"l-btn-focus\");\n}).bind(\"click.linkbutton\",function(){\nif(!_d.disabled){\nif(_d.toggle){\nif(_d.selected){\n$(this).linkbutton(\"unselect\");\n}else{\n$(this).linkbutton(\"select\");\n}\n}\n_d.onClick.call(this);\n}\n});\n_f(_c,_d.selected);\n_10(_c,_d.disabled);\n};\nfunction _f(_11,_12){\nvar _13=$.data(_11,\"linkbutton\").options;\nif(_12){\nif(_13.group){\n$(\"a.l-btn[group=\\\"\"+_13.group+\"\\\"]\").each(function(){\nvar o=$(this).linkbutton(\"options\");\nif(o.toggle){\n$(this).removeClass(\"l-btn-selected l-btn-plain-selected\");\no.selected=false;\n}\n});\n}\n$(_11).addClass(_13.plain?\"l-btn-selected l-btn-plain-selected\":\"l-btn-selected\");\n_13.selected=true;\n}else{\nif(!_13.group){\n$(_11).removeClass(\"l-btn-selected l-btn-plain-selected\");\n_13.selected=false;\n}\n}\n};\nfunction _10(_14,_15){\nvar _16=$.data(_14,\"linkbutton\");\nvar _17=_16.options;\n$(_14).removeClass(\"l-btn-disabled l-btn-plain-disabled\");\nif(_15){\n_17.disabled=true;\nvar _18=$(_14).attr(\"href\");\nif(_18){\n_16.href=_18;\n$(_14).attr(\"href\",\"javascript:void(0)\");\n}\nif(_14.onclick){\n_16.onclick=_14.onclick;\n_14.onclick=null;\n}\n_17.plain?$(_14).addClass(\"l-btn-disabled l-btn-plain-disabled\"):$(_14).addClass(\"l-btn-disabled\");\n}else{\n_17.disabled=false;\nif(_16.href){\n$(_14).attr(\"href\",_16.href);\n}\nif(_16.onclick){\n_14.onclick=_16.onclick;\n}\n}\n};\n$.fn.linkbutton=function(_19,_1a){\nif(typeof _19==\"string\"){\nreturn $.fn.linkbutton.methods[_19](this,_1a);\n}\n_19=_19||{};\nreturn this.each(function(){\nvar _1b=$.data(this,\"linkbutton\");\nif(_1b){\n$.extend(_1b.options,_19);\n}else{\n$.data(this,\"linkbutton\",{options:$.extend({},$.fn.linkbutton.defaults,$.fn.linkbutton.parseOptions(this),_19)});\n$(this).removeAttr(\"disabled\");\n$(this).bind(\"_resize\",function(e,_1c){\nif($(this).hasClass(\"easyui-fluid\")||_1c){\n_1(this);\n}\nreturn false;\n});\n}\n_b(this);\n_1(this);\n});\n};\n$.fn.linkbutton.methods={options:function(jq){\nreturn $.data(jq[0],\"linkbutton\").options;\n},resize:function(jq,_1d){\nreturn jq.each(function(){\n_1(this,_1d);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_10(this,false);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_10(this,true);\n});\n},select:function(jq){\nreturn jq.each(function(){\n_f(this,true);\n});\n},unselect:function(jq){\nreturn jq.each(function(){\n_f(this,false);\n});\n}};\n$.fn.linkbutton.parseOptions=function(_1e){\nvar t=$(_1e);\nreturn $.extend({},$.parser.parseOptions(_1e,[\"id\",\"iconCls\",\"iconAlign\",\"group\",\"size\",{plain:\"boolean\",toggle:\"boolean\",selected:\"boolean\"}]),{disabled:(t.attr(\"disabled\")?true:undefined),text:$.trim(t.html()),iconCls:(t.attr(\"icon\")||t.attr(\"iconCls\"))});\n};\n$.fn.linkbutton.defaults={id:null,disabled:false,toggle:false,selected:false,group:null,plain:false,text:\"\",iconCls:null,iconAlign:\"left\",size:\"small\",onClick:function(){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.menu.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\n$(_2).appendTo(\"body\");\n$(_2).addClass(\"menu-top\");\n$(document).unbind(\".menu\").bind(\"mousedown.menu\",function(e){\nvar m=$(e.target).closest(\"div.menu,div.combo-p\");\nif(m.length){\nreturn;\n}\n$(\"body>div.menu-top:visible\").menu(\"hide\");\n});\nvar _3=_4($(_2));\nfor(var i=0;i<_3.length;i++){\n_5(_3[i]);\n}\nfunction _4(_6){\nvar _7=[];\n_6.addClass(\"menu\");\n_7.push(_6);\nif(!_6.hasClass(\"menu-content\")){\n_6.children(\"div\").each(function(){\nvar _8=$(this).children(\"div\");\nif(_8.length){\n_8.insertAfter(_2);\nthis.submenu=_8;\nvar mm=_4(_8);\n_7=_7.concat(mm);\n}\n});\n}\nreturn _7;\n};\nfunction _5(_9){\nvar wh=$.parser.parseOptions(_9[0],[\"width\",\"height\"]);\n_9[0].originalHeight=wh.height||0;\nif(_9.hasClass(\"menu-content\")){\n_9[0].originalWidth=wh.width||_9._outerWidth();\n}else{\n_9[0].originalWidth=wh.width||0;\n_9.children(\"div\").each(function(){\nvar _a=$(this);\nvar _b=$.extend({},$.parser.parseOptions(this,[\"name\",\"iconCls\",\"href\",{separator:\"boolean\"}]),{disabled:(_a.attr(\"disabled\")?true:undefined)});\nif(_b.separator){\n_a.addClass(\"menu-sep\");\n}\nif(!_a.hasClass(\"menu-sep\")){\n_a[0].itemName=_b.name||\"\";\n_a[0].itemHref=_b.href||\"\";\nvar _c=_a.addClass(\"menu-item\").html();\n_a.empty().append($(\"<div class=\\\"menu-text\\\"></div>\").html(_c));\nif(_b.iconCls){\n$(\"<div class=\\\"menu-icon\\\"></div>\").addClass(_b.iconCls).appendTo(_a);\n}\nif(_b.disabled){\n_d(_2,_a[0],true);\n}\nif(_a[0].submenu){\n$(\"<div class=\\\"menu-rightarrow\\\"></div>\").appendTo(_a);\n}\n_e(_2,_a);\n}\n});\n$(\"<div class=\\\"menu-line\\\"></div>\").prependTo(_9);\n}\n_f(_2,_9);\n_9.hide();\n_10(_2,_9);\n};\n};\nfunction _f(_11,_12){\nvar _13=$.data(_11,\"menu\").options;\nvar _14=_12.attr(\"style\")||\"\";\n_12.css({display:\"block\",left:-10000,height:\"auto\",overflow:\"hidden\"});\nvar el=_12[0];\nvar _15=el.originalWidth||0;\nif(!_15){\n_15=0;\n_12.find(\"div.menu-text\").each(function(){\nif(_15<$(this)._outerWidth()){\n_15=$(this)._outerWidth();\n}\n$(this).closest(\"div.menu-item\")._outerHeight($(this)._outerHeight()+2);\n});\n_15+=40;\n}\n_15=Math.max(_15,_13.minWidth);\nvar _16=el.originalHeight||0;\nif(!_16){\n_16=_12.outerHeight();\nif(_12.hasClass(\"menu-top\")&&_13.alignTo){\nvar at=$(_13.alignTo);\nvar h1=at.offset().top-$(document).scrollTop();\nvar h2=$(window)._outerHeight()+$(document).scrollTop()-at.offset().top-at._outerHeight();\n_16=Math.min(_16,Math.max(h1,h2));\n}else{\nif(_16>$(window)._outerHeight()){\n_16=$(window).height();\n_14+=\";overflow:auto\";\n}else{\n_14+=\";overflow:hidden\";\n}\n}\n}\nvar _17=Math.max(el.originalHeight,_12.outerHeight())-2;\n_12._outerWidth(_15)._outerHeight(_16);\n_12.children(\"div.menu-line\")._outerHeight(_17);\n_14+=\";width:\"+el.style.width+\";height:\"+el.style.height;\n_12.attr(\"style\",_14);\n};\nfunction _10(_18,_19){\nvar _1a=$.data(_18,\"menu\");\n_19.unbind(\".menu\").bind(\"mouseenter.menu\",function(){\nif(_1a.timer){\nclearTimeout(_1a.timer);\n_1a.timer=null;\n}\n}).bind(\"mouseleave.menu\",function(){\nif(_1a.options.hideOnUnhover){\n_1a.timer=setTimeout(function(){\n_1b(_18);\n},_1a.options.duration);\n}\n});\n};\nfunction _e(_1c,_1d){\nif(!_1d.hasClass(\"menu-item\")){\nreturn;\n}\n_1d.unbind(\".menu\");\n_1d.bind(\"click.menu\",function(){\nif($(this).hasClass(\"menu-item-disabled\")){\nreturn;\n}\nif(!this.submenu){\n_1b(_1c);\nvar _1e=this.itemHref;\nif(_1e){\nlocation.href=_1e;\n}\n}\nvar _1f=$(_1c).menu(\"getItem\",this);\n$.data(_1c,\"menu\").options.onClick.call(_1c,_1f);\n}).bind(\"mouseenter.menu\",function(e){\n_1d.siblings().each(function(){\nif(this.submenu){\n_22(this.submenu);\n}\n$(this).removeClass(\"menu-active\");\n});\n_1d.addClass(\"menu-active\");\nif($(this).hasClass(\"menu-item-disabled\")){\n_1d.addClass(\"menu-active-disabled\");\nreturn;\n}\nvar _20=_1d[0].submenu;\nif(_20){\n$(_1c).menu(\"show\",{menu:_20,parent:_1d});\n}\n}).bind(\"mouseleave.menu\",function(e){\n_1d.removeClass(\"menu-active menu-active-disabled\");\nvar _21=_1d[0].submenu;\nif(_21){\nif(e.pageX>=parseInt(_21.css(\"left\"))){\n_1d.addClass(\"menu-active\");\n}else{\n_22(_21);\n}\n}else{\n_1d.removeClass(\"menu-active\");\n}\n});\n};\nfunction _1b(_23){\nvar _24=$.data(_23,\"menu\");\nif(_24){\nif($(_23).is(\":visible\")){\n_22($(_23));\n_24.options.onHide.call(_23);\n}\n}\nreturn false;\n};\nfunction _25(_26,_27){\nvar _28,top;\n_27=_27||{};\nvar _29=$(_27.menu||_26);\n$(_26).menu(\"resize\",_29[0]);\nif(_29.hasClass(\"menu-top\")){\nvar _2a=$.data(_26,\"menu\").options;\n$.extend(_2a,_27);\n_28=_2a.left;\ntop=_2a.top;\nif(_2a.alignTo){\nvar at=$(_2a.alignTo);\n_28=at.offset().left;\ntop=at.offset().top+at._outerHeight();\nif(_2a.align==\"right\"){\n_28+=at.outerWidth()-_29.outerWidth();\n}\n}\nif(_28+_29.outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){\n_28=$(window)._outerWidth()+$(document).scrollLeft()-_29.outerWidth()-5;\n}\nif(_28<0){\n_28=0;\n}\ntop=_2b(top,_2a.alignTo);\n}else{\nvar _2c=_27.parent;\n_28=_2c.offset().left+_2c.outerWidth()-2;\nif(_28+_29.outerWidth()+5>$(window)._outerWidth()+$(document).scrollLeft()){\n_28=_2c.offset().left-_29.outerWidth()+2;\n}\ntop=_2b(_2c.offset().top-3);\n}\nfunction _2b(top,_2d){\nif(top+_29.outerHeight()>$(window)._outerHeight()+$(document).scrollTop()){\nif(_2d){\ntop=$(_2d).offset().top-_29._outerHeight();\n}else{\ntop=$(window)._outerHeight()+$(document).scrollTop()-_29.outerHeight();\n}\n}\nif(top<0){\ntop=0;\n}\nreturn top;\n};\n_29.css({left:_28,top:top});\n_29.show(0,function(){\nif(!_29[0].shadow){\n_29[0].shadow=$(\"<div class=\\\"menu-shadow\\\"></div>\").insertAfter(_29);\n}\n_29[0].shadow.css({display:\"block\",zIndex:$.fn.menu.defaults.zIndex++,left:_29.css(\"left\"),top:_29.css(\"top\"),width:_29.outerWidth(),height:_29.outerHeight()});\n_29.css(\"z-index\",$.fn.menu.defaults.zIndex++);\nif(_29.hasClass(\"menu-top\")){\n$.data(_29[0],\"menu\").options.onShow.call(_29[0]);\n}\n});\n};\nfunction _22(_2e){\nif(!_2e){\nreturn;\n}\n_2f(_2e);\n_2e.find(\"div.menu-item\").each(function(){\nif(this.submenu){\n_22(this.submenu);\n}\n$(this).removeClass(\"menu-active\");\n});\nfunction _2f(m){\nm.stop(true,true);\nif(m[0].shadow){\nm[0].shadow.hide();\n}\nm.hide();\n};\n};\nfunction _30(_31,_32){\nvar _33=null;\nvar tmp=$(\"<div></div>\");\nfunction _34(_35){\n_35.children(\"div.menu-item\").each(function(){\nvar _36=$(_31).menu(\"getItem\",this);\nvar s=tmp.empty().html(_36.text).text();\nif(_32==$.trim(s)){\n_33=_36;\n}else{\nif(this.submenu&&!_33){\n_34(this.submenu);\n}\n}\n});\n};\n_34($(_31));\ntmp.remove();\nreturn _33;\n};\nfunction _d(_37,_38,_39){\nvar t=$(_38);\nif(!t.hasClass(\"menu-item\")){\nreturn;\n}\nif(_39){\nt.addClass(\"menu-item-disabled\");\nif(_38.onclick){\n_38.onclick1=_38.onclick;\n_38.onclick=null;\n}\n}else{\nt.removeClass(\"menu-item-disabled\");\nif(_38.onclick1){\n_38.onclick=_38.onclick1;\n_38.onclick1=null;\n}\n}\n};\nfunction _3a(_3b,_3c){\nvar _3d=$(_3b);\nif(_3c.parent){\nif(!_3c.parent.submenu){\nvar _3e=$(\"<div class=\\\"menu\\\"><div class=\\\"menu-line\\\"></div></div>\").appendTo(\"body\");\n_3e.hide();\n_3c.parent.submenu=_3e;\n$(\"<div class=\\\"menu-rightarrow\\\"></div>\").appendTo(_3c.parent);\n}\n_3d=_3c.parent.submenu;\n}\nif(_3c.separator){\nvar _3f=$(\"<div class=\\\"menu-sep\\\"></div>\").appendTo(_3d);\n}else{\nvar _3f=$(\"<div class=\\\"menu-item\\\"></div>\").appendTo(_3d);\n$(\"<div class=\\\"menu-text\\\"></div>\").html(_3c.text).appendTo(_3f);\n}\nif(_3c.iconCls){\n$(\"<div class=\\\"menu-icon\\\"></div>\").addClass(_3c.iconCls).appendTo(_3f);\n}\nif(_3c.id){\n_3f.attr(\"id\",_3c.id);\n}\nif(_3c.name){\n_3f[0].itemName=_3c.name;\n}\nif(_3c.href){\n_3f[0].itemHref=_3c.href;\n}\nif(_3c.onclick){\nif(typeof _3c.onclick==\"string\"){\n_3f.attr(\"onclick\",_3c.onclick);\n}else{\n_3f[0].onclick=eval(_3c.onclick);\n}\n}\nif(_3c.handler){\n_3f[0].onclick=eval(_3c.handler);\n}\nif(_3c.disabled){\n_d(_3b,_3f[0],true);\n}\n_e(_3b,_3f);\n_10(_3b,_3d);\n_f(_3b,_3d);\n};\nfunction _40(_41,_42){\nfunction _43(el){\nif(el.submenu){\nel.submenu.children(\"div.menu-item\").each(function(){\n_43(this);\n});\nvar _44=el.submenu[0].shadow;\nif(_44){\n_44.remove();\n}\nel.submenu.remove();\n}\n$(el).remove();\n};\nvar _45=$(_42).parent();\n_43(_42);\n_f(_41,_45);\n};\nfunction _46(_47,_48,_49){\nvar _4a=$(_48).parent();\nif(_49){\n$(_48).show();\n}else{\n$(_48).hide();\n}\n_f(_47,_4a);\n};\nfunction _4b(_4c){\n$(_4c).children(\"div.menu-item\").each(function(){\n_40(_4c,this);\n});\nif(_4c.shadow){\n_4c.shadow.remove();\n}\n$(_4c).remove();\n};\n$.fn.menu=function(_4d,_4e){\nif(typeof _4d==\"string\"){\nreturn $.fn.menu.methods[_4d](this,_4e);\n}\n_4d=_4d||{};\nreturn this.each(function(){\nvar _4f=$.data(this,\"menu\");\nif(_4f){\n$.extend(_4f.options,_4d);\n}else{\n_4f=$.data(this,\"menu\",{options:$.extend({},$.fn.menu.defaults,$.fn.menu.parseOptions(this),_4d)});\n_1(this);\n}\n$(this).css({left:_4f.options.left,top:_4f.options.top});\n});\n};\n$.fn.menu.methods={options:function(jq){\nreturn $.data(jq[0],\"menu\").options;\n},show:function(jq,pos){\nreturn jq.each(function(){\n_25(this,pos);\n});\n},hide:function(jq){\nreturn jq.each(function(){\n_1b(this);\n});\n},destroy:function(jq){\nreturn jq.each(function(){\n_4b(this);\n});\n},setText:function(jq,_50){\nreturn jq.each(function(){\n$(_50.target).children(\"div.menu-text\").html(_50.text);\n});\n},setIcon:function(jq,_51){\nreturn jq.each(function(){\n$(_51.target).children(\"div.menu-icon\").remove();\nif(_51.iconCls){\n$(\"<div class=\\\"menu-icon\\\"></div>\").addClass(_51.iconCls).appendTo(_51.target);\n}\n});\n},getItem:function(jq,_52){\nvar t=$(_52);\nvar _53={target:_52,id:t.attr(\"id\"),text:$.trim(t.children(\"div.menu-text\").html()),disabled:t.hasClass(\"menu-item-disabled\"),name:_52.itemName,href:_52.itemHref,onclick:_52.onclick};\nvar _54=t.children(\"div.menu-icon\");\nif(_54.length){\nvar cc=[];\nvar aa=_54.attr(\"class\").split(\" \");\nfor(var i=0;i<aa.length;i++){\nif(aa[i]!=\"menu-icon\"){\ncc.push(aa[i]);\n}\n}\n_53.iconCls=cc.join(\" \");\n}\nreturn _53;\n},findItem:function(jq,_55){\nreturn _30(jq[0],_55);\n},appendItem:function(jq,_56){\nreturn jq.each(function(){\n_3a(this,_56);\n});\n},removeItem:function(jq,_57){\nreturn jq.each(function(){\n_40(this,_57);\n});\n},enableItem:function(jq,_58){\nreturn jq.each(function(){\n_d(this,_58,false);\n});\n},disableItem:function(jq,_59){\nreturn jq.each(function(){\n_d(this,_59,true);\n});\n},showItem:function(jq,_5a){\nreturn jq.each(function(){\n_46(this,_5a,true);\n});\n},hideItem:function(jq,_5b){\nreturn jq.each(function(){\n_46(this,_5b,false);\n});\n},resize:function(jq,_5c){\nreturn jq.each(function(){\n_f(this,$(_5c));\n});\n}};\n$.fn.menu.parseOptions=function(_5d){\nreturn $.extend({},$.parser.parseOptions(_5d,[{minWidth:\"number\",duration:\"number\",hideOnUnhover:\"boolean\"}]));\n};\n$.fn.menu.defaults={zIndex:110000,left:0,top:0,alignTo:null,align:\"left\",minWidth:120,duration:100,hideOnUnhover:true,onShow:function(){\n},onHide:function(){\n},onClick:function(_5e){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.menubutton.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"menubutton\").options;\nvar _4=$(_2);\n_4.linkbutton(_3);\n_4.removeClass(_3.cls.btn1+\" \"+_3.cls.btn2).addClass(\"m-btn\");\n_4.removeClass(\"m-btn-small m-btn-medium m-btn-large\").addClass(\"m-btn-\"+_3.size);\nvar _5=_4.find(\".l-btn-left\");\n$(\"<span></span>\").addClass(_3.cls.arrow).appendTo(_5);\n$(\"<span></span>\").addClass(\"m-btn-line\").appendTo(_5);\nif(_3.menu){\n$(_3.menu).menu({duration:_3.duration});\nvar _6=$(_3.menu).menu(\"options\");\nvar _7=_6.onShow;\nvar _8=_6.onHide;\n$.extend(_6,{onShow:function(){\nvar _9=$(this).menu(\"options\");\nvar _a=$(_9.alignTo);\nvar _b=_a.menubutton(\"options\");\n_a.addClass((_b.plain==true)?_b.cls.btn2:_b.cls.btn1);\n_7.call(this);\n},onHide:function(){\nvar _c=$(this).menu(\"options\");\nvar _d=$(_c.alignTo);\nvar _e=_d.menubutton(\"options\");\n_d.removeClass((_e.plain==true)?_e.cls.btn2:_e.cls.btn1);\n_8.call(this);\n}});\n}\n};\nfunction _f(_10){\nvar _11=$.data(_10,\"menubutton\").options;\nvar btn=$(_10);\nvar t=btn.find(\".\"+_11.cls.trigger);\nif(!t.length){\nt=btn;\n}\nt.unbind(\".menubutton\");\nvar _12=null;\nt.bind(\"click.menubutton\",function(){\nif(!_13()){\n_14(_10);\nreturn false;\n}\n}).bind(\"mouseenter.menubutton\",function(){\nif(!_13()){\n_12=setTimeout(function(){\n_14(_10);\n},_11.duration);\nreturn false;\n}\n}).bind(\"mouseleave.menubutton\",function(){\nif(_12){\nclearTimeout(_12);\n}\n$(_11.menu).triggerHandler(\"mouseleave\");\n});\nfunction _13(){\nreturn $(_10).linkbutton(\"options\").disabled;\n};\n};\nfunction _14(_15){\nvar _16=$(_15).menubutton(\"options\");\nif(_16.disabled||!_16.menu){\nreturn;\n}\n$(\"body>div.menu-top\").menu(\"hide\");\nvar btn=$(_15);\nvar mm=$(_16.menu);\nif(mm.length){\nmm.menu(\"options\").alignTo=btn;\nmm.menu(\"show\",{alignTo:btn,align:_16.menuAlign});\n}\nbtn.blur();\n};\n$.fn.menubutton=function(_17,_18){\nif(typeof _17==\"string\"){\nvar _19=$.fn.menubutton.methods[_17];\nif(_19){\nreturn _19(this,_18);\n}else{\nreturn this.linkbutton(_17,_18);\n}\n}\n_17=_17||{};\nreturn this.each(function(){\nvar _1a=$.data(this,\"menubutton\");\nif(_1a){\n$.extend(_1a.options,_17);\n}else{\n$.data(this,\"menubutton\",{options:$.extend({},$.fn.menubutton.defaults,$.fn.menubutton.parseOptions(this),_17)});\n$(this).removeAttr(\"disabled\");\n}\n_1(this);\n_f(this);\n});\n};\n$.fn.menubutton.methods={options:function(jq){\nvar _1b=jq.linkbutton(\"options\");\nreturn $.extend($.data(jq[0],\"menubutton\").options,{toggle:_1b.toggle,selected:_1b.selected,disabled:_1b.disabled});\n},destroy:function(jq){\nreturn jq.each(function(){\nvar _1c=$(this).menubutton(\"options\");\nif(_1c.menu){\n$(_1c.menu).menu(\"destroy\");\n}\n$(this).remove();\n});\n}};\n$.fn.menubutton.parseOptions=function(_1d){\nvar t=$(_1d);\nreturn $.extend({},$.fn.linkbutton.parseOptions(_1d),$.parser.parseOptions(_1d,[\"menu\",{plain:\"boolean\",duration:\"number\"}]));\n};\n$.fn.menubutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,menu:null,menuAlign:\"left\",duration:100,cls:{btn1:\"m-btn-active\",btn2:\"m-btn-plain-active\",arrow:\"m-btn-downarrow\",trigger:\"m-btn\"}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.messager.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(el,_2,_3,_4){\nvar _5=$(el).window(\"window\");\nif(!_5){\nreturn;\n}\nswitch(_2){\ncase null:\n_5.show();\nbreak;\ncase \"slide\":\n_5.slideDown(_3);\nbreak;\ncase \"fade\":\n_5.fadeIn(_3);\nbreak;\ncase \"show\":\n_5.show(_3);\nbreak;\n}\nvar _6=null;\nif(_4>0){\n_6=setTimeout(function(){\n_7(el,_2,_3);\n},_4);\n}\n_5.hover(function(){\nif(_6){\nclearTimeout(_6);\n}\n},function(){\nif(_4>0){\n_6=setTimeout(function(){\n_7(el,_2,_3);\n},_4);\n}\n});\n};\nfunction _7(el,_8,_9){\nif(el.locked==true){\nreturn;\n}\nel.locked=true;\nvar _a=$(el).window(\"window\");\nif(!_a){\nreturn;\n}\nswitch(_8){\ncase null:\n_a.hide();\nbreak;\ncase \"slide\":\n_a.slideUp(_9);\nbreak;\ncase \"fade\":\n_a.fadeOut(_9);\nbreak;\ncase \"show\":\n_a.hide(_9);\nbreak;\n}\nsetTimeout(function(){\n$(el).window(\"destroy\");\n},_9);\n};\nfunction _b(_c){\nvar _d=$.extend({},$.fn.window.defaults,{collapsible:false,minimizable:false,maximizable:false,shadow:false,draggable:false,resizable:false,closed:true,style:{left:\"\",top:\"\",right:0,zIndex:$.fn.window.defaults.zIndex++,bottom:-document.body.scrollTop-document.documentElement.scrollTop},onBeforeOpen:function(){\n_1(this,_d.showType,_d.showSpeed,_d.timeout);\nreturn false;\n},onBeforeClose:function(){\n_7(this,_d.showType,_d.showSpeed);\nreturn false;\n}},{title:\"\",width:250,height:100,showType:\"slide\",showSpeed:600,msg:\"\",timeout:4000},_c);\n_d.style.zIndex=$.fn.window.defaults.zIndex++;\nvar _e=$(\"<div class=\\\"messager-body\\\"></div>\").html(_d.msg).appendTo(\"body\");\n_e.window(_d);\n_e.window(\"window\").css(_d.style);\n_e.window(\"open\");\nreturn _e;\n};\nfunction _f(_10,_11,_12){\nvar win=$(\"<div class=\\\"messager-body\\\"></div>\").appendTo(\"body\");\nwin.append(_11);\nif(_12){\nvar tb=$(\"<div class=\\\"messager-button\\\"></div>\").appendTo(win);\nfor(var _13 in _12){\n$(\"<a></a>\").attr(\"href\",\"javascript:void(0)\").text(_13).css(\"margin-left\",10).bind(\"click\",eval(_12[_13])).appendTo(tb).linkbutton();\n}\n}\nwin.window({title:_10,noheader:(_10?false:true),width:300,height:\"auto\",modal:true,collapsible:false,minimizable:false,maximizable:false,resizable:false,onClose:function(){\nsetTimeout(function(){\nwin.window(\"destroy\");\n},100);\n}});\nwin.window(\"window\").addClass(\"messager-window\");\nwin.children(\"div.messager-button\").children(\"a:first\").focus();\nreturn win;\n};\n$.messager={show:function(_14){\nreturn _b(_14);\n},alert:function(_15,msg,_16,fn){\nvar _17=\"<div>\"+msg+\"</div>\";\nswitch(_16){\ncase \"error\":\n_17=\"<div class=\\\"messager-icon messager-error\\\"></div>\"+_17;\nbreak;\ncase \"info\":\n_17=\"<div class=\\\"messager-icon messager-info\\\"></div>\"+_17;\nbreak;\ncase \"question\":\n_17=\"<div class=\\\"messager-icon messager-question\\\"></div>\"+_17;\nbreak;\ncase \"warning\":\n_17=\"<div class=\\\"messager-icon messager-warning\\\"></div>\"+_17;\nbreak;\n}\n_17+=\"<div style=\\\"clear:both;\\\"/>\";\nvar _18={};\n_18[$.messager.defaults.ok]=function(){\nwin.window(\"close\");\nif(fn){\nfn();\nreturn false;\n}\n};\nvar win=_f(_15,_17,_18);\nreturn win;\n},confirm:function(_19,msg,fn){\nvar _1a=\"<div class=\\\"messager-icon messager-question\\\"></div>\"+\"<div>\"+msg+\"</div>\"+\"<div style=\\\"clear:both;\\\"/>\";\nvar _1b={};\n_1b[$.messager.defaults.ok]=function(){\nwin.window(\"close\");\nif(fn){\nfn(true);\nreturn false;\n}\n};\n_1b[$.messager.defaults.cancel]=function(){\nwin.window(\"close\");\nif(fn){\nfn(false);\nreturn false;\n}\n};\nvar win=_f(_19,_1a,_1b);\nreturn win;\n},prompt:function(_1c,msg,fn){\nvar _1d=\"<div class=\\\"messager-icon messager-question\\\"></div>\"+\"<div>\"+msg+\"</div>\"+\"<br/>\"+\"<div style=\\\"clear:both;\\\"/>\"+\"<div><input class=\\\"messager-input\\\" type=\\\"text\\\"/></div>\";\nvar _1e={};\n_1e[$.messager.defaults.ok]=function(){\nwin.window(\"close\");\nif(fn){\nfn($(\".messager-input\",win).val());\nreturn false;\n}\n};\n_1e[$.messager.defaults.cancel]=function(){\nwin.window(\"close\");\nif(fn){\nfn();\nreturn false;\n}\n};\nvar win=_f(_1c,_1d,_1e);\nwin.children(\"input.messager-input\").focus();\nreturn win;\n},progress:function(_1f){\nvar _20={bar:function(){\nreturn $(\"body>div.messager-window\").find(\"div.messager-p-bar\");\n},close:function(){\nvar win=$(\"body>div.messager-window>div.messager-body:has(div.messager-progress)\");\nif(win.length){\nwin.window(\"close\");\n}\n}};\nif(typeof _1f==\"string\"){\nvar _21=_20[_1f];\nreturn _21();\n}\nvar _22=$.extend({title:\"\",msg:\"\",text:undefined,interval:300},_1f||{});\nvar _23=\"<div class=\\\"messager-progress\\\"><div class=\\\"messager-p-msg\\\"></div><div class=\\\"messager-p-bar\\\"></div></div>\";\nvar win=_f(_22.title,_23,null);\nwin.find(\"div.messager-p-msg\").html(_22.msg);\nvar bar=win.find(\"div.messager-p-bar\");\nbar.progressbar({text:_22.text});\nwin.window({closable:false,onClose:function(){\nif(this.timer){\nclearInterval(this.timer);\n}\n$(this).window(\"destroy\");\n}});\nif(_22.interval){\nwin[0].timer=setInterval(function(){\nvar v=bar.progressbar(\"getValue\");\nv+=10;\nif(v>100){\nv=0;\n}\nbar.progressbar(\"setValue\",v);\n},_22.interval);\n}\nreturn win;\n}};\n$.messager.defaults={ok:\"Ok\",cancel:\"Cancel\"};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.numberbox.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"numberbox\");\nvar _4=_3.options;\n$(_2).addClass(\"numberbox-f\").textbox(_4);\n$(_2).textbox(\"textbox\").css({imeMode:\"disabled\"});\n$(_2).attr(\"numberboxName\",$(_2).attr(\"textboxName\"));\n_3.numberbox=$(_2).next();\n_3.numberbox.addClass(\"numberbox\");\nvar _5=_4.parser.call(_2,_4.value);\nvar _6=_4.formatter.call(_2,_5);\n$(_2).numberbox(\"initValue\",_5).numberbox(\"setText\",_6);\n};\nfunction _7(_8,_9){\nvar _a=$.data(_8,\"numberbox\");\nvar _b=_a.options;\nvar _9=_b.parser.call(_8,_9);\nvar _c=_b.formatter.call(_8,_9);\n_b.value=_9;\n$(_8).textbox(\"setValue\",_9).textbox(\"setText\",_c);\n};\n$.fn.numberbox=function(_d,_e){\nif(typeof _d==\"string\"){\nvar _f=$.fn.numberbox.methods[_d];\nif(_f){\nreturn _f(this,_e);\n}else{\nreturn this.textbox(_d,_e);\n}\n}\n_d=_d||{};\nreturn this.each(function(){\nvar _10=$.data(this,\"numberbox\");\nif(_10){\n$.extend(_10.options,_d);\n}else{\n_10=$.data(this,\"numberbox\",{options:$.extend({},$.fn.numberbox.defaults,$.fn.numberbox.parseOptions(this),_d)});\n}\n_1(this);\n});\n};\n$.fn.numberbox.methods={options:function(jq){\nvar _11=jq.data(\"textbox\")?jq.textbox(\"options\"):{};\nreturn $.extend($.data(jq[0],\"numberbox\").options,{width:_11.width,originalValue:_11.originalValue,disabled:_11.disabled,readonly:_11.readonly});\n},fix:function(jq){\nreturn jq.each(function(){\n$(this).numberbox(\"setValue\",$(this).numberbox(\"getText\"));\n});\n},setValue:function(jq,_12){\nreturn jq.each(function(){\n_7(this,_12);\n});\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"clear\");\n$(this).numberbox(\"options\").value=\"\";\n});\n},reset:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"reset\");\n$(this).numberbox(\"setValue\",$(this).numberbox(\"getValue\"));\n});\n}};\n$.fn.numberbox.parseOptions=function(_13){\nvar t=$(_13);\nreturn $.extend({},$.fn.textbox.parseOptions(_13),$.parser.parseOptions(_13,[\"decimalSeparator\",\"groupSeparator\",\"suffix\",{min:\"number\",max:\"number\",precision:\"number\"}]),{prefix:(t.attr(\"prefix\")?t.attr(\"prefix\"):undefined)});\n};\n$.fn.numberbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:{keypress:function(e){\nvar _14=e.data.target;\nvar _15=$(_14).numberbox(\"options\");\nreturn _15.filter.call(_14,e);\n},blur:function(e){\nvar _16=e.data.target;\n$(_16).numberbox(\"setValue\",$(_16).numberbox(\"getText\"));\n},keydown:function(e){\nif(e.keyCode==13){\nvar _17=e.data.target;\n$(_17).numberbox(\"setValue\",$(_17).numberbox(\"getText\"));\n}\n}},min:null,max:null,precision:0,decimalSeparator:\".\",groupSeparator:\"\",prefix:\"\",suffix:\"\",filter:function(e){\nvar _18=$(this).numberbox(\"options\");\nvar s=$(this).numberbox(\"getText\");\nif(e.which==13){\nreturn true;\n}\nif(e.which==45){\nreturn (s.indexOf(\"-\")==-1?true:false);\n}\nvar c=String.fromCharCode(e.which);\nif(c==_18.decimalSeparator){\nreturn (s.indexOf(c)==-1?true:false);\n}else{\nif(c==_18.groupSeparator){\nreturn true;\n}else{\nif((e.which>=48&&e.which<=57&&e.ctrlKey==false&&e.shiftKey==false)||e.which==0||e.which==8){\nreturn true;\n}else{\nif(e.ctrlKey==true&&(e.which==99||e.which==118)){\nreturn true;\n}else{\nreturn false;\n}\n}\n}\n}\n},formatter:function(_19){\nif(!_19){\nreturn _19;\n}\n_19=_19+\"\";\nvar _1a=$(this).numberbox(\"options\");\nvar s1=_19,s2=\"\";\nvar _1b=_19.indexOf(\".\");\nif(_1b>=0){\ns1=_19.substring(0,_1b);\ns2=_19.substring(_1b+1,_19.length);\n}\nif(_1a.groupSeparator){\nvar p=/(\\d+)(\\d{3})/;\nwhile(p.test(s1)){\ns1=s1.replace(p,\"$1\"+_1a.groupSeparator+\"$2\");\n}\n}\nif(s2){\nreturn _1a.prefix+s1+_1a.decimalSeparator+s2+_1a.suffix;\n}else{\nreturn _1a.prefix+s1+_1a.suffix;\n}\n},parser:function(s){\ns=s+\"\";\nvar _1c=$(this).numberbox(\"options\");\nif(parseFloat(s)!=s){\nif(_1c.prefix){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+$.trim(_1c.prefix),\"g\"),\"\"));\n}\nif(_1c.suffix){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+$.trim(_1c.suffix),\"g\"),\"\"));\n}\nif(_1c.groupSeparator){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+_1c.groupSeparator,\"g\"),\"\"));\n}\nif(_1c.decimalSeparator){\ns=$.trim(s.replace(new RegExp(\"\\\\\"+_1c.decimalSeparator,\"g\"),\".\"));\n}\ns=s.replace(/\\s/g,\"\");\n}\nvar val=parseFloat(s).toFixed(_1c.precision);\nif(isNaN(val)){\nval=\"\";\n}else{\nif(typeof (_1c.min)==\"number\"&&val<_1c.min){\nval=_1c.min.toFixed(_1c.precision);\n}else{\nif(typeof (_1c.max)==\"number\"&&val>_1c.max){\nval=_1c.max.toFixed(_1c.precision);\n}\n}\n}\nreturn val;\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.numberspinner.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"numberspinner-f\");\nvar _3=$.data(_2,\"numberspinner\").options;\n$(_2).numberbox(_3).spinner(_3);\n$(_2).numberbox(\"setValue\",_3.value);\n};\nfunction _4(_5,_6){\nvar _7=$.data(_5,\"numberspinner\").options;\nvar v=parseFloat($(_5).numberbox(\"getValue\")||_7.value)||0;\nif(_6){\nv-=_7.increment;\n}else{\nv+=_7.increment;\n}\n$(_5).numberbox(\"setValue\",v);\n};\n$.fn.numberspinner=function(_8,_9){\nif(typeof _8==\"string\"){\nvar _a=$.fn.numberspinner.methods[_8];\nif(_a){\nreturn _a(this,_9);\n}else{\nreturn this.numberbox(_8,_9);\n}\n}\n_8=_8||{};\nreturn this.each(function(){\nvar _b=$.data(this,\"numberspinner\");\nif(_b){\n$.extend(_b.options,_8);\n}else{\n$.data(this,\"numberspinner\",{options:$.extend({},$.fn.numberspinner.defaults,$.fn.numberspinner.parseOptions(this),_8)});\n}\n_1(this);\n});\n};\n$.fn.numberspinner.methods={options:function(jq){\nvar _c=jq.numberbox(\"options\");\nreturn $.extend($.data(jq[0],\"numberspinner\").options,{width:_c.width,value:_c.value,originalValue:_c.originalValue,disabled:_c.disabled,readonly:_c.readonly});\n}};\n$.fn.numberspinner.parseOptions=function(_d){\nreturn $.extend({},$.fn.spinner.parseOptions(_d),$.fn.numberbox.parseOptions(_d),{});\n};\n$.fn.numberspinner.defaults=$.extend({},$.fn.spinner.defaults,$.fn.numberbox.defaults,{spin:function(_e){\n_4(this,_e);\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.pagination.js",
    "content": "/**\n * jQuery EasyUI 1.4.1\n * \n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\n *\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\n * To use it on other terms please contact us at info@jeasyui.com\n *\n */\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"pagination\");\nvar _4=_3.options;\nvar bb=_3.bb={};\nvar _5=$(_2).addClass(\"pagination\").html(\"<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tr></tr></table>\");\nvar tr=_5.find(\"tr\");\nvar aa=$.extend([],_4.layout);\nif(!_4.showPageList){\n_6(aa,\"list\");\n}\nif(!_4.showRefresh){\n_6(aa,\"refresh\");\n}\nif(aa[0]==\"sep\"){\naa.shift();\n}\nif(aa[aa.length-1]==\"sep\"){\naa.pop();\n}\nfor(var _7=0;_7<aa.length;_7++){\nvar _8=aa[_7];\nif(_8==\"list\"){\nvar ps=$(\"<select class=\\\"pagination-page-list\\\"></select>\");\nps.bind(\"change\",function(){\n// add onBeforeSelect event\nif(_4.onBeforeSelect) {\n\tif (!_4.onBeforeSelect.call(_2)) {\n\t\treturn false;\n\t}\n}\n// -------------------------\n_4.pageSize=parseInt($(this).val());\n_4.onChangePageSize.call(_2,_4.pageSize);\n_10(_2,_4.pageNumber);\n});\nfor(var i=0;i<_4.pageList.length;i++){\n$(\"<option></option>\").text(_4.pageList[i]).appendTo(ps);\n}\n$(\"<td></td>\").append(ps).appendTo(tr);\n}else{\nif(_8==\"sep\"){\n$(\"<td><div class=\\\"pagination-btn-separator\\\"></div></td>\").appendTo(tr);\n}else{\nif(_8==\"first\"){\nbb.first=_9(\"first\");\n}else{\nif(_8==\"prev\"){\nbb.prev=_9(\"prev\");\n}else{\nif(_8==\"next\"){\nbb.next=_9(\"next\");\n}else{\nif(_8==\"last\"){\nbb.last=_9(\"last\");\n}else{\nif(_8==\"manual\"){\n$(\"<span style=\\\"padding-left:6px;\\\"></span>\").html(_4.beforePageText).appendTo(tr).wrap(\"<td></td>\");\nbb.num=$(\"<input class=\\\"pagination-num\\\" type=\\\"text\\\" value=\\\"1\\\" size=\\\"2\\\">\").appendTo(tr).wrap(\"<td></td>\");\nbb.num.unbind(\".pagination\").bind(\"keydown.pagination\",function(e){\nif(e.keyCode==13){\n// add onBeforeSelect event\nif(_4.onBeforeSelect) {\n\tif (!_4.onBeforeSelect.call(_2)) {\n\t\treturn;\n\t}\n}\n// -------------------------\nvar _a=parseInt($(this).val())||1;\n_10(_2,_a);\nreturn false;\n}\n});\nbb.after=$(\"<span style=\\\"padding-right:6px;\\\"></span>\").appendTo(tr).wrap(\"<td></td>\");\n}else{\nif(_8==\"refresh\"){\nbb.refresh=_9(\"refresh\");\n}else{\nif(_8==\"links\"){\n$(\"<td class=\\\"pagination-links\\\"></td>\").appendTo(tr);\n}\n}\n}\n}\n}\n}\n}\n}\n}\n}\nif(_4.buttons){\n$(\"<td><div class=\\\"pagination-btn-separator\\\"></div></td>\").appendTo(tr);\nif($.isArray(_4.buttons)){\nfor(var i=0;i<_4.buttons.length;i++){\nvar _b=_4.buttons[i];\nif(_b==\"-\"){\n$(\"<td><div class=\\\"pagination-btn-separator\\\"></div></td>\").appendTo(tr);\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\nvar a=$(\"<a href=\\\"javascript:void(0)\\\"></a>\").appendTo(td);\na[0].onclick=eval(_b.handler||function(){\n});\na.linkbutton($.extend({},_b,{plain:true}));\n}\n}\n}else{\nvar td=$(\"<td></td>\").appendTo(tr);\n$(_4.buttons).appendTo(td).show();\n}\n}\n$(\"<div class=\\\"pagination-info\\\"></div>\").appendTo(_5);\n$(\"<div style=\\\"clear:both;\\\"></div>\").appendTo(_5);\nfunction _9(_c){\nvar _d=_4.nav[_c];\nvar a=$(\"<a href=\\\"javascript:void(0)\\\"></a>\").appendTo(tr);\na.wrap(\"<td></td>\");\na.linkbutton({iconCls:_d.iconCls,plain:true}).unbind(\".pagination\").bind(\"click.pagination\",function(){\n_d.handler.call(_2);\n});\nreturn a;\n};\nfunction _6(aa,_e){\nvar _f=$.inArray(_e,aa);\nif(_f>=0){\naa.splice(_f,1);\n}\nreturn aa;\n};\n};\nfunction _10(_11,_12){\nvar _13=$.data(_11,\"pagination\").options;\n_14(_11,{pageNumber:_12});\n_13.onSelectPage.call(_11,_13.pageNumber,_13.pageSize);\n};\nfunction _14(_15,_16){\nvar _17=$.data(_15,\"pagination\");\nvar _18=_17.options;\nvar bb=_17.bb;\n$.extend(_18,_16||{});\nvar ps=$(_15).find(\"select.pagination-page-list\");\nif(ps.length){\nps.val(_18.pageSize+\"\");\n_18.pageSize=parseInt(ps.val());\n}\nvar _19=Math.ceil(_18.total/_18.pageSize)||1;\nif(_18.pageNumber<1){\n_18.pageNumber=1;\n}\nif(_18.pageNumber>_19){\n_18.pageNumber=_19;\n}\nif(_18.total==0){\n_18.pageNumber=0;\n_19=0;\n}\nif(bb.num){\nbb.num.val(_18.pageNumber);\n}\nif(bb.after){\nbb.after.html(_18.afterPageText.replace(/{pages}/,_19));\n}\nvar td=$(_15).find(\"td.pagination-links\");\nif(td.length){\ntd.empty();\nvar _1a=_18.pageNumber-Math.floor(_18.links/2);\nif(_1a<1){\n_1a=1;\n}\nvar _1b=_1a+_18.links-1;\nif(_1b>_19){\n_1b=_19;\n}\n_1a=_1b-_18.links+1;\nif(_1a<1){\n_1a=1;\n}\nfor(var i=_1a;i<=_1b;i++){\nvar a=$(\"<a class=\\\"pagination-link\\\" href=\\\"javascript:void(0)\\\"></a>\").appendTo(td);\na.linkbutton({plain:true,text:i});\nif(i==_18.pageNumber){\na.linkbutton(\"select\");\n}else{\na.unbind(\".pagination\").bind(\"click.pagination\",{pageNumber:i},function(e){\n_10(_15,e.data.pageNumber);\n});\n}\n}\n}\nvar _1c=_18.displayMsg;\n_1c=_1c.replace(/{from}/,_18.total==0?0:_18.pageSize*(_18.pageNumber-1)+1);\n_1c=_1c.replace(/{to}/,Math.min(_18.pageSize*(_18.pageNumber),_18.total));\n_1c=_1c.replace(/{total}/,_18.total);\n$(_15).find(\"div.pagination-info\").html(_1c);\nif(bb.first){\nbb.first.linkbutton({disabled:((!_18.total)||_18.pageNumber==1)});\n}\nif(bb.prev){\nbb.prev.linkbutton({disabled:((!_18.total)||_18.pageNumber==1)});\n}\nif(bb.next){\nbb.next.linkbutton({disabled:(_18.pageNumber==_19)});\n}\nif(bb.last){\nbb.last.linkbutton({disabled:(_18.pageNumber==_19)});\n}\n_1d(_15,_18.loading);\n};\nfunction _1d(_1e,_1f){\nvar _20=$.data(_1e,\"pagination\");\nvar _21=_20.options;\n_21.loading=_1f;\nif(_21.showRefresh&&_20.bb.refresh){\n_20.bb.refresh.linkbutton({iconCls:(_21.loading?\"pagination-loading\":\"pagination-load\")});\n}\n};\n$.fn.pagination=function(_22,_23){\nif(typeof _22==\"string\"){\nreturn $.fn.pagination.methods[_22](this,_23);\n}\n_22=_22||{};\nreturn this.each(function(){\nvar _24;\nvar _25=$.data(this,\"pagination\");\nif(_25){\n_24=$.extend(_25.options,_22);\n}else{\n_24=$.extend({},$.fn.pagination.defaults,$.fn.pagination.parseOptions(this),_22);\n$.data(this,\"pagination\",{options:_24});\n}\n_1(this);\n_14(this);\n});\n};\n$.fn.pagination.methods={options:function(jq){\nreturn $.data(jq[0],\"pagination\").options;\n},loading:function(jq){\nreturn jq.each(function(){\n_1d(this,true);\n});\n},loaded:function(jq){\nreturn jq.each(function(){\n_1d(this,false);\n});\n},refresh:function(jq,_26){\nreturn jq.each(function(){\n_14(this,_26);\n});\n},select:function(jq,_27){\nreturn jq.each(function(){\n_10(this,_27);\n});\n}};\n$.fn.pagination.parseOptions=function(_28){\nvar t=$(_28);\nreturn $.extend({},$.parser.parseOptions(_28,[{total:\"number\",pageSize:\"number\",pageNumber:\"number\",links:\"number\"},{loading:\"boolean\",showPageList:\"boolean\",showRefresh:\"boolean\"}]),{pageList:(t.attr(\"pageList\")?eval(t.attr(\"pageList\")):undefined)});\n};\n$.fn.pagination.defaults={total:1,pageSize:10,pageNumber:1,pageList:[10,20,30,50],loading:false,buttons:null,showPageList:true,showRefresh:true,links:10,layout:[\"list\",\"sep\",\"first\",\"prev\",\"sep\",\"manual\",\"sep\",\"next\",\"last\",\"sep\",\"refresh\"],onSelectPage:function(_29,_2a){\n},onBeforeRefresh:function(_2b,_2c){\n},onRefresh:function(_2d,_2e){\n},onChangePageSize:function(_2f){\n},beforePageText:\"Page\",afterPageText:\"of {pages}\",displayMsg:\"Displaying {from} to {to} of {total} items\",nav:{first:{iconCls:\"pagination-first\",handler:function(){\nvar _30=$(this).pagination(\"options\");\nif(_30.pageNumber>1){\n$(this).pagination(\"select\",1);\n}\n}},prev:{iconCls:\"pagination-prev\",handler:function(){\nvar _31=$(this).pagination(\"options\");\nif(_31.pageNumber>1){\n$(this).pagination(\"select\",_31.pageNumber-1);\n}\n}},next:{iconCls:\"pagination-next\",handler:function(){\nvar _32=$(this).pagination(\"options\");\nvar _33=Math.ceil(_32.total/_32.pageSize);\nif(_32.pageNumber<_33){\n$(this).pagination(\"select\",_32.pageNumber+1);\n}\n}},last:{iconCls:\"pagination-last\",handler:function(){\nvar _34=$(this).pagination(\"options\");\nvar _35=Math.ceil(_34.total/_34.pageSize);\nif(_34.pageNumber<_35){\n$(this).pagination(\"select\",_35);\n}\n}},refresh:{iconCls:\"pagination-refresh\",handler:function(){\nvar _36=$(this).pagination(\"options\");\nif(_36.onBeforeRefresh.call(this,_36.pageNumber,_36.pageSize)!=false){\n$(this).pagination(\"select\",_36.pageNumber);\n_36.onRefresh.call(this,_36.pageNumber,_36.pageSize);\n}\n}}}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.panel.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\n$.fn._remove=function(){\nreturn this.each(function(){\n$(this).remove();\ntry{\nthis.outerHTML=\"\";\n}\ncatch(err){\n}\n});\n};\nfunction _1(_2){\n_2._remove();\n};\nfunction _3(_4,_5){\nvar _6=$.data(_4,\"panel\");\nvar _7=_6.options;\nvar _8=_6.panel;\nvar _9=_8.children(\"div.panel-header\");\nvar _a=_8.children(\"div.panel-body\");\nvar _b=_8.children(\"div.panel-footer\");\nif(_5){\n$.extend(_7,{width:_5.width,height:_5.height,minWidth:_5.minWidth,maxWidth:_5.maxWidth,minHeight:_5.minHeight,maxHeight:_5.maxHeight,left:_5.left,top:_5.top});\n}\n_8._size(_7);\n_9.add(_a)._outerWidth(_8.width());\nif(!isNaN(parseInt(_7.height))){\n_a._outerHeight(_8.height()-_9._outerHeight()-_b._outerHeight());\n}else{\n_a.css(\"height\",\"\");\nvar _c=$.parser.parseValue(\"minHeight\",_7.minHeight,_8.parent());\nvar _d=$.parser.parseValue(\"maxHeight\",_7.maxHeight,_8.parent());\nvar _e=_9._outerHeight()+_b._outerHeight()+_8._outerHeight()-_8.height();\n_a._size(\"minHeight\",_c?(_c-_e):\"\");\n_a._size(\"maxHeight\",_d?(_d-_e):\"\");\n}\n_8.css({height:\"\",minHeight:\"\",maxHeight:\"\",left:_7.left,top:_7.top});\n_7.onResize.apply(_4,[_7.width,_7.height]);\n$(_4).panel(\"doLayout\");\n};\nfunction _f(_10,_11){\nvar _12=$.data(_10,\"panel\").options;\nvar _13=$.data(_10,\"panel\").panel;\nif(_11){\nif(_11.left!=null){\n_12.left=_11.left;\n}\nif(_11.top!=null){\n_12.top=_11.top;\n}\n}\n_13.css({left:_12.left,top:_12.top});\n_12.onMove.apply(_10,[_12.left,_12.top]);\n};\nfunction _14(_15){\n$(_15).addClass(\"panel-body\")._size(\"clear\");\nvar _16=$(\"<div class=\\\"panel\\\"></div>\").insertBefore(_15);\n_16[0].appendChild(_15);\n_16.bind(\"_resize\",function(e,_17){\nif($(this).hasClass(\"easyui-fluid\")||_17){\n_3(_15);\n}\nreturn false;\n});\nreturn _16;\n};\nfunction _18(_19){\nvar _1a=$.data(_19,\"panel\");\nvar _1b=_1a.options;\nvar _1c=_1a.panel;\n_1c.css(_1b.style);\n_1c.addClass(_1b.cls);\n_1d();\n_1e();\nvar _1f=$(_19).panel(\"header\");\nvar _20=$(_19).panel(\"body\");\nvar _21=$(_19).siblings(\"div.panel-footer\");\nif(_1b.border){\n_1f.removeClass(\"panel-header-noborder\");\n_20.removeClass(\"panel-body-noborder\");\n_21.removeClass(\"panel-footer-noborder\");\n}else{\n_1f.addClass(\"panel-header-noborder\");\n_20.addClass(\"panel-body-noborder\");\n_21.addClass(\"panel-footer-noborder\");\n}\n_1f.addClass(_1b.headerCls);\n_20.addClass(_1b.bodyCls);\n$(_19).attr(\"id\",_1b.id||\"\");\nif(_1b.content){\n$(_19).panel(\"clear\");\n$(_19).html(_1b.content);\n$.parser.parse($(_19));\n}\nfunction _1d(){\nif(_1b.tools&&typeof _1b.tools==\"string\"){\n_1c.find(\">div.panel-header>div.panel-tool .panel-tool-a\").appendTo(_1b.tools);\n}\n_1(_1c.children(\"div.panel-header\"));\nif(_1b.title&&!_1b.noheader){\nvar _22=$(\"<div class=\\\"panel-header\\\"></div>\").prependTo(_1c);\nvar _23=$(\"<div class=\\\"panel-title\\\"></div>\").html(_1b.title).appendTo(_22);\nif(_1b.iconCls){\n_23.addClass(\"panel-with-icon\");\n$(\"<div class=\\\"panel-icon\\\"></div>\").addClass(_1b.iconCls).appendTo(_22);\n}\nvar _24=$(\"<div class=\\\"panel-tool\\\"></div>\").appendTo(_22);\n_24.bind(\"click\",function(e){\ne.stopPropagation();\n});\nif(_1b.tools){\nif($.isArray(_1b.tools)){\nfor(var i=0;i<_1b.tools.length;i++){\nvar t=$(\"<a href=\\\"javascript:void(0)\\\"></a>\").addClass(_1b.tools[i].iconCls).appendTo(_24);\nif(_1b.tools[i].handler){\nt.bind(\"click\",eval(_1b.tools[i].handler));\n}\n}\n}else{\n$(_1b.tools).children().each(function(){\n$(this).addClass($(this).attr(\"iconCls\")).addClass(\"panel-tool-a\").appendTo(_24);\n});\n}\n}\nif(_1b.collapsible){\n$(\"<a class=\\\"panel-tool-collapse\\\" href=\\\"javascript:void(0)\\\"></a>\").appendTo(_24).bind(\"click\",function(){\nif(_1b.collapsed==true){\n_4a(_19,true);\n}else{\n_38(_19,true);\n}\nreturn false;\n});\n}\nif(_1b.minimizable){\n$(\"<a class=\\\"panel-tool-min\\\" href=\\\"javascript:void(0)\\\"></a>\").appendTo(_24).bind(\"click\",function(){\n_55(_19);\nreturn false;\n});\n}\nif(_1b.maximizable){\n$(\"<a class=\\\"panel-tool-max\\\" href=\\\"javascript:void(0)\\\"></a>\").appendTo(_24).bind(\"click\",function(){\nif(_1b.maximized==true){\n_59(_19);\n}else{\n_37(_19);\n}\nreturn false;\n});\n}\nif(_1b.closable){\n$(\"<a class=\\\"panel-tool-close\\\" href=\\\"javascript:void(0)\\\"></a>\").appendTo(_24).bind(\"click\",function(){\n_39(_19);\nreturn false;\n});\n}\n_1c.children(\"div.panel-body\").removeClass(\"panel-body-noheader\");\n}else{\n_1c.children(\"div.panel-body\").addClass(\"panel-body-noheader\");\n}\n};\nfunction _1e(){\nif(_1b.footer){\n$(_1b.footer).addClass(\"panel-footer\").appendTo(_1c);\n$(_19).addClass(\"panel-body-nobottom\");\n}else{\n_1c.children(\"div.panel-footer\").remove();\n$(_19).removeClass(\"panel-body-nobottom\");\n}\n};\n};\nfunction _25(_26,_27){\nvar _28=$.data(_26,\"panel\");\nvar _29=_28.options;\nif(_2a){\n_29.queryParams=_27;\n}\nif(!_29.href){\nreturn;\n}\nif(!_28.isLoaded||!_29.cache){\nvar _2a=$.extend({},_29.queryParams);\nif(_29.onBeforeLoad.call(_26,_2a)==false){\nreturn;\n}\n_28.isLoaded=false;\n$(_26).panel(\"clear\");\nif(_29.loadingMessage){\n$(_26).html($(\"<div class=\\\"panel-loading\\\"></div>\").html(_29.loadingMessage));\n}\n_29.loader.call(_26,_2a,function(_2b){\nvar _2c=_29.extractor.call(_26,_2b);\n$(_26).html(_2c);\n$.parser.parse($(_26));\n_29.onLoad.apply(_26,arguments);\n_28.isLoaded=true;\n},function(){\n_29.onLoadError.apply(_26,arguments);\n});\n}\n};\nfunction _2d(_2e){\nvar t=$(_2e);\nt.find(\".combo-f\").each(function(){\n$(this).combo(\"destroy\");\n});\nt.find(\".m-btn\").each(function(){\n$(this).menubutton(\"destroy\");\n});\nt.find(\".s-btn\").each(function(){\n$(this).splitbutton(\"destroy\");\n});\nt.find(\".tooltip-f\").each(function(){\n$(this).tooltip(\"destroy\");\n});\nt.children(\"div\").each(function(){\n$(this)._size(\"unfit\");\n});\nt.empty();\n};\nfunction _2f(_30){\n$(_30).panel(\"doLayout\",true);\n};\nfunction _31(_32,_33){\nvar _34=$.data(_32,\"panel\").options;\nvar _35=$.data(_32,\"panel\").panel;\nif(_33!=true){\nif(_34.onBeforeOpen.call(_32)==false){\nreturn;\n}\n}\n_35.stop(true,true);\nif($.isFunction(_34.openAnimation)){\n_34.openAnimation.call(_32,cb);\n}else{\nswitch(_34.openAnimation){\ncase \"slide\":\n_35.slideDown(_34.openDuration,cb);\nbreak;\ncase \"fade\":\n_35.fadeIn(_34.openDuration,cb);\nbreak;\ncase \"show\":\n_35.show(_34.openDuration,cb);\nbreak;\ndefault:\n_35.show();\ncb();\n}\n}\nfunction cb(){\n_34.closed=false;\n_34.minimized=false;\nvar _36=_35.children(\"div.panel-header\").find(\"a.panel-tool-restore\");\nif(_36.length){\n_34.maximized=true;\n}\n_34.onOpen.call(_32);\nif(_34.maximized==true){\n_34.maximized=false;\n_37(_32);\n}\nif(_34.collapsed==true){\n_34.collapsed=false;\n_38(_32);\n}\nif(!_34.collapsed){\n_25(_32);\n_2f(_32);\n}\n};\n};\nfunction _39(_3a,_3b){\nvar _3c=$.data(_3a,\"panel\").options;\nvar _3d=$.data(_3a,\"panel\").panel;\nif(_3b!=true){\nif(_3c.onBeforeClose.call(_3a)==false){\nreturn;\n}\n}\n_3d.stop(true,true);\n_3d._size(\"unfit\");\nif($.isFunction(_3c.closeAnimation)){\n_3c.closeAnimation.call(_3a,cb);\n}else{\nswitch(_3c.closeAnimation){\ncase \"slide\":\n_3d.slideUp(_3c.closeDuration,cb);\nbreak;\ncase \"fade\":\n_3d.fadeOut(_3c.closeDuration,cb);\nbreak;\ncase \"hide\":\n_3d.hide(_3c.closeDuration,cb);\nbreak;\ndefault:\n_3d.hide();\ncb();\n}\n}\nfunction cb(){\n_3c.closed=true;\n_3c.onClose.call(_3a);\n};\n};\nfunction _3e(_3f,_40){\nvar _41=$.data(_3f,\"panel\");\nvar _42=_41.options;\nvar _43=_41.panel;\nif(_40!=true){\nif(_42.onBeforeDestroy.call(_3f)==false){\nreturn;\n}\n}\n$(_3f).panel(\"clear\").panel(\"clear\",\"footer\");\n_1(_43);\n_42.onDestroy.call(_3f);\n};\nfunction _38(_44,_45){\nvar _46=$.data(_44,\"panel\").options;\nvar _47=$.data(_44,\"panel\").panel;\nvar _48=_47.children(\"div.panel-body\");\nvar _49=_47.children(\"div.panel-header\").find(\"a.panel-tool-collapse\");\nif(_46.collapsed==true){\nreturn;\n}\n_48.stop(true,true);\nif(_46.onBeforeCollapse.call(_44)==false){\nreturn;\n}\n_49.addClass(\"panel-tool-expand\");\nif(_45==true){\n_48.slideUp(\"normal\",function(){\n_46.collapsed=true;\n_46.onCollapse.call(_44);\n});\n}else{\n_48.hide();\n_46.collapsed=true;\n_46.onCollapse.call(_44);\n}\n};\nfunction _4a(_4b,_4c){\nvar _4d=$.data(_4b,\"panel\").options;\nvar _4e=$.data(_4b,\"panel\").panel;\nvar _4f=_4e.children(\"div.panel-body\");\nvar _50=_4e.children(\"div.panel-header\").find(\"a.panel-tool-collapse\");\nif(_4d.collapsed==false){\nreturn;\n}\n_4f.stop(true,true);\nif(_4d.onBeforeExpand.call(_4b)==false){\nreturn;\n}\n_50.removeClass(\"panel-tool-expand\");\nif(_4c==true){\n_4f.slideDown(\"normal\",function(){\n_4d.collapsed=false;\n_4d.onExpand.call(_4b);\n_25(_4b);\n_2f(_4b);\n});\n}else{\n_4f.show();\n_4d.collapsed=false;\n_4d.onExpand.call(_4b);\n_25(_4b);\n_2f(_4b);\n}\n};\nfunction _37(_51){\nvar _52=$.data(_51,\"panel\").options;\nvar _53=$.data(_51,\"panel\").panel;\nvar _54=_53.children(\"div.panel-header\").find(\"a.panel-tool-max\");\nif(_52.maximized==true){\nreturn;\n}\n_54.addClass(\"panel-tool-restore\");\nif(!$.data(_51,\"panel\").original){\n$.data(_51,\"panel\").original={width:_52.width,height:_52.height,left:_52.left,top:_52.top,fit:_52.fit};\n}\n_52.left=0;\n_52.top=0;\n_52.fit=true;\n_3(_51);\n_52.minimized=false;\n_52.maximized=true;\n_52.onMaximize.call(_51);\n};\nfunction _55(_56){\nvar _57=$.data(_56,\"panel\").options;\nvar _58=$.data(_56,\"panel\").panel;\n_58._size(\"unfit\");\n_58.hide();\n_57.minimized=true;\n_57.maximized=false;\n_57.onMinimize.call(_56);\n};\nfunction _59(_5a){\nvar _5b=$.data(_5a,\"panel\").options;\nvar _5c=$.data(_5a,\"panel\").panel;\nvar _5d=_5c.children(\"div.panel-header\").find(\"a.panel-tool-max\");\nif(_5b.maximized==false){\nreturn;\n}\n_5c.show();\n_5d.removeClass(\"panel-tool-restore\");\n$.extend(_5b,$.data(_5a,\"panel\").original);\n_3(_5a);\n_5b.minimized=false;\n_5b.maximized=false;\n$.data(_5a,\"panel\").original=null;\n_5b.onRestore.call(_5a);\n};\nfunction _5e(_5f,_60){\n$.data(_5f,\"panel\").options.title=_60;\n$(_5f).panel(\"header\").find(\"div.panel-title\").html(_60);\n};\nvar _61=null;\n$(window).unbind(\".panel\").bind(\"resize.panel\",function(){\nif(_61){\nclearTimeout(_61);\n}\n_61=setTimeout(function(){\nvar _62=$(\"body.layout\");\nif(_62.length){\n_62.layout(\"resize\");\n$(\"body\").children(\".easyui-fluid:visible\").trigger(\"_resize\");\n}else{\n$(\"body\").panel(\"doLayout\");\n}\n_61=null;\n},100);\n});\n$.fn.panel=function(_63,_64){\nif(typeof _63==\"string\"){\nreturn $.fn.panel.methods[_63](this,_64);\n}\n_63=_63||{};\nreturn this.each(function(){\nvar _65=$.data(this,\"panel\");\nvar _66;\nif(_65){\n_66=$.extend(_65.options,_63);\n_65.isLoaded=false;\n}else{\n_66=$.extend({},$.fn.panel.defaults,$.fn.panel.parseOptions(this),_63);\n$(this).attr(\"title\",\"\");\n_65=$.data(this,\"panel\",{options:_66,panel:_14(this),isLoaded:false});\n}\n_18(this);\nif(_66.doSize==true){\n_65.panel.css(\"display\",\"block\");\n_3(this);\n}\nif(_66.closed==true||_66.minimized==true){\n_65.panel.hide();\n}else{\n_31(this);\n}\n});\n};\n$.fn.panel.methods={options:function(jq){\nreturn $.data(jq[0],\"panel\").options;\n},panel:function(jq){\nreturn $.data(jq[0],\"panel\").panel;\n},header:function(jq){\nreturn $.data(jq[0],\"panel\").panel.find(\">div.panel-header\");\n},footer:function(jq){\nreturn jq.panel(\"panel\").children(\".panel-footer\");\n},body:function(jq){\nreturn $.data(jq[0],\"panel\").panel.find(\">div.panel-body\");\n},setTitle:function(jq,_67){\nreturn jq.each(function(){\n_5e(this,_67);\n});\n},open:function(jq,_68){\nreturn jq.each(function(){\n_31(this,_68);\n});\n},close:function(jq,_69){\nreturn jq.each(function(){\n_39(this,_69);\n});\n},destroy:function(jq,_6a){\nreturn jq.each(function(){\n_3e(this,_6a);\n});\n},clear:function(jq,_6b){\nreturn jq.each(function(){\n_2d(_6b==\"footer\"?$(this).panel(\"footer\"):this);\n});\n},refresh:function(jq,_6c){\nreturn jq.each(function(){\nvar _6d=$.data(this,\"panel\");\n_6d.isLoaded=false;\nif(_6c){\nif(typeof _6c==\"string\"){\n_6d.options.href=_6c;\n}else{\n_6d.options.queryParams=_6c;\n}\n}\n_25(this);\n});\n},resize:function(jq,_6e){\nreturn jq.each(function(){\n_3(this,_6e);\n});\n},doLayout:function(jq,all){\nreturn jq.each(function(){\n_6f(this,\"body\");\n_6f($(this).siblings(\"div.panel-footer\")[0],\"footer\");\nfunction _6f(_70,_71){\nif(!_70){\nreturn;\n}\nvar _72=_70==$(\"body\")[0];\nvar s=$(_70).find(\"div.panel:visible,div.accordion:visible,div.tabs-container:visible,div.layout:visible,.easyui-fluid:visible\").filter(function(_73,el){\nvar p=$(el).parents(\"div.panel-\"+_71+\":first\");\nreturn _72?p.length==0:p[0]==_70;\n});\ns.trigger(\"_resize\",[all||false]);\n};\n});\n},move:function(jq,_74){\nreturn jq.each(function(){\n_f(this,_74);\n});\n},maximize:function(jq){\nreturn jq.each(function(){\n_37(this);\n});\n},minimize:function(jq){\nreturn jq.each(function(){\n_55(this);\n});\n},restore:function(jq){\nreturn jq.each(function(){\n_59(this);\n});\n},collapse:function(jq,_75){\nreturn jq.each(function(){\n_38(this,_75);\n});\n},expand:function(jq,_76){\nreturn jq.each(function(){\n_4a(this,_76);\n});\n}};\n$.fn.panel.parseOptions=function(_77){\nvar t=$(_77);\nreturn $.extend({},$.parser.parseOptions(_77,[\"id\",\"width\",\"height\",\"left\",\"top\",\"title\",\"iconCls\",\"cls\",\"headerCls\",\"bodyCls\",\"tools\",\"href\",\"method\",{cache:\"boolean\",fit:\"boolean\",border:\"boolean\",noheader:\"boolean\"},{collapsible:\"boolean\",minimizable:\"boolean\",maximizable:\"boolean\"},{closable:\"boolean\",collapsed:\"boolean\",minimized:\"boolean\",maximized:\"boolean\",closed:\"boolean\"},\"openAnimation\",\"closeAnimation\",{openDuration:\"number\",closeDuration:\"number\"},]),{loadingMessage:(t.attr(\"loadingMessage\")!=undefined?t.attr(\"loadingMessage\"):undefined)});\n};\n$.fn.panel.defaults={id:null,title:null,iconCls:null,width:\"auto\",height:\"auto\",left:null,top:null,cls:null,headerCls:null,bodyCls:null,style:{},href:null,cache:true,fit:false,border:true,doSize:true,noheader:false,content:null,collapsible:false,minimizable:false,maximizable:false,closable:false,collapsed:false,minimized:false,maximized:false,closed:false,openAnimation:false,openDuration:400,closeAnimation:false,closeDuration:400,tools:null,footer:null,queryParams:{},method:\"get\",href:null,loadingMessage:\"Loading...\",loader:function(_78,_79,_7a){\nvar _7b=$(this).panel(\"options\");\nif(!_7b.href){\nreturn false;\n}\n$.ajax({type:_7b.method,url:_7b.href,cache:false,data:_78,dataType:\"html\",success:function(_7c){\n_79(_7c);\n},error:function(){\n_7a.apply(this,arguments);\n}});\n},extractor:function(_7d){\nvar _7e=/<body[^>]*>((.|[\\n\\r])*)<\\/body>/im;\nvar _7f=_7e.exec(_7d);\nif(_7f){\nreturn _7f[1];\n}else{\nreturn _7d;\n}\n},onBeforeLoad:function(_80){\n},onLoad:function(){\n},onLoadError:function(){\n},onBeforeOpen:function(){\n},onOpen:function(){\n},onBeforeClose:function(){\n},onClose:function(){\n},onBeforeDestroy:function(){\n},onDestroy:function(){\n},onResize:function(_81,_82){\n},onMove:function(_83,top){\n},onMaximize:function(){\n},onRestore:function(){\n},onMinimize:function(){\n},onBeforeCollapse:function(){\n},onBeforeExpand:function(){\n},onCollapse:function(){\n},onExpand:function(){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.parser.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\n$.parser={auto:true,onComplete:function(_1){\n},plugins:[\"draggable\",\"droppable\",\"resizable\",\"pagination\",\"tooltip\",\"linkbutton\",\"menu\",\"menubutton\",\"splitbutton\",\"progressbar\",\"tree\",\"textbox\",\"filebox\",\"combo\",\"combobox\",\"combotree\",\"combogrid\",\"numberbox\",\"validatebox\",\"searchbox\",\"spinner\",\"numberspinner\",\"timespinner\",\"datetimespinner\",\"calendar\",\"datebox\",\"datetimebox\",\"slider\",\"layout\",\"panel\",\"datagrid\",\"propertygrid\",\"treegrid\",\"tabs\",\"accordion\",\"window\",\"dialog\",\"form\"],parse:function(_2){\nvar aa=[];\nfor(var i=0;i<$.parser.plugins.length;i++){\nvar _3=$.parser.plugins[i];\nvar r=$(\".easyui-\"+_3,_2);\nif(r.length){\nif(r[_3]){\nr[_3]();\n}else{\naa.push({name:_3,jq:r});\n}\n}\n}\nif(aa.length&&window.easyloader){\nvar _4=[];\nfor(var i=0;i<aa.length;i++){\n_4.push(aa[i].name);\n}\neasyloader.load(_4,function(){\nfor(var i=0;i<aa.length;i++){\nvar _5=aa[i].name;\nvar jq=aa[i].jq;\njq[_5]();\n}\n$.parser.onComplete.call($.parser,_2);\n});\n}else{\n$.parser.onComplete.call($.parser,_2);\n}\n},parseValue:function(_6,_7,_8,_9){\n_9=_9||0;\nvar v=$.trim(String(_7||\"\"));\nvar _a=v.substr(v.length-1,1);\nif(_a==\"%\"){\nv=parseInt(v.substr(0,v.length-1));\nif(_6.toLowerCase().indexOf(\"width\")>=0){\nv=Math.floor((_8.width()-_9)*v/100);\n}else{\nv=Math.floor((_8.height()-_9)*v/100);\n}\n}else{\nv=parseInt(v)||undefined;\n}\nreturn v;\n},parseOptions:function(_b,_c){\nvar t=$(_b);\nvar _d={};\nvar s=$.trim(t.attr(\"data-options\"));\nif(s){\nif(s.substring(0,1)!=\"{\"){\ns=\"{\"+s+\"}\";\n}\n_d=(new Function(\"return \"+s))();\n}\n$.map([\"width\",\"height\",\"left\",\"top\",\"minWidth\",\"maxWidth\",\"minHeight\",\"maxHeight\"],function(p){\nvar pv=$.trim(_b.style[p]||\"\");\nif(pv){\nif(pv.indexOf(\"%\")==-1){\npv=parseInt(pv)||undefined;\n}\n_d[p]=pv;\n}\n});\nif(_c){\nvar _e={};\nfor(var i=0;i<_c.length;i++){\nvar pp=_c[i];\nif(typeof pp==\"string\"){\n_e[pp]=t.attr(pp);\n}else{\nfor(var _f in pp){\nvar _10=pp[_f];\nif(_10==\"boolean\"){\n_e[_f]=t.attr(_f)?(t.attr(_f)==\"true\"):undefined;\n}else{\nif(_10==\"number\"){\n_e[_f]=t.attr(_f)==\"0\"?0:parseFloat(t.attr(_f))||undefined;\n}\n}\n}\n}\n}\n$.extend(_d,_e);\n}\nreturn _d;\n}};\n$(function(){\nvar d=$(\"<div style=\\\"position:absolute;top:-1000px;width:100px;height:100px;padding:5px\\\"></div>\").appendTo(\"body\");\n$._boxModel=d.outerWidth()!=100;\nd.remove();\nif(!window.easyloader&&$.parser.auto){\n$.parser.parse();\n}\n});\n$.fn._outerWidth=function(_11){\nif(_11==undefined){\nif(this[0]==window){\nreturn this.width()||document.body.clientWidth;\n}\nreturn this.outerWidth()||0;\n}\nreturn this._size(\"width\",_11);\n};\n$.fn._outerHeight=function(_12){\nif(_12==undefined){\nif(this[0]==window){\nreturn this.height()||document.body.clientHeight;\n}\nreturn this.outerHeight()||0;\n}\nreturn this._size(\"height\",_12);\n};\n$.fn._scrollLeft=function(_13){\nif(_13==undefined){\nreturn this.scrollLeft();\n}else{\nreturn this.each(function(){\n$(this).scrollLeft(_13);\n});\n}\n};\n$.fn._propAttr=$.fn.prop||$.fn.attr;\n$.fn._size=function(_14,_15){\nif(typeof _14==\"string\"){\nif(_14==\"clear\"){\nreturn this.each(function(){\n$(this).css({width:\"\",minWidth:\"\",maxWidth:\"\",height:\"\",minHeight:\"\",maxHeight:\"\"});\n});\n}else{\nif(_14==\"fit\"){\nreturn this.each(function(){\n_16(this,this.tagName==\"BODY\"?$(\"body\"):$(this).parent(),true);\n});\n}else{\nif(_14==\"unfit\"){\nreturn this.each(function(){\n_16(this,$(this).parent(),false);\n});\n}else{\nif(_15==undefined){\nreturn _17(this[0],_14);\n}else{\nreturn this.each(function(){\n_17(this,_14,_15);\n});\n}\n}\n}\n}\n}else{\nreturn this.each(function(){\n_15=_15||$(this).parent();\n$.extend(_14,_16(this,_15,_14.fit)||{});\nvar r1=_18(this,\"width\",_15,_14);\nvar r2=_18(this,\"height\",_15,_14);\nif(r1||r2){\n$(this).addClass(\"easyui-fluid\");\n}else{\n$(this).removeClass(\"easyui-fluid\");\n}\n});\n}\nfunction _16(_19,_1a,fit){\nif(!_1a.length){\nreturn false;\n}\nvar t=$(_19)[0];\nvar p=_1a[0];\nvar _1b=p.fcount||0;\nif(fit){\nif(!t.fitted){\nt.fitted=true;\np.fcount=_1b+1;\n$(p).addClass(\"panel-noscroll\");\nif(p.tagName==\"BODY\"){\n$(\"html\").addClass(\"panel-fit\");\n}\n}\nreturn {width:($(p).width()||1),height:($(p).height()||1)};\n}else{\nif(t.fitted){\nt.fitted=false;\np.fcount=_1b-1;\nif(p.fcount==0){\n$(p).removeClass(\"panel-noscroll\");\nif(p.tagName==\"BODY\"){\n$(\"html\").removeClass(\"panel-fit\");\n}\n}\n}\nreturn false;\n}\n};\nfunction _18(_1c,_1d,_1e,_1f){\nvar t=$(_1c);\nvar p=_1d;\nvar p1=p.substr(0,1).toUpperCase()+p.substr(1);\nvar min=$.parser.parseValue(\"min\"+p1,_1f[\"min\"+p1],_1e);\nvar max=$.parser.parseValue(\"max\"+p1,_1f[\"max\"+p1],_1e);\nvar val=$.parser.parseValue(p,_1f[p],_1e);\nvar _20=(String(_1f[p]||\"\").indexOf(\"%\")>=0?true:false);\nif(!isNaN(val)){\nvar v=Math.min(Math.max(val,min||0),max||99999);\nif(!_20){\n_1f[p]=v;\n}\nt._size(\"min\"+p1,\"\");\nt._size(\"max\"+p1,\"\");\nt._size(p,v);\n}else{\nt._size(p,\"\");\nt._size(\"min\"+p1,min);\nt._size(\"max\"+p1,max);\n}\nreturn _20||_1f.fit;\n};\nfunction _17(_21,_22,_23){\nvar t=$(_21);\nif(_23==undefined){\n_23=parseInt(_21.style[_22]);\nif(isNaN(_23)){\nreturn undefined;\n}\nif($._boxModel){\n_23+=_24();\n}\nreturn _23;\n}else{\nif(_23===\"\"){\nt.css(_22,\"\");\n}else{\nif($._boxModel){\n_23-=_24();\nif(_23<0){\n_23=0;\n}\n}\nt.css(_22,_23+\"px\");\n}\n}\nfunction _24(){\nif(_22.toLowerCase().indexOf(\"width\")>=0){\nreturn t.outerWidth()-t.width();\n}else{\nreturn t.outerHeight()-t.height();\n}\n};\n};\n};\n})(jQuery);\n(function($){\nvar _25=null;\nvar _26=null;\nvar _27=false;\nfunction _28(e){\nif(e.touches.length!=1){\nreturn;\n}\nif(!_27){\n_27=true;\ndblClickTimer=setTimeout(function(){\n_27=false;\n},500);\n}else{\nclearTimeout(dblClickTimer);\n_27=false;\n_29(e,\"dblclick\");\n}\n_25=setTimeout(function(){\n_29(e,\"contextmenu\",3);\n},1000);\n_29(e,\"mousedown\");\nif($.fn.draggable.isDragging||$.fn.resizable.isResizing){\ne.preventDefault();\n}\n};\nfunction _2a(e){\nif(e.touches.length!=1){\nreturn;\n}\nif(_25){\nclearTimeout(_25);\n}\n_29(e,\"mousemove\");\nif($.fn.draggable.isDragging||$.fn.resizable.isResizing){\ne.preventDefault();\n}\n};\nfunction _2b(e){\nif(_25){\nclearTimeout(_25);\n}\n_29(e,\"mouseup\");\nif($.fn.draggable.isDragging||$.fn.resizable.isResizing){\ne.preventDefault();\n}\n};\nfunction _29(e,_2c,_2d){\nvar _2e=new $.Event(_2c);\n_2e.pageX=e.changedTouches[0].pageX;\n_2e.pageY=e.changedTouches[0].pageY;\n_2e.which=_2d||1;\n$(e.target).trigger(_2e);\n};\nif(document.addEventListener){\ndocument.addEventListener(\"touchstart\",_28,true);\ndocument.addEventListener(\"touchmove\",_2a,true);\ndocument.addEventListener(\"touchend\",_2b,true);\n}\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.progressbar.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"progressbar\");\n$(_2).html(\"<div class=\\\"progressbar-text\\\"></div><div class=\\\"progressbar-value\\\"><div class=\\\"progressbar-text\\\"></div></div>\");\n$(_2).bind(\"_resize\",function(e,_3){\nif($(this).hasClass(\"easyui-fluid\")||_3){\n_4(_2);\n}\nreturn false;\n});\nreturn $(_2);\n};\nfunction _4(_5,_6){\nvar _7=$.data(_5,\"progressbar\").options;\nvar _8=$.data(_5,\"progressbar\").bar;\nif(_6){\n_7.width=_6;\n}\n_8._size(_7);\n_8.find(\"div.progressbar-text\").css(\"width\",_8.width());\n_8.find(\"div.progressbar-text,div.progressbar-value\").css({height:_8.height()+\"px\",lineHeight:_8.height()+\"px\"});\n};\n$.fn.progressbar=function(_9,_a){\nif(typeof _9==\"string\"){\nvar _b=$.fn.progressbar.methods[_9];\nif(_b){\nreturn _b(this,_a);\n}\n}\n_9=_9||{};\nreturn this.each(function(){\nvar _c=$.data(this,\"progressbar\");\nif(_c){\n$.extend(_c.options,_9);\n}else{\n_c=$.data(this,\"progressbar\",{options:$.extend({},$.fn.progressbar.defaults,$.fn.progressbar.parseOptions(this),_9),bar:_1(this)});\n}\n$(this).progressbar(\"setValue\",_c.options.value);\n_4(this);\n});\n};\n$.fn.progressbar.methods={options:function(jq){\nreturn $.data(jq[0],\"progressbar\").options;\n},resize:function(jq,_d){\nreturn jq.each(function(){\n_4(this,_d);\n});\n},getValue:function(jq){\nreturn $.data(jq[0],\"progressbar\").options.value;\n},setValue:function(jq,_e){\nif(_e<0){\n_e=0;\n}\nif(_e>100){\n_e=100;\n}\nreturn jq.each(function(){\nvar _f=$.data(this,\"progressbar\").options;\nvar _10=_f.text.replace(/{value}/,_e);\nvar _11=_f.value;\n_f.value=_e;\n$(this).find(\"div.progressbar-value\").width(_e+\"%\");\n$(this).find(\"div.progressbar-text\").html(_10);\nif(_11!=_e){\n_f.onChange.call(this,_e,_11);\n}\n});\n}};\n$.fn.progressbar.parseOptions=function(_12){\nreturn $.extend({},$.parser.parseOptions(_12,[\"width\",\"height\",\"text\",{value:\"number\"}]));\n};\n$.fn.progressbar.defaults={width:\"auto\",height:22,value:0,text:\"{value}%\",onChange:function(_13,_14){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.propertygrid.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nvar _1;\n$(document).unbind(\".propertygrid\").bind(\"mousedown.propertygrid\",function(e){\nvar p=$(e.target).closest(\"div.datagrid-view,div.combo-panel\");\nif(p.length){\nreturn;\n}\n_2(_1);\n_1=undefined;\n});\nfunction _3(_4){\nvar _5=$.data(_4,\"propertygrid\");\nvar _6=$.data(_4,\"propertygrid\").options;\n$(_4).datagrid($.extend({},_6,{cls:\"propertygrid\",view:(_6.showGroup?_6.groupView:_6.view),onBeforeEdit:function(_7,_8){\nif(_6.onBeforeEdit.call(_4,_7,_8)==false){\nreturn false;\n}\nvar dg=$(this);\nvar _8=dg.datagrid(\"getRows\")[_7];\nvar _9=dg.datagrid(\"getColumnOption\",\"value\");\n_9.editor=_8.editor;\n},onClickCell:function(_a,_b,_c){\nif(_1!=this){\n_2(_1);\n_1=this;\n}\nif(_6.editIndex!=_a){\n_2(_1);\n$(this).datagrid(\"beginEdit\",_a);\nvar ed=$(this).datagrid(\"getEditor\",{index:_a,field:_b});\nif(!ed){\ned=$(this).datagrid(\"getEditor\",{index:_a,field:\"value\"});\n}\nif(ed){\nvar t=$(ed.target);\nvar _d=t.data(\"textbox\")?t.textbox(\"textbox\"):t;\n_d.focus();\n_6.editIndex=_a;\n}\n}\n_6.onClickCell.call(_4,_a,_b,_c);\n},loadFilter:function(_e){\n_2(this);\nreturn _6.loadFilter.call(this,_e);\n}}));\n};\nfunction _2(_f){\nvar t=$(_f);\nif(!t.length){\nreturn;\n}\nvar _10=$.data(_f,\"propertygrid\").options;\n_10.finder.getTr(_f,null,\"editing\").each(function(){\nvar _11=parseInt($(this).attr(\"datagrid-row-index\"));\nif(t.datagrid(\"validateRow\",_11)){\nt.datagrid(\"endEdit\",_11);\n}else{\nt.datagrid(\"cancelEdit\",_11);\n}\n});\n};\n$.fn.propertygrid=function(_12,_13){\nif(typeof _12==\"string\"){\nvar _14=$.fn.propertygrid.methods[_12];\nif(_14){\nreturn _14(this,_13);\n}else{\nreturn this.datagrid(_12,_13);\n}\n}\n_12=_12||{};\nreturn this.each(function(){\nvar _15=$.data(this,\"propertygrid\");\nif(_15){\n$.extend(_15.options,_12);\n}else{\nvar _16=$.extend({},$.fn.propertygrid.defaults,$.fn.propertygrid.parseOptions(this),_12);\n_16.frozenColumns=$.extend(true,[],_16.frozenColumns);\n_16.columns=$.extend(true,[],_16.columns);\n$.data(this,\"propertygrid\",{options:_16});\n}\n_3(this);\n});\n};\n$.fn.propertygrid.methods={options:function(jq){\nreturn $.data(jq[0],\"propertygrid\").options;\n}};\n$.fn.propertygrid.parseOptions=function(_17){\nreturn $.extend({},$.fn.datagrid.parseOptions(_17),$.parser.parseOptions(_17,[{showGroup:\"boolean\"}]));\n};\nvar _18=$.extend({},$.fn.datagrid.defaults.view,{render:function(_19,_1a,_1b){\nvar _1c=[];\nvar _1d=this.groups;\nfor(var i=0;i<_1d.length;i++){\n_1c.push(this.renderGroup.call(this,_19,i,_1d[i],_1b));\n}\n$(_1a).html(_1c.join(\"\"));\n},renderGroup:function(_1e,_1f,_20,_21){\nvar _22=$.data(_1e,\"datagrid\");\nvar _23=_22.options;\nvar _24=$(_1e).datagrid(\"getColumnFields\",_21);\nvar _25=[];\n_25.push(\"<div class=\\\"datagrid-group\\\" group-index=\"+_1f+\">\");\n_25.push(\"<table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\" style=\\\"height:100%\\\"><tbody>\");\n_25.push(\"<tr>\");\nif((_21&&(_23.rownumbers||_23.frozenColumns.length))||(!_21&&!(_23.rownumbers||_23.frozenColumns.length))){\n_25.push(\"<td style=\\\"border:0;text-align:center;width:25px\\\"><span class=\\\"datagrid-row-expander datagrid-row-collapse\\\" style=\\\"display:inline-block;width:16px;height:16px;cursor:pointer\\\">&nbsp;</span></td>\");\n}\n_25.push(\"<td style=\\\"border:0;\\\">\");\nif(!_21){\n_25.push(\"<span class=\\\"datagrid-group-title\\\">\");\n_25.push(_23.groupFormatter.call(_1e,_20.value,_20.rows));\n_25.push(\"</span>\");\n}\n_25.push(\"</td>\");\n_25.push(\"</tr>\");\n_25.push(\"</tbody></table>\");\n_25.push(\"</div>\");\n_25.push(\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\");\nvar _26=_20.startIndex;\nfor(var j=0;j<_20.rows.length;j++){\nvar css=_23.rowStyler?_23.rowStyler.call(_1e,_26,_20.rows[j]):\"\";\nvar _27=\"\";\nvar _28=\"\";\nif(typeof css==\"string\"){\n_28=css;\n}else{\nif(css){\n_27=css[\"class\"]||\"\";\n_28=css[\"style\"]||\"\";\n}\n}\nvar cls=\"class=\\\"datagrid-row \"+(_26%2&&_23.striped?\"datagrid-row-alt \":\" \")+_27+\"\\\"\";\nvar _29=_28?\"style=\\\"\"+_28+\"\\\"\":\"\";\nvar _2a=_22.rowIdPrefix+\"-\"+(_21?1:2)+\"-\"+_26;\n_25.push(\"<tr id=\\\"\"+_2a+\"\\\" datagrid-row-index=\\\"\"+_26+\"\\\" \"+cls+\" \"+_29+\">\");\n_25.push(this.renderRow.call(this,_1e,_24,_21,_26,_20.rows[j]));\n_25.push(\"</tr>\");\n_26++;\n}\n_25.push(\"</tbody></table>\");\nreturn _25.join(\"\");\n},bindEvents:function(_2b){\nvar _2c=$.data(_2b,\"datagrid\");\nvar dc=_2c.dc;\nvar _2d=dc.body1.add(dc.body2);\nvar _2e=($.data(_2d[0],\"events\")||$._data(_2d[0],\"events\")).click[0].handler;\n_2d.unbind(\"click\").bind(\"click\",function(e){\nvar tt=$(e.target);\nvar _2f=tt.closest(\"span.datagrid-row-expander\");\nif(_2f.length){\nvar _30=_2f.closest(\"div.datagrid-group\").attr(\"group-index\");\nif(_2f.hasClass(\"datagrid-row-collapse\")){\n$(_2b).datagrid(\"collapseGroup\",_30);\n}else{\n$(_2b).datagrid(\"expandGroup\",_30);\n}\n}else{\n_2e(e);\n}\ne.stopPropagation();\n});\n},onBeforeRender:function(_31,_32){\nvar _33=$.data(_31,\"datagrid\");\nvar _34=_33.options;\n_35();\nvar _36=[];\nfor(var i=0;i<_32.length;i++){\nvar row=_32[i];\nvar _37=_38(row[_34.groupField]);\nif(!_37){\n_37={value:row[_34.groupField],rows:[row]};\n_36.push(_37);\n}else{\n_37.rows.push(row);\n}\n}\nvar _39=0;\nvar _3a=[];\nfor(var i=0;i<_36.length;i++){\nvar _37=_36[i];\n_37.startIndex=_39;\n_39+=_37.rows.length;\n_3a=_3a.concat(_37.rows);\n}\n_33.data.rows=_3a;\nthis.groups=_36;\nvar _3b=this;\nsetTimeout(function(){\n_3b.bindEvents(_31);\n},0);\nfunction _38(_3c){\nfor(var i=0;i<_36.length;i++){\nvar _3d=_36[i];\nif(_3d.value==_3c){\nreturn _3d;\n}\n}\nreturn null;\n};\nfunction _35(){\nif(!$(\"#datagrid-group-style\").length){\n$(\"head\").append(\"<style id=\\\"datagrid-group-style\\\">\"+\".datagrid-group{height:25px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;}\"+\"</style>\");\n}\n};\n}});\n$.extend($.fn.datagrid.methods,{expandGroup:function(jq,_3e){\nreturn jq.each(function(){\nvar _3f=$.data(this,\"datagrid\").dc.view;\nvar _40=_3f.find(_3e!=undefined?\"div.datagrid-group[group-index=\\\"\"+_3e+\"\\\"]\":\"div.datagrid-group\");\nvar _41=_40.find(\"span.datagrid-row-expander\");\nif(_41.hasClass(\"datagrid-row-expand\")){\n_41.removeClass(\"datagrid-row-expand\").addClass(\"datagrid-row-collapse\");\n_40.next(\"table\").show();\n}\n$(this).datagrid(\"fixRowHeight\");\n});\n},collapseGroup:function(jq,_42){\nreturn jq.each(function(){\nvar _43=$.data(this,\"datagrid\").dc.view;\nvar _44=_43.find(_42!=undefined?\"div.datagrid-group[group-index=\\\"\"+_42+\"\\\"]\":\"div.datagrid-group\");\nvar _45=_44.find(\"span.datagrid-row-expander\");\nif(_45.hasClass(\"datagrid-row-collapse\")){\n_45.removeClass(\"datagrid-row-collapse\").addClass(\"datagrid-row-expand\");\n_44.next(\"table\").hide();\n}\n$(this).datagrid(\"fixRowHeight\");\n});\n}});\n$.extend(_18,{refreshGroupTitle:function(_46,_47){\nvar _48=$.data(_46,\"datagrid\");\nvar _49=_48.options;\nvar dc=_48.dc;\nvar _4a=this.groups[_47];\nvar _4b=dc.body2.children(\"div.datagrid-group[group-index=\"+_47+\"]\").find(\"span.datagrid-group-title\");\n_4b.html(_49.groupFormatter.call(_46,_4a.value,_4a.rows));\n},insertRow:function(_4c,_4d,row){\nvar _4e=$.data(_4c,\"datagrid\");\nvar _4f=_4e.options;\nvar dc=_4e.dc;\nvar _50=null;\nvar _51;\nfor(var i=0;i<this.groups.length;i++){\nif(this.groups[i].value==row[_4f.groupField]){\n_50=this.groups[i];\n_51=i;\nbreak;\n}\n}\nif(_50){\nif(_4d==undefined||_4d==null){\n_4d=_4e.data.rows.length;\n}\nif(_4d<_50.startIndex){\n_4d=_50.startIndex;\n}else{\nif(_4d>_50.startIndex+_50.rows.length){\n_4d=_50.startIndex+_50.rows.length;\n}\n}\n$.fn.datagrid.defaults.view.insertRow.call(this,_4c,_4d,row);\nif(_4d>=_50.startIndex+_50.rows.length){\n_52(_4d,true);\n_52(_4d,false);\n}\n_50.rows.splice(_4d-_50.startIndex,0,row);\n}else{\n_50={value:row[_4f.groupField],rows:[row],startIndex:_4e.data.rows.length};\n_51=this.groups.length;\ndc.body1.append(this.renderGroup.call(this,_4c,_51,_50,true));\ndc.body2.append(this.renderGroup.call(this,_4c,_51,_50,false));\nthis.groups.push(_50);\n_4e.data.rows.push(row);\n}\nthis.refreshGroupTitle(_4c,_51);\nfunction _52(_53,_54){\nvar _55=_54?1:2;\nvar _56=_4f.finder.getTr(_4c,_53-1,\"body\",_55);\nvar tr=_4f.finder.getTr(_4c,_53,\"body\",_55);\ntr.insertAfter(_56);\n};\n},updateRow:function(_57,_58,row){\nvar _59=$.data(_57,\"datagrid\").options;\n$.fn.datagrid.defaults.view.updateRow.call(this,_57,_58,row);\nvar tb=_59.finder.getTr(_57,_58,\"body\",2).closest(\"table.datagrid-btable\");\nvar _5a=parseInt(tb.prev().attr(\"group-index\"));\nthis.refreshGroupTitle(_57,_5a);\n},deleteRow:function(_5b,_5c){\nvar _5d=$.data(_5b,\"datagrid\");\nvar _5e=_5d.options;\nvar dc=_5d.dc;\nvar _5f=dc.body1.add(dc.body2);\nvar tb=_5e.finder.getTr(_5b,_5c,\"body\",2).closest(\"table.datagrid-btable\");\nvar _60=parseInt(tb.prev().attr(\"group-index\"));\n$.fn.datagrid.defaults.view.deleteRow.call(this,_5b,_5c);\nvar _61=this.groups[_60];\nif(_61.rows.length>1){\n_61.rows.splice(_5c-_61.startIndex,1);\nthis.refreshGroupTitle(_5b,_60);\n}else{\n_5f.children(\"div.datagrid-group[group-index=\"+_60+\"]\").remove();\nfor(var i=_60+1;i<this.groups.length;i++){\n_5f.children(\"div.datagrid-group[group-index=\"+i+\"]\").attr(\"group-index\",i-1);\n}\nthis.groups.splice(_60,1);\n}\nvar _5c=0;\nfor(var i=0;i<this.groups.length;i++){\nvar _61=this.groups[i];\n_61.startIndex=_5c;\n_5c+=_61.rows.length;\n}\n}});\n$.fn.propertygrid.defaults=$.extend({},$.fn.datagrid.defaults,{singleSelect:true,remoteSort:false,fitColumns:true,loadMsg:\"\",frozenColumns:[[{field:\"f\",width:16,resizable:false}]],columns:[[{field:\"name\",title:\"Name\",width:100,sortable:true},{field:\"value\",title:\"Value\",width:100,resizable:false}]],showGroup:false,groupView:_18,groupField:\"group\",groupFormatter:function(_62,_63){\nreturn _62;\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.resizable.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\n$.fn.resizable=function(_1,_2){\nif(typeof _1==\"string\"){\nreturn $.fn.resizable.methods[_1](this,_2);\n}\nfunction _3(e){\nvar _4=e.data;\nvar _5=$.data(_4.target,\"resizable\").options;\nif(_4.dir.indexOf(\"e\")!=-1){\nvar _6=_4.startWidth+e.pageX-_4.startX;\n_6=Math.min(Math.max(_6,_5.minWidth),_5.maxWidth);\n_4.width=_6;\n}\nif(_4.dir.indexOf(\"s\")!=-1){\nvar _7=_4.startHeight+e.pageY-_4.startY;\n_7=Math.min(Math.max(_7,_5.minHeight),_5.maxHeight);\n_4.height=_7;\n}\nif(_4.dir.indexOf(\"w\")!=-1){\nvar _6=_4.startWidth-e.pageX+_4.startX;\n_6=Math.min(Math.max(_6,_5.minWidth),_5.maxWidth);\n_4.width=_6;\n_4.left=_4.startLeft+_4.startWidth-_4.width;\n}\nif(_4.dir.indexOf(\"n\")!=-1){\nvar _7=_4.startHeight-e.pageY+_4.startY;\n_7=Math.min(Math.max(_7,_5.minHeight),_5.maxHeight);\n_4.height=_7;\n_4.top=_4.startTop+_4.startHeight-_4.height;\n}\n};\nfunction _8(e){\nvar _9=e.data;\nvar t=$(_9.target);\nt.css({left:_9.left,top:_9.top});\nif(t.outerWidth()!=_9.width){\nt._outerWidth(_9.width);\n}\nif(t.outerHeight()!=_9.height){\nt._outerHeight(_9.height);\n}\n};\nfunction _a(e){\n$.fn.resizable.isResizing=true;\n$.data(e.data.target,\"resizable\").options.onStartResize.call(e.data.target,e);\nreturn false;\n};\nfunction _b(e){\n_3(e);\nif($.data(e.data.target,\"resizable\").options.onResize.call(e.data.target,e)!=false){\n_8(e);\n}\nreturn false;\n};\nfunction _c(e){\n$.fn.resizable.isResizing=false;\n_3(e,true);\n_8(e);\n$.data(e.data.target,\"resizable\").options.onStopResize.call(e.data.target,e);\n$(document).unbind(\".resizable\");\n$(\"body\").css(\"cursor\",\"\");\nreturn false;\n};\nreturn this.each(function(){\nvar _d=null;\nvar _e=$.data(this,\"resizable\");\nif(_e){\n$(this).unbind(\".resizable\");\n_d=$.extend(_e.options,_1||{});\n}else{\n_d=$.extend({},$.fn.resizable.defaults,$.fn.resizable.parseOptions(this),_1||{});\n$.data(this,\"resizable\",{options:_d});\n}\nif(_d.disabled==true){\nreturn;\n}\n$(this).bind(\"mousemove.resizable\",{target:this},function(e){\nif($.fn.resizable.isResizing){\nreturn;\n}\nvar _f=_10(e);\nif(_f==\"\"){\n$(e.data.target).css(\"cursor\",\"\");\n}else{\n$(e.data.target).css(\"cursor\",_f+\"-resize\");\n}\n}).bind(\"mouseleave.resizable\",{target:this},function(e){\n$(e.data.target).css(\"cursor\",\"\");\n}).bind(\"mousedown.resizable\",{target:this},function(e){\nvar dir=_10(e);\nif(dir==\"\"){\nreturn;\n}\nfunction _11(css){\nvar val=parseInt($(e.data.target).css(css));\nif(isNaN(val)){\nreturn 0;\n}else{\nreturn val;\n}\n};\nvar _12={target:e.data.target,dir:dir,startLeft:_11(\"left\"),startTop:_11(\"top\"),left:_11(\"left\"),top:_11(\"top\"),startX:e.pageX,startY:e.pageY,startWidth:$(e.data.target).outerWidth(),startHeight:$(e.data.target).outerHeight(),width:$(e.data.target).outerWidth(),height:$(e.data.target).outerHeight(),deltaWidth:$(e.data.target).outerWidth()-$(e.data.target).width(),deltaHeight:$(e.data.target).outerHeight()-$(e.data.target).height()};\n$(document).bind(\"mousedown.resizable\",_12,_a);\n$(document).bind(\"mousemove.resizable\",_12,_b);\n$(document).bind(\"mouseup.resizable\",_12,_c);\n$(\"body\").css(\"cursor\",dir+\"-resize\");\n});\nfunction _10(e){\nvar tt=$(e.data.target);\nvar dir=\"\";\nvar _13=tt.offset();\nvar _14=tt.outerWidth();\nvar _15=tt.outerHeight();\nvar _16=_d.edge;\nif(e.pageY>_13.top&&e.pageY<_13.top+_16){\ndir+=\"n\";\n}else{\nif(e.pageY<_13.top+_15&&e.pageY>_13.top+_15-_16){\ndir+=\"s\";\n}\n}\nif(e.pageX>_13.left&&e.pageX<_13.left+_16){\ndir+=\"w\";\n}else{\nif(e.pageX<_13.left+_14&&e.pageX>_13.left+_14-_16){\ndir+=\"e\";\n}\n}\nvar _17=_d.handles.split(\",\");\nfor(var i=0;i<_17.length;i++){\nvar _18=_17[i].replace(/(^\\s*)|(\\s*$)/g,\"\");\nif(_18==\"all\"||_18==dir){\nreturn dir;\n}\n}\nreturn \"\";\n};\n});\n};\n$.fn.resizable.methods={options:function(jq){\nreturn $.data(jq[0],\"resizable\").options;\n},enable:function(jq){\nreturn jq.each(function(){\n$(this).resizable({disabled:false});\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$(this).resizable({disabled:true});\n});\n}};\n$.fn.resizable.parseOptions=function(_19){\nvar t=$(_19);\nreturn $.extend({},$.parser.parseOptions(_19,[\"handles\",{minWidth:\"number\",minHeight:\"number\",maxWidth:\"number\",maxHeight:\"number\",edge:\"number\"}]),{disabled:(t.attr(\"disabled\")?true:undefined)});\n};\n$.fn.resizable.defaults={disabled:false,handles:\"n, e, s, w, ne, se, sw, nw, all\",minWidth:10,minHeight:10,maxWidth:10000,maxHeight:10000,edge:5,onStartResize:function(e){\n},onResize:function(e){\n},onStopResize:function(e){\n}};\n$.fn.resizable.isResizing=false;\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.searchbox.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"searchbox\");\nvar _4=_3.options;\nvar _5=$.extend(true,[],_4.icons);\n_5.push({iconCls:\"searchbox-button\",handler:function(e){\nvar t=$(e.data.target);\nvar _6=t.searchbox(\"options\");\n_6.searcher.call(e.data.target,t.searchbox(\"getValue\"),t.searchbox(\"getName\"));\n}});\n_7();\nvar _8=_9();\n$(_2).addClass(\"searchbox-f\").textbox($.extend({},_4,{icons:_5,buttonText:(_8?_8.text:\"\")}));\n$(_2).attr(\"searchboxName\",$(_2).attr(\"textboxName\"));\n_3.searchbox=$(_2).next();\n_3.searchbox.addClass(\"searchbox\");\n_a(_8);\nfunction _7(){\nif(_4.menu){\n_3.menu=$(_4.menu).menu();\nvar _b=_3.menu.menu(\"options\");\nvar _c=_b.onClick;\n_b.onClick=function(_d){\n_a(_d);\n_c.call(this,_d);\n};\n}else{\nif(_3.menu){\n_3.menu.menu(\"destroy\");\n}\n_3.menu=null;\n}\n};\nfunction _9(){\nif(_3.menu){\nvar _e=_3.menu.children(\"div.menu-item:first\");\n_3.menu.children(\"div.menu-item\").each(function(){\nvar _f=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr(\"selected\")?true:undefined)});\nif(_f.selected){\n_e=$(this);\nreturn false;\n}\n});\nreturn _3.menu.menu(\"getItem\",_e[0]);\n}else{\nreturn null;\n}\n};\nfunction _a(_10){\nif(!_10){\nreturn;\n}\n$(_2).textbox(\"button\").menubutton({text:_10.text,iconCls:(_10.iconCls||null),menu:_3.menu,menuAlign:_4.buttonAlign,plain:false});\n_3.searchbox.find(\"input.textbox-value\").attr(\"name\",_10.name||_10.text);\n$(_2).searchbox(\"resize\");\n};\n};\n$.fn.searchbox=function(_11,_12){\nif(typeof _11==\"string\"){\nvar _13=$.fn.searchbox.methods[_11];\nif(_13){\nreturn _13(this,_12);\n}else{\nreturn this.textbox(_11,_12);\n}\n}\n_11=_11||{};\nreturn this.each(function(){\nvar _14=$.data(this,\"searchbox\");\nif(_14){\n$.extend(_14.options,_11);\n}else{\n$.data(this,\"searchbox\",{options:$.extend({},$.fn.searchbox.defaults,$.fn.searchbox.parseOptions(this),_11)});\n}\n_1(this);\n});\n};\n$.fn.searchbox.methods={options:function(jq){\nvar _15=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"searchbox\").options,{width:_15.width,value:_15.value,originalValue:_15.originalValue,disabled:_15.disabled,readonly:_15.readonly});\n},menu:function(jq){\nreturn $.data(jq[0],\"searchbox\").menu;\n},getName:function(jq){\nreturn $.data(jq[0],\"searchbox\").searchbox.find(\"input.textbox-value\").attr(\"name\");\n},selectName:function(jq,_16){\nreturn jq.each(function(){\nvar _17=$.data(this,\"searchbox\").menu;\nif(_17){\n_17.children(\"div.menu-item\").each(function(){\nvar _18=_17.menu(\"getItem\",this);\nif(_18.name==_16){\n$(this).triggerHandler(\"click\");\nreturn false;\n}\n});\n}\n});\n},destroy:function(jq){\nreturn jq.each(function(){\nvar _19=$(this).searchbox(\"menu\");\nif(_19){\n_19.menu(\"destroy\");\n}\n$(this).textbox(\"destroy\");\n});\n}};\n$.fn.searchbox.parseOptions=function(_1a){\nvar t=$(_1a);\nreturn $.extend({},$.fn.textbox.parseOptions(_1a),$.parser.parseOptions(_1a,[\"menu\"]),{searcher:(t.attr(\"searcher\")?eval(t.attr(\"searcher\")):undefined)});\n};\n$.fn.searchbox.defaults=$.extend({},$.fn.textbox.defaults,{inputEvents:$.extend({},$.fn.textbox.defaults.inputEvents,{keydown:function(e){\nif(e.keyCode==13){\ne.preventDefault();\nvar t=$(e.data.target);\nvar _1b=t.searchbox(\"options\");\nt.searchbox(\"setValue\",$(this).val());\n_1b.searcher.call(e.data.target,t.searchbox(\"getValue\"),t.searchbox(\"getName\"));\nreturn false;\n}\n}}),buttonAlign:\"left\",menu:null,searcher:function(_1c,_1d){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.slider.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$(\"<div class=\\\"slider\\\">\"+\"<div class=\\\"slider-inner\\\">\"+\"<a href=\\\"javascript:void(0)\\\" class=\\\"slider-handle\\\"></a>\"+\"<span class=\\\"slider-tip\\\"></span>\"+\"</div>\"+\"<div class=\\\"slider-rule\\\"></div>\"+\"<div class=\\\"slider-rulelabel\\\"></div>\"+\"<div style=\\\"clear:both\\\"></div>\"+\"<input type=\\\"hidden\\\" class=\\\"slider-value\\\">\"+\"</div>\").insertAfter(_2);\nvar t=$(_2);\nt.addClass(\"slider-f\").hide();\nvar _4=t.attr(\"name\");\nif(_4){\n_3.find(\"input.slider-value\").attr(\"name\",_4);\nt.removeAttr(\"name\").attr(\"sliderName\",_4);\n}\n_3.bind(\"_resize\",function(e,_5){\nif($(this).hasClass(\"easyui-fluid\")||_5){\n_6(_2);\n}\nreturn false;\n});\nreturn _3;\n};\nfunction _6(_7,_8){\nvar _9=$.data(_7,\"slider\");\nvar _a=_9.options;\nvar _b=_9.slider;\nif(_8){\nif(_8.width){\n_a.width=_8.width;\n}\nif(_8.height){\n_a.height=_8.height;\n}\n}\n_b._size(_a);\nif(_a.mode==\"h\"){\n_b.css(\"height\",\"\");\n_b.children(\"div\").css(\"height\",\"\");\n}else{\n_b.css(\"width\",\"\");\n_b.children(\"div\").css(\"width\",\"\");\n_b.children(\"div.slider-rule,div.slider-rulelabel,div.slider-inner\")._outerHeight(_b._outerHeight());\n}\n_c(_7);\n};\nfunction _d(_e){\nvar _f=$.data(_e,\"slider\");\nvar _10=_f.options;\nvar _11=_f.slider;\nvar aa=_10.mode==\"h\"?_10.rule:_10.rule.slice(0).reverse();\nif(_10.reversed){\naa=aa.slice(0).reverse();\n}\n_12(aa);\nfunction _12(aa){\nvar _13=_11.find(\"div.slider-rule\");\nvar _14=_11.find(\"div.slider-rulelabel\");\n_13.empty();\n_14.empty();\nfor(var i=0;i<aa.length;i++){\nvar _15=i*100/(aa.length-1)+\"%\";\nvar _16=$(\"<span></span>\").appendTo(_13);\n_16.css((_10.mode==\"h\"?\"left\":\"top\"),_15);\nif(aa[i]!=\"|\"){\n_16=$(\"<span></span>\").appendTo(_14);\n_16.html(aa[i]);\nif(_10.mode==\"h\"){\n_16.css({left:_15,marginLeft:-Math.round(_16.outerWidth()/2)});\n}else{\n_16.css({top:_15,marginTop:-Math.round(_16.outerHeight()/2)});\n}\n}\n}\n};\n};\nfunction _17(_18){\nvar _19=$.data(_18,\"slider\");\nvar _1a=_19.options;\nvar _1b=_19.slider;\n_1b.removeClass(\"slider-h slider-v slider-disabled\");\n_1b.addClass(_1a.mode==\"h\"?\"slider-h\":\"slider-v\");\n_1b.addClass(_1a.disabled?\"slider-disabled\":\"\");\n_1b.find(\"a.slider-handle\").draggable({axis:_1a.mode,cursor:\"pointer\",disabled:_1a.disabled,onDrag:function(e){\nvar _1c=e.data.left;\nvar _1d=_1b.width();\nif(_1a.mode!=\"h\"){\n_1c=e.data.top;\n_1d=_1b.height();\n}\nif(_1c<0||_1c>_1d){\nreturn false;\n}else{\nvar _1e=_34(_18,_1c);\n_1f(_1e);\nreturn false;\n}\n},onBeforeDrag:function(){\n_19.isDragging=true;\n},onStartDrag:function(){\n_1a.onSlideStart.call(_18,_1a.value);\n},onStopDrag:function(e){\nvar _20=_34(_18,(_1a.mode==\"h\"?e.data.left:e.data.top));\n_1f(_20);\n_1a.onSlideEnd.call(_18,_1a.value);\n_1a.onComplete.call(_18,_1a.value);\n_19.isDragging=false;\n}});\n_1b.find(\"div.slider-inner\").unbind(\".slider\").bind(\"mousedown.slider\",function(e){\nif(_19.isDragging||_1a.disabled){\nreturn;\n}\nvar pos=$(this).offset();\nvar _21=_34(_18,(_1a.mode==\"h\"?(e.pageX-pos.left):(e.pageY-pos.top)));\n_1f(_21);\n_1a.onComplete.call(_18,_1a.value);\n});\nfunction _1f(_22){\nvar s=Math.abs(_22%_1a.step);\nif(s<_1a.step/2){\n_22-=s;\n}else{\n_22=_22-s+_1a.step;\n}\n_23(_18,_22);\n};\n};\nfunction _23(_24,_25){\nvar _26=$.data(_24,\"slider\");\nvar _27=_26.options;\nvar _28=_26.slider;\nvar _29=_27.value;\nif(_25<_27.min){\n_25=_27.min;\n}\nif(_25>_27.max){\n_25=_27.max;\n}\n_27.value=_25;\n$(_24).val(_25);\n_28.find(\"input.slider-value\").val(_25);\nvar pos=_2a(_24,_25);\nvar tip=_28.find(\".slider-tip\");\nif(_27.showTip){\ntip.show();\ntip.html(_27.tipFormatter.call(_24,_27.value));\n}else{\ntip.hide();\n}\nif(_27.mode==\"h\"){\nvar _2b=\"left:\"+pos+\"px;\";\n_28.find(\".slider-handle\").attr(\"style\",_2b);\ntip.attr(\"style\",_2b+\"margin-left:\"+(-Math.round(tip.outerWidth()/2))+\"px\");\n}else{\nvar _2b=\"top:\"+pos+\"px;\";\n_28.find(\".slider-handle\").attr(\"style\",_2b);\ntip.attr(\"style\",_2b+\"margin-left:\"+(-Math.round(tip.outerWidth()))+\"px\");\n}\nif(_29!=_25){\n_27.onChange.call(_24,_25,_29);\n}\n};\nfunction _c(_2c){\nvar _2d=$.data(_2c,\"slider\").options;\nvar fn=_2d.onChange;\n_2d.onChange=function(){\n};\n_23(_2c,_2d.value);\n_2d.onChange=fn;\n};\nfunction _2a(_2e,_2f){\nvar _30=$.data(_2e,\"slider\");\nvar _31=_30.options;\nvar _32=_30.slider;\nvar _33=_31.mode==\"h\"?_32.width():_32.height();\nvar pos=_31.converter.toPosition.call(_2e,_2f,_33);\nif(_31.mode==\"v\"){\npos=_32.height()-pos;\n}\nif(_31.reversed){\npos=_33-pos;\n}\nreturn pos.toFixed(0);\n};\nfunction _34(_35,pos){\nvar _36=$.data(_35,\"slider\");\nvar _37=_36.options;\nvar _38=_36.slider;\nvar _39=_37.mode==\"h\"?_38.width():_38.height();\nvar _3a=_37.converter.toValue.call(_35,_37.mode==\"h\"?(_37.reversed?(_39-pos):pos):(_39-pos),_39);\nreturn _3a.toFixed(0);\n};\n$.fn.slider=function(_3b,_3c){\nif(typeof _3b==\"string\"){\nreturn $.fn.slider.methods[_3b](this,_3c);\n}\n_3b=_3b||{};\nreturn this.each(function(){\nvar _3d=$.data(this,\"slider\");\nif(_3d){\n$.extend(_3d.options,_3b);\n}else{\n_3d=$.data(this,\"slider\",{options:$.extend({},$.fn.slider.defaults,$.fn.slider.parseOptions(this),_3b),slider:_1(this)});\n$(this).removeAttr(\"disabled\");\n}\nvar _3e=_3d.options;\n_3e.min=parseFloat(_3e.min);\n_3e.max=parseFloat(_3e.max);\n_3e.value=parseFloat(_3e.value);\n_3e.step=parseFloat(_3e.step);\n_3e.originalValue=_3e.value;\n_17(this);\n_d(this);\n_6(this);\n});\n};\n$.fn.slider.methods={options:function(jq){\nreturn $.data(jq[0],\"slider\").options;\n},destroy:function(jq){\nreturn jq.each(function(){\n$.data(this,\"slider\").slider.remove();\n$(this).remove();\n});\n},resize:function(jq,_3f){\nreturn jq.each(function(){\n_6(this,_3f);\n});\n},getValue:function(jq){\nreturn jq.slider(\"options\").value;\n},setValue:function(jq,_40){\nreturn jq.each(function(){\n_23(this,_40);\n});\n},clear:function(jq){\nreturn jq.each(function(){\nvar _41=$(this).slider(\"options\");\n_23(this,_41.min);\n});\n},reset:function(jq){\nreturn jq.each(function(){\nvar _42=$(this).slider(\"options\");\n_23(this,_42.originalValue);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n$.data(this,\"slider\").options.disabled=false;\n_17(this);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n$.data(this,\"slider\").options.disabled=true;\n_17(this);\n});\n}};\n$.fn.slider.parseOptions=function(_43){\nvar t=$(_43);\nreturn $.extend({},$.parser.parseOptions(_43,[\"width\",\"height\",\"mode\",{reversed:\"boolean\",showTip:\"boolean\",min:\"number\",max:\"number\",step:\"number\"}]),{value:(t.val()||undefined),disabled:(t.attr(\"disabled\")?true:undefined),rule:(t.attr(\"rule\")?eval(t.attr(\"rule\")):undefined)});\n};\n$.fn.slider.defaults={width:\"auto\",height:\"auto\",mode:\"h\",reversed:false,showTip:false,disabled:false,value:0,min:0,max:100,step:1,rule:[],tipFormatter:function(_44){\nreturn _44;\n},converter:{toPosition:function(_45,_46){\nvar _47=$(this).slider(\"options\");\nreturn (_45-_47.min)/(_47.max-_47.min)*_46;\n},toValue:function(pos,_48){\nvar _49=$(this).slider(\"options\");\nreturn _49.min+(_49.max-_49.min)*(pos/_48);\n}},onChange:function(_4a,_4b){\n},onSlideStart:function(_4c){\n},onSlideEnd:function(_4d){\n},onComplete:function(_4e){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.spinner.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"spinner\");\nvar _4=_3.options;\nvar _5=$.extend(true,[],_4.icons);\n_5.push({iconCls:\"spinner-arrow\",handler:function(e){\n_6(e);\n}});\n$(_2).addClass(\"spinner-f\").textbox($.extend({},_4,{icons:_5}));\nvar _7=$(_2).textbox(\"getIcon\",_5.length-1);\n_7.append(\"<a href=\\\"javascript:void(0)\\\" class=\\\"spinner-arrow-up\\\" tabindex=\\\"-1\\\"></a>\");\n_7.append(\"<a href=\\\"javascript:void(0)\\\" class=\\\"spinner-arrow-down\\\" tabindex=\\\"-1\\\"></a>\");\n$(_2).attr(\"spinnerName\",$(_2).attr(\"textboxName\"));\n_3.spinner=$(_2).next();\n_3.spinner.addClass(\"spinner\");\n};\nfunction _6(e){\nvar _8=e.data.target;\nvar _9=$(_8).spinner(\"options\");\nvar up=$(e.target).closest(\"a.spinner-arrow-up\");\nif(up.length){\n_9.spin.call(_8,false);\n_9.onSpinUp.call(_8);\n$(_8).spinner(\"validate\");\n}\nvar _a=$(e.target).closest(\"a.spinner-arrow-down\");\nif(_a.length){\n_9.spin.call(_8,true);\n_9.onSpinDown.call(_8);\n$(_8).spinner(\"validate\");\n}\n};\n$.fn.spinner=function(_b,_c){\nif(typeof _b==\"string\"){\nvar _d=$.fn.spinner.methods[_b];\nif(_d){\nreturn _d(this,_c);\n}else{\nreturn this.textbox(_b,_c);\n}\n}\n_b=_b||{};\nreturn this.each(function(){\nvar _e=$.data(this,\"spinner\");\nif(_e){\n$.extend(_e.options,_b);\n}else{\n_e=$.data(this,\"spinner\",{options:$.extend({},$.fn.spinner.defaults,$.fn.spinner.parseOptions(this),_b)});\n}\n_1(this);\n});\n};\n$.fn.spinner.methods={options:function(jq){\nvar _f=jq.textbox(\"options\");\nreturn $.extend($.data(jq[0],\"spinner\").options,{width:_f.width,value:_f.value,originalValue:_f.originalValue,disabled:_f.disabled,readonly:_f.readonly});\n}};\n$.fn.spinner.parseOptions=function(_10){\nreturn $.extend({},$.fn.textbox.parseOptions(_10),$.parser.parseOptions(_10,[\"min\",\"max\",{increment:\"number\"}]));\n};\n$.fn.spinner.defaults=$.extend({},$.fn.textbox.defaults,{min:null,max:null,increment:1,spin:function(_11){\n},onSpinUp:function(){\n},onSpinDown:function(){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.splitbutton.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"splitbutton\").options;\n$(_2).menubutton(_3);\n$(_2).addClass(\"s-btn\");\n};\n$.fn.splitbutton=function(_4,_5){\nif(typeof _4==\"string\"){\nvar _6=$.fn.splitbutton.methods[_4];\nif(_6){\nreturn _6(this,_5);\n}else{\nreturn this.menubutton(_4,_5);\n}\n}\n_4=_4||{};\nreturn this.each(function(){\nvar _7=$.data(this,\"splitbutton\");\nif(_7){\n$.extend(_7.options,_4);\n}else{\n$.data(this,\"splitbutton\",{options:$.extend({},$.fn.splitbutton.defaults,$.fn.splitbutton.parseOptions(this),_4)});\n$(this).removeAttr(\"disabled\");\n}\n_1(this);\n});\n};\n$.fn.splitbutton.methods={options:function(jq){\nvar _8=jq.menubutton(\"options\");\nvar _9=$.data(jq[0],\"splitbutton\").options;\n$.extend(_9,{disabled:_8.disabled,toggle:_8.toggle,selected:_8.selected});\nreturn _9;\n}};\n$.fn.splitbutton.parseOptions=function(_a){\nvar t=$(_a);\nreturn $.extend({},$.fn.linkbutton.parseOptions(_a),$.parser.parseOptions(_a,[\"menu\",{plain:\"boolean\",duration:\"number\"}]));\n};\n$.fn.splitbutton.defaults=$.extend({},$.fn.linkbutton.defaults,{plain:true,menu:null,duration:100,cls:{btn1:\"m-btn-active s-btn-active\",btn2:\"m-btn-plain-active s-btn-plain-active\",arrow:\"m-btn-downarrow\",trigger:\"m-btn-line\"}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.tabs.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"tabs\").options;\nif(_3.tabPosition==\"left\"||_3.tabPosition==\"right\"||!_3.showHeader){\nreturn;\n}\nvar _4=$(_2).children(\"div.tabs-header\");\nvar _5=_4.children(\"div.tabs-tool\");\nvar _6=_4.children(\"div.tabs-scroller-left\");\nvar _7=_4.children(\"div.tabs-scroller-right\");\nvar _8=_4.children(\"div.tabs-wrap\");\nvar _9=_4.outerHeight();\nif(_3.plain){\n_9-=_9-_4.height();\n}\n_5._outerHeight(_9);\nvar _a=0;\n$(\"ul.tabs li\",_4).each(function(){\n_a+=$(this).outerWidth(true);\n});\nvar _b=_4.width()-_5._outerWidth();\nif(_a>_b){\n_6.add(_7).show()._outerHeight(_9);\nif(_3.toolPosition==\"left\"){\n_5.css({left:_6.outerWidth(),right:\"\"});\n_8.css({marginLeft:_6.outerWidth()+_5._outerWidth(),marginRight:_7._outerWidth(),width:_b-_6.outerWidth()-_7.outerWidth()});\n}else{\n_5.css({left:\"\",right:_7.outerWidth()});\n_8.css({marginLeft:_6.outerWidth(),marginRight:_7.outerWidth()+_5._outerWidth(),width:_b-_6.outerWidth()-_7.outerWidth()});\n}\n}else{\n_6.add(_7).hide();\nif(_3.toolPosition==\"left\"){\n_5.css({left:0,right:\"\"});\n_8.css({marginLeft:_5._outerWidth(),marginRight:0,width:_b});\n}else{\n_5.css({left:\"\",right:0});\n_8.css({marginLeft:0,marginRight:_5._outerWidth(),width:_b});\n}\n}\n};\nfunction _c(_d){\nvar _e=$.data(_d,\"tabs\").options;\nvar _f=$(_d).children(\"div.tabs-header\");\nif(_e.tools){\nif(typeof _e.tools==\"string\"){\n$(_e.tools).addClass(\"tabs-tool\").appendTo(_f);\n$(_e.tools).show();\n}else{\n_f.children(\"div.tabs-tool\").remove();\nvar _10=$(\"<div class=\\\"tabs-tool\\\"><table cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" style=\\\"height:100%\\\"><tr></tr></table></div>\").appendTo(_f);\nvar tr=_10.find(\"tr\");\nfor(var i=0;i<_e.tools.length;i++){\nvar td=$(\"<td></td>\").appendTo(tr);\nvar _11=$(\"<a href=\\\"javascript:void(0);\\\"></a>\").appendTo(td);\n_11[0].onclick=eval(_e.tools[i].handler||function(){\n});\n_11.linkbutton($.extend({},_e.tools[i],{plain:true}));\n}\n}\n}else{\n_f.children(\"div.tabs-tool\").remove();\n}\n};\nfunction _12(_13,_14){\nvar _15=$.data(_13,\"tabs\");\nvar _16=_15.options;\nvar cc=$(_13);\nif(_14){\n$.extend(_16,{width:_14.width,height:_14.height});\n}\ncc._size(_16);\nvar _17=cc.children(\"div.tabs-header\");\nvar _18=cc.children(\"div.tabs-panels\");\nvar _19=_17.find(\"div.tabs-wrap\");\nvar ul=_19.find(\".tabs\");\nfor(var i=0;i<_15.tabs.length;i++){\nvar _1a=_15.tabs[i].panel(\"options\");\nvar p_t=_1a.tab.find(\"a.tabs-inner\");\nvar _1b=parseInt(_1a.tabWidth||_16.tabWidth)||undefined;\nif(_1b){\np_t._outerWidth(_1b);\n}else{\np_t.css(\"width\",\"\");\n}\np_t._outerHeight(_16.tabHeight);\np_t.css(\"lineHeight\",p_t.height()+\"px\");\n}\nif(_16.tabPosition==\"left\"||_16.tabPosition==\"right\"){\n_17._outerWidth(_16.showHeader?_16.headerWidth:0);\n_18._outerWidth(cc.width()-_17.outerWidth());\n_17.add(_18)._outerHeight(_16.height);\n_19._outerWidth(_17.width());\nul._outerWidth(_19.width()).css(\"height\",\"\");\n}else{\nvar lrt=_17.children(\"div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool\");\n_17._outerWidth(_16.width).css(\"height\",\"\");\nif(_16.showHeader){\n_17.css(\"background-color\",\"\");\n_19.css(\"height\",\"\");\nlrt.show();\n}else{\n_17.css(\"background-color\",\"transparent\");\n_17._outerHeight(0);\n_19._outerHeight(0);\nlrt.hide();\n}\nul._outerHeight(_16.tabHeight).css(\"width\",\"\");\n_1(_13);\n_18._size(\"height\",isNaN(_16.height)?\"\":(_16.height-_17.outerHeight()));\n_18._size(\"width\",isNaN(_16.width)?\"\":_16.width);\n}\n};\nfunction _1c(_1d){\nvar _1e=$.data(_1d,\"tabs\").options;\nvar tab=_1f(_1d);\nif(tab){\nvar _20=$(_1d).children(\"div.tabs-panels\");\nvar _21=_1e.width==\"auto\"?\"auto\":_20.width();\nvar _22=_1e.height==\"auto\"?\"auto\":_20.height();\ntab.panel(\"resize\",{width:_21,height:_22});\n}\n};\nfunction _23(_24){\nvar _25=$.data(_24,\"tabs\").tabs;\nvar cc=$(_24);\ncc.addClass(\"tabs-container\");\nvar pp=$(\"<div class=\\\"tabs-panels\\\"></div>\").insertBefore(cc);\ncc.children(\"div\").each(function(){\npp[0].appendChild(this);\n});\ncc[0].appendChild(pp[0]);\n$(\"<div class=\\\"tabs-header\\\">\"+\"<div class=\\\"tabs-scroller-left\\\"></div>\"+\"<div class=\\\"tabs-scroller-right\\\"></div>\"+\"<div class=\\\"tabs-wrap\\\">\"+\"<ul class=\\\"tabs\\\"></ul>\"+\"</div>\"+\"</div>\").prependTo(_24);\ncc.children(\"div.tabs-panels\").children(\"div\").each(function(i){\nvar _26=$.extend({},$.parser.parseOptions(this),{selected:($(this).attr(\"selected\")?true:undefined)});\nvar pp=$(this);\n_25.push(pp);\n_35(_24,pp,_26);\n});\ncc.children(\"div.tabs-header\").find(\".tabs-scroller-left, .tabs-scroller-right\").hover(function(){\n$(this).addClass(\"tabs-scroller-over\");\n},function(){\n$(this).removeClass(\"tabs-scroller-over\");\n});\ncc.bind(\"_resize\",function(e,_27){\nif($(this).hasClass(\"easyui-fluid\")||_27){\n_12(_24);\n_1c(_24);\n}\nreturn false;\n});\n};\nfunction _28(_29){\nvar _2a=$.data(_29,\"tabs\");\nvar _2b=_2a.options;\n$(_29).children(\"div.tabs-header\").unbind().bind(\"click\",function(e){\nif($(e.target).hasClass(\"tabs-scroller-left\")){\n$(_29).tabs(\"scrollBy\",-_2b.scrollIncrement);\n}else{\nif($(e.target).hasClass(\"tabs-scroller-right\")){\n$(_29).tabs(\"scrollBy\",_2b.scrollIncrement);\n}else{\nvar li=$(e.target).closest(\"li\");\nif(li.hasClass(\"tabs-disabled\")){\nreturn;\n}\nvar a=$(e.target).closest(\"a.tabs-close\");\nif(a.length){\n_4c(_29,_2c(li));\n}else{\nif(li.length){\nvar _2d=_2c(li);\nvar _2e=_2a.tabs[_2d].panel(\"options\");\nif(_2e.collapsible){\n_2e.closed?_41(_29,_2d):_6b(_29,_2d);\n}else{\n_41(_29,_2d);\n}\n}\n}\n}\n}\n}).bind(\"contextmenu\",function(e){\nvar li=$(e.target).closest(\"li\");\nif(li.hasClass(\"tabs-disabled\")){\nreturn;\n}\nif(li.length){\n_2b.onContextMenu.call(_29,e,li.find(\"span.tabs-title\").html(),_2c(li));\n}\n});\nfunction _2c(li){\nvar _2f=0;\nli.parent().children(\"li\").each(function(i){\nif(li[0]==this){\n_2f=i;\nreturn false;\n}\n});\nreturn _2f;\n};\n};\nfunction _30(_31){\nvar _32=$.data(_31,\"tabs\").options;\nvar _33=$(_31).children(\"div.tabs-header\");\nvar _34=$(_31).children(\"div.tabs-panels\");\n_33.removeClass(\"tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right\");\n_34.removeClass(\"tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right\");\nif(_32.tabPosition==\"top\"){\n_33.insertBefore(_34);\n}else{\nif(_32.tabPosition==\"bottom\"){\n_33.insertAfter(_34);\n_33.addClass(\"tabs-header-bottom\");\n_34.addClass(\"tabs-panels-top\");\n}else{\nif(_32.tabPosition==\"left\"){\n_33.addClass(\"tabs-header-left\");\n_34.addClass(\"tabs-panels-right\");\n}else{\nif(_32.tabPosition==\"right\"){\n_33.addClass(\"tabs-header-right\");\n_34.addClass(\"tabs-panels-left\");\n}\n}\n}\n}\nif(_32.plain==true){\n_33.addClass(\"tabs-header-plain\");\n}else{\n_33.removeClass(\"tabs-header-plain\");\n}\nif(_32.border==true){\n_33.removeClass(\"tabs-header-noborder\");\n_34.removeClass(\"tabs-panels-noborder\");\n}else{\n_33.addClass(\"tabs-header-noborder\");\n_34.addClass(\"tabs-panels-noborder\");\n}\n};\nfunction _35(_36,pp,_37){\nvar _38=$.data(_36,\"tabs\");\n_37=_37||{};\npp.panel($.extend({},_37,{border:false,noheader:true,closed:true,doSize:false,iconCls:(_37.icon?_37.icon:undefined),onLoad:function(){\nif(_37.onLoad){\n_37.onLoad.call(this,arguments);\n}\n_38.options.onLoad.call(_36,$(this));\n}}));\nvar _39=pp.panel(\"options\");\nvar _3a=$(_36).children(\"div.tabs-header\").find(\"ul.tabs\");\n_39.tab=$(\"<li></li>\").appendTo(_3a);\n_39.tab.append(\"<a href=\\\"javascript:void(0)\\\" class=\\\"tabs-inner\\\">\"+\"<span class=\\\"tabs-title\\\"></span>\"+\"<span class=\\\"tabs-icon\\\"></span>\"+\"</a>\");\n$(_36).tabs(\"update\",{tab:pp,options:_39,type:\"header\"});\n};\nfunction _3b(_3c,_3d){\nvar _3e=$.data(_3c,\"tabs\");\nvar _3f=_3e.options;\nvar _40=_3e.tabs;\nif(_3d.selected==undefined){\n_3d.selected=true;\n}\nvar pp=$(\"<div></div>\").appendTo($(_3c).children(\"div.tabs-panels\"));\n_40.push(pp);\n_35(_3c,pp,_3d);\n_3f.onAdd.call(_3c,_3d.title,_40.length-1);\n_12(_3c);\nif(_3d.selected){\n_41(_3c,_40.length-1);\n}\n};\nfunction _42(_43,_44){\n_44.type=_44.type||\"all\";\nvar _45=$.data(_43,\"tabs\").selectHis;\nvar pp=_44.tab;\nvar _46=pp.panel(\"options\").title;\nif(_44.type==\"all\"||_44==\"body\"){\npp.panel($.extend({},_44.options,{iconCls:(_44.options.icon?_44.options.icon:undefined)}));\n}\nif(_44.type==\"all\"||_44.type==\"header\"){\nvar _47=pp.panel(\"options\");\nvar tab=_47.tab;\nvar _48=tab.find(\"span.tabs-title\");\nvar _49=tab.find(\"span.tabs-icon\");\n_48.html(_47.title);\n_49.attr(\"class\",\"tabs-icon\");\ntab.find(\"a.tabs-close\").remove();\nif(_47.closable){\n_48.addClass(\"tabs-closable\");\n$(\"<a href=\\\"javascript:void(0)\\\" class=\\\"tabs-close\\\"></a>\").appendTo(tab);\n}else{\n_48.removeClass(\"tabs-closable\");\n}\nif(_47.iconCls){\n_48.addClass(\"tabs-with-icon\");\n_49.addClass(_47.iconCls);\n}else{\n_48.removeClass(\"tabs-with-icon\");\n}\nif(_46!=_47.title){\nfor(var i=0;i<_45.length;i++){\nif(_45[i]==_46){\n_45[i]=_47.title;\n}\n}\n}\ntab.find(\"span.tabs-p-tool\").remove();\nif(_47.tools){\nvar _4a=$(\"<span class=\\\"tabs-p-tool\\\"></span>\").insertAfter(tab.find(\"a.tabs-inner\"));\nif($.isArray(_47.tools)){\nfor(var i=0;i<_47.tools.length;i++){\nvar t=$(\"<a href=\\\"javascript:void(0)\\\"></a>\").appendTo(_4a);\nt.addClass(_47.tools[i].iconCls);\nif(_47.tools[i].handler){\nt.bind(\"click\",{handler:_47.tools[i].handler},function(e){\nif($(this).parents(\"li\").hasClass(\"tabs-disabled\")){\nreturn;\n}\ne.data.handler.call(this);\n});\n}\n}\n}else{\n$(_47.tools).children().appendTo(_4a);\n}\nvar pr=_4a.children().length*12;\nif(_47.closable){\npr+=8;\n}else{\npr-=3;\n_4a.css(\"right\",\"5px\");\n}\n_48.css(\"padding-right\",pr+\"px\");\n}\n}\n_12(_43);\n$.data(_43,\"tabs\").options.onUpdate.call(_43,_47.title,_4b(_43,pp));\n};\nfunction _4c(_4d,_4e){\nvar _4f=$.data(_4d,\"tabs\").options;\nvar _50=$.data(_4d,\"tabs\").tabs;\nvar _51=$.data(_4d,\"tabs\").selectHis;\nif(!_52(_4d,_4e)){\nreturn;\n}\nvar tab=_53(_4d,_4e);\nvar _54=tab.panel(\"options\").title;\nvar _55=_4b(_4d,tab);\nif(_4f.onBeforeClose.call(_4d,_54,_55)==false){\nreturn;\n}\nvar tab=_53(_4d,_4e,true);\ntab.panel(\"options\").tab.remove();\ntab.panel(\"destroy\");\n_4f.onClose.call(_4d,_54,_55);\n_12(_4d);\nfor(var i=0;i<_51.length;i++){\nif(_51[i]==_54){\n_51.splice(i,1);\ni--;\n}\n}\nvar _56=_51.pop();\nif(_56){\n_41(_4d,_56);\n}else{\nif(_50.length){\n_41(_4d,0);\n}\n}\n};\nfunction _53(_57,_58,_59){\nvar _5a=$.data(_57,\"tabs\").tabs;\nif(typeof _58==\"number\"){\nif(_58<0||_58>=_5a.length){\nreturn null;\n}else{\nvar tab=_5a[_58];\nif(_59){\n_5a.splice(_58,1);\n}\nreturn tab;\n}\n}\nfor(var i=0;i<_5a.length;i++){\nvar tab=_5a[i];\nif(tab.panel(\"options\").title==_58){\nif(_59){\n_5a.splice(i,1);\n}\nreturn tab;\n}\n}\nreturn null;\n};\nfunction _4b(_5b,tab){\nvar _5c=$.data(_5b,\"tabs\").tabs;\nfor(var i=0;i<_5c.length;i++){\nif(_5c[i][0]==$(tab)[0]){\nreturn i;\n}\n}\nreturn -1;\n};\nfunction _1f(_5d){\nvar _5e=$.data(_5d,\"tabs\").tabs;\nfor(var i=0;i<_5e.length;i++){\nvar tab=_5e[i];\nif(tab.panel(\"options\").closed==false){\nreturn tab;\n}\n}\nreturn null;\n};\nfunction _5f(_60){\nvar _61=$.data(_60,\"tabs\");\nvar _62=_61.tabs;\nfor(var i=0;i<_62.length;i++){\nif(_62[i].panel(\"options\").selected){\n_41(_60,i);\nreturn;\n}\n}\n_41(_60,_61.options.selected);\n};\nfunction _41(_63,_64){\nvar _65=$.data(_63,\"tabs\");\nvar _66=_65.options;\nvar _67=_65.tabs;\nvar _68=_65.selectHis;\nif(_67.length==0){\nreturn;\n}\nvar _69=_53(_63,_64);\nif(!_69){\nreturn;\n}\nvar _6a=_1f(_63);\nif(_6a){\nif(_69[0]==_6a[0]){\n_1c(_63);\nreturn;\n}\n_6b(_63,_4b(_63,_6a));\nif(!_6a.panel(\"options\").closed){\nreturn;\n}\n}\n_69.panel(\"open\");\nvar _6c=_69.panel(\"options\").title;\n_68.push(_6c);\nvar tab=_69.panel(\"options\").tab;\ntab.addClass(\"tabs-selected\");\nvar _6d=$(_63).find(\">div.tabs-header>div.tabs-wrap\");\nvar _6e=tab.position().left;\nvar _6f=_6e+tab.outerWidth();\nif(_6e<0||_6f>_6d.width()){\nvar _70=_6e-(_6d.width()-tab.width())/2;\n$(_63).tabs(\"scrollBy\",_70);\n}else{\n$(_63).tabs(\"scrollBy\",0);\n}\n_1c(_63);\n_66.onSelect.call(_63,_6c,_4b(_63,_69));\n};\nfunction _6b(_71,_72){\nvar _73=$.data(_71,\"tabs\");\nvar p=_53(_71,_72);\nif(p){\nvar _74=p.panel(\"options\");\nif(!_74.closed){\np.panel(\"close\");\nif(_74.closed){\n_74.tab.removeClass(\"tabs-selected\");\n_73.options.onUnselect.call(_71,_74.title,_4b(_71,p));\n}\n}\n}\n};\nfunction _52(_75,_76){\nreturn _53(_75,_76)!=null;\n};\nfunction _77(_78,_79){\nvar _7a=$.data(_78,\"tabs\").options;\n_7a.showHeader=_79;\n$(_78).tabs(\"resize\");\n};\n$.fn.tabs=function(_7b,_7c){\nif(typeof _7b==\"string\"){\nreturn $.fn.tabs.methods[_7b](this,_7c);\n}\n_7b=_7b||{};\nreturn this.each(function(){\nvar _7d=$.data(this,\"tabs\");\nif(_7d){\n$.extend(_7d.options,_7b);\n}else{\n$.data(this,\"tabs\",{options:$.extend({},$.fn.tabs.defaults,$.fn.tabs.parseOptions(this),_7b),tabs:[],selectHis:[]});\n_23(this);\n}\n_c(this);\n_30(this);\n_12(this);\n_28(this);\n_5f(this);\n});\n};\n$.fn.tabs.methods={options:function(jq){\nvar cc=jq[0];\nvar _7e=$.data(cc,\"tabs\").options;\nvar s=_1f(cc);\n_7e.selected=s?_4b(cc,s):-1;\nreturn _7e;\n},tabs:function(jq){\nreturn $.data(jq[0],\"tabs\").tabs;\n},resize:function(jq,_7f){\nreturn jq.each(function(){\n_12(this,_7f);\n_1c(this);\n});\n},add:function(jq,_80){\nreturn jq.each(function(){\n_3b(this,_80);\n});\n},close:function(jq,_81){\nreturn jq.each(function(){\n_4c(this,_81);\n});\n},getTab:function(jq,_82){\nreturn _53(jq[0],_82);\n},getTabIndex:function(jq,tab){\nreturn _4b(jq[0],tab);\n},getSelected:function(jq){\nreturn _1f(jq[0]);\n},select:function(jq,_83){\nreturn jq.each(function(){\n_41(this,_83);\n});\n},unselect:function(jq,_84){\nreturn jq.each(function(){\n_6b(this,_84);\n});\n},exists:function(jq,_85){\nreturn _52(jq[0],_85);\n},update:function(jq,_86){\nreturn jq.each(function(){\n_42(this,_86);\n});\n},enableTab:function(jq,_87){\nreturn jq.each(function(){\n$(this).tabs(\"getTab\",_87).panel(\"options\").tab.removeClass(\"tabs-disabled\");\n});\n},disableTab:function(jq,_88){\nreturn jq.each(function(){\n$(this).tabs(\"getTab\",_88).panel(\"options\").tab.addClass(\"tabs-disabled\");\n});\n},showHeader:function(jq){\nreturn jq.each(function(){\n_77(this,true);\n});\n},hideHeader:function(jq){\nreturn jq.each(function(){\n_77(this,false);\n});\n},scrollBy:function(jq,_89){\nreturn jq.each(function(){\nvar _8a=$(this).tabs(\"options\");\nvar _8b=$(this).find(\">div.tabs-header>div.tabs-wrap\");\nvar pos=Math.min(_8b._scrollLeft()+_89,_8c());\n_8b.animate({scrollLeft:pos},_8a.scrollDuration);\nfunction _8c(){\nvar w=0;\nvar ul=_8b.children(\"ul\");\nul.children(\"li\").each(function(){\nw+=$(this).outerWidth(true);\n});\nreturn w-_8b.width()+(ul.outerWidth()-ul.width());\n};\n});\n}};\n$.fn.tabs.parseOptions=function(_8d){\nreturn $.extend({},$.parser.parseOptions(_8d,[\"tools\",\"toolPosition\",\"tabPosition\",{fit:\"boolean\",border:\"boolean\",plain:\"boolean\",headerWidth:\"number\",tabWidth:\"number\",tabHeight:\"number\",selected:\"number\",showHeader:\"boolean\"}]));\n};\n$.fn.tabs.defaults={width:\"auto\",height:\"auto\",headerWidth:150,tabWidth:\"auto\",tabHeight:27,selected:0,showHeader:true,plain:false,fit:false,border:true,tools:null,toolPosition:\"right\",tabPosition:\"top\",scrollIncrement:100,scrollDuration:400,onLoad:function(_8e){\n},onSelect:function(_8f,_90){\n},onUnselect:function(_91,_92){\n},onBeforeClose:function(_93,_94){\n},onClose:function(_95,_96){\n},onAdd:function(_97,_98){\n},onUpdate:function(_99,_9a){\n},onContextMenu:function(e,_9b,_9c){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.textbox.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"textbox-f\").hide();\nvar _3=$(\"<span class=\\\"textbox\\\">\"+\"<input class=\\\"textbox-text\\\" autocomplete=\\\"off\\\">\"+\"<input type=\\\"hidden\\\" class=\\\"textbox-value\\\">\"+\"</span>\").insertAfter(_2);\nvar _4=$(_2).attr(\"name\");\nif(_4){\n_3.find(\"input.textbox-value\").attr(\"name\",_4);\n$(_2).removeAttr(\"name\").attr(\"textboxName\",_4);\n}\nreturn _3;\n};\nfunction _5(_6){\nvar _7=$.data(_6,\"textbox\");\nvar _8=_7.options;\nvar tb=_7.textbox;\ntb.find(\".textbox-text\").remove();\nif(_8.multiline){\n$(\"<textarea class=\\\"textbox-text\\\" autocomplete=\\\"off\\\"></textarea>\").prependTo(tb);\n}else{\n$(\"<input type=\\\"\"+_8.type+\"\\\" class=\\\"textbox-text\\\" autocomplete=\\\"off\\\">\").prependTo(tb);\n}\ntb.find(\".textbox-addon\").remove();\nvar bb=_8.icons?$.extend(true,[],_8.icons):[];\nif(_8.iconCls){\nbb.push({iconCls:_8.iconCls,disabled:true});\n}\nif(bb.length){\nvar bc=$(\"<span class=\\\"textbox-addon\\\"></span>\").prependTo(tb);\nbc.addClass(\"textbox-addon-\"+_8.iconAlign);\nfor(var i=0;i<bb.length;i++){\nbc.append(\"<a href=\\\"javascript:void(0)\\\" class=\\\"textbox-icon \"+bb[i].iconCls+\"\\\" icon-index=\\\"\"+i+\"\\\" tabindex=\\\"-1\\\"></a>\");\n}\n}\ntb.find(\".textbox-button\").remove();\nif(_8.buttonText||_8.buttonIcon){\nvar _9=$(\"<a href=\\\"javascript:void(0)\\\" class=\\\"textbox-button\\\"></a>\").prependTo(tb);\n_9.addClass(\"textbox-button-\"+_8.buttonAlign).linkbutton({text:_8.buttonText,iconCls:_8.buttonIcon});\n}\n_a(_6,_8.disabled);\n_b(_6,_8.readonly);\n};\nfunction _c(_d){\nvar tb=$.data(_d,\"textbox\").textbox;\ntb.find(\".textbox-text\").validatebox(\"destroy\");\ntb.remove();\n$(_d).remove();\n};\nfunction _e(_f,_10){\nvar _11=$.data(_f,\"textbox\");\nvar _12=_11.options;\nvar tb=_11.textbox;\nvar _13=tb.parent();\nif(_10){\n_12.width=_10;\n}\nif(isNaN(parseInt(_12.width))){\nvar c=$(_f).clone();\nc.css(\"visibility\",\"hidden\");\nc.insertAfter(_f);\n_12.width=c.outerWidth();\nc.remove();\n}\ntb.appendTo(\"body\");\nvar _14=tb.find(\".textbox-text\");\nvar btn=tb.find(\".textbox-button\");\nvar _15=tb.find(\".textbox-addon\");\nvar _16=_15.find(\".textbox-icon\");\ntb._size(_12,_13);\nbtn.linkbutton(\"resize\",{height:tb.height()});\nbtn.css({left:(_12.buttonAlign==\"left\"?0:\"\"),right:(_12.buttonAlign==\"right\"?0:\"\")});\n_15.css({left:(_12.iconAlign==\"left\"?(_12.buttonAlign==\"left\"?btn._outerWidth():0):\"\"),right:(_12.iconAlign==\"right\"?(_12.buttonAlign==\"right\"?btn._outerWidth():0):\"\")});\n_16.css({width:_12.iconWidth+\"px\",height:tb.height()+\"px\"});\n_14.css({paddingLeft:(_f.style.paddingLeft||\"\"),paddingRight:(_f.style.paddingRight||\"\"),marginLeft:_17(\"left\"),marginRight:_17(\"right\")});\nif(_12.multiline){\n_14.css({paddingTop:(_f.style.paddingTop||\"\"),paddingBottom:(_f.style.paddingBottom||\"\")});\n_14._outerHeight(tb.height());\n}else{\nvar _18=Math.floor((tb.height()-_14.height())/2);\n_14.css({paddingTop:_18+\"px\",paddingBottom:_18+\"px\"});\n}\n_14._outerWidth(tb.width()-_16.length*_12.iconWidth-btn._outerWidth());\ntb.insertAfter(_f);\n_12.onResize.call(_f,_12.width,_12.height);\nfunction _17(_19){\nreturn (_12.iconAlign==_19?_15._outerWidth():0)+(_12.buttonAlign==_19?btn._outerWidth():0);\n};\n};\nfunction _1a(_1b){\nvar _1c=$(_1b).textbox(\"options\");\nvar _1d=$(_1b).textbox(\"textbox\");\n_1d.validatebox($.extend({},_1c,{deltaX:$(_1b).textbox(\"getTipX\"),onBeforeValidate:function(){\nvar box=$(this);\nif(!box.is(\":focus\")){\n_1c.oldInputValue=box.val();\nbox.val(_1c.value);\n}\n},onValidate:function(_1e){\nvar box=$(this);\nif(_1c.oldInputValue!=undefined){\nbox.val(_1c.oldInputValue);\n_1c.oldInputValue=undefined;\n}\nvar tb=box.parent();\nif(_1e){\ntb.removeClass(\"textbox-invalid\");\n}else{\ntb.addClass(\"textbox-invalid\");\n}\n}}));\n};\nfunction _1f(_20){\nvar _21=$.data(_20,\"textbox\");\nvar _22=_21.options;\nvar tb=_21.textbox;\nvar _23=tb.find(\".textbox-text\");\n_23.attr(\"placeholder\",_22.prompt);\n_23.unbind(\".textbox\");\nif(!_22.disabled&&!_22.readonly){\n_23.bind(\"blur.textbox\",function(e){\nif(!tb.hasClass(\"textbox-focused\")){\nreturn;\n}\n_22.value=$(this).val();\nif(_22.value==\"\"){\n$(this).val(_22.prompt).addClass(\"textbox-prompt\");\n}else{\n$(this).removeClass(\"textbox-prompt\");\n}\ntb.removeClass(\"textbox-focused\");\n}).bind(\"focus.textbox\",function(e){\nif(tb.hasClass(\"textbox-focused\")){\nreturn;\n}\nif($(this).val()!=_22.value){\n$(this).val(_22.value);\n}\n$(this).removeClass(\"textbox-prompt\");\ntb.addClass(\"textbox-focused\");\n});\nfor(var _24 in _22.inputEvents){\n_23.bind(_24+\".textbox\",{target:_20},_22.inputEvents[_24]);\n}\n}\nvar _25=tb.find(\".textbox-addon\");\n_25.unbind().bind(\"click\",{target:_20},function(e){\nvar _26=$(e.target).closest(\"a.textbox-icon:not(.textbox-icon-disabled)\");\nif(_26.length){\nvar _27=parseInt(_26.attr(\"icon-index\"));\nvar _28=_22.icons[_27];\nif(_28&&_28.handler){\n_28.handler.call(_26[0],e);\n_22.onClickIcon.call(_20,_27);\n}\n}\n});\n_25.find(\".textbox-icon\").each(function(_29){\nvar _2a=_22.icons[_29];\nvar _2b=$(this);\nif(!_2a||_2a.disabled||_22.disabled||_22.readonly){\n_2b.addClass(\"textbox-icon-disabled\");\n}else{\n_2b.removeClass(\"textbox-icon-disabled\");\n}\n});\nvar btn=tb.find(\".textbox-button\");\nbtn.unbind(\".textbox\").bind(\"click.textbox\",function(){\nif(!btn.linkbutton(\"options\").disabled){\n_22.onClickButton.call(_20);\n}\n});\nbtn.linkbutton((_22.disabled||_22.readonly)?\"disable\":\"enable\");\ntb.unbind(\".textbox\").bind(\"_resize.textbox\",function(e,_2c){\nif($(this).hasClass(\"easyui-fluid\")||_2c){\n_e(_20);\n}\nreturn false;\n});\n};\nfunction _a(_2d,_2e){\nvar _2f=$.data(_2d,\"textbox\");\nvar _30=_2f.options;\nvar tb=_2f.textbox;\nif(_2e){\n_30.disabled=true;\n$(_2d).attr(\"disabled\",\"disabled\");\ntb.find(\".textbox-text,.textbox-value\").attr(\"disabled\",\"disabled\");\n}else{\n_30.disabled=false;\n$(_2d).removeAttr(\"disabled\");\ntb.find(\".textbox-text,.textbox-value\").removeAttr(\"disabled\");\n}\n};\nfunction _b(_31,_32){\nvar _33=$.data(_31,\"textbox\");\nvar _34=_33.options;\n_34.readonly=_32==undefined?true:_32;\nvar _35=_33.textbox.find(\".textbox-text\");\n_35.removeAttr(\"readonly\").removeClass(\"textbox-text-readonly\");\nif(_34.readonly||!_34.editable){\n_35.attr(\"readonly\",\"readonly\").addClass(\"textbox-text-readonly\");\n}\n};\n$.fn.textbox=function(_36,_37){\nif(typeof _36==\"string\"){\nvar _38=$.fn.textbox.methods[_36];\nif(_38){\nreturn _38(this,_37);\n}else{\nreturn this.each(function(){\nvar _39=$(this).textbox(\"textbox\");\n_39.validatebox(_36,_37);\n});\n}\n}\n_36=_36||{};\nreturn this.each(function(){\nvar _3a=$.data(this,\"textbox\");\nif(_3a){\n$.extend(_3a.options,_36);\nif(_36.value!=undefined){\n_3a.options.originalValue=_36.value;\n}\n}else{\n_3a=$.data(this,\"textbox\",{options:$.extend({},$.fn.textbox.defaults,$.fn.textbox.parseOptions(this),_36),textbox:_1(this)});\n_3a.options.originalValue=_3a.options.value;\n}\n_5(this);\n_1f(this);\n_e(this);\n_1a(this);\n$(this).textbox(\"initValue\",_3a.options.value);\n});\n};\n$.fn.textbox.methods={options:function(jq){\nreturn $.data(jq[0],\"textbox\").options;\n},cloneFrom:function(jq,_3b){\nreturn jq.each(function(){\nvar t=$(this);\nif(t.data(\"textbox\")){\nreturn;\n}\nif(!$(_3b).data(\"textbox\")){\n$(_3b).textbox();\n}\nvar _3c=t.attr(\"name\")||\"\";\nt.addClass(\"textbox-f\").hide();\nt.removeAttr(\"name\").attr(\"textboxName\",_3c);\nvar _3d=$(_3b).next().clone().insertAfter(t);\n_3d.find(\"input.textbox-value\").attr(\"name\",_3c);\n$.data(this,\"textbox\",{options:$.extend(true,{},$(_3b).textbox(\"options\")),textbox:_3d});\nvar _3e=$(_3b).textbox(\"button\");\nif(_3e.length){\nt.textbox(\"button\").linkbutton($.extend(true,{},_3e.linkbutton(\"options\")));\n}\n_1f(this);\n_1a(this);\n});\n},textbox:function(jq){\nreturn $.data(jq[0],\"textbox\").textbox.find(\".textbox-text\");\n},button:function(jq){\nreturn $.data(jq[0],\"textbox\").textbox.find(\".textbox-button\");\n},destroy:function(jq){\nreturn jq.each(function(){\n_c(this);\n});\n},resize:function(jq,_3f){\nreturn jq.each(function(){\n_e(this,_3f);\n});\n},disable:function(jq){\nreturn jq.each(function(){\n_a(this,true);\n_1f(this);\n});\n},enable:function(jq){\nreturn jq.each(function(){\n_a(this,false);\n_1f(this);\n});\n},readonly:function(jq,_40){\nreturn jq.each(function(){\n_b(this,_40);\n_1f(this);\n});\n},isValid:function(jq){\nreturn jq.textbox(\"textbox\").validatebox(\"isValid\");\n},clear:function(jq){\nreturn jq.each(function(){\n$(this).textbox(\"setValue\",\"\");\n});\n},setText:function(jq,_41){\nreturn jq.each(function(){\nvar _42=$(this).textbox(\"options\");\nvar _43=$(this).textbox(\"textbox\");\nif($(this).textbox(\"getText\")!=_41){\n_42.value=_41;\n_43.val(_41);\n}\nif(!_43.is(\":focus\")){\nif(_41){\n_43.removeClass(\"textbox-prompt\");\n}else{\n_43.val(_42.prompt).addClass(\"textbox-prompt\");\n}\n}\n$(this).textbox(\"validate\");\n});\n},initValue:function(jq,_44){\nreturn jq.each(function(){\nvar _45=$.data(this,\"textbox\");\n_45.options.value=\"\";\n$(this).textbox(\"setText\",_44);\n_45.textbox.find(\".textbox-value\").val(_44);\n$(this).val(_44);\n});\n},setValue:function(jq,_46){\nreturn jq.each(function(){\nvar _47=$.data(this,\"textbox\").options;\nvar _48=$(this).textbox(\"getValue\");\n$(this).textbox(\"initValue\",_46);\nif(_48!=_46){\n_47.onChange.call(this,_46,_48);\n}\n});\n},getText:function(jq){\nvar _49=jq.textbox(\"textbox\");\nif(_49.is(\":focus\")){\nreturn _49.val();\n}else{\nreturn jq.textbox(\"options\").value;\n}\n},getValue:function(jq){\nreturn jq.data(\"textbox\").textbox.find(\".textbox-value\").val();\n},reset:function(jq){\nreturn jq.each(function(){\nvar _4a=$(this).textbox(\"options\");\n$(this).textbox(\"setValue\",_4a.originalValue);\n});\n},getIcon:function(jq,_4b){\nreturn jq.data(\"textbox\").textbox.find(\".textbox-icon:eq(\"+_4b+\")\");\n},getTipX:function(jq){\nvar _4c=jq.data(\"textbox\");\nvar _4d=_4c.options;\nvar tb=_4c.textbox;\nvar _4e=tb.find(\".textbox-text\");\nvar _4f=tb.find(\".textbox-addon\")._outerWidth();\nvar _50=tb.find(\".textbox-button\")._outerWidth();\nif(_4d.tipPosition==\"right\"){\nreturn (_4d.iconAlign==\"right\"?_4f:0)+(_4d.buttonAlign==\"right\"?_50:0)+1;\n}else{\nif(_4d.tipPosition==\"left\"){\nreturn (_4d.iconAlign==\"left\"?-_4f:0)+(_4d.buttonAlign==\"left\"?-_50:0)-1;\n}else{\nreturn _4f/2*(_4d.iconAlign==\"right\"?1:-1);\n}\n}\n}};\n$.fn.textbox.parseOptions=function(_51){\nvar t=$(_51);\nreturn $.extend({},$.fn.validatebox.parseOptions(_51),$.parser.parseOptions(_51,[\"prompt\",\"iconCls\",\"iconAlign\",\"buttonText\",\"buttonIcon\",\"buttonAlign\",{multiline:\"boolean\",editable:\"boolean\",iconWidth:\"number\"}]),{value:(t.val()||undefined),type:(t.attr(\"type\")?t.attr(\"type\"):undefined),disabled:(t.attr(\"disabled\")?true:undefined),readonly:(t.attr(\"readonly\")?true:undefined)});\n};\n$.fn.textbox.defaults=$.extend({},$.fn.validatebox.defaults,{width:\"auto\",height:22,prompt:\"\",value:\"\",type:\"text\",multiline:false,editable:true,disabled:false,readonly:false,icons:[],iconCls:null,iconAlign:\"right\",iconWidth:18,buttonText:\"\",buttonIcon:null,buttonAlign:\"right\",inputEvents:{blur:function(e){\nvar t=$(e.data.target);\nvar _52=t.textbox(\"options\");\nt.textbox(\"setValue\",_52.value);\n},keydown:function(e){\nif(e.keyCode==13){\nvar t=$(e.data.target);\nt.textbox(\"setValue\",t.textbox(\"getText\"));\n}\n}},onChange:function(_53,_54){\n},onResize:function(_55,_56){\n},onClickButton:function(){\n},onClickIcon:function(_57){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.timespinner.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=0;\nif(_2.selectionStart){\n_3=_2.selectionStart;\n}else{\nif(_2.createTextRange){\nvar _4=_2.createTextRange();\nvar s=document.selection.createRange();\ns.setEndPoint(\"StartToStart\",_4);\n_3=s.text.length;\n}\n}\nreturn _3;\n};\nfunction _5(_6,_7,_8){\nif(_6.selectionStart){\n_6.setSelectionRange(_7,_8);\n}else{\nif(_6.createTextRange){\nvar _9=_6.createTextRange();\n_9.collapse();\n_9.moveEnd(\"character\",_8);\n_9.moveStart(\"character\",_7);\n_9.select();\n}\n}\n};\nfunction _a(_b){\nvar _c=$.data(_b,\"timespinner\").options;\n$(_b).addClass(\"timespinner-f\").spinner(_c);\nvar _d=_c.formatter.call(_b,_c.parser.call(_b,_c.value));\n$(_b).timespinner(\"initValue\",_d);\n};\nfunction _e(e){\nvar _f=e.data.target;\nvar _10=$.data(_f,\"timespinner\").options;\nvar _11=_1(this);\nfor(var i=0;i<_10.selections.length;i++){\nvar _12=_10.selections[i];\nif(_11>=_12[0]&&_11<=_12[1]){\n_13(_f,i);\nreturn;\n}\n}\n};\nfunction _13(_14,_15){\nvar _16=$.data(_14,\"timespinner\").options;\nif(_15!=undefined){\n_16.highlight=_15;\n}\nvar _17=_16.selections[_16.highlight];\nif(_17){\nvar tb=$(_14).timespinner(\"textbox\");\n_5(tb[0],_17[0],_17[1]);\ntb.focus();\n}\n};\nfunction _18(_19,_1a){\nvar _1b=$.data(_19,\"timespinner\").options;\nvar _1a=_1b.parser.call(_19,_1a);\nvar _1c=_1b.formatter.call(_19,_1a);\n$(_19).spinner(\"setValue\",_1c);\n};\nfunction _1d(_1e,_1f){\nvar _20=$.data(_1e,\"timespinner\").options;\nvar s=$(_1e).timespinner(\"getValue\");\nvar _21=_20.selections[_20.highlight];\nvar s1=s.substring(0,_21[0]);\nvar s2=s.substring(_21[0],_21[1]);\nvar s3=s.substring(_21[1]);\nvar v=s1+((parseInt(s2)||0)+_20.increment*(_1f?-1:1))+s3;\n$(_1e).timespinner(\"setValue\",v);\n_13(_1e);\n};\n$.fn.timespinner=function(_22,_23){\nif(typeof _22==\"string\"){\nvar _24=$.fn.timespinner.methods[_22];\nif(_24){\nreturn _24(this,_23);\n}else{\nreturn this.spinner(_22,_23);\n}\n}\n_22=_22||{};\nreturn this.each(function(){\nvar _25=$.data(this,\"timespinner\");\nif(_25){\n$.extend(_25.options,_22);\n}else{\n$.data(this,\"timespinner\",{options:$.extend({},$.fn.timespinner.defaults,$.fn.timespinner.parseOptions(this),_22)});\n}\n_a(this);\n});\n};\n$.fn.timespinner.methods={options:function(jq){\nvar _26=jq.data(\"spinner\")?jq.spinner(\"options\"):{};\nreturn $.extend($.data(jq[0],\"timespinner\").options,{width:_26.width,value:_26.value,originalValue:_26.originalValue,disabled:_26.disabled,readonly:_26.readonly});\n},setValue:function(jq,_27){\nreturn jq.each(function(){\n_18(this,_27);\n});\n},getHours:function(jq){\nvar _28=$.data(jq[0],\"timespinner\").options;\nvar vv=jq.timespinner(\"getValue\").split(_28.separator);\nreturn parseInt(vv[0],10);\n},getMinutes:function(jq){\nvar _29=$.data(jq[0],\"timespinner\").options;\nvar vv=jq.timespinner(\"getValue\").split(_29.separator);\nreturn parseInt(vv[1],10);\n},getSeconds:function(jq){\nvar _2a=$.data(jq[0],\"timespinner\").options;\nvar vv=jq.timespinner(\"getValue\").split(_2a.separator);\nreturn parseInt(vv[2],10)||0;\n}};\n$.fn.timespinner.parseOptions=function(_2b){\nreturn $.extend({},$.fn.spinner.parseOptions(_2b),$.parser.parseOptions(_2b,[\"separator\",{showSeconds:\"boolean\",highlight:\"number\"}]));\n};\n$.fn.timespinner.defaults=$.extend({},$.fn.spinner.defaults,{inputEvents:$.extend({},$.fn.spinner.defaults.inputEvents,{click:function(e){\n_e.call(this,e);\n},blur:function(e){\nvar t=$(e.data.target);\nt.timespinner(\"setValue\",t.timespinner(\"getText\"));\n},keydown:function(e){\nif(e.keyCode==13){\nvar t=$(e.data.target);\nt.timespinner(\"setValue\",t.timespinner(\"getText\"));\n}\n}}),formatter:function(_2c){\nif(!_2c){\nreturn \"\";\n}\nvar _2d=$(this).timespinner(\"options\");\nvar tt=[_2e(_2c.getHours()),_2e(_2c.getMinutes())];\nif(_2d.showSeconds){\ntt.push(_2e(_2c.getSeconds()));\n}\nreturn tt.join(_2d.separator);\nfunction _2e(_2f){\nreturn (_2f<10?\"0\":\"\")+_2f;\n};\n},parser:function(s){\nvar _30=$(this).timespinner(\"options\");\nvar _31=_32(s);\nif(_31){\nvar min=_32(_30.min);\nvar max=_32(_30.max);\nif(min&&min>_31){\n_31=min;\n}\nif(max&&max<_31){\n_31=max;\n}\n}\nreturn _31;\nfunction _32(s){\nif(!s){\nreturn null;\n}\nvar tt=s.split(_30.separator);\nreturn new Date(1900,0,0,parseInt(tt[0],10)||0,parseInt(tt[1],10)||0,parseInt(tt[2],10)||0);\n};\nif(!s){\nreturn null;\n}\nvar tt=s.split(_30.separator);\nreturn new Date(1900,0,0,parseInt(tt[0],10)||0,parseInt(tt[1],10)||0,parseInt(tt[2],10)||0);\n},selections:[[0,2],[3,5],[6,8]],separator:\":\",showSeconds:false,highlight:0,spin:function(_33){\n_1d(this,_33);\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.tooltip.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"tooltip-f\");\n};\nfunction _3(_4){\nvar _5=$.data(_4,\"tooltip\").options;\n$(_4).unbind(\".tooltip\").bind(_5.showEvent+\".tooltip\",function(e){\n$(_4).tooltip(\"show\",e);\n}).bind(_5.hideEvent+\".tooltip\",function(e){\n$(_4).tooltip(\"hide\",e);\n}).bind(\"mousemove.tooltip\",function(e){\nif(_5.trackMouse){\n_5.trackMouseX=e.pageX;\n_5.trackMouseY=e.pageY;\n$(_4).tooltip(\"reposition\");\n}\n});\n};\nfunction _6(_7){\nvar _8=$.data(_7,\"tooltip\");\nif(_8.showTimer){\nclearTimeout(_8.showTimer);\n_8.showTimer=null;\n}\nif(_8.hideTimer){\nclearTimeout(_8.hideTimer);\n_8.hideTimer=null;\n}\n};\nfunction _9(_a){\nvar _b=$.data(_a,\"tooltip\");\nif(!_b||!_b.tip){\nreturn;\n}\nvar _c=_b.options;\nvar _d=_b.tip;\nvar _e={left:-100000,top:-100000};\nif($(_a).is(\":visible\")){\n_e=_f(_c.position);\nif(_c.position==\"top\"&&_e.top<0){\n_e=_f(\"bottom\");\n}else{\nif((_c.position==\"bottom\")&&(_e.top+_d._outerHeight()>$(window)._outerHeight()+$(document).scrollTop())){\n_e=_f(\"top\");\n}\n}\nif(_e.left<0){\nif(_c.position==\"left\"){\n_e=_f(\"right\");\n}else{\n$(_a).tooltip(\"arrow\").css(\"left\",_d._outerWidth()/2+_e.left);\n_e.left=0;\n}\n}else{\nif(_e.left+_d._outerWidth()>$(window)._outerWidth()+$(document)._scrollLeft()){\nif(_c.position==\"right\"){\n_e=_f(\"left\");\n}else{\nvar _10=_e.left;\n_e.left=$(window)._outerWidth()+$(document)._scrollLeft()-_d._outerWidth();\n$(_a).tooltip(\"arrow\").css(\"left\",_d._outerWidth()/2-(_e.left-_10));\n}\n}\n}\n}\n_d.css({left:_e.left,top:_e.top,zIndex:(_c.zIndex!=undefined?_c.zIndex:($.fn.window?$.fn.window.defaults.zIndex++:\"\"))});\n_c.onPosition.call(_a,_e.left,_e.top);\nfunction _f(_11){\n_c.position=_11||\"bottom\";\n_d.removeClass(\"tooltip-top tooltip-bottom tooltip-left tooltip-right\").addClass(\"tooltip-\"+_c.position);\nvar _12,top;\nif(_c.trackMouse){\nt=$();\n_12=_c.trackMouseX+_c.deltaX;\ntop=_c.trackMouseY+_c.deltaY;\n}else{\nvar t=$(_a);\n_12=t.offset().left+_c.deltaX;\ntop=t.offset().top+_c.deltaY;\n}\nswitch(_c.position){\ncase \"right\":\n_12+=t._outerWidth()+12+(_c.trackMouse?12:0);\ntop-=(_d._outerHeight()-t._outerHeight())/2;\nbreak;\ncase \"left\":\n_12-=_d._outerWidth()+12+(_c.trackMouse?12:0);\ntop-=(_d._outerHeight()-t._outerHeight())/2;\nbreak;\ncase \"top\":\n_12-=(_d._outerWidth()-t._outerWidth())/2;\ntop-=_d._outerHeight()+12+(_c.trackMouse?12:0);\nbreak;\ncase \"bottom\":\n_12-=(_d._outerWidth()-t._outerWidth())/2;\ntop+=t._outerHeight()+12+(_c.trackMouse?12:0);\nbreak;\n}\nreturn {left:_12,top:top};\n};\n};\nfunction _13(_14,e){\nvar _15=$.data(_14,\"tooltip\");\nvar _16=_15.options;\nvar tip=_15.tip;\nif(!tip){\ntip=$(\"<div tabindex=\\\"-1\\\" class=\\\"tooltip\\\">\"+\"<div class=\\\"tooltip-content\\\"></div>\"+\"<div class=\\\"tooltip-arrow-outer\\\"></div>\"+\"<div class=\\\"tooltip-arrow\\\"></div>\"+\"</div>\").appendTo(\"body\");\n_15.tip=tip;\n_17(_14);\n}\n_6(_14);\n_15.showTimer=setTimeout(function(){\n$(_14).tooltip(\"reposition\");\ntip.show();\n_16.onShow.call(_14,e);\nvar _18=tip.children(\".tooltip-arrow-outer\");\nvar _19=tip.children(\".tooltip-arrow\");\nvar bc=\"border-\"+_16.position+\"-color\";\n_18.add(_19).css({borderTopColor:\"\",borderBottomColor:\"\",borderLeftColor:\"\",borderRightColor:\"\"});\n_18.css(bc,tip.css(bc));\n_19.css(bc,tip.css(\"backgroundColor\"));\n},_16.showDelay);\n};\nfunction _1a(_1b,e){\nvar _1c=$.data(_1b,\"tooltip\");\nif(_1c&&_1c.tip){\n_6(_1b);\n_1c.hideTimer=setTimeout(function(){\n_1c.tip.hide();\n_1c.options.onHide.call(_1b,e);\n},_1c.options.hideDelay);\n}\n};\nfunction _17(_1d,_1e){\nvar _1f=$.data(_1d,\"tooltip\");\nvar _20=_1f.options;\nif(_1e){\n_20.content=_1e;\n}\nif(!_1f.tip){\nreturn;\n}\nvar cc=typeof _20.content==\"function\"?_20.content.call(_1d):_20.content;\n_1f.tip.children(\".tooltip-content\").html(cc);\n_20.onUpdate.call(_1d,cc);\n};\nfunction _21(_22){\nvar _23=$.data(_22,\"tooltip\");\nif(_23){\n_6(_22);\nvar _24=_23.options;\nif(_23.tip){\n_23.tip.remove();\n}\nif(_24._title){\n$(_22).attr(\"title\",_24._title);\n}\n$.removeData(_22,\"tooltip\");\n$(_22).unbind(\".tooltip\").removeClass(\"tooltip-f\");\n_24.onDestroy.call(_22);\n}\n};\n$.fn.tooltip=function(_25,_26){\nif(typeof _25==\"string\"){\nreturn $.fn.tooltip.methods[_25](this,_26);\n}\n_25=_25||{};\nreturn this.each(function(){\nvar _27=$.data(this,\"tooltip\");\nif(_27){\n$.extend(_27.options,_25);\n}else{\n$.data(this,\"tooltip\",{options:$.extend({},$.fn.tooltip.defaults,$.fn.tooltip.parseOptions(this),_25)});\n_1(this);\n}\n_3(this);\n_17(this);\n});\n};\n$.fn.tooltip.methods={options:function(jq){\nreturn $.data(jq[0],\"tooltip\").options;\n},tip:function(jq){\nreturn $.data(jq[0],\"tooltip\").tip;\n},arrow:function(jq){\nreturn jq.tooltip(\"tip\").children(\".tooltip-arrow-outer,.tooltip-arrow\");\n},show:function(jq,e){\nreturn jq.each(function(){\n_13(this,e);\n});\n},hide:function(jq,e){\nreturn jq.each(function(){\n_1a(this,e);\n});\n},update:function(jq,_28){\nreturn jq.each(function(){\n_17(this,_28);\n});\n},reposition:function(jq){\nreturn jq.each(function(){\n_9(this);\n});\n},destroy:function(jq){\nreturn jq.each(function(){\n_21(this);\n});\n}};\n$.fn.tooltip.parseOptions=function(_29){\nvar t=$(_29);\nvar _2a=$.extend({},$.parser.parseOptions(_29,[\"position\",\"showEvent\",\"hideEvent\",\"content\",{trackMouse:\"boolean\",deltaX:\"number\",deltaY:\"number\",showDelay:\"number\",hideDelay:\"number\"}]),{_title:t.attr(\"title\")});\nt.attr(\"title\",\"\");\nif(!_2a.content){\n_2a.content=_2a._title;\n}\nreturn _2a;\n};\n$.fn.tooltip.defaults={position:\"bottom\",content:null,trackMouse:false,deltaX:0,deltaY:0,showEvent:\"mouseenter\",hideEvent:\"mouseleave\",showDelay:200,hideDelay:100,onShow:function(e){\n},onHide:function(e){\n},onUpdate:function(_2b){\n},onPosition:function(_2c,top){\n},onDestroy:function(){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.tree.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$(_2);\n_3.addClass(\"tree\");\nreturn _3;\n};\nfunction _4(_5){\nvar _6=$.data(_5,\"tree\").options;\n$(_5).unbind().bind(\"mouseover\",function(e){\nvar tt=$(e.target);\nvar _7=tt.closest(\"div.tree-node\");\nif(!_7.length){\nreturn;\n}\n_7.addClass(\"tree-node-hover\");\nif(tt.hasClass(\"tree-hit\")){\nif(tt.hasClass(\"tree-expanded\")){\ntt.addClass(\"tree-expanded-hover\");\n}else{\ntt.addClass(\"tree-collapsed-hover\");\n}\n}\ne.stopPropagation();\n}).bind(\"mouseout\",function(e){\nvar tt=$(e.target);\nvar _8=tt.closest(\"div.tree-node\");\nif(!_8.length){\nreturn;\n}\n_8.removeClass(\"tree-node-hover\");\nif(tt.hasClass(\"tree-hit\")){\nif(tt.hasClass(\"tree-expanded\")){\ntt.removeClass(\"tree-expanded-hover\");\n}else{\ntt.removeClass(\"tree-collapsed-hover\");\n}\n}\ne.stopPropagation();\n}).bind(\"click\",function(e){\nvar tt=$(e.target);\nvar _9=tt.closest(\"div.tree-node\");\nif(!_9.length){\nreturn;\n}\nif(tt.hasClass(\"tree-hit\")){\n_81(_5,_9[0]);\nreturn false;\n}else{\nif(tt.hasClass(\"tree-checkbox\")){\n_34(_5,_9[0],!tt.hasClass(\"tree-checkbox1\"));\nreturn false;\n}else{\n_db(_5,_9[0]);\n_6.onClick.call(_5,_c(_5,_9[0]));\n}\n}\ne.stopPropagation();\n}).bind(\"dblclick\",function(e){\nvar _a=$(e.target).closest(\"div.tree-node\");\nif(!_a.length){\nreturn;\n}\n_db(_5,_a[0]);\n_6.onDblClick.call(_5,_c(_5,_a[0]));\ne.stopPropagation();\n}).bind(\"contextmenu\",function(e){\nvar _b=$(e.target).closest(\"div.tree-node\");\nif(!_b.length){\nreturn;\n}\n_6.onContextMenu.call(_5,e,_c(_5,_b[0]));\ne.stopPropagation();\n});\n};\nfunction _d(_e){\nvar _f=$.data(_e,\"tree\").options;\n_f.dnd=false;\nvar _10=$(_e).find(\"div.tree-node\");\n_10.draggable(\"disable\");\n_10.css(\"cursor\",\"pointer\");\n};\nfunction _11(_12){\nvar _13=$.data(_12,\"tree\");\nvar _14=_13.options;\nvar _15=_13.tree;\n_13.disabledNodes=[];\n_14.dnd=true;\n_15.find(\"div.tree-node\").draggable({disabled:false,revert:true,cursor:\"pointer\",proxy:function(_16){\nvar p=$(\"<div class=\\\"tree-node-proxy\\\"></div>\").appendTo(\"body\");\np.html(\"<span class=\\\"tree-dnd-icon tree-dnd-no\\\">&nbsp;</span>\"+$(_16).find(\".tree-title\").html());\np.hide();\nreturn p;\n},deltaX:15,deltaY:15,onBeforeDrag:function(e){\nif(_14.onBeforeDrag.call(_12,_c(_12,this))==false){\nreturn false;\n}\nif($(e.target).hasClass(\"tree-hit\")||$(e.target).hasClass(\"tree-checkbox\")){\nreturn false;\n}\nif(e.which!=1){\nreturn false;\n}\n$(this).next(\"ul\").find(\"div.tree-node\").droppable({accept:\"no-accept\"});\nvar _17=$(this).find(\"span.tree-indent\");\nif(_17.length){\ne.data.offsetWidth-=_17.length*_17.width();\n}\n},onStartDrag:function(){\n$(this).draggable(\"proxy\").css({left:-10000,top:-10000});\n_14.onStartDrag.call(_12,_c(_12,this));\nvar _18=_c(_12,this);\nif(_18.id==undefined){\n_18.id=\"easyui_tree_node_id_temp\";\n_56(_12,_18);\n}\n_13.draggingNodeId=_18.id;\n},onDrag:function(e){\nvar x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY;\nvar d=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));\nif(d>3){\n$(this).draggable(\"proxy\").show();\n}\nthis.pageY=e.pageY;\n},onStopDrag:function(){\n$(this).next(\"ul\").find(\"div.tree-node\").droppable({accept:\"div.tree-node\"});\nfor(var i=0;i<_13.disabledNodes.length;i++){\n$(_13.disabledNodes[i]).droppable(\"enable\");\n}\n_13.disabledNodes=[];\nvar _19=_ce(_12,_13.draggingNodeId);\nif(_19&&_19.id==\"easyui_tree_node_id_temp\"){\n_19.id=\"\";\n_56(_12,_19);\n}\n_14.onStopDrag.call(_12,_19);\n}}).droppable({accept:\"div.tree-node\",onDragEnter:function(e,_1a){\nif(_14.onDragEnter.call(_12,this,_1b(_1a))==false){\n_1c(_1a,false);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n$(this).droppable(\"disable\");\n_13.disabledNodes.push(this);\n}\n},onDragOver:function(e,_1d){\nif($(this).droppable(\"options\").disabled){\nreturn;\n}\nvar _1e=_1d.pageY;\nvar top=$(this).offset().top;\nvar _1f=top+$(this).outerHeight();\n_1c(_1d,true);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\nif(_1e>top+(_1f-top)/2){\nif(_1f-_1e<5){\n$(this).addClass(\"tree-node-bottom\");\n}else{\n$(this).addClass(\"tree-node-append\");\n}\n}else{\nif(_1e-top<5){\n$(this).addClass(\"tree-node-top\");\n}else{\n$(this).addClass(\"tree-node-append\");\n}\n}\nif(_14.onDragOver.call(_12,this,_1b(_1d))==false){\n_1c(_1d,false);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n$(this).droppable(\"disable\");\n_13.disabledNodes.push(this);\n}\n},onDragLeave:function(e,_20){\n_1c(_20,false);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n_14.onDragLeave.call(_12,this,_1b(_20));\n},onDrop:function(e,_21){\nvar _22=this;\nvar _23,_24;\nif($(this).hasClass(\"tree-node-append\")){\n_23=_25;\n_24=\"append\";\n}else{\n_23=_26;\n_24=$(this).hasClass(\"tree-node-top\")?\"top\":\"bottom\";\n}\nif(_14.onBeforeDrop.call(_12,_22,_1b(_21),_24)==false){\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\nreturn;\n}\n_23(_21,_22,_24);\n$(this).removeClass(\"tree-node-append tree-node-top tree-node-bottom\");\n}});\nfunction _1b(_27,pop){\nreturn $(_27).closest(\"ul.tree\").tree(pop?\"pop\":\"getData\",_27);\n};\nfunction _1c(_28,_29){\nvar _2a=$(_28).draggable(\"proxy\").find(\"span.tree-dnd-icon\");\n_2a.removeClass(\"tree-dnd-yes tree-dnd-no\").addClass(_29?\"tree-dnd-yes\":\"tree-dnd-no\");\n};\nfunction _25(_2b,_2c){\nif(_c(_12,_2c).state==\"closed\"){\n_75(_12,_2c,function(){\n_2d();\n});\n}else{\n_2d();\n}\nfunction _2d(){\nvar _2e=_1b(_2b,true);\n$(_12).tree(\"append\",{parent:_2c,data:[_2e]});\n_14.onDrop.call(_12,_2c,_2e,\"append\");\n};\n};\nfunction _26(_2f,_30,_31){\nvar _32={};\nif(_31==\"top\"){\n_32.before=_30;\n}else{\n_32.after=_30;\n}\nvar _33=_1b(_2f,true);\n_32.data=_33;\n$(_12).tree(\"insert\",_32);\n_14.onDrop.call(_12,_30,_33,_31);\n};\n};\nfunction _34(_35,_36,_37){\nvar _38=$.data(_35,\"tree\").options;\nif(!_38.checkbox){\nreturn;\n}\nvar _39=_c(_35,_36);\nif(_38.onBeforeCheck.call(_35,_39,_37)==false){\nreturn;\n}\nvar _3a=$(_36);\nvar ck=_3a.find(\".tree-checkbox\");\nck.removeClass(\"tree-checkbox0 tree-checkbox1 tree-checkbox2\");\nif(_37){\nck.addClass(\"tree-checkbox1\");\n}else{\nck.addClass(\"tree-checkbox0\");\n}\nif(_38.cascadeCheck){\n_3b(_3a);\n_3c(_3a);\n}\n_38.onCheck.call(_35,_39,_37);\nfunction _3c(_3d){\nvar _3e=_3d.next().find(\".tree-checkbox\");\n_3e.removeClass(\"tree-checkbox0 tree-checkbox1 tree-checkbox2\");\nif(_3d.find(\".tree-checkbox\").hasClass(\"tree-checkbox1\")){\n_3e.addClass(\"tree-checkbox1\");\n}else{\n_3e.addClass(\"tree-checkbox0\");\n}\n};\nfunction _3b(_3f){\nvar _40=_8c(_35,_3f[0]);\nif(_40){\nvar ck=$(_40.target).find(\".tree-checkbox\");\nck.removeClass(\"tree-checkbox0 tree-checkbox1 tree-checkbox2\");\nif(_41(_3f)){\nck.addClass(\"tree-checkbox1\");\n}else{\nif(_42(_3f)){\nck.addClass(\"tree-checkbox0\");\n}else{\nck.addClass(\"tree-checkbox2\");\n}\n}\n_3b($(_40.target));\n}\nfunction _41(n){\nvar ck=n.find(\".tree-checkbox\");\nif(ck.hasClass(\"tree-checkbox0\")||ck.hasClass(\"tree-checkbox2\")){\nreturn false;\n}\nvar b=true;\nn.parent().siblings().each(function(){\nif(!$(this).children(\"div.tree-node\").children(\".tree-checkbox\").hasClass(\"tree-checkbox1\")){\nb=false;\n}\n});\nreturn b;\n};\nfunction _42(n){\nvar ck=n.find(\".tree-checkbox\");\nif(ck.hasClass(\"tree-checkbox1\")||ck.hasClass(\"tree-checkbox2\")){\nreturn false;\n}\nvar b=true;\nn.parent().siblings().each(function(){\nif(!$(this).children(\"div.tree-node\").children(\".tree-checkbox\").hasClass(\"tree-checkbox0\")){\nb=false;\n}\n});\nreturn b;\n};\n};\n};\nfunction _43(_44,_45){\nvar _46=$.data(_44,\"tree\").options;\nif(!_46.checkbox){\nreturn;\n}\nvar _47=$(_45);\nif(_48(_44,_45)){\nvar ck=_47.find(\".tree-checkbox\");\nif(ck.length){\nif(ck.hasClass(\"tree-checkbox1\")){\n_34(_44,_45,true);\n}else{\n_34(_44,_45,false);\n}\n}else{\nif(_46.onlyLeafCheck){\n$(\"<span class=\\\"tree-checkbox tree-checkbox0\\\"></span>\").insertBefore(_47.find(\".tree-title\"));\n}\n}\n}else{\nvar ck=_47.find(\".tree-checkbox\");\nif(_46.onlyLeafCheck){\nck.remove();\n}else{\nif(ck.hasClass(\"tree-checkbox1\")){\n_34(_44,_45,true);\n}else{\nif(ck.hasClass(\"tree-checkbox2\")){\nvar _49=true;\nvar _4a=true;\nvar _4b=_4c(_44,_45);\nfor(var i=0;i<_4b.length;i++){\nif(_4b[i].checked){\n_4a=false;\n}else{\n_49=false;\n}\n}\nif(_49){\n_34(_44,_45,true);\n}\nif(_4a){\n_34(_44,_45,false);\n}\n}\n}\n}\n}\n};\nfunction _4d(_4e,ul,_4f,_50){\nvar _51=$.data(_4e,\"tree\");\nvar _52=_51.options;\nvar _53=$(ul).prevAll(\"div.tree-node:first\");\n_4f=_52.loadFilter.call(_4e,_4f,_53[0]);\nvar _54=_55(_4e,\"domId\",_53.attr(\"id\"));\nif(!_50){\n_54?_54.children=_4f:_51.data=_4f;\n$(ul).empty();\n}else{\nif(_54){\n_54.children?_54.children=_54.children.concat(_4f):_54.children=_4f;\n}else{\n_51.data=_51.data.concat(_4f);\n}\n}\n_52.view.render.call(_52.view,_4e,ul,_4f);\nif(_52.dnd){\n_11(_4e);\n}\nif(_54){\n_56(_4e,_54);\n}\nvar _57=[];\nvar _58=[];\nfor(var i=0;i<_4f.length;i++){\nvar _59=_4f[i];\nif(!_59.checked){\n_57.push(_59);\n}\n}\n_5a(_4f,function(_5b){\nif(_5b.checked){\n_58.push(_5b);\n}\n});\nvar _5c=_52.onCheck;\n_52.onCheck=function(){\n};\nif(_57.length){\n_34(_4e,$(\"#\"+_57[0].domId)[0],false);\n}\nfor(var i=0;i<_58.length;i++){\n_34(_4e,$(\"#\"+_58[i].domId)[0],true);\n}\n_52.onCheck=_5c;\nsetTimeout(function(){\n_5d(_4e,_4e);\n},0);\n_52.onLoadSuccess.call(_4e,_54,_4f);\n};\nfunction _5d(_5e,ul,_5f){\nvar _60=$.data(_5e,\"tree\").options;\nif(_60.lines){\n$(_5e).addClass(\"tree-lines\");\n}else{\n$(_5e).removeClass(\"tree-lines\");\nreturn;\n}\nif(!_5f){\n_5f=true;\n$(_5e).find(\"span.tree-indent\").removeClass(\"tree-line tree-join tree-joinbottom\");\n$(_5e).find(\"div.tree-node\").removeClass(\"tree-node-last tree-root-first tree-root-one\");\nvar _61=$(_5e).tree(\"getRoots\");\nif(_61.length>1){\n$(_61[0].target).addClass(\"tree-root-first\");\n}else{\nif(_61.length==1){\n$(_61[0].target).addClass(\"tree-root-one\");\n}\n}\n}\n$(ul).children(\"li\").each(function(){\nvar _62=$(this).children(\"div.tree-node\");\nvar ul=_62.next(\"ul\");\nif(ul.length){\nif($(this).next().length){\n_63(_62);\n}\n_5d(_5e,ul,_5f);\n}else{\n_64(_62);\n}\n});\nvar _65=$(ul).children(\"li:last\").children(\"div.tree-node\").addClass(\"tree-node-last\");\n_65.children(\"span.tree-join\").removeClass(\"tree-join\").addClass(\"tree-joinbottom\");\nfunction _64(_66,_67){\nvar _68=_66.find(\"span.tree-icon\");\n_68.prev(\"span.tree-indent\").addClass(\"tree-join\");\n};\nfunction _63(_69){\nvar _6a=_69.find(\"span.tree-indent, span.tree-hit\").length;\n_69.next().find(\"div.tree-node\").each(function(){\n$(this).children(\"span:eq(\"+(_6a-1)+\")\").addClass(\"tree-line\");\n});\n};\n};\nfunction _6b(_6c,ul,_6d,_6e){\nvar _6f=$.data(_6c,\"tree\").options;\n_6d=$.extend({},_6f.queryParams,_6d||{});\nvar _70=null;\nif(_6c!=ul){\nvar _71=$(ul).prev();\n_70=_c(_6c,_71[0]);\n}\nif(_6f.onBeforeLoad.call(_6c,_70,_6d)==false){\nreturn;\n}\nvar _72=$(ul).prev().children(\"span.tree-folder\");\n_72.addClass(\"tree-loading\");\nvar _73=_6f.loader.call(_6c,_6d,function(_74){\n_72.removeClass(\"tree-loading\");\n_4d(_6c,ul,_74);\nif(_6e){\n_6e();\n}\n},function(){\n_72.removeClass(\"tree-loading\");\n_6f.onLoadError.apply(_6c,arguments);\nif(_6e){\n_6e();\n}\n});\nif(_73==false){\n_72.removeClass(\"tree-loading\");\n}\n};\nfunction _75(_76,_77,_78){\nvar _79=$.data(_76,\"tree\").options;\nvar hit=$(_77).children(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-expanded\")){\nreturn;\n}\nvar _7a=_c(_76,_77);\nif(_79.onBeforeExpand.call(_76,_7a)==false){\nreturn;\n}\nhit.removeClass(\"tree-collapsed tree-collapsed-hover\").addClass(\"tree-expanded\");\nhit.next().addClass(\"tree-folder-open\");\nvar ul=$(_77).next();\nif(ul.length){\nif(_79.animate){\nul.slideDown(\"normal\",function(){\n_7a.state=\"open\";\n_79.onExpand.call(_76,_7a);\nif(_78){\n_78();\n}\n});\n}else{\nul.css(\"display\",\"block\");\n_7a.state=\"open\";\n_79.onExpand.call(_76,_7a);\nif(_78){\n_78();\n}\n}\n}else{\nvar _7b=$(\"<ul style=\\\"display:none\\\"></ul>\").insertAfter(_77);\n_6b(_76,_7b[0],{id:_7a.id},function(){\nif(_7b.is(\":empty\")){\n_7b.remove();\n}\nif(_79.animate){\n_7b.slideDown(\"normal\",function(){\n_7a.state=\"open\";\n_79.onExpand.call(_76,_7a);\nif(_78){\n_78();\n}\n});\n}else{\n_7b.css(\"display\",\"block\");\n_7a.state=\"open\";\n_79.onExpand.call(_76,_7a);\nif(_78){\n_78();\n}\n}\n});\n}\n};\nfunction _7c(_7d,_7e){\nvar _7f=$.data(_7d,\"tree\").options;\nvar hit=$(_7e).children(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-collapsed\")){\nreturn;\n}\nvar _80=_c(_7d,_7e);\nif(_7f.onBeforeCollapse.call(_7d,_80)==false){\nreturn;\n}\nhit.removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\nhit.next().removeClass(\"tree-folder-open\");\nvar ul=$(_7e).next();\nif(_7f.animate){\nul.slideUp(\"normal\",function(){\n_80.state=\"closed\";\n_7f.onCollapse.call(_7d,_80);\n});\n}else{\nul.css(\"display\",\"none\");\n_80.state=\"closed\";\n_7f.onCollapse.call(_7d,_80);\n}\n};\nfunction _81(_82,_83){\nvar hit=$(_83).children(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-expanded\")){\n_7c(_82,_83);\n}else{\n_75(_82,_83);\n}\n};\nfunction _84(_85,_86){\nvar _87=_4c(_85,_86);\nif(_86){\n_87.unshift(_c(_85,_86));\n}\nfor(var i=0;i<_87.length;i++){\n_75(_85,_87[i].target);\n}\n};\nfunction _88(_89,_8a){\nvar _8b=[];\nvar p=_8c(_89,_8a);\nwhile(p){\n_8b.unshift(p);\np=_8c(_89,p.target);\n}\nfor(var i=0;i<_8b.length;i++){\n_75(_89,_8b[i].target);\n}\n};\nfunction _8d(_8e,_8f){\nvar c=$(_8e).parent();\nwhile(c[0].tagName!=\"BODY\"&&c.css(\"overflow-y\")!=\"auto\"){\nc=c.parent();\n}\nvar n=$(_8f);\nvar _90=n.offset().top;\nif(c[0].tagName!=\"BODY\"){\nvar _91=c.offset().top;\nif(_90<_91){\nc.scrollTop(c.scrollTop()+_90-_91);\n}else{\nif(_90+n.outerHeight()>_91+c.outerHeight()-18){\nc.scrollTop(c.scrollTop()+_90+n.outerHeight()-_91-c.outerHeight()+18);\n}\n}\n}else{\nc.scrollTop(_90);\n}\n};\nfunction _92(_93,_94){\nvar _95=_4c(_93,_94);\nif(_94){\n_95.unshift(_c(_93,_94));\n}\nfor(var i=0;i<_95.length;i++){\n_7c(_93,_95[i].target);\n}\n};\nfunction _96(_97,_98){\nvar _99=$(_98.parent);\nvar _9a=_98.data;\nif(!_9a){\nreturn;\n}\n_9a=$.isArray(_9a)?_9a:[_9a];\nif(!_9a.length){\nreturn;\n}\nvar ul;\nif(_99.length==0){\nul=$(_97);\n}else{\nif(_48(_97,_99[0])){\nvar _9b=_99.find(\"span.tree-icon\");\n_9b.removeClass(\"tree-file\").addClass(\"tree-folder tree-folder-open\");\nvar hit=$(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\").insertBefore(_9b);\nif(hit.prev().length){\nhit.prev().remove();\n}\n}\nul=_99.next();\nif(!ul.length){\nul=$(\"<ul></ul>\").insertAfter(_99);\n}\n}\n_4d(_97,ul[0],_9a,true);\n_43(_97,ul.prev());\n};\nfunction _9c(_9d,_9e){\nvar ref=_9e.before||_9e.after;\nvar _9f=_8c(_9d,ref);\nvar _a0=_9e.data;\nif(!_a0){\nreturn;\n}\n_a0=$.isArray(_a0)?_a0:[_a0];\nif(!_a0.length){\nreturn;\n}\n_96(_9d,{parent:(_9f?_9f.target:null),data:_a0});\nvar _a1=_9f?_9f.children:$(_9d).tree(\"getRoots\");\nfor(var i=0;i<_a1.length;i++){\nif(_a1[i].domId==$(ref).attr(\"id\")){\nfor(var j=_a0.length-1;j>=0;j--){\n_a1.splice((_9e.before?i:(i+1)),0,_a0[j]);\n}\n_a1.splice(_a1.length-_a0.length,_a0.length);\nbreak;\n}\n}\nvar li=$();\nfor(var i=0;i<_a0.length;i++){\nli=li.add($(\"#\"+_a0[i].domId).parent());\n}\nif(_9e.before){\nli.insertBefore($(ref).parent());\n}else{\nli.insertAfter($(ref).parent());\n}\n};\nfunction _a2(_a3,_a4){\nvar _a5=del(_a4);\n$(_a4).parent().remove();\nif(_a5){\nif(!_a5.children||!_a5.children.length){\nvar _a6=$(_a5.target);\n_a6.find(\".tree-icon\").removeClass(\"tree-folder\").addClass(\"tree-file\");\n_a6.find(\".tree-hit\").remove();\n$(\"<span class=\\\"tree-indent\\\"></span>\").prependTo(_a6);\n_a6.next().remove();\n}\n_56(_a3,_a5);\n_43(_a3,_a5.target);\n}\n_5d(_a3,_a3);\nfunction del(_a7){\nvar id=$(_a7).attr(\"id\");\nvar _a8=_8c(_a3,_a7);\nvar cc=_a8?_a8.children:$.data(_a3,\"tree\").data;\nfor(var i=0;i<cc.length;i++){\nif(cc[i].domId==id){\ncc.splice(i,1);\nbreak;\n}\n}\nreturn _a8;\n};\n};\nfunction _56(_a9,_aa){\nvar _ab=$.data(_a9,\"tree\").options;\nvar _ac=$(_aa.target);\nvar _ad=_c(_a9,_aa.target);\nvar _ae=_ad.checked;\nif(_ad.iconCls){\n_ac.find(\".tree-icon\").removeClass(_ad.iconCls);\n}\n$.extend(_ad,_aa);\n_ac.find(\".tree-title\").html(_ab.formatter.call(_a9,_ad));\nif(_ad.iconCls){\n_ac.find(\".tree-icon\").addClass(_ad.iconCls);\n}\nif(_ae!=_ad.checked){\n_34(_a9,_aa.target,_ad.checked);\n}\n};\nfunction _af(_b0,_b1){\nif(_b1){\nvar p=_8c(_b0,_b1);\nwhile(p){\n_b1=p.target;\np=_8c(_b0,_b1);\n}\nreturn _c(_b0,_b1);\n}else{\nvar _b2=_b3(_b0);\nreturn _b2.length?_b2[0]:null;\n}\n};\nfunction _b3(_b4){\nvar _b5=$.data(_b4,\"tree\").data;\nfor(var i=0;i<_b5.length;i++){\n_b6(_b5[i]);\n}\nreturn _b5;\n};\nfunction _4c(_b7,_b8){\nvar _b9=[];\nvar n=_c(_b7,_b8);\nvar _ba=n?(n.children||[]):$.data(_b7,\"tree\").data;\n_5a(_ba,function(_bb){\n_b9.push(_b6(_bb));\n});\nreturn _b9;\n};\nfunction _8c(_bc,_bd){\nvar p=$(_bd).closest(\"ul\").prevAll(\"div.tree-node:first\");\nreturn _c(_bc,p[0]);\n};\nfunction _be(_bf,_c0){\n_c0=_c0||\"checked\";\nif(!$.isArray(_c0)){\n_c0=[_c0];\n}\nvar _c1=[];\nfor(var i=0;i<_c0.length;i++){\nvar s=_c0[i];\nif(s==\"checked\"){\n_c1.push(\"span.tree-checkbox1\");\n}else{\nif(s==\"unchecked\"){\n_c1.push(\"span.tree-checkbox0\");\n}else{\nif(s==\"indeterminate\"){\n_c1.push(\"span.tree-checkbox2\");\n}\n}\n}\n}\nvar _c2=[];\n$(_bf).find(_c1.join(\",\")).each(function(){\nvar _c3=$(this).parent();\n_c2.push(_c(_bf,_c3[0]));\n});\nreturn _c2;\n};\nfunction _c4(_c5){\nvar _c6=$(_c5).find(\"div.tree-node-selected\");\nreturn _c6.length?_c(_c5,_c6[0]):null;\n};\nfunction _c7(_c8,_c9){\nvar _ca=_c(_c8,_c9);\nif(_ca&&_ca.children){\n_5a(_ca.children,function(_cb){\n_b6(_cb);\n});\n}\nreturn _ca;\n};\nfunction _c(_cc,_cd){\nreturn _55(_cc,\"domId\",$(_cd).attr(\"id\"));\n};\nfunction _ce(_cf,id){\nreturn _55(_cf,\"id\",id);\n};\nfunction _55(_d0,_d1,_d2){\nvar _d3=$.data(_d0,\"tree\").data;\nvar _d4=null;\n_5a(_d3,function(_d5){\nif(_d5[_d1]==_d2){\n_d4=_b6(_d5);\nreturn false;\n}\n});\nreturn _d4;\n};\nfunction _b6(_d6){\nvar d=$(\"#\"+_d6.domId);\n_d6.target=d[0];\n_d6.checked=d.find(\".tree-checkbox\").hasClass(\"tree-checkbox1\");\nreturn _d6;\n};\nfunction _5a(_d7,_d8){\nvar _d9=[];\nfor(var i=0;i<_d7.length;i++){\n_d9.push(_d7[i]);\n}\nwhile(_d9.length){\nvar _da=_d9.shift();\nif(_d8(_da)==false){\nreturn;\n}\nif(_da.children){\nfor(var i=_da.children.length-1;i>=0;i--){\n_d9.unshift(_da.children[i]);\n}\n}\n}\n};\nfunction _db(_dc,_dd){\nvar _de=$.data(_dc,\"tree\").options;\nvar _df=_c(_dc,_dd);\nif(_de.onBeforeSelect.call(_dc,_df)==false){\nreturn;\n}\n$(_dc).find(\"div.tree-node-selected\").removeClass(\"tree-node-selected\");\n$(_dd).addClass(\"tree-node-selected\");\n_de.onSelect.call(_dc,_df);\n};\nfunction _48(_e0,_e1){\nreturn $(_e1).children(\"span.tree-hit\").length==0;\n};\nfunction _e2(_e3,_e4){\nvar _e5=$.data(_e3,\"tree\").options;\nvar _e6=_c(_e3,_e4);\nif(_e5.onBeforeEdit.call(_e3,_e6)==false){\nreturn;\n}\n$(_e4).css(\"position\",\"relative\");\nvar nt=$(_e4).find(\".tree-title\");\nvar _e7=nt.outerWidth();\nnt.empty();\nvar _e8=$(\"<input class=\\\"tree-editor\\\">\").appendTo(nt);\n_e8.val(_e6.text).focus();\n_e8.width(_e7+20);\n_e8.height(document.compatMode==\"CSS1Compat\"?(18-(_e8.outerHeight()-_e8.height())):18);\n_e8.bind(\"click\",function(e){\nreturn false;\n}).bind(\"mousedown\",function(e){\ne.stopPropagation();\n}).bind(\"mousemove\",function(e){\ne.stopPropagation();\n}).bind(\"keydown\",function(e){\nif(e.keyCode==13){\n_e9(_e3,_e4);\nreturn false;\n}else{\nif(e.keyCode==27){\n_ef(_e3,_e4);\nreturn false;\n}\n}\n}).bind(\"blur\",function(e){\ne.stopPropagation();\n_e9(_e3,_e4);\n});\n};\nfunction _e9(_ea,_eb){\nvar _ec=$.data(_ea,\"tree\").options;\n$(_eb).css(\"position\",\"\");\nvar _ed=$(_eb).find(\"input.tree-editor\");\nvar val=_ed.val();\n_ed.remove();\nvar _ee=_c(_ea,_eb);\n_ee.text=val;\n_56(_ea,_ee);\n_ec.onAfterEdit.call(_ea,_ee);\n};\nfunction _ef(_f0,_f1){\nvar _f2=$.data(_f0,\"tree\").options;\n$(_f1).css(\"position\",\"\");\n$(_f1).find(\"input.tree-editor\").remove();\nvar _f3=_c(_f0,_f1);\n_56(_f0,_f3);\n_f2.onCancelEdit.call(_f0,_f3);\n};\n$.fn.tree=function(_f4,_f5){\nif(typeof _f4==\"string\"){\nreturn $.fn.tree.methods[_f4](this,_f5);\n}\nvar _f4=_f4||{};\nreturn this.each(function(){\nvar _f6=$.data(this,\"tree\");\nvar _f7;\nif(_f6){\n_f7=$.extend(_f6.options,_f4);\n_f6.options=_f7;\n}else{\n_f7=$.extend({},$.fn.tree.defaults,$.fn.tree.parseOptions(this),_f4);\n$.data(this,\"tree\",{options:_f7,tree:_1(this),data:[]});\nvar _f8=$.fn.tree.parseData(this);\nif(_f8.length){\n_4d(this,this,_f8);\n}\n}\n_4(this);\nif(_f7.data){\n_4d(this,this,$.extend(true,[],_f7.data));\n}\n_6b(this,this);\n});\n};\n$.fn.tree.methods={options:function(jq){\nreturn $.data(jq[0],\"tree\").options;\n},loadData:function(jq,_f9){\nreturn jq.each(function(){\n_4d(this,this,_f9);\n});\n},getNode:function(jq,_fa){\nreturn _c(jq[0],_fa);\n},getData:function(jq,_fb){\nreturn _c7(jq[0],_fb);\n},reload:function(jq,_fc){\nreturn jq.each(function(){\nif(_fc){\nvar _fd=$(_fc);\nvar hit=_fd.children(\"span.tree-hit\");\nhit.removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\n_fd.next().remove();\n_75(this,_fc);\n}else{\n$(this).empty();\n_6b(this,this);\n}\n});\n},getRoot:function(jq,_fe){\nreturn _af(jq[0],_fe);\n},getRoots:function(jq){\nreturn _b3(jq[0]);\n},getParent:function(jq,_ff){\nreturn _8c(jq[0],_ff);\n},getChildren:function(jq,_100){\nreturn _4c(jq[0],_100);\n},getChecked:function(jq,_101){\nreturn _be(jq[0],_101);\n},getSelected:function(jq){\nreturn _c4(jq[0]);\n},isLeaf:function(jq,_102){\nreturn _48(jq[0],_102);\n},find:function(jq,id){\nreturn _ce(jq[0],id);\n},select:function(jq,_103){\nreturn jq.each(function(){\n_db(this,_103);\n});\n},check:function(jq,_104){\nreturn jq.each(function(){\n_34(this,_104,true);\n});\n},uncheck:function(jq,_105){\nreturn jq.each(function(){\n_34(this,_105,false);\n});\n},collapse:function(jq,_106){\nreturn jq.each(function(){\n_7c(this,_106);\n});\n},expand:function(jq,_107){\nreturn jq.each(function(){\n_75(this,_107);\n});\n},collapseAll:function(jq,_108){\nreturn jq.each(function(){\n_92(this,_108);\n});\n},expandAll:function(jq,_109){\nreturn jq.each(function(){\n_84(this,_109);\n});\n},expandTo:function(jq,_10a){\nreturn jq.each(function(){\n_88(this,_10a);\n});\n},scrollTo:function(jq,_10b){\nreturn jq.each(function(){\n_8d(this,_10b);\n});\n},toggle:function(jq,_10c){\nreturn jq.each(function(){\n_81(this,_10c);\n});\n},append:function(jq,_10d){\nreturn jq.each(function(){\n_96(this,_10d);\n});\n},insert:function(jq,_10e){\nreturn jq.each(function(){\n_9c(this,_10e);\n});\n},remove:function(jq,_10f){\nreturn jq.each(function(){\n_a2(this,_10f);\n});\n},pop:function(jq,_110){\nvar node=jq.tree(\"getData\",_110);\njq.tree(\"remove\",_110);\nreturn node;\n},update:function(jq,_111){\nreturn jq.each(function(){\n_56(this,_111);\n});\n},enableDnd:function(jq){\nreturn jq.each(function(){\n_11(this);\n});\n},disableDnd:function(jq){\nreturn jq.each(function(){\n_d(this);\n});\n},beginEdit:function(jq,_112){\nreturn jq.each(function(){\n_e2(this,_112);\n});\n},endEdit:function(jq,_113){\nreturn jq.each(function(){\n_e9(this,_113);\n});\n},cancelEdit:function(jq,_114){\nreturn jq.each(function(){\n_ef(this,_114);\n});\n}};\n$.fn.tree.parseOptions=function(_115){\nvar t=$(_115);\nreturn $.extend({},$.parser.parseOptions(_115,[\"url\",\"method\",{checkbox:\"boolean\",cascadeCheck:\"boolean\",onlyLeafCheck:\"boolean\"},{animate:\"boolean\",lines:\"boolean\",dnd:\"boolean\"}]));\n};\n$.fn.tree.parseData=function(_116){\nvar data=[];\n_117(data,$(_116));\nreturn data;\nfunction _117(aa,tree){\ntree.children(\"li\").each(function(){\nvar node=$(this);\nvar item=$.extend({},$.parser.parseOptions(this,[\"id\",\"iconCls\",\"state\"]),{checked:(node.attr(\"checked\")?true:undefined)});\nitem.text=node.children(\"span\").html();\nif(!item.text){\nitem.text=node.html();\n}\nvar _118=node.children(\"ul\");\nif(_118.length){\nitem.children=[];\n_117(item.children,_118);\n}\naa.push(item);\n});\n};\n};\nvar _119=1;\nvar _11a={render:function(_11b,ul,data){\nvar opts=$.data(_11b,\"tree\").options;\nvar _11c=$(ul).prev(\"div.tree-node\").find(\"span.tree-indent, span.tree-hit\").length;\nvar cc=_11d(_11c,data);\n$(ul).append(cc.join(\"\"));\nfunction _11d(_11e,_11f){\nvar cc=[];\nfor(var i=0;i<_11f.length;i++){\nvar item=_11f[i];\nif(item.state!=\"open\"&&item.state!=\"closed\"){\nitem.state=\"open\";\n}\nitem.domId=\"_easyui_tree_\"+_119++;\ncc.push(\"<li>\");\ncc.push(\"<div id=\\\"\"+item.domId+\"\\\" class=\\\"tree-node\\\">\");\nfor(var j=0;j<_11e;j++){\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\n}\nvar _120=false;\nif(item.state==\"closed\"){\ncc.push(\"<span class=\\\"tree-hit tree-collapsed\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder \"+(item.iconCls?item.iconCls:\"\")+\"\\\"></span>\");\n}else{\nif(item.children&&item.children.length){\ncc.push(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder tree-folder-open \"+(item.iconCls?item.iconCls:\"\")+\"\\\"></span>\");\n}else{\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-file \"+(item.iconCls?item.iconCls:\"\")+\"\\\"></span>\");\n_120=true;\n}\n}\nif(opts.checkbox){\nif((!opts.onlyLeafCheck)||_120){\ncc.push(\"<span class=\\\"tree-checkbox tree-checkbox0\\\"></span>\");\n}\n}\ncc.push(\"<span class=\\\"tree-title\\\">\"+opts.formatter.call(_11b,item)+\"</span>\");\ncc.push(\"</div>\");\nif(item.children&&item.children.length){\nvar tmp=_11d(_11e+1,item.children);\ncc.push(\"<ul style=\\\"display:\"+(item.state==\"closed\"?\"none\":\"block\")+\"\\\">\");\ncc=cc.concat(tmp);\ncc.push(\"</ul>\");\n}\ncc.push(\"</li>\");\n}\nreturn cc;\n};\n}};\n$.fn.tree.defaults={url:null,method:\"post\",animate:false,checkbox:false,cascadeCheck:true,onlyLeafCheck:false,lines:false,dnd:false,data:null,queryParams:{},formatter:function(node){\nreturn node.text;\n},loader:function(_121,_122,_123){\nvar opts=$(this).tree(\"options\");\nif(!opts.url){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.url,data:_121,dataType:\"json\",success:function(data){\n_122(data);\n},error:function(){\n_123.apply(this,arguments);\n}});\n},loadFilter:function(data,_124){\nreturn data;\n},view:_11a,onBeforeLoad:function(node,_125){\n},onLoadSuccess:function(node,data){\n},onLoadError:function(){\n},onClick:function(node){\n},onDblClick:function(node){\n},onBeforeExpand:function(node){\n},onExpand:function(node){\n},onBeforeCollapse:function(node){\n},onCollapse:function(node){\n},onBeforeCheck:function(node,_126){\n},onCheck:function(node,_127){\n},onBeforeSelect:function(node){\n},onSelect:function(node){\n},onContextMenu:function(e,node){\n},onBeforeDrag:function(node){\n},onStartDrag:function(node){\n},onStopDrag:function(node){\n},onDragEnter:function(_128,_129){\n},onDragOver:function(_12a,_12b){\n},onDragLeave:function(_12c,_12d){\n},onBeforeDrop:function(_12e,_12f,_130){\n},onDrop:function(_131,_132,_133){\n},onBeforeEdit:function(node){\n},onAfterEdit:function(node){\n},onCancelEdit:function(node){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.treegrid.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\nvar _3=$.data(_2,\"treegrid\");\nvar _4=_3.options;\n$(_2).datagrid($.extend({},_4,{url:null,data:null,loader:function(){\nreturn false;\n},onBeforeLoad:function(){\nreturn false;\n},onLoadSuccess:function(){\n},onResizeColumn:function(_5,_6){\n_26(_2);\n_4.onResizeColumn.call(_2,_5,_6);\n},onBeforeSortColumn:function(_7,_8){\nif(_4.onBeforeSortColumn.call(_2,_7,_8)==false){\nreturn false;\n}\n},onSortColumn:function(_9,_a){\n_4.sortName=_9;\n_4.sortOrder=_a;\nif(_4.remoteSort){\n_25(_2);\n}else{\nvar _b=$(_2).treegrid(\"getData\");\n_3f(_2,0,_b);\n}\n_4.onSortColumn.call(_2,_9,_a);\n},onBeforeEdit:function(_c,_d){\nif(_4.onBeforeEdit.call(_2,_d)==false){\nreturn false;\n}\n},onAfterEdit:function(_e,_f,_10){\n_4.onAfterEdit.call(_2,_f,_10);\n},onCancelEdit:function(_11,row){\n_4.onCancelEdit.call(_2,row);\n},onBeforeSelect:function(_12){\nif(_4.onBeforeSelect.call(_2,_47(_2,_12))==false){\nreturn false;\n}\n},onSelect:function(_13){\n_4.onSelect.call(_2,_47(_2,_13));\n},onBeforeUnselect:function(_14){\nif(_4.onBeforeUnselect.call(_2,_47(_2,_14))==false){\nreturn false;\n}\n},onUnselect:function(_15){\n_4.onUnselect.call(_2,_47(_2,_15));\n},onBeforeCheck:function(_16){\nif(_4.onBeforeCheck.call(_2,_47(_2,_16))==false){\nreturn false;\n}\n},onCheck:function(_17){\n_4.onCheck.call(_2,_47(_2,_17));\n},onBeforeUncheck:function(_18){\nif(_4.onBeforeUncheck.call(_2,_47(_2,_18))==false){\nreturn false;\n}\n},onUncheck:function(_19){\n_4.onUncheck.call(_2,_47(_2,_19));\n},onClickRow:function(_1a){\n_4.onClickRow.call(_2,_47(_2,_1a));\n},onDblClickRow:function(_1b){\n_4.onDblClickRow.call(_2,_47(_2,_1b));\n},onClickCell:function(_1c,_1d){\n_4.onClickCell.call(_2,_1d,_47(_2,_1c));\n},onDblClickCell:function(_1e,_1f){\n_4.onDblClickCell.call(_2,_1f,_47(_2,_1e));\n},onRowContextMenu:function(e,_20){\n_4.onContextMenu.call(_2,e,_47(_2,_20));\n}}));\nif(!_4.columns){\nvar _21=$.data(_2,\"datagrid\").options;\n_4.columns=_21.columns;\n_4.frozenColumns=_21.frozenColumns;\n}\n_3.dc=$.data(_2,\"datagrid\").dc;\nif(_4.pagination){\nvar _22=$(_2).datagrid(\"getPager\");\n_22.pagination({pageNumber:_4.pageNumber,pageSize:_4.pageSize,pageList:_4.pageList,onSelectPage:function(_23,_24){\n_4.pageNumber=_23;\n_4.pageSize=_24;\n_25(_2);\n}});\n_4.pageSize=_22.pagination(\"options\").pageSize;\n}\n};\nfunction _26(_27,_28){\nvar _29=$.data(_27,\"datagrid\").options;\nvar dc=$.data(_27,\"datagrid\").dc;\nif(!dc.body1.is(\":empty\")&&(!_29.nowrap||_29.autoRowHeight)){\nif(_28!=undefined){\nvar _2a=_2b(_27,_28);\nfor(var i=0;i<_2a.length;i++){\n_2c(_2a[i][_29.idField]);\n}\n}\n}\n$(_27).datagrid(\"fixRowHeight\",_28);\nfunction _2c(_2d){\nvar tr1=_29.finder.getTr(_27,_2d,\"body\",1);\nvar tr2=_29.finder.getTr(_27,_2d,\"body\",2);\ntr1.css(\"height\",\"\");\ntr2.css(\"height\",\"\");\nvar _2e=Math.max(tr1.height(),tr2.height());\ntr1.css(\"height\",_2e);\ntr2.css(\"height\",_2e);\n};\n};\nfunction _2f(_30){\nvar dc=$.data(_30,\"datagrid\").dc;\nvar _31=$.data(_30,\"treegrid\").options;\nif(!_31.rownumbers){\nreturn;\n}\ndc.body1.find(\"div.datagrid-cell-rownumber\").each(function(i){\n$(this).html(i+1);\n});\n};\nfunction _32(_33){\nreturn function(e){\n$.fn.datagrid.defaults.rowEvents[_33?\"mouseover\":\"mouseout\"](e);\nvar tt=$(e.target);\nvar fn=_33?\"addClass\":\"removeClass\";\nif(tt.hasClass(\"tree-hit\")){\ntt.hasClass(\"tree-expanded\")?tt[fn](\"tree-expanded-hover\"):tt[fn](\"tree-collapsed-hover\");\n}\n};\n};\nfunction _34(e){\nvar tt=$(e.target);\nif(tt.hasClass(\"tree-hit\")){\nvar tr=tt.closest(\"tr.datagrid-row\");\nvar _35=tr.closest(\"div.datagrid-view\").children(\".datagrid-f\")[0];\n_36(_35,tr.attr(\"node-id\"));\n}else{\n$.fn.datagrid.defaults.rowEvents.click(e);\n}\n};\nfunction _37(_38,_39){\nvar _3a=$.data(_38,\"treegrid\").options;\nvar tr1=_3a.finder.getTr(_38,_39,\"body\",1);\nvar tr2=_3a.finder.getTr(_38,_39,\"body\",2);\nvar _3b=$(_38).datagrid(\"getColumnFields\",true).length+(_3a.rownumbers?1:0);\nvar _3c=$(_38).datagrid(\"getColumnFields\",false).length;\n_3d(tr1,_3b);\n_3d(tr2,_3c);\nfunction _3d(tr,_3e){\n$(\"<tr class=\\\"treegrid-tr-tree\\\">\"+\"<td style=\\\"border:0px\\\" colspan=\\\"\"+_3e+\"\\\">\"+\"<div></div>\"+\"</td>\"+\"</tr>\").insertAfter(tr);\n};\n};\nfunction _3f(_40,_41,_42,_43){\nvar _44=$.data(_40,\"treegrid\");\nvar _45=_44.options;\nvar dc=_44.dc;\n_42=_45.loadFilter.call(_40,_42,_41);\nvar _46=_47(_40,_41);\nif(_46){\nvar _48=_45.finder.getTr(_40,_41,\"body\",1);\nvar _49=_45.finder.getTr(_40,_41,\"body\",2);\nvar cc1=_48.next(\"tr.treegrid-tr-tree\").children(\"td\").children(\"div\");\nvar cc2=_49.next(\"tr.treegrid-tr-tree\").children(\"td\").children(\"div\");\nif(!_43){\n_46.children=[];\n}\n}else{\nvar cc1=dc.body1;\nvar cc2=dc.body2;\nif(!_43){\n_44.data=[];\n}\n}\nif(!_43){\ncc1.empty();\ncc2.empty();\n}\nif(_45.view.onBeforeRender){\n_45.view.onBeforeRender.call(_45.view,_40,_41,_42);\n}\n_45.view.render.call(_45.view,_40,cc1,true);\n_45.view.render.call(_45.view,_40,cc2,false);\nif(_45.showFooter){\n_45.view.renderFooter.call(_45.view,_40,dc.footer1,true);\n_45.view.renderFooter.call(_45.view,_40,dc.footer2,false);\n}\nif(_45.view.onAfterRender){\n_45.view.onAfterRender.call(_45.view,_40);\n}\nif(!_41&&_45.pagination){\nvar _4a=$.data(_40,\"treegrid\").total;\nvar _4b=$(_40).datagrid(\"getPager\");\nif(_4b.pagination(\"options\").total!=_4a){\n_4b.pagination({total:_4a});\n}\n}\n_26(_40);\n_2f(_40);\n$(_40).treegrid(\"showLines\");\n$(_40).treegrid(\"setSelectionState\");\n$(_40).treegrid(\"autoSizeColumn\");\n_45.onLoadSuccess.call(_40,_46,_42);\n};\nfunction _25(_4c,_4d,_4e,_4f,_50){\nvar _51=$.data(_4c,\"treegrid\").options;\nvar _52=$(_4c).datagrid(\"getPanel\").find(\"div.datagrid-body\");\nif(_4e){\n_51.queryParams=_4e;\n}\nvar _53=$.extend({},_51.queryParams);\nif(_51.pagination){\n$.extend(_53,{page:_51.pageNumber,rows:_51.pageSize});\n}\nif(_51.sortName){\n$.extend(_53,{sort:_51.sortName,order:_51.sortOrder});\n}\nvar row=_47(_4c,_4d);\nif(_51.onBeforeLoad.call(_4c,row,_53)==false){\nreturn;\n}\nvar _54=_52.find(\"tr[node-id=\\\"\"+_4d+\"\\\"] span.tree-folder\");\n_54.addClass(\"tree-loading\");\n$(_4c).treegrid(\"loading\");\nvar _55=_51.loader.call(_4c,_53,function(_56){\n_54.removeClass(\"tree-loading\");\n$(_4c).treegrid(\"loaded\");\n_3f(_4c,_4d,_56,_4f);\nif(_50){\n_50();\n}\n},function(){\n_54.removeClass(\"tree-loading\");\n$(_4c).treegrid(\"loaded\");\n_51.onLoadError.apply(_4c,arguments);\nif(_50){\n_50();\n}\n});\nif(_55==false){\n_54.removeClass(\"tree-loading\");\n$(_4c).treegrid(\"loaded\");\n}\n};\nfunction _57(_58){\nvar _59=_5a(_58);\nif(_59.length){\nreturn _59[0];\n}else{\nreturn null;\n}\n};\nfunction _5a(_5b){\nreturn $.data(_5b,\"treegrid\").data;\n};\nfunction _5c(_5d,_5e){\nvar row=_47(_5d,_5e);\nif(row._parentId){\nreturn _47(_5d,row._parentId);\n}else{\nreturn null;\n}\n};\nfunction _2b(_5f,_60){\nvar _61=$.data(_5f,\"treegrid\").options;\nvar _62=$(_5f).datagrid(\"getPanel\").find(\"div.datagrid-view2 div.datagrid-body\");\nvar _63=[];\nif(_60){\n_64(_60);\n}else{\nvar _65=_5a(_5f);\nfor(var i=0;i<_65.length;i++){\n_63.push(_65[i]);\n_64(_65[i][_61.idField]);\n}\n}\nfunction _64(_66){\nvar _67=_47(_5f,_66);\nif(_67&&_67.children){\nfor(var i=0,len=_67.children.length;i<len;i++){\nvar _68=_67.children[i];\n_63.push(_68);\n_64(_68[_61.idField]);\n}\n}\n};\nreturn _63;\n};\nfunction _69(_6a,_6b){\nif(!_6b){\nreturn 0;\n}\nvar _6c=$.data(_6a,\"treegrid\").options;\nvar _6d=$(_6a).datagrid(\"getPanel\").children(\"div.datagrid-view\");\nvar _6e=_6d.find(\"div.datagrid-body tr[node-id=\\\"\"+_6b+\"\\\"]\").children(\"td[field=\\\"\"+_6c.treeField+\"\\\"]\");\nreturn _6e.find(\"span.tree-indent,span.tree-hit\").length;\n};\nfunction _47(_6f,_70){\nvar _71=$.data(_6f,\"treegrid\").options;\nvar _72=$.data(_6f,\"treegrid\").data;\nvar cc=[_72];\nwhile(cc.length){\nvar c=cc.shift();\nfor(var i=0;i<c.length;i++){\nvar _73=c[i];\nif(_73[_71.idField]==_70){\nreturn _73;\n}else{\nif(_73[\"children\"]){\ncc.push(_73[\"children\"]);\n}\n}\n}\n}\nreturn null;\n};\nfunction _74(_75,_76){\nvar _77=$.data(_75,\"treegrid\").options;\nvar row=_47(_75,_76);\nvar tr=_77.finder.getTr(_75,_76);\nvar hit=tr.find(\"span.tree-hit\");\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-collapsed\")){\nreturn;\n}\nif(_77.onBeforeCollapse.call(_75,row)==false){\nreturn;\n}\nhit.removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\nhit.next().removeClass(\"tree-folder-open\");\nrow.state=\"closed\";\ntr=tr.next(\"tr.treegrid-tr-tree\");\nvar cc=tr.children(\"td\").children(\"div\");\nif(_77.animate){\ncc.slideUp(\"normal\",function(){\n$(_75).treegrid(\"autoSizeColumn\");\n_26(_75,_76);\n_77.onCollapse.call(_75,row);\n});\n}else{\ncc.hide();\n$(_75).treegrid(\"autoSizeColumn\");\n_26(_75,_76);\n_77.onCollapse.call(_75,row);\n}\n};\nfunction _78(_79,_7a){\nvar _7b=$.data(_79,\"treegrid\").options;\nvar tr=_7b.finder.getTr(_79,_7a);\nvar hit=tr.find(\"span.tree-hit\");\nvar row=_47(_79,_7a);\nif(hit.length==0){\nreturn;\n}\nif(hit.hasClass(\"tree-expanded\")){\nreturn;\n}\nif(_7b.onBeforeExpand.call(_79,row)==false){\nreturn;\n}\nhit.removeClass(\"tree-collapsed tree-collapsed-hover\").addClass(\"tree-expanded\");\nhit.next().addClass(\"tree-folder-open\");\nvar _7c=tr.next(\"tr.treegrid-tr-tree\");\nif(_7c.length){\nvar cc=_7c.children(\"td\").children(\"div\");\n_7d(cc);\n}else{\n_37(_79,row[_7b.idField]);\nvar _7c=tr.next(\"tr.treegrid-tr-tree\");\nvar cc=_7c.children(\"td\").children(\"div\");\ncc.hide();\nvar _7e=$.extend({},_7b.queryParams||{});\n_7e.id=row[_7b.idField];\n_25(_79,row[_7b.idField],_7e,true,function(){\nif(cc.is(\":empty\")){\n_7c.remove();\n}else{\n_7d(cc);\n}\n});\n}\nfunction _7d(cc){\nrow.state=\"open\";\nif(_7b.animate){\ncc.slideDown(\"normal\",function(){\n$(_79).treegrid(\"autoSizeColumn\");\n_26(_79,_7a);\n_7b.onExpand.call(_79,row);\n});\n}else{\ncc.show();\n$(_79).treegrid(\"autoSizeColumn\");\n_26(_79,_7a);\n_7b.onExpand.call(_79,row);\n}\n};\n};\nfunction _36(_7f,_80){\nvar _81=$.data(_7f,\"treegrid\").options;\nvar tr=_81.finder.getTr(_7f,_80);\nvar hit=tr.find(\"span.tree-hit\");\nif(hit.hasClass(\"tree-expanded\")){\n_74(_7f,_80);\n}else{\n_78(_7f,_80);\n}\n};\nfunction _82(_83,_84){\nvar _85=$.data(_83,\"treegrid\").options;\nvar _86=_2b(_83,_84);\nif(_84){\n_86.unshift(_47(_83,_84));\n}\nfor(var i=0;i<_86.length;i++){\n_74(_83,_86[i][_85.idField]);\n}\n};\nfunction _87(_88,_89){\nvar _8a=$.data(_88,\"treegrid\").options;\nvar _8b=_2b(_88,_89);\nif(_89){\n_8b.unshift(_47(_88,_89));\n}\nfor(var i=0;i<_8b.length;i++){\n_78(_88,_8b[i][_8a.idField]);\n}\n};\nfunction _8c(_8d,_8e){\nvar _8f=$.data(_8d,\"treegrid\").options;\nvar ids=[];\nvar p=_5c(_8d,_8e);\nwhile(p){\nvar id=p[_8f.idField];\nids.unshift(id);\np=_5c(_8d,id);\n}\nfor(var i=0;i<ids.length;i++){\n_78(_8d,ids[i]);\n}\n};\nfunction _90(_91,_92){\nvar _93=$.data(_91,\"treegrid\").options;\nif(_92.parent){\nvar tr=_93.finder.getTr(_91,_92.parent);\nif(tr.next(\"tr.treegrid-tr-tree\").length==0){\n_37(_91,_92.parent);\n}\nvar _94=tr.children(\"td[field=\\\"\"+_93.treeField+\"\\\"]\").children(\"div.datagrid-cell\");\nvar _95=_94.children(\"span.tree-icon\");\nif(_95.hasClass(\"tree-file\")){\n_95.removeClass(\"tree-file\").addClass(\"tree-folder tree-folder-open\");\nvar hit=$(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\").insertBefore(_95);\nif(hit.prev().length){\nhit.prev().remove();\n}\n}\n}\n_3f(_91,_92.parent,_92.data,true);\n};\nfunction _96(_97,_98){\nvar ref=_98.before||_98.after;\nvar _99=$.data(_97,\"treegrid\").options;\nvar _9a=_5c(_97,ref);\n_90(_97,{parent:(_9a?_9a[_99.idField]:null),data:[_98.data]});\nvar _9b=_9a?_9a.children:$(_97).treegrid(\"getRoots\");\nfor(var i=0;i<_9b.length;i++){\nif(_9b[i][_99.idField]==ref){\nvar _9c=_9b[_9b.length-1];\n_9b.splice(_98.before?i:(i+1),0,_9c);\n_9b.splice(_9b.length-1,1);\nbreak;\n}\n}\n_9d(true);\n_9d(false);\n_2f(_97);\n$(_97).treegrid(\"showLines\");\nfunction _9d(_9e){\nvar _9f=_9e?1:2;\nvar tr=_99.finder.getTr(_97,_98.data[_99.idField],\"body\",_9f);\nvar _a0=tr.closest(\"table.datagrid-btable\");\ntr=tr.parent().children();\nvar _a1=_99.finder.getTr(_97,ref,\"body\",_9f);\nif(_98.before){\ntr.insertBefore(_a1);\n}else{\nvar sub=_a1.next(\"tr.treegrid-tr-tree\");\ntr.insertAfter(sub.length?sub:_a1);\n}\n_a0.remove();\n};\n};\nfunction _a2(_a3,_a4){\nvar _a5=$.data(_a3,\"treegrid\");\n$(_a3).datagrid(\"deleteRow\",_a4);\n_2f(_a3);\n_a5.total-=1;\n$(_a3).datagrid(\"getPager\").pagination(\"refresh\",{total:_a5.total});\n$(_a3).treegrid(\"showLines\");\n};\nfunction _a6(_a7){\nvar t=$(_a7);\nvar _a8=t.treegrid(\"options\");\nif(_a8.lines){\nt.treegrid(\"getPanel\").addClass(\"tree-lines\");\n}else{\nt.treegrid(\"getPanel\").removeClass(\"tree-lines\");\nreturn;\n}\nt.treegrid(\"getPanel\").find(\"span.tree-indent\").removeClass(\"tree-line tree-join tree-joinbottom\");\nt.treegrid(\"getPanel\").find(\"div.datagrid-cell\").removeClass(\"tree-node-last tree-root-first tree-root-one\");\nvar _a9=t.treegrid(\"getRoots\");\nif(_a9.length>1){\n_aa(_a9[0]).addClass(\"tree-root-first\");\n}else{\nif(_a9.length==1){\n_aa(_a9[0]).addClass(\"tree-root-one\");\n}\n}\n_ab(_a9);\n_ac(_a9);\nfunction _ab(_ad){\n$.map(_ad,function(_ae){\nif(_ae.children&&_ae.children.length){\n_ab(_ae.children);\n}else{\nvar _af=_aa(_ae);\n_af.find(\".tree-icon\").prev().addClass(\"tree-join\");\n}\n});\nif(_ad.length){\nvar _b0=_aa(_ad[_ad.length-1]);\n_b0.addClass(\"tree-node-last\");\n_b0.find(\".tree-join\").removeClass(\"tree-join\").addClass(\"tree-joinbottom\");\n}\n};\nfunction _ac(_b1){\n$.map(_b1,function(_b2){\nif(_b2.children&&_b2.children.length){\n_ac(_b2.children);\n}\n});\nfor(var i=0;i<_b1.length-1;i++){\nvar _b3=_b1[i];\nvar _b4=t.treegrid(\"getLevel\",_b3[_a8.idField]);\nvar tr=_a8.finder.getTr(_a7,_b3[_a8.idField]);\nvar cc=tr.next().find(\"tr.datagrid-row td[field=\\\"\"+_a8.treeField+\"\\\"] div.datagrid-cell\");\ncc.find(\"span:eq(\"+(_b4-1)+\")\").addClass(\"tree-line\");\n}\n};\nfunction _aa(_b5){\nvar tr=_a8.finder.getTr(_a7,_b5[_a8.idField]);\nvar _b6=tr.find(\"td[field=\\\"\"+_a8.treeField+\"\\\"] div.datagrid-cell\");\nreturn _b6;\n};\n};\n$.fn.treegrid=function(_b7,_b8){\nif(typeof _b7==\"string\"){\nvar _b9=$.fn.treegrid.methods[_b7];\nif(_b9){\nreturn _b9(this,_b8);\n}else{\nreturn this.datagrid(_b7,_b8);\n}\n}\n_b7=_b7||{};\nreturn this.each(function(){\nvar _ba=$.data(this,\"treegrid\");\nif(_ba){\n$.extend(_ba.options,_b7);\n}else{\n_ba=$.data(this,\"treegrid\",{options:$.extend({},$.fn.treegrid.defaults,$.fn.treegrid.parseOptions(this),_b7),data:[]});\n}\n_1(this);\nif(_ba.options.data){\n$(this).treegrid(\"loadData\",_ba.options.data);\n}\n_25(this);\n});\n};\n$.fn.treegrid.methods={options:function(jq){\nreturn $.data(jq[0],\"treegrid\").options;\n},resize:function(jq,_bb){\nreturn jq.each(function(){\n$(this).datagrid(\"resize\",_bb);\n});\n},fixRowHeight:function(jq,_bc){\nreturn jq.each(function(){\n_26(this,_bc);\n});\n},loadData:function(jq,_bd){\nreturn jq.each(function(){\n_3f(this,_bd.parent,_bd);\n});\n},load:function(jq,_be){\nreturn jq.each(function(){\n$(this).treegrid(\"options\").pageNumber=1;\n$(this).treegrid(\"getPager\").pagination({pageNumber:1});\n$(this).treegrid(\"reload\",_be);\n});\n},reload:function(jq,id){\nreturn jq.each(function(){\nvar _bf=$(this).treegrid(\"options\");\nvar _c0={};\nif(typeof id==\"object\"){\n_c0=id;\n}else{\n_c0=$.extend({},_bf.queryParams);\n_c0.id=id;\n}\nif(_c0.id){\nvar _c1=$(this).treegrid(\"find\",_c0.id);\nif(_c1.children){\n_c1.children.splice(0,_c1.children.length);\n}\n_bf.queryParams=_c0;\nvar tr=_bf.finder.getTr(this,_c0.id);\ntr.next(\"tr.treegrid-tr-tree\").remove();\ntr.find(\"span.tree-hit\").removeClass(\"tree-expanded tree-expanded-hover\").addClass(\"tree-collapsed\");\n_78(this,_c0.id);\n}else{\n_25(this,null,_c0);\n}\n});\n},reloadFooter:function(jq,_c2){\nreturn jq.each(function(){\nvar _c3=$.data(this,\"treegrid\").options;\nvar dc=$.data(this,\"datagrid\").dc;\nif(_c2){\n$.data(this,\"treegrid\").footer=_c2;\n}\nif(_c3.showFooter){\n_c3.view.renderFooter.call(_c3.view,this,dc.footer1,true);\n_c3.view.renderFooter.call(_c3.view,this,dc.footer2,false);\nif(_c3.view.onAfterRender){\n_c3.view.onAfterRender.call(_c3.view,this);\n}\n$(this).treegrid(\"fixRowHeight\");\n}\n});\n},getData:function(jq){\nreturn $.data(jq[0],\"treegrid\").data;\n},getFooterRows:function(jq){\nreturn $.data(jq[0],\"treegrid\").footer;\n},getRoot:function(jq){\nreturn _57(jq[0]);\n},getRoots:function(jq){\nreturn _5a(jq[0]);\n},getParent:function(jq,id){\nreturn _5c(jq[0],id);\n},getChildren:function(jq,id){\nreturn _2b(jq[0],id);\n},getLevel:function(jq,id){\nreturn _69(jq[0],id);\n},find:function(jq,id){\nreturn _47(jq[0],id);\n},isLeaf:function(jq,id){\nvar _c4=$.data(jq[0],\"treegrid\").options;\nvar tr=_c4.finder.getTr(jq[0],id);\nvar hit=tr.find(\"span.tree-hit\");\nreturn hit.length==0;\n},select:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"selectRow\",id);\n});\n},unselect:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"unselectRow\",id);\n});\n},collapse:function(jq,id){\nreturn jq.each(function(){\n_74(this,id);\n});\n},expand:function(jq,id){\nreturn jq.each(function(){\n_78(this,id);\n});\n},toggle:function(jq,id){\nreturn jq.each(function(){\n_36(this,id);\n});\n},collapseAll:function(jq,id){\nreturn jq.each(function(){\n_82(this,id);\n});\n},expandAll:function(jq,id){\nreturn jq.each(function(){\n_87(this,id);\n});\n},expandTo:function(jq,id){\nreturn jq.each(function(){\n_8c(this,id);\n});\n},append:function(jq,_c5){\nreturn jq.each(function(){\n_90(this,_c5);\n});\n},insert:function(jq,_c6){\nreturn jq.each(function(){\n_96(this,_c6);\n});\n},remove:function(jq,id){\nreturn jq.each(function(){\n_a2(this,id);\n});\n},pop:function(jq,id){\nvar row=jq.treegrid(\"find\",id);\njq.treegrid(\"remove\",id);\nreturn row;\n},refresh:function(jq,id){\nreturn jq.each(function(){\nvar _c7=$.data(this,\"treegrid\").options;\n_c7.view.refreshRow.call(_c7.view,this,id);\n});\n},update:function(jq,_c8){\nreturn jq.each(function(){\nvar _c9=$.data(this,\"treegrid\").options;\n_c9.view.updateRow.call(_c9.view,this,_c8.id,_c8.row);\n});\n},beginEdit:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"beginEdit\",id);\n$(this).treegrid(\"fixRowHeight\",id);\n});\n},endEdit:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"endEdit\",id);\n});\n},cancelEdit:function(jq,id){\nreturn jq.each(function(){\n$(this).datagrid(\"cancelEdit\",id);\n});\n},showLines:function(jq){\nreturn jq.each(function(){\n_a6(this);\n});\n}};\n$.fn.treegrid.parseOptions=function(_ca){\nreturn $.extend({},$.fn.datagrid.parseOptions(_ca),$.parser.parseOptions(_ca,[\"treeField\",{animate:\"boolean\"}]));\n};\nvar _cb=$.extend({},$.fn.datagrid.defaults.view,{render:function(_cc,_cd,_ce){\nvar _cf=$.data(_cc,\"treegrid\").options;\nvar _d0=$(_cc).datagrid(\"getColumnFields\",_ce);\nvar _d1=$.data(_cc,\"datagrid\").rowIdPrefix;\nif(_ce){\nif(!(_cf.rownumbers||(_cf.frozenColumns&&_cf.frozenColumns.length))){\nreturn;\n}\n}\nvar _d2=this;\nif(this.treeNodes&&this.treeNodes.length){\nvar _d3=_d4(_ce,this.treeLevel,this.treeNodes);\n$(_cd).append(_d3.join(\"\"));\n}\nfunction _d4(_d5,_d6,_d7){\nvar _d8=$(_cc).treegrid(\"getParent\",_d7[0][_cf.idField]);\nvar _d9=(_d8?_d8.children.length:$(_cc).treegrid(\"getRoots\").length)-_d7.length;\nvar _da=[\"<table class=\\\"datagrid-btable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<_d7.length;i++){\nvar row=_d7[i];\nif(row.state!=\"open\"&&row.state!=\"closed\"){\nrow.state=\"open\";\n}\nvar css=_cf.rowStyler?_cf.rowStyler.call(_cc,row):\"\";\nvar _db=\"\";\nvar _dc=\"\";\nif(typeof css==\"string\"){\n_dc=css;\n}else{\nif(css){\n_db=css[\"class\"]||\"\";\n_dc=css[\"style\"]||\"\";\n}\n}\nvar cls=\"class=\\\"datagrid-row \"+(_d9++%2&&_cf.striped?\"datagrid-row-alt \":\" \")+_db+\"\\\"\";\nvar _dd=_dc?\"style=\\\"\"+_dc+\"\\\"\":\"\";\nvar _de=_d1+\"-\"+(_d5?1:2)+\"-\"+row[_cf.idField];\n_da.push(\"<tr id=\\\"\"+_de+\"\\\" node-id=\\\"\"+row[_cf.idField]+\"\\\" \"+cls+\" \"+_dd+\">\");\n_da=_da.concat(_d2.renderRow.call(_d2,_cc,_d0,_d5,_d6,row));\n_da.push(\"</tr>\");\nif(row.children&&row.children.length){\nvar tt=_d4(_d5,_d6+1,row.children);\nvar v=row.state==\"closed\"?\"none\":\"block\";\n_da.push(\"<tr class=\\\"treegrid-tr-tree\\\"><td style=\\\"border:0px\\\" colspan=\"+(_d0.length+(_cf.rownumbers?1:0))+\"><div style=\\\"display:\"+v+\"\\\">\");\n_da=_da.concat(tt);\n_da.push(\"</div></td></tr>\");\n}\n}\n_da.push(\"</tbody></table>\");\nreturn _da;\n};\n},renderFooter:function(_df,_e0,_e1){\nvar _e2=$.data(_df,\"treegrid\").options;\nvar _e3=$.data(_df,\"treegrid\").footer||[];\nvar _e4=$(_df).datagrid(\"getColumnFields\",_e1);\nvar _e5=[\"<table class=\\\"datagrid-ftable\\\" cellspacing=\\\"0\\\" cellpadding=\\\"0\\\" border=\\\"0\\\"><tbody>\"];\nfor(var i=0;i<_e3.length;i++){\nvar row=_e3[i];\nrow[_e2.idField]=row[_e2.idField]||(\"foot-row-id\"+i);\n_e5.push(\"<tr class=\\\"datagrid-row\\\" node-id=\\\"\"+row[_e2.idField]+\"\\\">\");\n_e5.push(this.renderRow.call(this,_df,_e4,_e1,0,row));\n_e5.push(\"</tr>\");\n}\n_e5.push(\"</tbody></table>\");\n$(_e0).html(_e5.join(\"\"));\n},renderRow:function(_e6,_e7,_e8,_e9,row){\nvar _ea=$.data(_e6,\"treegrid\").options;\nvar cc=[];\nif(_e8&&_ea.rownumbers){\ncc.push(\"<td class=\\\"datagrid-td-rownumber\\\"><div class=\\\"datagrid-cell-rownumber\\\">0</div></td>\");\n}\nfor(var i=0;i<_e7.length;i++){\nvar _eb=_e7[i];\nvar col=$(_e6).datagrid(\"getColumnOption\",_eb);\nif(col){\nvar css=col.styler?(col.styler(row[_eb],row)||\"\"):\"\";\nvar _ec=\"\";\nvar _ed=\"\";\nif(typeof css==\"string\"){\n_ed=css;\n}else{\nif(cc){\n_ec=css[\"class\"]||\"\";\n_ed=css[\"style\"]||\"\";\n}\n}\nvar cls=_ec?\"class=\\\"\"+_ec+\"\\\"\":\"\";\nvar _ee=col.hidden?\"style=\\\"display:none;\"+_ed+\"\\\"\":(_ed?\"style=\\\"\"+_ed+\"\\\"\":\"\");\ncc.push(\"<td field=\\\"\"+_eb+\"\\\" \"+cls+\" \"+_ee+\">\");\nvar _ee=\"\";\nif(!col.checkbox){\nif(col.align){\n_ee+=\"text-align:\"+col.align+\";\";\n}\nif(!_ea.nowrap){\n_ee+=\"white-space:normal;height:auto;\";\n}else{\nif(_ea.autoRowHeight){\n_ee+=\"height:auto;\";\n}\n}\n}\ncc.push(\"<div style=\\\"\"+_ee+\"\\\" \");\nif(col.checkbox){\ncc.push(\"class=\\\"datagrid-cell-check \");\n}else{\ncc.push(\"class=\\\"datagrid-cell \"+col.cellClass);\n}\ncc.push(\"\\\">\");\nif(col.checkbox){\nif(row.checked){\ncc.push(\"<input type=\\\"checkbox\\\" checked=\\\"checked\\\"\");\n}else{\ncc.push(\"<input type=\\\"checkbox\\\"\");\n}\ncc.push(\" name=\\\"\"+_eb+\"\\\" value=\\\"\"+(row[_eb]!=undefined?row[_eb]:\"\")+\"\\\">\");\n}else{\nvar val=null;\nif(col.formatter){\nval=col.formatter(row[_eb],row);\n}else{\nval=row[_eb];\n}\nif(_eb==_ea.treeField){\nfor(var j=0;j<_e9;j++){\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\n}\nif(row.state==\"closed\"){\ncc.push(\"<span class=\\\"tree-hit tree-collapsed\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder \"+(row.iconCls?row.iconCls:\"\")+\"\\\"></span>\");\n}else{\nif(row.children&&row.children.length){\ncc.push(\"<span class=\\\"tree-hit tree-expanded\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-folder tree-folder-open \"+(row.iconCls?row.iconCls:\"\")+\"\\\"></span>\");\n}else{\ncc.push(\"<span class=\\\"tree-indent\\\"></span>\");\ncc.push(\"<span class=\\\"tree-icon tree-file \"+(row.iconCls?row.iconCls:\"\")+\"\\\"></span>\");\n}\n}\ncc.push(\"<span class=\\\"tree-title\\\">\"+val+\"</span>\");\n}else{\ncc.push(val);\n}\n}\ncc.push(\"</div>\");\ncc.push(\"</td>\");\n}\n}\nreturn cc.join(\"\");\n},refreshRow:function(_ef,id){\nthis.updateRow.call(this,_ef,id,{});\n},updateRow:function(_f0,id,row){\nvar _f1=$.data(_f0,\"treegrid\").options;\nvar _f2=$(_f0).treegrid(\"find\",id);\n$.extend(_f2,row);\nvar _f3=$(_f0).treegrid(\"getLevel\",id)-1;\nvar _f4=_f1.rowStyler?_f1.rowStyler.call(_f0,_f2):\"\";\nvar _f5=$.data(_f0,\"datagrid\").rowIdPrefix;\nvar _f6=_f2[_f1.idField];\nfunction _f7(_f8){\nvar _f9=$(_f0).treegrid(\"getColumnFields\",_f8);\nvar tr=_f1.finder.getTr(_f0,id,\"body\",(_f8?1:2));\nvar _fa=tr.find(\"div.datagrid-cell-rownumber\").html();\nvar _fb=tr.find(\"div.datagrid-cell-check input[type=checkbox]\").is(\":checked\");\ntr.html(this.renderRow(_f0,_f9,_f8,_f3,_f2));\ntr.attr(\"style\",_f4||\"\");\ntr.find(\"div.datagrid-cell-rownumber\").html(_fa);\nif(_fb){\ntr.find(\"div.datagrid-cell-check input[type=checkbox]\")._propAttr(\"checked\",true);\n}\nif(_f6!=id){\ntr.attr(\"id\",_f5+\"-\"+(_f8?1:2)+\"-\"+_f6);\ntr.attr(\"node-id\",_f6);\n}\n};\n_f7.call(this,true);\n_f7.call(this,false);\n$(_f0).treegrid(\"fixRowHeight\",id);\n},deleteRow:function(_fc,id){\nvar _fd=$.data(_fc,\"treegrid\").options;\nvar tr=_fd.finder.getTr(_fc,id);\ntr.next(\"tr.treegrid-tr-tree\").remove();\ntr.remove();\nvar _fe=del(id);\nif(_fe){\nif(_fe.children.length==0){\ntr=_fd.finder.getTr(_fc,_fe[_fd.idField]);\ntr.next(\"tr.treegrid-tr-tree\").remove();\nvar _ff=tr.children(\"td[field=\\\"\"+_fd.treeField+\"\\\"]\").children(\"div.datagrid-cell\");\n_ff.find(\".tree-icon\").removeClass(\"tree-folder\").addClass(\"tree-file\");\n_ff.find(\".tree-hit\").remove();\n$(\"<span class=\\\"tree-indent\\\"></span>\").prependTo(_ff);\n}\n}\nfunction del(id){\nvar cc;\nvar _100=$(_fc).treegrid(\"getParent\",id);\nif(_100){\ncc=_100.children;\n}else{\ncc=$(_fc).treegrid(\"getData\");\n}\nfor(var i=0;i<cc.length;i++){\nif(cc[i][_fd.idField]==id){\ncc.splice(i,1);\nbreak;\n}\n}\nreturn _100;\n};\n},onBeforeRender:function(_101,_102,data){\nif($.isArray(_102)){\ndata={total:_102.length,rows:_102};\n_102=null;\n}\nif(!data){\nreturn false;\n}\nvar _103=$.data(_101,\"treegrid\");\nvar opts=_103.options;\nif(data.length==undefined){\nif(data.footer){\n_103.footer=data.footer;\n}\nif(data.total){\n_103.total=data.total;\n}\ndata=this.transfer(_101,_102,data.rows);\n}else{\nfunction _104(_105,_106){\nfor(var i=0;i<_105.length;i++){\nvar row=_105[i];\nrow._parentId=_106;\nif(row.children&&row.children.length){\n_104(row.children,row[opts.idField]);\n}\n}\n};\n_104(data,_102);\n}\nvar node=_47(_101,_102);\nif(node){\nif(node.children){\nnode.children=node.children.concat(data);\n}else{\nnode.children=data;\n}\n}else{\n_103.data=_103.data.concat(data);\n}\nthis.sort(_101,data);\nthis.treeNodes=data;\nthis.treeLevel=$(_101).treegrid(\"getLevel\",_102);\n},sort:function(_107,data){\nvar opts=$.data(_107,\"treegrid\").options;\nif(!opts.remoteSort&&opts.sortName){\nvar _108=opts.sortName.split(\",\");\nvar _109=opts.sortOrder.split(\",\");\n_10a(data);\n}\nfunction _10a(rows){\nrows.sort(function(r1,r2){\nvar r=0;\nfor(var i=0;i<_108.length;i++){\nvar sn=_108[i];\nvar so=_109[i];\nvar col=$(_107).treegrid(\"getColumnOption\",sn);\nvar _10b=col.sorter||function(a,b){\nreturn a==b?0:(a>b?1:-1);\n};\nr=_10b(r1[sn],r2[sn])*(so==\"asc\"?1:-1);\nif(r!=0){\nreturn r;\n}\n}\nreturn r;\n});\nfor(var i=0;i<rows.length;i++){\nvar _10c=rows[i].children;\nif(_10c&&_10c.length){\n_10a(_10c);\n}\n}\n};\n},transfer:function(_10d,_10e,data){\nvar opts=$.data(_10d,\"treegrid\").options;\nvar rows=[];\nfor(var i=0;i<data.length;i++){\nrows.push(data[i]);\n}\nvar _10f=[];\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nif(!_10e){\nif(!row._parentId){\n_10f.push(row);\nrows.splice(i,1);\ni--;\n}\n}else{\nif(row._parentId==_10e){\n_10f.push(row);\nrows.splice(i,1);\ni--;\n}\n}\n}\nvar toDo=[];\nfor(var i=0;i<_10f.length;i++){\ntoDo.push(_10f[i]);\n}\nwhile(toDo.length){\nvar node=toDo.shift();\nfor(var i=0;i<rows.length;i++){\nvar row=rows[i];\nif(row._parentId==node[opts.idField]){\nif(node.children){\nnode.children.push(row);\n}else{\nnode.children=[row];\n}\ntoDo.push(row);\nrows.splice(i,1);\ni--;\n}\n}\n}\nreturn _10f;\n}});\n$.fn.treegrid.defaults=$.extend({},$.fn.datagrid.defaults,{treeField:null,lines:false,animate:false,singleSelect:true,view:_cb,rowEvents:$.extend({},$.fn.datagrid.defaults.rowEvents,{mouseover:_32(true),mouseout:_32(false),click:_34}),loader:function(_110,_111,_112){\nvar opts=$(this).treegrid(\"options\");\nif(!opts.url){\nreturn false;\n}\n$.ajax({type:opts.method,url:opts.url,data:_110,dataType:\"json\",success:function(data){\n_111(data);\n},error:function(){\n_112.apply(this,arguments);\n}});\n},loadFilter:function(data,_113){\nreturn data;\n},finder:{getTr:function(_114,id,type,_115){\ntype=type||\"body\";\n_115=_115||0;\nvar dc=$.data(_114,\"datagrid\").dc;\nif(_115==0){\nvar opts=$.data(_114,\"treegrid\").options;\nvar tr1=opts.finder.getTr(_114,id,type,1);\nvar tr2=opts.finder.getTr(_114,id,type,2);\nreturn tr1.add(tr2);\n}else{\nif(type==\"body\"){\nvar tr=$(\"#\"+$.data(_114,\"datagrid\").rowIdPrefix+\"-\"+_115+\"-\"+id);\nif(!tr.length){\ntr=(_115==1?dc.body1:dc.body2).find(\"tr[node-id=\\\"\"+id+\"\\\"]\");\n}\nreturn tr;\n}else{\nif(type==\"footer\"){\nreturn (_115==1?dc.footer1:dc.footer2).find(\"tr[node-id=\\\"\"+id+\"\\\"]\");\n}else{\nif(type==\"selected\"){\nreturn (_115==1?dc.body1:dc.body2).find(\"tr.datagrid-row-selected\");\n}else{\nif(type==\"highlight\"){\nreturn (_115==1?dc.body1:dc.body2).find(\"tr.datagrid-row-over\");\n}else{\nif(type==\"checked\"){\nreturn (_115==1?dc.body1:dc.body2).find(\"tr.datagrid-row-checked\");\n}else{\nif(type==\"last\"){\nreturn (_115==1?dc.body1:dc.body2).find(\"tr:last[node-id]\");\n}else{\nif(type==\"allbody\"){\nreturn (_115==1?dc.body1:dc.body2).find(\"tr[node-id]\");\n}else{\nif(type==\"allfooter\"){\nreturn (_115==1?dc.footer1:dc.footer2).find(\"tr[node-id]\");\n}\n}\n}\n}\n}\n}\n}\n}\n}\n},getRow:function(_116,p){\nvar id=(typeof p==\"object\")?p.attr(\"node-id\"):p;\nreturn $(_116).treegrid(\"find\",id);\n},getRows:function(_117){\nreturn $(_117).treegrid(\"getChildren\");\n}},onBeforeLoad:function(row,_118){\n},onLoadSuccess:function(row,data){\n},onLoadError:function(){\n},onBeforeCollapse:function(row){\n},onCollapse:function(row){\n},onBeforeExpand:function(row){\n},onExpand:function(row){\n},onClickRow:function(row){\n},onDblClickRow:function(row){\n},onClickCell:function(_119,row){\n},onDblClickCell:function(_11a,row){\n},onContextMenu:function(e,row){\n},onBeforeEdit:function(row){\n},onAfterEdit:function(row,_11b){\n},onCancelEdit:function(row){\n}});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.validatebox.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2){\n$(_2).addClass(\"validatebox-text\");\n};\nfunction _3(_4){\nvar _5=$.data(_4,\"validatebox\");\n_5.validating=false;\nif(_5.timer){\nclearTimeout(_5.timer);\n}\n$(_4).tooltip(\"destroy\");\n$(_4).unbind();\n$(_4).remove();\n};\nfunction _6(_7){\nvar _8=$.data(_7,\"validatebox\").options;\nvar _9=$(_7);\n_9.unbind(\".validatebox\");\nif(_8.novalidate||_9.is(\":disabled\")){\nreturn;\n}\nfor(var _a in _8.events){\n$(_7).bind(_a+\".validatebox\",{target:_7},_8.events[_a]);\n}\n};\nfunction _b(e){\nvar _c=e.data.target;\nvar _d=$.data(_c,\"validatebox\");\nvar _e=$(_c);\nif($(_c).attr(\"readonly\")){\nreturn;\n}\n_d.validating=true;\n_d.value=undefined;\n(function(){\nif(_d.validating){\nif(_d.value!=_e.val()){\n_d.value=_e.val();\nif(_d.timer){\nclearTimeout(_d.timer);\n}\n_d.timer=setTimeout(function(){\n$(_c).validatebox(\"validate\");\n},_d.options.delay);\n}else{\n_f(_c);\n}\nsetTimeout(arguments.callee,200);\n}\n})();\n};\nfunction _10(e){\nvar _11=e.data.target;\nvar _12=$.data(_11,\"validatebox\");\nif(_12.timer){\nclearTimeout(_12.timer);\n_12.timer=undefined;\n}\n_12.validating=false;\n_13(_11);\n};\nfunction _14(e){\nvar _15=e.data.target;\nif($(_15).hasClass(\"validatebox-invalid\")){\n_16(_15);\n}\n};\nfunction _17(e){\nvar _18=e.data.target;\nvar _19=$.data(_18,\"validatebox\");\nif(!_19.validating){\n_13(_18);\n}\n};\nfunction _16(_1a){\nvar _1b=$.data(_1a,\"validatebox\");\nvar _1c=_1b.options;\n$(_1a).tooltip($.extend({},_1c.tipOptions,{content:_1b.message,position:_1c.tipPosition,deltaX:_1c.deltaX})).tooltip(\"show\");\n_1b.tip=true;\n};\nfunction _f(_1d){\nvar _1e=$.data(_1d,\"validatebox\");\nif(_1e&&_1e.tip){\n$(_1d).tooltip(\"reposition\");\n}\n};\nfunction _13(_1f){\nvar _20=$.data(_1f,\"validatebox\");\n_20.tip=false;\n$(_1f).tooltip(\"hide\");\n};\nfunction _21(_22){\nvar _23=$.data(_22,\"validatebox\");\nvar _24=_23.options;\nvar box=$(_22);\n_24.onBeforeValidate.call(_22);\nvar _25=_26();\n_24.onValidate.call(_22,_25);\nreturn _25;\nfunction _27(msg){\n_23.message=msg;\n};\nfunction _28(_29,_2a){\nvar _2b=box.val();\nvar _2c=/([a-zA-Z_]+)(.*)/.exec(_29);\nvar _2d=_24.rules[_2c[1]];\nif(_2d&&_2b){\nvar _2e=_2a||_24.validParams||eval(_2c[2]);\nif(!_2d[\"validator\"].call(_22,_2b,_2e)){\nbox.addClass(\"validatebox-invalid\");\nvar _2f=_2d[\"message\"];\nif(_2e){\nfor(var i=0;i<_2e.length;i++){\n_2f=_2f.replace(new RegExp(\"\\\\{\"+i+\"\\\\}\",\"g\"),_2e[i]);\n}\n}\n_27(_24.invalidMessage||_2f);\nif(_23.validating){\n_16(_22);\n}\nreturn false;\n}\n}\nreturn true;\n};\nfunction _26(){\nbox.removeClass(\"validatebox-invalid\");\n_13(_22);\nif(_24.novalidate||box.is(\":disabled\")){\nreturn true;\n}\nif(_24.required){\nif(box.val()==\"\"){\nbox.addClass(\"validatebox-invalid\");\n_27(_24.missingMessage);\nif(_23.validating){\n_16(_22);\n}\nreturn false;\n}\n}\nif(_24.validType){\nif($.isArray(_24.validType)){\nfor(var i=0;i<_24.validType.length;i++){\nif(!_28(_24.validType[i])){\nreturn false;\n}\n}\n}else{\nif(typeof _24.validType==\"string\"){\nif(!_28(_24.validType)){\nreturn false;\n}\n}else{\nfor(var _30 in _24.validType){\nvar _31=_24.validType[_30];\nif(!_28(_30,_31)){\nreturn false;\n}\n}\n}\n}\n}\nreturn true;\n};\n};\nfunction _32(_33,_34){\nvar _35=$.data(_33,\"validatebox\").options;\nif(_34!=undefined){\n_35.novalidate=_34;\n}\nif(_35.novalidate){\n$(_33).removeClass(\"validatebox-invalid\");\n_13(_33);\n}\n_21(_33);\n_6(_33);\n};\n$.fn.validatebox=function(_36,_37){\nif(typeof _36==\"string\"){\nreturn $.fn.validatebox.methods[_36](this,_37);\n}\n_36=_36||{};\nreturn this.each(function(){\nvar _38=$.data(this,\"validatebox\");\nif(_38){\n$.extend(_38.options,_36);\n}else{\n_1(this);\n$.data(this,\"validatebox\",{options:$.extend({},$.fn.validatebox.defaults,$.fn.validatebox.parseOptions(this),_36)});\n}\n_32(this);\n_21(this);\n});\n};\n$.fn.validatebox.methods={options:function(jq){\nreturn $.data(jq[0],\"validatebox\").options;\n},destroy:function(jq){\nreturn jq.each(function(){\n_3(this);\n});\n},validate:function(jq){\nreturn jq.each(function(){\n_21(this);\n});\n},isValid:function(jq){\nreturn _21(jq[0]);\n},enableValidation:function(jq){\nreturn jq.each(function(){\n_32(this,false);\n});\n},disableValidation:function(jq){\nreturn jq.each(function(){\n_32(this,true);\n});\n}};\n$.fn.validatebox.parseOptions=function(_39){\nvar t=$(_39);\nreturn $.extend({},$.parser.parseOptions(_39,[\"validType\",\"missingMessage\",\"invalidMessage\",\"tipPosition\",{delay:\"number\",deltaX:\"number\"}]),{required:(t.attr(\"required\")?true:undefined),novalidate:(t.attr(\"novalidate\")!=undefined?true:undefined)});\n};\n$.fn.validatebox.defaults={required:false,validType:null,validParams:null,delay:200,missingMessage:\"This field is required.\",invalidMessage:null,tipPosition:\"right\",deltaX:0,novalidate:false,events:{focus:_b,blur:_10,mouseenter:_14,mouseleave:_17,click:function(e){\nvar t=$(e.data.target);\nif(!t.is(\":focus\")){\nt.trigger(\"focus\");\n}\n}},tipOptions:{showEvent:\"none\",hideEvent:\"none\",showDelay:0,hideDelay:0,zIndex:\"\",onShow:function(){\n$(this).tooltip(\"tip\").css({color:\"#000\",borderColor:\"#CC9933\",backgroundColor:\"#FFFFCC\"});\n},onHide:function(){\n$(this).tooltip(\"destroy\");\n}},rules:{email:{validator:function(_3a){\nreturn /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i.test(_3a);\n},message:\"Please enter a valid email address.\"},url:{validator:function(_3b){\nreturn /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(_3b);\n},message:\"Please enter a valid URL.\"},length:{validator:function(_3c,_3d){\nvar len=$.trim(_3c).length;\nreturn len>=_3d[0]&&len<=_3d[1];\n},message:\"Please enter a value between {0} and {1}.\"},remote:{validator:function(_3e,_3f){\nvar _40={};\n_40[_3f[1]]=_3e;\nvar _41=$.ajax({url:_3f[0],dataType:\"json\",data:_40,async:false,cache:false,type:\"post\"}).responseText;\nreturn _41==\"true\";\n},message:\"Please fix this field.\"}},onBeforeValidate:function(){\n},onValidate:function(_42){\n}};\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/plugins/jquery.window.js",
    "content": "/**\r\n * jQuery EasyUI 1.4.1\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n(function($){\nfunction _1(_2,_3){\nvar _4=$.data(_2,\"window\");\nif(_3){\nif(_3.left!=null){\n_4.options.left=_3.left;\n}\nif(_3.top!=null){\n_4.options.top=_3.top;\n}\n}\n$(_2).panel(\"move\",_4.options);\nif(_4.shadow){\n_4.shadow.css({left:_4.options.left,top:_4.options.top});\n}\n};\nfunction _5(_6,_7){\nvar _8=$.data(_6,\"window\").options;\nvar pp=$(_6).window(\"panel\");\nvar _9=pp._outerWidth();\nif(_8.inline){\nvar _a=pp.parent();\n_8.left=Math.ceil((_a.width()-_9)/2+_a.scrollLeft());\n}else{\n_8.left=Math.ceil(($(window)._outerWidth()-_9)/2+$(document).scrollLeft());\n}\nif(_7){\n_1(_6);\n}\n};\nfunction _b(_c,_d){\nvar _e=$.data(_c,\"window\").options;\nvar pp=$(_c).window(\"panel\");\nvar _f=pp._outerHeight();\nif(_e.inline){\nvar _10=pp.parent();\n_e.top=Math.ceil((_10.height()-_f)/2+_10.scrollTop());\n}else{\n_e.top=Math.ceil(($(window)._outerHeight()-_f)/2+$(document).scrollTop());\n}\nif(_d){\n_1(_c);\n}\n};\nfunction _11(_12){\nvar _13=$.data(_12,\"window\");\nvar _14=_13.options;\nvar win=$(_12).panel($.extend({},_13.options,{border:false,doSize:true,closed:true,cls:\"window\",headerCls:\"window-header\",bodyCls:\"window-body \"+(_14.noheader?\"window-body-noheader\":\"\"),onBeforeDestroy:function(){\nif(_14.onBeforeDestroy.call(_12)==false){\nreturn false;\n}\nif(_13.shadow){\n_13.shadow.remove();\n}\nif(_13.mask){\n_13.mask.remove();\n}\n},onClose:function(){\nif(_13.shadow){\n_13.shadow.hide();\n}\nif(_13.mask){\n_13.mask.hide();\n}\n_14.onClose.call(_12);\n},onOpen:function(){\nif(_13.mask){\n_13.mask.css({display:\"block\",zIndex:$.fn.window.defaults.zIndex++});\n}\nif(_13.shadow){\n_13.shadow.css({display:\"block\",zIndex:$.fn.window.defaults.zIndex++,left:_14.left,top:_14.top,width:_13.window._outerWidth(),height:_13.window._outerHeight()});\n}\n_13.window.css(\"z-index\",$.fn.window.defaults.zIndex++);\n_14.onOpen.call(_12);\n},onResize:function(_15,_16){\nvar _17=$(this).panel(\"options\");\n$.extend(_14,{width:_17.width,height:_17.height,left:_17.left,top:_17.top});\nif(_13.shadow){\n_13.shadow.css({left:_14.left,top:_14.top,width:_13.window._outerWidth(),height:_13.window._outerHeight()});\n}\n_14.onResize.call(_12,_15,_16);\n},onMinimize:function(){\nif(_13.shadow){\n_13.shadow.hide();\n}\nif(_13.mask){\n_13.mask.hide();\n}\n_13.options.onMinimize.call(_12);\n},onBeforeCollapse:function(){\nif(_14.onBeforeCollapse.call(_12)==false){\nreturn false;\n}\nif(_13.shadow){\n_13.shadow.hide();\n}\n},onExpand:function(){\nif(_13.shadow){\n_13.shadow.show();\n}\n_14.onExpand.call(_12);\n}}));\n_13.window=win.panel(\"panel\");\nif(_13.mask){\n_13.mask.remove();\n}\nif(_14.modal==true){\n_13.mask=$(\"<div class=\\\"window-mask\\\"></div>\").insertAfter(_13.window);\n_13.mask.css({width:(_14.inline?_13.mask.parent().width():_18().width),height:(_14.inline?_13.mask.parent().height():_18().height),display:\"none\"});\n}\nif(_13.shadow){\n_13.shadow.remove();\n}\nif(_14.shadow==true){\n_13.shadow=$(\"<div class=\\\"window-shadow\\\"></div>\").insertAfter(_13.window);\n_13.shadow.css({display:\"none\"});\n}\nif(_14.left==null){\n_5(_12);\n}\nif(_14.top==null){\n_b(_12);\n}\n_1(_12);\nif(!_14.closed){\nwin.window(\"open\");\n}\n};\nfunction _19(_1a){\nvar _1b=$.data(_1a,\"window\");\n_1b.window.draggable({handle:\">div.panel-header>div.panel-title\",disabled:_1b.options.draggable==false,onStartDrag:function(e){\nif(_1b.mask){\n_1b.mask.css(\"z-index\",$.fn.window.defaults.zIndex++);\n}\nif(_1b.shadow){\n_1b.shadow.css(\"z-index\",$.fn.window.defaults.zIndex++);\n}\n_1b.window.css(\"z-index\",$.fn.window.defaults.zIndex++);\nif(!_1b.proxy){\n_1b.proxy=$(\"<div class=\\\"window-proxy\\\"></div>\").insertAfter(_1b.window);\n}\n_1b.proxy.css({display:\"none\",zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top});\n_1b.proxy._outerWidth(_1b.window._outerWidth());\n_1b.proxy._outerHeight(_1b.window._outerHeight());\nsetTimeout(function(){\nif(_1b.proxy){\n_1b.proxy.show();\n}\n},500);\n},onDrag:function(e){\n_1b.proxy.css({display:\"block\",left:e.data.left,top:e.data.top});\nreturn false;\n},onStopDrag:function(e){\n_1b.options.left=e.data.left;\n_1b.options.top=e.data.top;\n$(_1a).window(\"move\");\n_1b.proxy.remove();\n_1b.proxy=null;\n}});\n_1b.window.resizable({disabled:_1b.options.resizable==false,onStartResize:function(e){\nif(_1b.pmask){\n_1b.pmask.remove();\n}\n_1b.pmask=$(\"<div class=\\\"window-proxy-mask\\\"></div>\").insertAfter(_1b.window);\n_1b.pmask.css({zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top,width:_1b.window._outerWidth(),height:_1b.window._outerHeight()});\nif(_1b.proxy){\n_1b.proxy.remove();\n}\n_1b.proxy=$(\"<div class=\\\"window-proxy\\\"></div>\").insertAfter(_1b.window);\n_1b.proxy.css({zIndex:$.fn.window.defaults.zIndex++,left:e.data.left,top:e.data.top});\n_1b.proxy._outerWidth(e.data.width)._outerHeight(e.data.height);\n},onResize:function(e){\n_1b.proxy.css({left:e.data.left,top:e.data.top});\n_1b.proxy._outerWidth(e.data.width);\n_1b.proxy._outerHeight(e.data.height);\nreturn false;\n},onStopResize:function(e){\n$(_1a).window(\"resize\",e.data);\n_1b.pmask.remove();\n_1b.pmask=null;\n_1b.proxy.remove();\n_1b.proxy=null;\n}});\n};\nfunction _18(){\nif(document.compatMode==\"BackCompat\"){\nreturn {width:Math.max(document.body.scrollWidth,document.body.clientWidth),height:Math.max(document.body.scrollHeight,document.body.clientHeight)};\n}else{\nreturn {width:Math.max(document.documentElement.scrollWidth,document.documentElement.clientWidth),height:Math.max(document.documentElement.scrollHeight,document.documentElement.clientHeight)};\n}\n};\n$(window).resize(function(){\n$(\"body>div.window-mask\").css({width:$(window)._outerWidth(),height:$(window)._outerHeight()});\nsetTimeout(function(){\n$(\"body>div.window-mask\").css({width:_18().width,height:_18().height});\n},50);\n});\n$.fn.window=function(_1c,_1d){\nif(typeof _1c==\"string\"){\nvar _1e=$.fn.window.methods[_1c];\nif(_1e){\nreturn _1e(this,_1d);\n}else{\nreturn this.panel(_1c,_1d);\n}\n}\n_1c=_1c||{};\nreturn this.each(function(){\nvar _1f=$.data(this,\"window\");\nif(_1f){\n$.extend(_1f.options,_1c);\n}else{\n_1f=$.data(this,\"window\",{options:$.extend({},$.fn.window.defaults,$.fn.window.parseOptions(this),_1c)});\nif(!_1f.options.inline){\ndocument.body.appendChild(this);\n}\n}\n_11(this);\n_19(this);\n});\n};\n$.fn.window.methods={options:function(jq){\nvar _20=jq.panel(\"options\");\nvar _21=$.data(jq[0],\"window\").options;\nreturn $.extend(_21,{closed:_20.closed,collapsed:_20.collapsed,minimized:_20.minimized,maximized:_20.maximized});\n},window:function(jq){\nreturn $.data(jq[0],\"window\").window;\n},move:function(jq,_22){\nreturn jq.each(function(){\n_1(this,_22);\n});\n},hcenter:function(jq){\nreturn jq.each(function(){\n_5(this,true);\n});\n},vcenter:function(jq){\nreturn jq.each(function(){\n_b(this,true);\n});\n},center:function(jq){\nreturn jq.each(function(){\n_5(this);\n_b(this);\n_1(this);\n});\n}};\n$.fn.window.parseOptions=function(_23){\nreturn $.extend({},$.fn.panel.parseOptions(_23),$.parser.parseOptions(_23,[{draggable:\"boolean\",resizable:\"boolean\",shadow:\"boolean\",modal:\"boolean\",inline:\"boolean\"}]));\n};\n$.fn.window.defaults=$.extend({},$.fn.panel.defaults,{zIndex:9000,draggable:true,resizable:true,shadow:true,modal:false,inline:false,title:\"New Window\",collapsible:true,minimizable:true,maximizable:true,closable:true,closed:false});\n})(jQuery);\n\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/easyloader.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * easyloader - jQuery EasyUI\r\n * \r\n */\r\n(function(){\r\n\tvar modules = {\r\n\t\tdraggable:{\r\n\t\t\tjs:'jquery.draggable.js'\r\n\t\t},\r\n\t\tdroppable:{\r\n\t\t\tjs:'jquery.droppable.js'\r\n\t\t},\r\n\t\tresizable:{\r\n\t\t\tjs:'jquery.resizable.js'\r\n\t\t},\r\n\t\tlinkbutton:{\r\n\t\t\tjs:'jquery.linkbutton.js',\r\n\t\t\tcss:'linkbutton.css'\r\n\t\t},\r\n\t\tprogressbar:{\r\n\t\t\tjs:'jquery.progressbar.js',\r\n\t\t\tcss:'progressbar.css'\r\n\t\t},\r\n\t\ttooltip:{\r\n\t\t\tjs:'jquery.tooltip.js',\r\n\t\t\tcss:'tooltip.css'\r\n\t\t},\r\n\t\tpagination:{\r\n\t\t\tjs:'jquery.pagination.js',\r\n\t\t\tcss:'pagination.css',\r\n\t\t\tdependencies:['linkbutton']\r\n\t\t},\r\n\t\tdatagrid:{\r\n\t\t\tjs:'jquery.datagrid.js',\r\n\t\t\tcss:'datagrid.css',\r\n\t\t\tdependencies:['panel','resizable','linkbutton','pagination']\r\n\t\t},\r\n\t\ttreegrid:{\r\n\t\t\tjs:'jquery.treegrid.js',\r\n\t\t\tcss:'tree.css',\r\n\t\t\tdependencies:['datagrid']\r\n\t\t},\r\n\t\tpropertygrid:{\r\n\t\t\tjs:'jquery.propertygrid.js',\r\n\t\t\tcss:'propertygrid.css',\r\n\t\t\tdependencies:['datagrid']\r\n\t\t},\r\n\t\tpanel: {\r\n\t\t\tjs:'jquery.panel.js',\r\n\t\t\tcss:'panel.css'\r\n\t\t},\r\n\t\twindow:{\r\n\t\t\tjs:'jquery.window.js',\r\n\t\t\tcss:'window.css',\r\n\t\t\tdependencies:['resizable','draggable','panel']\r\n\t\t},\r\n\t\tdialog:{\r\n\t\t\tjs:'jquery.dialog.js',\r\n\t\t\tcss:'dialog.css',\r\n\t\t\tdependencies:['linkbutton','window']\r\n\t\t},\r\n\t\tmessager:{\r\n\t\t\tjs:'jquery.messager.js',\r\n\t\t\tcss:'messager.css',\r\n\t\t\tdependencies:['linkbutton','window','progressbar']\r\n\t\t},\r\n\t\tlayout:{\r\n\t\t\tjs:'jquery.layout.js',\r\n\t\t\tcss:'layout.css',\r\n\t\t\tdependencies:['resizable','panel']\r\n\t\t},\r\n\t\tform:{\r\n\t\t\tjs:'jquery.form.js'\r\n\t\t},\r\n\t\tmenu:{\r\n\t\t\tjs:'jquery.menu.js',\r\n\t\t\tcss:'menu.css'\r\n\t\t},\r\n\t\ttabs:{\r\n\t\t\tjs:'jquery.tabs.js',\r\n\t\t\tcss:'tabs.css',\r\n\t\t\tdependencies:['panel','linkbutton']\r\n\t\t},\r\n\t\tmenubutton:{\r\n\t\t\tjs:'jquery.menubutton.js',\r\n\t\t\tcss:'menubutton.css',\r\n\t\t\tdependencies:['linkbutton','menu']\r\n\t\t},\r\n\t\tsplitbutton:{\r\n\t\t\tjs:'jquery.splitbutton.js',\r\n\t\t\tcss:'splitbutton.css',\r\n\t\t\tdependencies:['menubutton']\r\n\t\t},\r\n\t\taccordion:{\r\n\t\t\tjs:'jquery.accordion.js',\r\n\t\t\tcss:'accordion.css',\r\n\t\t\tdependencies:['panel']\r\n\t\t},\r\n\t\tcalendar:{\r\n\t\t\tjs:'jquery.calendar.js',\r\n\t\t\tcss:'calendar.css'\r\n\t\t},\r\n\t\tcombo:{\r\n\t\t\tjs:'jquery.combo.js',\r\n\t\t\tcss:'combo.css',\r\n\t\t\tdependencies:['panel','validatebox']\r\n\t\t},\r\n\t\tcombobox:{\r\n\t\t\tjs:'jquery.combobox.js',\r\n\t\t\tcss:'combobox.css',\r\n\t\t\tdependencies:['combo']\r\n\t\t},\r\n\t\tcombotree:{\r\n\t\t\tjs:'jquery.combotree.js',\r\n\t\t\tdependencies:['combo','tree']\r\n\t\t},\r\n\t\tcombogrid:{\r\n\t\t\tjs:'jquery.combogrid.js',\r\n\t\t\tdependencies:['combo','datagrid']\r\n\t\t},\r\n\t\tvalidatebox:{\r\n\t\t\tjs:'jquery.validatebox.js',\r\n\t\t\tcss:'validatebox.css',\r\n\t\t\tdependencies:['tooltip']\r\n\t\t},\r\n\t\tnumberbox:{\r\n\t\t\tjs:'jquery.numberbox.js',\r\n\t\t\tdependencies:['validatebox']\r\n\t\t},\r\n\t\tsearchbox:{\r\n\t\t\tjs:'jquery.searchbox.js',\r\n\t\t\tcss:'searchbox.css',\r\n\t\t\tdependencies:['menubutton']\r\n\t\t},\r\n\t\tspinner:{\r\n\t\t\tjs:'jquery.spinner.js',\r\n\t\t\tcss:'spinner.css',\r\n\t\t\tdependencies:['validatebox']\r\n\t\t},\r\n\t\tnumberspinner:{\r\n\t\t\tjs:'jquery.numberspinner.js',\r\n\t\t\tdependencies:['spinner','numberbox']\r\n\t\t},\r\n\t\ttimespinner:{\r\n\t\t\tjs:'jquery.timespinner.js',\r\n\t\t\tdependencies:['spinner']\r\n\t\t},\r\n\t\ttree:{\r\n\t\t\tjs:'jquery.tree.js',\r\n\t\t\tcss:'tree.css',\r\n\t\t\tdependencies:['draggable','droppable']\r\n\t\t},\r\n\t\tdatebox:{\r\n\t\t\tjs:'jquery.datebox.js',\r\n\t\t\tcss:'datebox.css',\r\n\t\t\tdependencies:['calendar','combo']\r\n\t\t},\r\n\t\tdatetimebox:{\r\n\t\t\tjs:'jquery.datetimebox.js',\r\n\t\t\tdependencies:['datebox','timespinner']\r\n\t\t},\r\n\t\tslider:{\r\n\t\t\tjs:'jquery.slider.js',\r\n\t\t\tdependencies:['draggable']\r\n\t\t},\r\n\t\ttooltip:{\r\n\t\t\tjs:'jquery.tooltip.js'\r\n\t\t},\r\n\t\tparser:{\r\n\t\t\tjs:'jquery.parser.js'\r\n\t\t}\r\n\t};\r\n\t\r\n\tvar locales = {\r\n\t\t'af':'easyui-lang-af.js',\r\n\t\t'ar':'easyui-lang-ar.js',\r\n\t\t'bg':'easyui-lang-bg.js',\r\n\t\t'ca':'easyui-lang-ca.js',\r\n\t\t'cs':'easyui-lang-cs.js',\r\n\t\t'cz':'easyui-lang-cz.js',\r\n\t\t'da':'easyui-lang-da.js',\r\n\t\t'de':'easyui-lang-de.js',\r\n\t\t'el':'easyui-lang-el.js',\r\n\t\t'en':'easyui-lang-en.js',\r\n\t\t'es':'easyui-lang-es.js',\r\n\t\t'fr':'easyui-lang-fr.js',\r\n\t\t'it':'easyui-lang-it.js',\r\n\t\t'jp':'easyui-lang-jp.js',\r\n\t\t'nl':'easyui-lang-nl.js',\r\n\t\t'pl':'easyui-lang-pl.js',\r\n\t\t'pt_BR':'easyui-lang-pt_BR.js',\r\n\t\t'ru':'easyui-lang-ru.js',\r\n\t\t'sv_SE':'easyui-lang-sv_SE.js',\r\n\t\t'tr':'easyui-lang-tr.js',\r\n\t\t'zh_CN':'easyui-lang-zh_CN.js',\r\n\t\t'zh_TW':'easyui-lang-zh_TW.js'\r\n\t};\r\n\t\r\n\tvar queues = {};\r\n\t\r\n\tfunction loadJs(url, callback){\r\n\t\tvar done = false;\r\n\t\tvar script = document.createElement('script');\r\n\t\tscript.type = 'text/javascript';\r\n\t\tscript.language = 'javascript';\r\n\t\tscript.src = url;\r\n\t\tscript.onload = script.onreadystatechange = function(){\r\n\t\t\tif (!done && (!script.readyState || script.readyState == 'loaded' || script.readyState == 'complete')){\r\n\t\t\t\tdone = true;\r\n\t\t\t\tscript.onload = script.onreadystatechange = null;\r\n\t\t\t\tif (callback){\r\n\t\t\t\t\tcallback.call(script);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tdocument.getElementsByTagName(\"head\")[0].appendChild(script);\r\n\t}\r\n\t\r\n\tfunction runJs(url, callback){\r\n\t\tloadJs(url, function(){\r\n\t\t\tdocument.getElementsByTagName(\"head\")[0].removeChild(this);\r\n\t\t\tif (callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction loadCss(url, callback){\r\n\t\tvar link = document.createElement('link');\r\n\t\tlink.rel = 'stylesheet';\r\n\t\tlink.type = 'text/css';\r\n\t\tlink.media = 'screen';\r\n\t\tlink.href = url;\r\n\t\tdocument.getElementsByTagName('head')[0].appendChild(link);\r\n\t\tif (callback){\r\n\t\t\tcallback.call(link);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction loadSingle(name, callback){\r\n\t\tqueues[name] = 'loading';\r\n\t\t\r\n\t\tvar module = modules[name];\r\n\t\tvar jsStatus = 'loading';\r\n\t\tvar cssStatus = (easyloader.css && module['css']) ? 'loading' : 'loaded';\r\n\t\t\r\n\t\tif (easyloader.css && module['css']){\r\n\t\t\tif (/^http/i.test(module['css'])){\r\n\t\t\t\tvar url = module['css'];\r\n\t\t\t} else {\r\n\t\t\t\tvar url = easyloader.base + 'themes/' + easyloader.theme + '/' + module['css'];\r\n\t\t\t}\r\n\t\t\tloadCss(url, function(){\r\n\t\t\t\tcssStatus = 'loaded';\r\n\t\t\t\tif (jsStatus == 'loaded' && cssStatus == 'loaded'){\r\n\t\t\t\t\tfinish();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tif (/^http/i.test(module['js'])){\r\n\t\t\tvar url = module['js'];\r\n\t\t} else {\r\n\t\t\tvar url = easyloader.base + 'plugins/' + module['js'];\r\n\t\t}\r\n\t\tloadJs(url, function(){\r\n\t\t\tjsStatus = 'loaded';\r\n\t\t\tif (jsStatus == 'loaded' && cssStatus == 'loaded'){\r\n\t\t\t\tfinish();\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tfunction finish(){\r\n\t\t\tqueues[name] = 'loaded';\r\n\t\t\teasyloader.onProgress(name);\r\n\t\t\tif (callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction loadModule(name, callback){\r\n\t\tvar mm = [];\r\n\t\tvar doLoad = false;\r\n\t\t\r\n\t\tif (typeof name == 'string'){\r\n\t\t\tadd(name);\r\n\t\t} else {\r\n\t\t\tfor(var i=0; i<name.length; i++){\r\n\t\t\t\tadd(name[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tfunction add(name){\r\n\t\t\tif (!modules[name]) return;\r\n\t\t\tvar d = modules[name]['dependencies'];\r\n\t\t\tif (d){\r\n\t\t\t\tfor(var i=0; i<d.length; i++){\r\n\t\t\t\t\tadd(d[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tmm.push(name);\r\n\t\t}\r\n\t\t\r\n\t\tfunction finish(){\r\n\t\t\tif (callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}\r\n\t\t\teasyloader.onLoad(name);\r\n\t\t}\r\n\t\t\r\n\t\tvar time = 0;\r\n\t\tfunction loadMm(){\r\n\t\t\tif (mm.length){\r\n\t\t\t\tvar m = mm[0];\t// the first module\r\n\t\t\t\tif (!queues[m]){\r\n\t\t\t\t\tdoLoad = true;\r\n\t\t\t\t\tloadSingle(m, function(){\r\n\t\t\t\t\t\tmm.shift();\r\n\t\t\t\t\t\tloadMm();\r\n\t\t\t\t\t});\r\n\t\t\t\t} else if (queues[m] == 'loaded'){\r\n\t\t\t\t\tmm.shift();\r\n\t\t\t\t\tloadMm();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (time < easyloader.timeout){\r\n\t\t\t\t\t\ttime += 10;\r\n\t\t\t\t\t\tsetTimeout(arguments.callee, 10);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (easyloader.locale && doLoad == true && locales[easyloader.locale]){\r\n\t\t\t\t\tvar url = easyloader.base + 'locale/' + locales[easyloader.locale];\r\n\t\t\t\t\trunJs(url, function(){\r\n\t\t\t\t\t\tfinish();\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfinish();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tloadMm();\r\n\t}\r\n\t\r\n\teasyloader = {\r\n\t\tmodules:modules,\r\n\t\tlocales:locales,\r\n\t\t\r\n\t\tbase:'.',\r\n\t\ttheme:'default',\r\n\t\tcss:true,\r\n\t\tlocale:null,\r\n\t\ttimeout:2000,\r\n\t\r\n\t\tload: function(name, callback){\r\n\t\t\tif (/\\.css$/i.test(name)){\r\n\t\t\t\tif (/^http/i.test(name)){\r\n\t\t\t\t\tloadCss(name, callback);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tloadCss(easyloader.base + name, callback);\r\n\t\t\t\t}\r\n\t\t\t} else if (/\\.js$/i.test(name)){\r\n\t\t\t\tif (/^http/i.test(name)){\r\n\t\t\t\t\tloadJs(name, callback);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tloadJs(easyloader.base + name, callback);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tloadModule(name, callback);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\tonProgress: function(name){},\r\n\t\tonLoad: function(name){}\r\n\t};\r\n\r\n\tvar scripts = document.getElementsByTagName('script');\r\n\tfor(var i=0; i<scripts.length; i++){\r\n\t\tvar src = scripts[i].src;\r\n\t\tif (!src) continue;\r\n\t\tvar m = src.match(/easyloader\\.js(\\W|$)/i);\r\n\t\tif (m){\r\n\t\t\teasyloader.base = src.substring(0, m.index);\r\n\t\t}\r\n\t}\r\n\r\n\twindow.using = easyloader.load;\r\n\t\r\n\tif (window.jQuery){\r\n\t\tjQuery(function(){\r\n\t\t\teasyloader.load('parser', function(){\r\n\t\t\t\tjQuery.parser.parse();\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\t\r\n})();\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.accordion.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * accordion - jQuery EasyUI\r\n * \r\n * Dependencies:\r\n * \t panel\r\n * \r\n */\r\n(function($){\r\n\t\r\n\tfunction setSize(container){\r\n\t\tvar state = $.data(container, 'accordion');\r\n\t\tvar opts = state.options;\r\n\t\tvar panels = state.panels;\r\n\t\t\r\n\t\tvar cc = $(container);\r\n\t\topts.fit ? $.extend(opts, cc._fit()) : cc._fit(false);\r\n\t\t\r\n\t\tif (!isNaN(opts.width)){\r\n\t\t\tcc._outerWidth(opts.width);\r\n\t\t} else {\r\n\t\t\tcc.css('width', '');\r\n\t\t}\r\n\t\t\r\n\t\tvar headerHeight = 0;\r\n\t\tvar bodyHeight = 'auto';\r\n\t\tvar headers = cc.find('>div.panel>div.accordion-header');\r\n\t\tif (headers.length){\r\n\t\t\theaderHeight = $(headers[0]).css('height', '')._outerHeight();\r\n\t\t}\r\n\t\tif (!isNaN(opts.height)){\r\n\t\t\tcc._outerHeight(opts.height);\r\n\t\t\tbodyHeight = cc.height() - headerHeight*headers.length;\r\n\t\t} else {\r\n\t\t\tcc.css('height', '');\r\n\t\t}\r\n\t\t\r\n\t\t_resize(true, bodyHeight - _resize(false) + 1);\r\n\t\t\r\n\t\tfunction _resize(collapsible, height){\r\n\t\t\tvar totalHeight = 0;\r\n\t\t\tfor(var i=0; i<panels.length; i++){\r\n\t\t\t\tvar p = panels[i];\r\n\t\t\t\tvar h = p.panel('header')._outerHeight(headerHeight);\r\n\t\t\t\tif (p.panel('options').collapsible == collapsible){\r\n\t\t\t\t\tvar pheight = isNaN(height) ? undefined : (height+headerHeight*h.length);\r\n\t\t\t\t\tp.panel('resize', {\r\n\t\t\t\t\t\twidth: cc.width(),\r\n\t\t\t\t\t\theight: (collapsible ? pheight : undefined)\r\n\t\t\t\t\t});\r\n\t\t\t\t\ttotalHeight += p.panel('panel').outerHeight()-headerHeight;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn totalHeight;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * find a panel by specified property, return the panel object or panel index.\r\n\t */\r\n\tfunction findBy(container, property, value, all){\r\n\t\tvar panels = $.data(container, 'accordion').panels;\r\n\t\tvar pp = [];\r\n\t\tfor(var i=0; i<panels.length; i++){\r\n\t\t\tvar p = panels[i];\r\n\t\t\tif (property){\r\n\t\t\t\tif (p.panel('options')[property] == value){\r\n\t\t\t\t\tpp.push(p);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (p[0] == $(value)[0]){\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (property){\r\n\t\t\treturn all ? pp : (pp.length ? pp[0] : null);\r\n\t\t} else {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction getSelections(container){\r\n\t\treturn findBy(container, 'collapsed', false, true);\r\n\t}\r\n\t\r\n\tfunction getSelected(container){\r\n\t\tvar pp = getSelections(container);\r\n\t\treturn pp.length ? pp[0] : null;\r\n\t}\r\n\t\r\n\t/**\r\n\t * get panel index, start with 0\r\n\t */\r\n\tfunction getPanelIndex(container, panel){\r\n\t\treturn findBy(container, null, panel);\r\n\t}\r\n\t\r\n\t/**\r\n\t * get the specified panel.\r\n\t */\r\n\tfunction getPanel(container, which){\r\n\t\tvar panels = $.data(container, 'accordion').panels;\r\n\t\tif (typeof which == 'number'){\r\n\t\t\tif (which < 0 || which >= panels.length){\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\treturn panels[which];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn findBy(container, 'title', which);\r\n\t}\r\n\t\r\n\tfunction setProperties(container){\r\n\t\tvar opts = $.data(container, 'accordion').options;\r\n\t\tvar cc = $(container);\r\n\t\tif (opts.border){\r\n\t\t\tcc.removeClass('accordion-noborder');\r\n\t\t} else {\r\n\t\t\tcc.addClass('accordion-noborder');\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction init(container){\r\n\t\tvar state = $.data(container, 'accordion');\r\n\t\tvar cc = $(container);\r\n\t\tcc.addClass('accordion');\r\n\t\t\r\n\t\tstate.panels = [];\r\n\t\tcc.children('div').each(function(){\r\n\t\t\tvar opts = $.extend({}, $.parser.parseOptions(this), {\r\n\t\t\t\tselected: ($(this).attr('selected') ? true : undefined)\r\n\t\t\t});\r\n\t\t\tvar pp = $(this);\r\n\t\t\tstate.panels.push(pp);\r\n\t\t\tcreatePanel(container, pp, opts);\r\n\t\t});\r\n\t\t\r\n\t\tcc.bind('_resize', function(e,force){\r\n\t\t\tvar opts = $.data(container, 'accordion').options;\r\n\t\t\tif (opts.fit == true || force){\r\n\t\t\t\tsetSize(container);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction createPanel(container, pp, options){\r\n\t\tvar opts = $.data(container, 'accordion').options;\r\n\t\tpp.panel($.extend({}, {\r\n\t\t\tcollapsible: true,\r\n\t\t\tminimizable: false,\r\n\t\t\tmaximizable: false,\r\n\t\t\tclosable: false,\r\n\t\t\tdoSize: false,\r\n\t\t\tcollapsed: true,\r\n\t\t\theaderCls: 'accordion-header',\r\n\t\t\tbodyCls: 'accordion-body'\r\n\t\t}, options, {\r\n\t\t\tonBeforeExpand: function(){\r\n\t\t\t\tif (options.onBeforeExpand){\r\n\t\t\t\t\tif (options.onBeforeExpand.call(this) == false){return false}\r\n\t\t\t\t}\r\n\t\t\t\tif (!opts.multiple){\r\n\t\t\t\t\t// get all selected panel\r\n\t\t\t\t\tvar all = $.grep(getSelections(container), function(p){\r\n\t\t\t\t\t\treturn p.panel('options').collapsible;\r\n\t\t\t\t\t});\r\n\t\t\t\t\tfor(var i=0; i<all.length; i++){\r\n\t\t\t\t\t\tunselect(container, getPanelIndex(container, all[i]));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tvar header = $(this).panel('header');\r\n\t\t\t\theader.addClass('accordion-header-selected');\r\n\t\t\t\theader.find('.accordion-collapse').removeClass('accordion-expand');\r\n\t\t\t},\r\n\t\t\tonExpand: function(){\r\n\t\t\t\tif (options.onExpand){options.onExpand.call(this)}\r\n\t\t\t\topts.onSelect.call(container, $(this).panel('options').title, getPanelIndex(container, this));\r\n\t\t\t},\r\n\t\t\tonBeforeCollapse: function(){\r\n\t\t\t\tif (options.onBeforeCollapse){\r\n\t\t\t\t\tif (options.onBeforeCollapse.call(this) == false){return false}\r\n\t\t\t\t}\r\n\t\t\t\tvar header = $(this).panel('header');\r\n\t\t\t\theader.removeClass('accordion-header-selected');\r\n\t\t\t\theader.find('.accordion-collapse').addClass('accordion-expand');\r\n\t\t\t},\r\n\t\t\tonCollapse: function(){\r\n\t\t\t\tif (options.onCollapse){options.onCollapse.call(this)}\r\n\t\t\t\topts.onUnselect.call(container, $(this).panel('options').title, getPanelIndex(container, this));\r\n\t\t\t}\r\n\t\t}));\r\n\t\t\r\n\t\tvar header = pp.panel('header');\r\n\t\tvar tool = header.children('div.panel-tool');\r\n\t\ttool.children('a.panel-tool-collapse').hide();\t// hide the old collapse button\r\n\t\tvar t = $('<a href=\"javascript:void(0)\"></a>').addClass('accordion-collapse accordion-expand').appendTo(tool);\r\n\t\tt.bind('click', function(){\r\n\t\t\tvar index = getPanelIndex(container, pp);\r\n\t\t\tif (pp.panel('options').collapsed){\r\n\t\t\t\tselect(container, index);\r\n\t\t\t} else {\r\n\t\t\t\tunselect(container, index);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\t\tpp.panel('options').collapsible ? t.show() : t.hide();\r\n\t\t\r\n\t\theader.click(function(){\r\n\t\t\t$(this).find('a.accordion-collapse:visible').triggerHandler('click');\r\n\t\t\treturn false;\r\n\t\t});\r\n\t}\r\n\t\r\n\t/**\r\n\t * select and set the specified panel active\r\n\t */\r\n\tfunction select(container, which){\r\n\t\tvar p = getPanel(container, which);\r\n\t\tif (!p){return}\r\n\t\tstopAnimate(container);\r\n\t\tvar opts = $.data(container, 'accordion').options;\r\n\t\tp.panel('expand', opts.animate);\r\n\t}\r\n\t\r\n\tfunction unselect(container, which){\r\n\t\tvar p = getPanel(container, which);\r\n\t\tif (!p){return}\r\n\t\tstopAnimate(container);\r\n\t\tvar opts = $.data(container, 'accordion').options;\r\n\t\tp.panel('collapse', opts.animate);\r\n\t}\r\n\t\r\n\tfunction doFirstSelect(container){\r\n\t\tvar opts = $.data(container, 'accordion').options;\r\n\t\tvar p = findBy(container, 'selected', true);\r\n\t\tif (p){\r\n\t\t\t_select(getPanelIndex(container, p));\r\n\t\t} else {\r\n\t\t\t_select(opts.selected);\r\n\t\t}\r\n\t\t\r\n\t\tfunction _select(index){\r\n\t\t\tvar animate = opts.animate;\r\n\t\t\topts.animate = false;\r\n\t\t\tselect(container, index);\r\n\t\t\topts.animate = animate;\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * stop the animation of all panels\r\n\t */\r\n\tfunction stopAnimate(container){\r\n\t\tvar panels = $.data(container, 'accordion').panels;\r\n\t\tfor(var i=0; i<panels.length; i++){\r\n\t\t\tpanels[i].stop(true,true);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction add(container, options){\r\n\t\tvar state = $.data(container, 'accordion');\r\n\t\tvar opts = state.options;\r\n\t\tvar panels = state.panels;\r\n\t\tif (options.selected == undefined) options.selected = true;\r\n\r\n\t\tstopAnimate(container);\r\n\t\t\r\n\t\tvar pp = $('<div></div>').appendTo(container);\r\n\t\tpanels.push(pp);\r\n\t\tcreatePanel(container, pp, options);\r\n\t\tsetSize(container);\r\n\t\t\r\n\t\topts.onAdd.call(container, options.title, panels.length-1);\r\n\t\t\r\n\t\tif (options.selected){\r\n\t\t\tselect(container, panels.length-1);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction remove(container, which){\r\n\t\tvar state = $.data(container, 'accordion');\r\n\t\tvar opts = state.options;\r\n\t\tvar panels = state.panels;\r\n\t\t\r\n\t\tstopAnimate(container);\r\n\t\t\r\n\t\tvar panel = getPanel(container, which);\r\n\t\tvar title = panel.panel('options').title;\r\n\t\tvar index = getPanelIndex(container, panel);\r\n\t\t\r\n\t\tif (!panel){return}\r\n\t\tif (opts.onBeforeRemove.call(container, title, index) == false){return}\r\n\t\t\r\n\t\tpanels.splice(index, 1);\r\n\t\tpanel.panel('destroy');\r\n\t\tif (panels.length){\r\n\t\t\tsetSize(container);\r\n\t\t\tvar curr = getSelected(container);\r\n\t\t\tif (!curr){\r\n\t\t\t\tselect(container, 0);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\topts.onRemove.call(container, title, index);\r\n\t}\r\n\t\r\n\t$.fn.accordion = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\treturn $.fn.accordion.methods[options](this, param);\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\t\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'accordion');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\t$.data(this, 'accordion', {\r\n\t\t\t\t\toptions: $.extend({}, $.fn.accordion.defaults, $.fn.accordion.parseOptions(this), options),\r\n\t\t\t\t\taccordion: $(this).addClass('accordion'),\r\n\t\t\t\t\tpanels: []\r\n\t\t\t\t});\r\n\t\t\t\tinit(this);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tsetProperties(this);\r\n\t\t\tsetSize(this);\r\n\t\t\tdoFirstSelect(this);\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.accordion.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\treturn $.data(jq[0], 'accordion').options;\r\n\t\t},\r\n\t\tpanels: function(jq){\r\n\t\t\treturn $.data(jq[0], 'accordion').panels;\r\n\t\t},\r\n\t\tresize: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetSize(this);\r\n\t\t\t});\r\n\t\t},\r\n\t\tgetSelections: function(jq){\r\n\t\t\treturn getSelections(jq[0]);\r\n\t\t},\r\n\t\tgetSelected: function(jq){\r\n\t\t\treturn getSelected(jq[0]);\r\n\t\t},\r\n\t\tgetPanel: function(jq, which){\r\n\t\t\treturn getPanel(jq[0], which);\r\n\t\t},\r\n\t\tgetPanelIndex: function(jq, panel){\r\n\t\t\treturn getPanelIndex(jq[0], panel);\r\n\t\t},\r\n\t\tselect: function(jq, which){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tselect(this, which);\r\n\t\t\t});\r\n\t\t},\r\n\t\tunselect: function(jq, which){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tunselect(this, which);\r\n\t\t\t});\r\n\t\t},\r\n\t\tadd: function(jq, options){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tadd(this, options);\r\n\t\t\t});\r\n\t\t},\r\n\t\tremove: function(jq, which){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tremove(this, which);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.accordion.parseOptions = function(target){\r\n\t\tvar t = $(target);\r\n\t\treturn $.extend({}, $.parser.parseOptions(target, [\r\n\t\t\t'width','height',\r\n\t\t\t{fit:'boolean',border:'boolean',animate:'boolean',multiple:'boolean',selected:'number'}\r\n\t\t]));\r\n\t};\r\n\t\r\n\t$.fn.accordion.defaults = {\r\n\t\twidth: 'auto',\r\n\t\theight: 'auto',\r\n\t\tfit: false,\r\n\t\tborder: true,\r\n\t\tanimate: true,\r\n\t\tmultiple: false,\r\n\t\tselected: 0,\r\n\t\t\r\n\t\tonSelect: function(title, index){},\r\n\t\tonUnselect: function(title, index){},\r\n\t\tonAdd: function(title, index){},\r\n\t\tonBeforeRemove: function(title, index){},\r\n\t\tonRemove: function(title, index){}\r\n\t};\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.calendar.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * calendar - jQuery EasyUI\r\n * \r\n */\r\n(function($){\r\n\t\r\n\tfunction setSize(target){\r\n\t\tvar opts = $.data(target, 'calendar').options;\r\n\t\tvar t = $(target);\r\n//\t\tif (opts.fit == true){\r\n//\t\t\tvar p = t.parent();\r\n//\t\t\topts.width = p.width();\r\n//\t\t\topts.height = p.height();\r\n//\t\t}\r\n\t\topts.fit ? $.extend(opts, t._fit()) : t._fit(false);\r\n\t\tvar header = t.find('.calendar-header');\r\n\t\tt._outerWidth(opts.width);\r\n\t\tt._outerHeight(opts.height);\r\n\t\tt.find('.calendar-body')._outerHeight(t.height() - header._outerHeight());\r\n\t}\r\n\t\r\n\tfunction init(target){\r\n\t\t$(target).addClass('calendar').html(\r\n\t\t\t\t'<div class=\"calendar-header\">' +\r\n\t\t\t\t\t'<div class=\"calendar-prevmonth\"></div>' +\r\n\t\t\t\t\t'<div class=\"calendar-nextmonth\"></div>' +\r\n\t\t\t\t\t'<div class=\"calendar-prevyear\"></div>' +\r\n\t\t\t\t\t'<div class=\"calendar-nextyear\"></div>' +\r\n\t\t\t\t\t'<div class=\"calendar-title\">' +\r\n\t\t\t\t\t\t'<span>Aprial 2010</span>' +\r\n\t\t\t\t\t'</div>' +\r\n\t\t\t\t'</div>' +\r\n\t\t\t\t'<div class=\"calendar-body\">' +\r\n\t\t\t\t\t'<div class=\"calendar-menu\">' +\r\n\t\t\t\t\t\t'<div class=\"calendar-menu-year-inner\">' +\r\n\t\t\t\t\t\t\t'<span class=\"calendar-menu-prev\"></span>' +\r\n\t\t\t\t\t\t\t'<span><input class=\"calendar-menu-year\" type=\"text\"></input></span>' +\r\n\t\t\t\t\t\t\t'<span class=\"calendar-menu-next\"></span>' +\r\n\t\t\t\t\t\t'</div>' +\r\n\t\t\t\t\t\t'<div class=\"calendar-menu-month-inner\">' +\r\n\t\t\t\t\t\t'</div>' +\r\n\t\t\t\t\t'</div>' +\r\n\t\t\t\t'</div>'\r\n\t\t);\r\n\t\t\r\n\t\t$(target).find('.calendar-title span').hover(\r\n\t\t\tfunction(){$(this).addClass('calendar-menu-hover');},\r\n\t\t\tfunction(){$(this).removeClass('calendar-menu-hover');}\r\n\t\t).click(function(){\r\n\t\t\tvar menu = $(target).find('.calendar-menu');\r\n\t\t\tif (menu.is(':visible')){\r\n\t\t\t\tmenu.hide();\r\n\t\t\t} else {\r\n\t\t\t\tshowSelectMenus(target);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\t$('.calendar-prevmonth,.calendar-nextmonth,.calendar-prevyear,.calendar-nextyear', target).hover(\r\n\t\t\tfunction(){$(this).addClass('calendar-nav-hover');},\r\n\t\t\tfunction(){$(this).removeClass('calendar-nav-hover');}\r\n\t\t);\r\n\t\t$(target).find('.calendar-nextmonth').click(function(){\r\n\t\t\tshowMonth(target, 1);\r\n\t\t});\r\n\t\t$(target).find('.calendar-prevmonth').click(function(){\r\n\t\t\tshowMonth(target, -1);\r\n\t\t});\r\n\t\t$(target).find('.calendar-nextyear').click(function(){\r\n\t\t\tshowYear(target, 1);\r\n\t\t});\r\n\t\t$(target).find('.calendar-prevyear').click(function(){\r\n\t\t\tshowYear(target, -1);\r\n\t\t});\r\n\t\t\r\n\t\t$(target).bind('_resize', function(){\r\n\t\t\tvar opts = $.data(target, 'calendar').options;\r\n\t\t\tif (opts.fit == true){\r\n\t\t\t\tsetSize(target);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\t}\r\n\t\r\n\t/**\r\n\t * show the calendar corresponding to the current month.\r\n\t */\r\n\tfunction showMonth(target, delta){\r\n\t\tvar opts = $.data(target, 'calendar').options;\r\n\t\topts.month += delta;\r\n\t\tif (opts.month > 12){\r\n\t\t\topts.year++;\r\n\t\t\topts.month = 1;\r\n\t\t} else if (opts.month < 1){\r\n\t\t\topts.year--;\r\n\t\t\topts.month = 12;\r\n\t\t}\r\n\t\tshow(target);\r\n\t\t\r\n\t\tvar menu = $(target).find('.calendar-menu-month-inner');\r\n\t\tmenu.find('td.calendar-selected').removeClass('calendar-selected');\r\n\t\tmenu.find('td:eq(' + (opts.month-1) + ')').addClass('calendar-selected');\r\n\t}\r\n\t\r\n\t/**\r\n\t * show the calendar corresponding to the current year.\r\n\t */\r\n\tfunction showYear(target, delta){\r\n\t\tvar opts = $.data(target, 'calendar').options;\r\n\t\topts.year += delta;\r\n\t\tshow(target);\r\n\t\t\r\n\t\tvar menu = $(target).find('.calendar-menu-year');\r\n\t\tmenu.val(opts.year);\r\n\t}\r\n\t\r\n\t/**\r\n\t * show the select menu that can change year or month, if the menu is not be created then create it.\r\n\t */\r\n\tfunction showSelectMenus(target){\r\n\t\tvar opts = $.data(target, 'calendar').options;\r\n\t\t$(target).find('.calendar-menu').show();\r\n\t\t\r\n\t\tif ($(target).find('.calendar-menu-month-inner').is(':empty')){\r\n\t\t\t$(target).find('.calendar-menu-month-inner').empty();\r\n\t\t\tvar t = $('<table class=\"calendar-mtable\"></table>').appendTo($(target).find('.calendar-menu-month-inner'));\r\n\t\t\tvar idx = 0;\r\n\t\t\tfor(var i=0; i<3; i++){\r\n\t\t\t\tvar tr = $('<tr></tr>').appendTo(t);\r\n\t\t\t\tfor(var j=0; j<4; j++){\r\n\t\t\t\t\t$('<td class=\"calendar-menu-month\"></td>').html(opts.months[idx++]).attr('abbr',idx).appendTo(tr);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t$(target).find('.calendar-menu-prev,.calendar-menu-next').hover(\r\n\t\t\t\t\tfunction(){$(this).addClass('calendar-menu-hover');},\r\n\t\t\t\t\tfunction(){$(this).removeClass('calendar-menu-hover');}\r\n\t\t\t);\r\n\t\t\t$(target).find('.calendar-menu-next').click(function(){\r\n\t\t\t\tvar y = $(target).find('.calendar-menu-year');\r\n\t\t\t\tif (!isNaN(y.val())){\r\n\t\t\t\t\ty.val(parseInt(y.val()) + 1);\r\n\t\t\t\t\tsetDate();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t$(target).find('.calendar-menu-prev').click(function(){\r\n\t\t\t\tvar y = $(target).find('.calendar-menu-year');\r\n\t\t\t\tif (!isNaN(y.val())){\r\n\t\t\t\t\ty.val(parseInt(y.val() - 1));\r\n\t\t\t\t\tsetDate();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t$(target).find('.calendar-menu-year').keypress(function(e){\r\n\t\t\t\tif (e.keyCode == 13){\r\n\t\t\t\t\tsetDate(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t$(target).find('.calendar-menu-month').hover(\r\n\t\t\t\t\tfunction(){$(this).addClass('calendar-menu-hover');},\r\n\t\t\t\t\tfunction(){$(this).removeClass('calendar-menu-hover');}\r\n\t\t\t).click(function(){\r\n\t\t\t\tvar menu = $(target).find('.calendar-menu');\r\n\t\t\t\tmenu.find('.calendar-selected').removeClass('calendar-selected');\r\n\t\t\t\t$(this).addClass('calendar-selected');\r\n\t\t\t\tsetDate(true);\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tfunction setDate(hideMenu){\r\n\t\t\tvar menu = $(target).find('.calendar-menu');\r\n\t\t\tvar year = menu.find('.calendar-menu-year').val();\r\n\t\t\tvar month = menu.find('.calendar-selected').attr('abbr');\r\n\t\t\tif (!isNaN(year)){\r\n\t\t\t\topts.year = parseInt(year);\r\n\t\t\t\topts.month = parseInt(month);\r\n\t\t\t\tshow(target);\r\n\t\t\t}\r\n\t\t\tif (hideMenu){menu.hide()}\r\n\t\t}\r\n\t\t\r\n\t\tvar body = $(target).find('.calendar-body');\r\n\t\tvar sele = $(target).find('.calendar-menu');\r\n\t\tvar seleYear = sele.find('.calendar-menu-year-inner');\r\n\t\tvar seleMonth = sele.find('.calendar-menu-month-inner');\r\n\t\t\r\n\t\tseleYear.find('input').val(opts.year).focus();\r\n\t\tseleMonth.find('td.calendar-selected').removeClass('calendar-selected');\r\n\t\tseleMonth.find('td:eq('+(opts.month-1)+')').addClass('calendar-selected');\r\n\t\t\r\n\t\tsele._outerWidth(body._outerWidth());\r\n\t\tsele._outerHeight(body._outerHeight());\r\n\t\tseleMonth._outerHeight(sele.height() - seleYear._outerHeight());\r\n\t}\r\n\t\r\n\t/**\r\n\t * get weeks data.\r\n\t */\r\n\tfunction getWeeks(target, year, month){\r\n\t\tvar opts = $.data(target, 'calendar').options;\r\n\t\tvar dates = [];\r\n\t\tvar lastDay = new Date(year, month, 0).getDate();\r\n\t\tfor(var i=1; i<=lastDay; i++) dates.push([year,month,i]);\r\n\t\t\r\n\t\t// group date by week\r\n\t\tvar weeks = [], week = [];\r\n//\t\tvar memoDay = 0;\r\n\t\tvar memoDay = -1;\r\n\t\twhile(dates.length > 0){\r\n\t\t\tvar date = dates.shift();\r\n\t\t\tweek.push(date);\r\n\t\t\tvar day = new Date(date[0],date[1]-1,date[2]).getDay();\r\n\t\t\tif (memoDay == day){\r\n\t\t\t\tday = 0;\r\n\t\t\t} else if (day == (opts.firstDay==0 ? 7 : opts.firstDay) - 1){\r\n\t\t\t\tweeks.push(week);\r\n\t\t\t\tweek = [];\r\n\t\t\t}\r\n\t\t\tmemoDay = day;\r\n\t\t}\r\n\t\tif (week.length){\r\n\t\t\tweeks.push(week);\r\n\t\t}\r\n\t\t\r\n\t\tvar firstWeek = weeks[0];\r\n\t\tif (firstWeek.length < 7){\r\n\t\t\twhile(firstWeek.length < 7){\r\n\t\t\t\tvar firstDate = firstWeek[0];\r\n\t\t\t\tvar date = new Date(firstDate[0],firstDate[1]-1,firstDate[2]-1)\r\n\t\t\t\tfirstWeek.unshift([date.getFullYear(), date.getMonth()+1, date.getDate()]);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar firstDate = firstWeek[0];\r\n\t\t\tvar week = [];\r\n\t\t\tfor(var i=1; i<=7; i++){\r\n\t\t\t\tvar date = new Date(firstDate[0], firstDate[1]-1, firstDate[2]-i);\r\n\t\t\t\tweek.unshift([date.getFullYear(), date.getMonth()+1, date.getDate()]);\r\n\t\t\t}\r\n\t\t\tweeks.unshift(week);\r\n\t\t}\r\n\t\t\r\n\t\tvar lastWeek = weeks[weeks.length-1];\r\n\t\twhile(lastWeek.length < 7){\r\n\t\t\tvar lastDate = lastWeek[lastWeek.length-1];\r\n\t\t\tvar date = new Date(lastDate[0], lastDate[1]-1, lastDate[2]+1);\r\n\t\t\tlastWeek.push([date.getFullYear(), date.getMonth()+1, date.getDate()]);\r\n\t\t}\r\n\t\tif (weeks.length < 6){\r\n\t\t\tvar lastDate = lastWeek[lastWeek.length-1];\r\n\t\t\tvar week = [];\r\n\t\t\tfor(var i=1; i<=7; i++){\r\n\t\t\t\tvar date = new Date(lastDate[0], lastDate[1]-1, lastDate[2]+i);\r\n\t\t\t\tweek.push([date.getFullYear(), date.getMonth()+1, date.getDate()]);\r\n\t\t\t}\r\n\t\t\tweeks.push(week);\r\n\t\t}\r\n\t\t\r\n\t\treturn weeks;\r\n\t}\r\n\t\r\n\t/**\r\n\t * show the calendar day.\r\n\t */\r\n\tfunction show(target){\r\n\t\tvar opts = $.data(target, 'calendar').options;\r\n\t\tif (opts.current && !opts.validator.call(target, opts.current)){\r\n\t\t\topts.current = null;\r\n\t\t}\r\n\t\t\r\n\t\tvar now = new Date();\r\n\t\tvar todayInfo = now.getFullYear()+','+(now.getMonth()+1)+','+now.getDate();\r\n\t\tvar currentInfo = opts.current ? (opts.current.getFullYear()+','+(opts.current.getMonth()+1)+','+opts.current.getDate()) : '';\r\n\t\t// calulate the saturday and sunday index\r\n\t\tvar saIndex = 6 - opts.firstDay;\r\n\t\tvar suIndex = saIndex + 1;\r\n\t\tif (saIndex >= 7) saIndex -= 7;\r\n\t\tif (suIndex >= 7) suIndex -= 7;\r\n\t\t\r\n\t\t$(target).find('.calendar-title span').html(opts.months[opts.month-1] + ' ' + opts.year);\r\n\t\t\r\n\t\tvar body = $(target).find('div.calendar-body');\r\n\t\tbody.children('table').remove();\r\n\t\t\r\n\t\tvar data = ['<table class=\"calendar-dtable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">'];\r\n\t\tdata.push('<thead><tr>');\r\n\t\tfor(var i=opts.firstDay; i<opts.weeks.length; i++){\r\n\t\t\tdata.push('<th>'+opts.weeks[i]+'</th>');\r\n\t\t}\r\n\t\tfor(var i=0; i<opts.firstDay; i++){\r\n\t\t\tdata.push('<th>'+opts.weeks[i]+'</th>');\r\n\t\t}\r\n\t\tdata.push('</tr></thead>');\r\n\t\t\r\n\t\tdata.push('<tbody>');\r\n\t\tvar weeks = getWeeks(target, opts.year, opts.month);\r\n\t\tfor(var i=0; i<weeks.length; i++){\r\n\t\t\tvar week = weeks[i];\r\n\t\t\tvar cls = '';\r\n\t\t\tif (i == 0){cls = 'calendar-first';}\r\n\t\t\telse if (i == weeks.length - 1){cls = 'calendar-last';}\r\n\t\t\tdata.push('<tr class=\"' + cls + '\">');\r\n\t\t\tfor(var j=0; j<week.length; j++){\r\n\t\t\t\tvar day = week[j];\r\n\t\t\t\tvar s = day[0]+','+day[1]+','+day[2];\r\n\t\t\t\tvar dvalue = new Date(day[0], parseInt(day[1])-1, day[2]);\r\n\t\t\t\tvar d = opts.formatter.call(target, dvalue);\r\n\t\t\t\tvar css = opts.styler.call(target, dvalue);\r\n\t\t\t\tvar classValue = '';\r\n\t\t\t\tvar styleValue = '';\r\n\t\t\t\tif (typeof css == 'string'){\r\n\t\t\t\t\tstyleValue = css;\r\n\t\t\t\t} else if (css){\r\n\t\t\t\t\tclassValue = css['class'] || '';\r\n\t\t\t\t\tstyleValue = css['style'] || '';\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar cls = 'calendar-day';\r\n\t\t\t\tif (!(opts.year == day[0] && opts.month == day[1])){\r\n\t\t\t\t\tcls += ' calendar-other-month';\r\n\t\t\t\t}\r\n\t\t\t\tif (s == todayInfo){cls += ' calendar-today';}\r\n\t\t\t\tif (s == currentInfo){cls += ' calendar-selected';}\r\n\t\t\t\tif (j == saIndex){cls += ' calendar-saturday';}\r\n\t\t\t\telse if (j == suIndex){cls += ' calendar-sunday';}\r\n\t\t\t\tif (j == 0){cls += ' calendar-first';}\r\n\t\t\t\telse if (j == week.length-1){cls += ' calendar-last';}\r\n\t\t\t\t\r\n\t\t\t\tcls += ' ' + classValue;\r\n\t\t\t\tif (!opts.validator.call(target, dvalue)){\r\n\t\t\t\t\tcls += ' calendar-disabled';\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tdata.push('<td class=\"' + cls + '\" abbr=\"' + s + '\" style=\"' + styleValue + '\">' + d + '</td>');\r\n\t\t\t}\r\n\t\t\tdata.push('</tr>');\r\n\t\t}\r\n\t\tdata.push('</tbody>');\r\n\t\tdata.push('</table>');\r\n\t\t\r\n\t\tbody.append(data.join(''));\r\n\t\t\r\n\t\tvar t = body.children('table.calendar-dtable').prependTo(body);\r\n\t\t\r\n\t\tt.find('td.calendar-day:not(.calendar-disabled)').hover(\r\n\t\t\tfunction(){$(this).addClass('calendar-hover');},\r\n\t\t\tfunction(){$(this).removeClass('calendar-hover');}\r\n\t\t).click(function(){\r\n\t\t\tvar oldValue = opts.current;\r\n\t\t\tt.find('.calendar-selected').removeClass('calendar-selected');\r\n\t\t\t$(this).addClass('calendar-selected');\r\n\t\t\tvar parts = $(this).attr('abbr').split(',');\r\n\t\t\topts.current = new Date(parts[0], parseInt(parts[1])-1, parts[2]);\r\n\t\t\topts.onSelect.call(target, opts.current);\r\n\t\t\tif (!oldValue || oldValue.getTime() != opts.current.getTime()){\r\n\t\t\t\topts.onChange.call(target, opts.current, oldValue);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t$.fn.calendar = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\treturn $.fn.calendar.methods[options](this, param);\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'calendar');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\tstate = $.data(this, 'calendar', {\r\n\t\t\t\t\toptions:$.extend({}, $.fn.calendar.defaults, $.fn.calendar.parseOptions(this), options)\r\n\t\t\t\t});\r\n\t\t\t\tinit(this);\r\n\t\t\t}\r\n\t\t\tif (state.options.border == false){\r\n\t\t\t\t$(this).addClass('calendar-noborder');\r\n\t\t\t}\r\n\t\t\tsetSize(this);\r\n\t\t\tshow(this);\r\n\t\t\t$(this).find('div.calendar-menu').hide();\t// hide the calendar menu\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.calendar.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\treturn $.data(jq[0], 'calendar').options;\r\n\t\t},\r\n\t\tresize: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetSize(this);\r\n\t\t\t});\r\n\t\t},\r\n\t\tmoveTo: function(jq, date){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tvar opts = $(this).calendar('options');\r\n\t\t\t\tif (opts.validator.call(this, date)){\r\n\t\t\t\t\tvar oldValue = opts.current;\r\n\t\t\t\t\t$(this).calendar({\r\n\t\t\t\t\t\tyear: date.getFullYear(),\r\n\t\t\t\t\t\tmonth: date.getMonth()+1,\r\n\t\t\t\t\t\tcurrent: date\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (!oldValue || oldValue.getTime() != date.getTime()){\r\n\t\t\t\t\t\topts.onChange.call(this, opts.current, oldValue);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.calendar.parseOptions = function(target){\r\n\t\tvar t = $(target);\r\n\t\treturn $.extend({}, $.parser.parseOptions(target, [\r\n\t\t\t'width','height',{firstDay:'number',fit:'boolean',border:'boolean'}\r\n\t\t]));\r\n\t};\r\n\t\r\n\t$.fn.calendar.defaults = {\r\n\t\twidth:180,\r\n\t\theight:180,\r\n\t\tfit:false,\r\n\t\tborder:true,\r\n\t\tfirstDay:0,\r\n\t\tweeks:['S','M','T','W','T','F','S'],\r\n\t\tmonths:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n\t\tyear:new Date().getFullYear(),\r\n\t\tmonth:new Date().getMonth()+1,\r\n\t\tcurrent:(function(){\r\n\t\t\tvar d = new Date();\r\n\t\t\treturn new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n\t\t})(),\r\n\t\t\r\n\t\tformatter:function(date){return date.getDate()},\r\n\t\tstyler:function(date){return ''},\r\n\t\tvalidator:function(date){return true},\r\n\t\t\r\n\t\tonSelect: function(date){},\r\n\t\tonChange: function(newDate, oldDate){}\r\n\t};\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.combobox.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * combobox - jQuery EasyUI\r\n * \r\n * Dependencies:\r\n *   combo\r\n * \r\n */\r\n(function($){\r\n\tvar COMBOBOX_SERNO = 0;\r\n\t\r\n\tfunction getRowIndex(target, value){\r\n\t\tvar state = $.data(target, 'combobox');\r\n\t\tvar opts = state.options;\r\n\t\tvar data = state.data;\r\n\t\tfor(var i=0; i<data.length; i++){\r\n\t\t\tif (data[i][opts.valueField] == value){\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t}\r\n\t\r\n\t/**\r\n\t * scroll panel to display the specified item\r\n\t */\r\n\tfunction scrollTo(target, value){\r\n\t\tvar opts = $.data(target, 'combobox').options;\r\n\t\tvar panel = $(target).combo('panel');\r\n\t\tvar item = opts.finder.getEl(target, value);\r\n\t\tif (item.length){\r\n\t\t\tif (item.position().top <= 0){\r\n\t\t\t\tvar h = panel.scrollTop() + item.position().top;\r\n\t\t\t\tpanel.scrollTop(h);\r\n\t\t\t} else if (item.position().top + item.outerHeight() > panel.height()){\r\n\t\t\t\tvar h = panel.scrollTop() + item.position().top + item.outerHeight() - panel.height();\r\n\t\t\t\tpanel.scrollTop(h);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction nav(target, dir){\r\n\t\tvar opts = $.data(target, 'combobox').options;\r\n\t\tvar panel = $(target).combobox('panel');\r\n\t\tvar item = panel.children('div.combobox-item-hover');\r\n\t\tif (!item.length){\r\n\t\t\titem = panel.children('div.combobox-item-selected');\r\n\t\t}\r\n\t\titem.removeClass('combobox-item-hover');\r\n\t\tvar firstSelector = 'div.combobox-item:visible:not(.combobox-item-disabled):first';\r\n\t\tvar lastSelector = 'div.combobox-item:visible:not(.combobox-item-disabled):last';\r\n\t\tif (!item.length){\r\n\t\t\titem = panel.children(dir=='next' ? firstSelector : lastSelector);\r\n//\t\t\titem = panel.children('div.combobox-item:visible:' + (dir=='next'?'first':'last'));\r\n\t\t} else {\r\n\t\t\tif (dir == 'next'){\r\n\t\t\t\titem = item.nextAll(firstSelector);\r\n//\t\t\t\titem = item.nextAll('div.combobox-item:visible:first');\r\n\t\t\t\tif (!item.length){\r\n\t\t\t\t\titem = panel.children(firstSelector);\r\n//\t\t\t\t\titem = panel.children('div.combobox-item:visible:first');\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\titem = item.prevAll(firstSelector);\r\n//\t\t\t\titem = item.prevAll('div.combobox-item:visible:first');\r\n\t\t\t\tif (!item.length){\r\n\t\t\t\t\titem = panel.children(lastSelector);\r\n//\t\t\t\t\titem = panel.children('div.combobox-item:visible:last');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (item.length){\r\n\t\t\titem.addClass('combobox-item-hover');\r\n\t\t\tvar row = opts.finder.getRow(target, item);\r\n\t\t\tif (row){\r\n\t\t\t\tscrollTo(target, row[opts.valueField]);\r\n\t\t\t\tif (opts.selectOnNavigation){\r\n\t\t\t\t\tselect(target, row[opts.valueField]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * select the specified value\r\n\t */\r\n\tfunction select(target, value){\r\n\t\tvar opts = $.data(target, 'combobox').options;\r\n\t\tvar values = $(target).combo('getValues');\r\n\t\tif ($.inArray(value+'', values) == -1){\r\n\t\t\tif (opts.multiple){\r\n\t\t\t\tvalues.push(value);\r\n\t\t\t} else {\r\n\t\t\t\tvalues = [value];\r\n\t\t\t}\r\n\t\t\tsetValues(target, values);\r\n\t\t\topts.onSelect.call(target, opts.finder.getRow(target, value));\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * unselect the specified value\r\n\t */\r\n\tfunction unselect(target, value){\r\n\t\tvar opts = $.data(target, 'combobox').options;\r\n\t\tvar values = $(target).combo('getValues');\r\n\t\tvar index = $.inArray(value+'', values);\r\n\t\tif (index >= 0){\r\n\t\t\tvalues.splice(index, 1);\r\n\t\t\tsetValues(target, values);\r\n\t\t\topts.onUnselect.call(target, opts.finder.getRow(target, value));\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * set values\r\n\t */\r\n\tfunction setValues(target, values, remainText){\r\n\t\tvar opts = $.data(target, 'combobox').options;\r\n\t\tvar panel = $(target).combo('panel');\r\n\t\t\r\n\t\tpanel.find('div.combobox-item-selected').removeClass('combobox-item-selected');\r\n\t\tvar vv = [], ss = [];\r\n\t\tfor(var i=0; i<values.length; i++){\r\n\t\t\tvar v = values[i];\r\n\t\t\tvar s = v;\r\n\t\t\topts.finder.getEl(target, v).addClass('combobox-item-selected');\r\n\t\t\tvar row = opts.finder.getRow(target, v);\r\n\t\t\tif (row){\r\n\t\t\t\ts = row[opts.textField];\r\n\t\t\t}\r\n\t\t\tvv.push(v);\r\n\t\t\tss.push(s);\r\n\t\t}\r\n\t\t\r\n\t\t$(target).combo('setValues', vv);\r\n\t\tif (!remainText){\r\n\t\t\t$(target).combo('setText', ss.join(opts.separator));\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * load data, the old list items will be removed.\r\n\t */\r\n\tfunction loadData(target, data, remainText){\r\n\t\tvar state = $.data(target, 'combobox');\r\n\t\tif (!state) return;\r\n\t\tvar opts = state.options;\r\n\t\tstate.data = opts.loadFilter.call(target, data);\r\n\t\tstate.groups = [];\r\n\t\tdata = state.data;\r\n\t\t\r\n\t\tvar selected = $(target).combobox('getValues');\r\n\t\tvar dd = [];\r\n\t\tvar group = undefined;\r\n\t\tfor(var i=0; i<data.length; i++){\r\n\t\t\tvar row = data[i];\r\n\t\t\tvar v = row[opts.valueField]+'';\r\n\t\t\tvar s = row[opts.textField];\r\n\t\t\tvar g = row[opts.groupField];\r\n\t\t\t\r\n\t\t\tif (g){\r\n\t\t\t\tif (group != g){\r\n\t\t\t\t\tgroup = g;\r\n\t\t\t\t\tstate.groups.push(g);\r\n\t\t\t\t\tdd.push('<div id=\"' + (state.groupIdPrefix+'_'+(state.groups.length-1)) + '\" class=\"combobox-group\">');\r\n\t\t\t\t\tdd.push(opts.groupFormatter ? opts.groupFormatter.call(target, g) : g);\r\n\t\t\t\t\tdd.push('</div>');\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tgroup = undefined;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tvar cls = 'combobox-item' + (row.disabled ? ' combobox-item-disabled' : '') + (g ? ' combobox-gitem' : '');\r\n\t\t\tdd.push('<div id=\"' + (state.itemIdPrefix+'_'+i) + '\" class=\"' + cls + '\">');\r\n\t\t\tdd.push(opts.formatter ? opts.formatter.call(target, row) : s);\r\n\t\t\tdd.push('</div>');\r\n\t\t\t\r\n//\t\t\tif (item['selected']){\r\n//\t\t\t\t(function(){\r\n//\t\t\t\t\tfor(var i=0; i<selected.length; i++){\r\n//\t\t\t\t\t\tif (v == selected[i]) return;\r\n//\t\t\t\t\t}\r\n//\t\t\t\t\tselected.push(v);\r\n//\t\t\t\t})();\r\n//\t\t\t}\r\n\t\t\tif (row['selected'] && $.inArray(v, selected) == -1){\r\n\t\t\t\tselected.push(v);\r\n\t\t\t}\r\n\t\t}\r\n\t\t$(target).combo('panel').html(dd.join(''));\r\n\t\t\r\n\t\tif (opts.multiple){\r\n\t\t\tsetValues(target, selected, remainText);\r\n\t\t} else {\r\n\t\t\tsetValues(target, selected.length ? [selected[selected.length-1]] : [], remainText);\r\n\t\t}\r\n\t\t\r\n\t\topts.onLoadSuccess.call(target, data);\r\n\t}\r\n\t\r\n\t/**\r\n\t * request remote data if the url property is setted.\r\n\t */\r\n\tfunction request(target, url, param, remainText){\r\n\t\tvar opts = $.data(target, 'combobox').options;\r\n\t\tif (url){\r\n\t\t\topts.url = url;\r\n\t\t}\r\n//\t\tif (!opts.url) return;\r\n\t\tparam = param || {};\r\n\t\t\r\n\t\tif (opts.onBeforeLoad.call(target, param) == false) return;\r\n\r\n\t\topts.loader.call(target, param, function(data){\r\n\t\t\tloadData(target, data, remainText);\r\n\t\t}, function(){\r\n\t\t\topts.onLoadError.apply(this, arguments);\r\n\t\t});\r\n\t}\r\n\t\r\n\t/**\r\n\t * do the query action\r\n\t */\r\n\tfunction doQuery(target, q){\r\n\t\tvar state = $.data(target, 'combobox');\r\n\t\tvar opts = state.options;\r\n\t\t\r\n\t\tif (opts.multiple && !q){\r\n\t\t\tsetValues(target, [], true);\r\n\t\t} else {\r\n\t\t\tsetValues(target, [q], true);\r\n\t\t}\r\n\t\t\r\n\t\tif (opts.mode == 'remote'){\r\n\t\t\trequest(target, null, {q:q}, true);\r\n\t\t} else {\r\n\t\t\tvar panel = $(target).combo('panel');\r\n\t\t\tpanel.find('div.combobox-item-selected,div.combobox-item-hover').removeClass('combobox-item-selected combobox-item-hover');\r\n\t\t\tpanel.find('div.combobox-item,div.combobox-group').hide();\r\n\t\t\tvar data = state.data;\r\n\t\t\tvar vv = [];\r\n\t\t\tvar qq = opts.multiple ? q.split(opts.separator) : [q];\r\n\t\t\t$.map(qq, function(q){\r\n\t\t\t\tq = $.trim(q);\r\n\t\t\t\tvar group = undefined;\r\n\t\t\t\tfor(var i=0; i<data.length; i++){\r\n\t\t\t\t\tvar row = data[i];\r\n\t\t\t\t\tif (opts.filter.call(target, q, row)){\r\n\t\t\t\t\t\tvar v = row[opts.valueField];\r\n\t\t\t\t\t\tvar s = row[opts.textField];\r\n\t\t\t\t\t\tvar g = row[opts.groupField];\r\n\t\t\t\t\t\tvar item = opts.finder.getEl(target, v).show();\r\n\t\t\t\t\t\tif (s.toLowerCase() == q.toLowerCase()){\r\n\t\t\t\t\t\t\tvv.push(v);\r\n\t\t\t\t\t\t\titem.addClass('combobox-item-selected');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (opts.groupField && group != g){\r\n\t\t\t\t\t\t\t$('#'+state.groupIdPrefix+'_'+$.inArray(g, state.groups)).show();\r\n\t\t\t\t\t\t\tgroup = g;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tsetValues(target, vv, true);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction doEnter(target){\r\n\t\tvar t = $(target);\r\n\t\tvar opts = t.combobox('options');\r\n\t\tvar panel = t.combobox('panel');\r\n\t\tvar item = panel.children('div.combobox-item-hover');\r\n\t\tif (item.length){\r\n\t\t\tvar row = opts.finder.getRow(target, item);\r\n\t\t\tvar value = row[opts.valueField];\r\n\t\t\tif (opts.multiple){\r\n\t\t\t\tif (item.hasClass('combobox-item-selected')){\r\n\t\t\t\t\tt.combobox('unselect', value);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tt.combobox('select', value);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tt.combobox('select', value);\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar vv = [];\r\n\t\t$.map(t.combobox('getValues'), function(v){\r\n\t\t\tif (getRowIndex(target, v) >= 0){\r\n\t\t\t\tvv.push(v);\r\n\t\t\t}\r\n\t\t});\r\n\t\tt.combobox('setValues', vv);\r\n\t\tif (!opts.multiple){\r\n\t\t\tt.combobox('hidePanel');\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * create the component\r\n\t */\r\n\tfunction create(target){\r\n\t\tvar state = $.data(target, 'combobox');\r\n\t\tvar opts = state.options;\r\n\t\t\r\n\t\tCOMBOBOX_SERNO++;\r\n\t\tstate.itemIdPrefix = '_easyui_combobox_i' + COMBOBOX_SERNO;\r\n\t\tstate.groupIdPrefix = '_easyui_combobox_g' + COMBOBOX_SERNO;\r\n\t\t\r\n\t\t$(target).addClass('combobox-f');\r\n\t\t$(target).combo($.extend({}, opts, {\r\n\t\t\tonShowPanel: function(){\r\n\t\t\t\t$(target).combo('panel').find('div.combobox-item,div.combobox-group').show();\r\n\t\t\t\tscrollTo(target, $(target).combobox('getValue'));\r\n\t\t\t\topts.onShowPanel.call(target);\r\n\t\t\t}\r\n\t\t}));\r\n\t\t\r\n\t\t$(target).combo('panel').unbind().bind('mouseover', function(e){\r\n\t\t\t$(this).children('div.combobox-item-hover').removeClass('combobox-item-hover');\r\n\t\t\tvar item = $(e.target).closest('div.combobox-item');\r\n\t\t\tif (!item.hasClass('combobox-item-disabled')){\r\n\t\t\t\titem.addClass('combobox-item-hover');\r\n\t\t\t}\r\n\t\t\te.stopPropagation();\r\n\t\t}).bind('mouseout', function(e){\r\n\t\t\t$(e.target).closest('div.combobox-item').removeClass('combobox-item-hover');\r\n\t\t\te.stopPropagation();\r\n\t\t}).bind('click', function(e){\r\n\t\t\tvar item = $(e.target).closest('div.combobox-item');\r\n\t\t\tif (!item.length || item.hasClass('combobox-item-disabled')){return}\r\n\t\t\tvar row = opts.finder.getRow(target, item);\r\n\t\t\tif (!row){return}\r\n\t\t\tvar value = row[opts.valueField];\r\n\t\t\tif (opts.multiple){\r\n\t\t\t\tif (item.hasClass('combobox-item-selected')){\r\n\t\t\t\t\tunselect(target, value);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tselect(target, value);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tselect(target, value);\r\n\t\t\t\t$(target).combo('hidePanel');\r\n\t\t\t}\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\t}\r\n\t\r\n\t$.fn.combobox = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\tvar method = $.fn.combobox.methods[options];\r\n\t\t\tif (method){\r\n\t\t\t\treturn method(this, param);\r\n\t\t\t} else {\r\n\t\t\t\treturn this.combo(options, param);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'combobox');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t\tcreate(this);\r\n\t\t\t} else {\r\n\t\t\t\tstate = $.data(this, 'combobox', {\r\n\t\t\t\t\toptions: $.extend({}, $.fn.combobox.defaults, $.fn.combobox.parseOptions(this), options),\r\n\t\t\t\t\tdata: []\r\n\t\t\t\t});\r\n\t\t\t\tcreate(this);\r\n\t\t\t\tvar data = $.fn.combobox.parseData(this);\r\n\t\t\t\tif (data.length){\r\n\t\t\t\t\tloadData(this, data);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (state.options.data){\r\n\t\t\t\tloadData(this, state.options.data);\r\n\t\t\t}\r\n\t\t\trequest(this);\r\n\t\t});\r\n\t};\r\n\t\r\n\t\r\n\t$.fn.combobox.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\tvar copts = jq.combo('options');\r\n\t\t\treturn $.extend($.data(jq[0], 'combobox').options, {\r\n\t\t\t\toriginalValue: copts.originalValue,\r\n\t\t\t\tdisabled: copts.disabled,\r\n\t\t\t\treadonly: copts.readonly\r\n\t\t\t});\r\n\t\t},\r\n\t\tgetData: function(jq){\r\n\t\t\treturn $.data(jq[0], 'combobox').data;\r\n\t\t},\r\n\t\tsetValues: function(jq, values){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetValues(this, values);\r\n\t\t\t});\r\n\t\t},\r\n\t\tsetValue: function(jq, value){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetValues(this, [value]);\r\n\t\t\t});\r\n\t\t},\r\n\t\tclear: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(this).combo('clear');\r\n\t\t\t\tvar panel = $(this).combo('panel');\r\n\t\t\t\tpanel.find('div.combobox-item-selected').removeClass('combobox-item-selected');\r\n\t\t\t});\r\n\t\t},\r\n\t\treset: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tvar opts = $(this).combobox('options');\r\n\t\t\t\tif (opts.multiple){\r\n\t\t\t\t\t$(this).combobox('setValues', opts.originalValue);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$(this).combobox('setValue', opts.originalValue);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\tloadData: function(jq, data){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tloadData(this, data);\r\n\t\t\t});\r\n\t\t},\r\n\t\treload: function(jq, url){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\trequest(this, url);\r\n\t\t\t});\r\n\t\t},\r\n\t\tselect: function(jq, value){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tselect(this, value);\r\n\t\t\t});\r\n\t\t},\r\n\t\tunselect: function(jq, value){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tunselect(this, value);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.combobox.parseOptions = function(target){\r\n\t\tvar t = $(target);\r\n\t\treturn $.extend({}, $.fn.combo.parseOptions(target), $.parser.parseOptions(target,[\r\n\t\t\t'valueField','textField','groupField','mode','method','url'\r\n\t\t]));\r\n\t};\r\n\t\r\n\t$.fn.combobox.parseData = function(target){\r\n\t\tvar data = [];\r\n\t\tvar opts = $(target).combobox('options');\r\n\t\t$(target).children().each(function(){\r\n\t\t\tif (this.tagName.toLowerCase() == 'optgroup'){\r\n\t\t\t\tvar group = $(this).attr('label');\r\n\t\t\t\t$(this).children().each(function(){\r\n\t\t\t\t\t_parseItem(this, group);\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t_parseItem(this);\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn data;\r\n\t\t\r\n\t\tfunction _parseItem(el, group){\r\n\t\t\tvar t = $(el);\r\n\t\t\tvar row = {};\r\n\t\t\trow[opts.valueField] = t.attr('value')!=undefined ? t.attr('value') : t.text();\r\n\t\t\trow[opts.textField] = t.text();\r\n\t\t\trow['selected'] = t.is(':selected');\r\n\t\t\trow['disabled'] = t.is(':disabled');\r\n\t\t\tif (group){\r\n\t\t\t\topts.groupField = opts.groupField || 'group';\r\n\t\t\t\trow[opts.groupField] = group;\r\n\t\t\t}\r\n\t\t\tdata.push(row);\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.combobox.defaults = $.extend({}, $.fn.combo.defaults, {\r\n\t\tvalueField: 'value',\r\n\t\ttextField: 'text',\r\n\t\tgroupField: null,\r\n\t\tgroupFormatter: function(group){return group;},\r\n\t\tmode: 'local',\t// or 'remote'\r\n\t\tmethod: 'post',\r\n\t\turl: null,\r\n\t\tdata: null,\r\n\t\t\r\n\t\tkeyHandler: {\r\n\t\t\tup: function(e){nav(this,'prev');e.preventDefault()},\r\n\t\t\tdown: function(e){nav(this,'next');e.preventDefault()},\r\n\t\t\tleft: function(e){},\r\n\t\t\tright: function(e){},\r\n\t\t\tenter: function(e){doEnter(this)},\r\n\t\t\tquery: function(q,e){doQuery(this, q)}\r\n\t\t},\r\n\t\tfilter: function(q, row){\r\n\t\t\tvar opts = $(this).combobox('options');\r\n\t\t\treturn row[opts.textField].toLowerCase().indexOf(q.toLowerCase()) == 0;\r\n\t\t},\r\n\t\tformatter: function(row){\r\n\t\t\tvar opts = $(this).combobox('options');\r\n\t\t\tif(row[opts.valueField]==\"\"&&row[opts.textField]==\"\")\r\n\t\t\t\treturn \"--请选择--\";\r\n\t\t\treturn row[opts.textField];\r\n\t\t},\r\n\t\tloader: function(param, success, error){\r\n\t\t\tvar opts = $(this).combobox('options');\r\n\t\t\tif (!opts.url) return false;\r\n\t\t\t$.ajax({\r\n\t\t\t\ttype: opts.method,\r\n\t\t\t\turl: opts.url,\r\n\t\t\t\tdata: param,\r\n\t\t\t\tdataType: 'json',\r\n\t\t\t\tsuccess: function(data){\r\n\t\t\t\t\tsuccess(data);\r\n\t\t\t\t},\r\n\t\t\t\terror: function(){\r\n\t\t\t\t\terror.apply(this, arguments);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\tloadFilter: function(data){\r\n\t\t\treturn data;\r\n\t\t},\r\n\t\tfinder:{\r\n\t\t\tgetEl:function(target, value){\r\n\t\t\t\tvar index = getRowIndex(target, value);\r\n\t\t\t\tvar id = $.data(target, 'combobox').itemIdPrefix + '_' + index;\r\n\t\t\t\treturn $('#'+id);\r\n\t\t\t},\r\n\t\t\tgetRow:function(target, p){\r\n\t\t\t\tvar state = $.data(target, 'combobox');\r\n\t\t\t\tvar index = (p instanceof jQuery) ? p.attr('id').substr(state.itemIdPrefix.length+1) : getRowIndex(target, p);\r\n\t\t\t\treturn state.data[parseInt(index)];\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\tonBeforeLoad: function(param){},\r\n\t\tonLoadSuccess: function(){},\r\n\t\tonLoadError: function(){},\r\n\t\tonSelect: function(record){},\r\n\t\tonUnselect: function(record){}\r\n\t});\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.datebox.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * datebox - jQuery EasyUI\r\n * \r\n * Dependencies:\r\n * \t calendar\r\n *   combo\r\n * \r\n */\r\n(function($){\r\n\t/**\r\n\t * create date box\r\n\t */\r\n\tfunction createBox(target){\r\n\t\tvar state = $.data(target, 'datebox');\r\n\t\tvar opts = state.options;\r\n\t\t\r\n\t\t$(target).addClass('datebox-f').combo($.extend({}, opts, {\r\n\t\t\tonShowPanel:function(){\r\n\t\t\t\tsetCalendar();\r\n\t\t\t\tsetValue(target, $(target).datebox('getText'), true);\r\n//\t\t\t\tsetValue(target, $(target).datebox('getText'));\r\n\t\t\t\topts.onShowPanel.call(target);\r\n\t\t\t}\r\n\t\t}));\r\n\t\t$(target).combo('textbox').parent().addClass('datebox');\r\n\t\t\r\n\t\t/**\r\n\t\t * if the calendar isn't created, create it.\r\n\t\t */\r\n\t\tif (!state.calendar){\r\n\t\t\tcreateCalendar();\r\n\t\t}\r\n\t\tsetValue(target, opts.value);\r\n\t\t\r\n\t\tfunction createCalendar(){\r\n\t\t\tvar panel = $(target).combo('panel').css('overflow','hidden');\r\n\t\t\tpanel.panel('options').onBeforeDestroy = function(){\r\n\t\t\t\tvar sc = $(this).find('.calendar-shared');\r\n\t\t\t\tif (sc.length){\r\n\t\t\t\t\tsc.insertBefore(sc[0].pholder);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tvar cc = $('<div class=\"datebox-calendar-inner\"></div>').appendTo(panel);\r\n\t\t\tif (opts.sharedCalendar){\r\n\t\t\t\tvar sc = $(opts.sharedCalendar);\r\n\t\t\t\tif (!sc[0].pholder){\r\n\t\t\t\t\tsc[0].pholder = $('<div class=\"calendar-pholder\" style=\"display:none\"></div>').insertAfter(sc);\r\n\t\t\t\t}\r\n\t\t\t\tsc.addClass('calendar-shared').appendTo(cc);\r\n\t\t\t\tif (!sc.hasClass('calendar')){\r\n\t\t\t\t\tsc.calendar();\r\n\t\t\t\t}\r\n\t\t\t\tstate.calendar = sc;\r\n//\t\t\t\tstate.calendar = $(opts.sharedCalendar).appendTo(cc);\r\n//\t\t\t\tif (!state.calendar.hasClass('calendar')){\r\n//\t\t\t\t\tstate.calendar.calendar();\r\n//\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tstate.calendar = $('<div></div>').appendTo(cc).calendar();\r\n\t\t\t}\r\n\t\t\t$.extend(state.calendar.calendar('options'), {\r\n\t\t\t\tfit:true,\r\n\t\t\t\tborder:false,\r\n\t\t\t\tonSelect:function(date){\r\n\t\t\t\t\tvar opts = $(this.target).datebox('options');\r\n\t\t\t\t\tsetValue(this.target, opts.formatter.call(this.target, date));\r\n\t\t\t\t\t$(this.target).combo('hidePanel');\r\n\t\t\t\t\topts.onSelect.call(target, date);\r\n\t\t\t\t}\r\n\t\t\t});\r\n//\t\t\tsetValue(target, opts.value);\r\n\t\t\t\r\n\t\t\tvar button = $('<div class=\"datebox-button\"><table cellspacing=\"0\" cellpadding=\"0\" style=\"width:100%\"><tr></tr></table></div>').appendTo(panel);\r\n\t\t\tvar tr = button.find('tr');\r\n\t\t\tfor(var i=0; i<opts.buttons.length; i++){\r\n\t\t\t\tvar td = $('<td></td>').appendTo(tr);\r\n\t\t\t\tvar btn = opts.buttons[i];\r\n\t\t\t\tvar t = $('<a href=\"javascript:void(0)\"></a>').html($.isFunction(btn.text) ? btn.text(target) : btn.text).appendTo(td);\r\n\t\t\t\tt.bind('click', {target: target, handler: btn.handler}, function(e){\r\n\t\t\t\t\te.data.handler.call(this, e.data.target);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\ttr.find('td').css('width', (100/opts.buttons.length)+'%');\r\n\t\t}\r\n\t\t\r\n\t\tfunction setCalendar(){\r\n\t\t\tvar panel = $(target).combo('panel');\r\n\t\t\tvar cc = panel.children('div.datebox-calendar-inner');\r\n\t\t\tpanel.children()._outerWidth(panel.width());\r\n\t\t\tstate.calendar.appendTo(cc);\r\n\t\t\tstate.calendar[0].target = target;\r\n\t\t\tif (opts.panelHeight != 'auto'){\r\n\t\t\t\tvar height = panel.height();\r\n\t\t\t\tpanel.children().not(cc).each(function(){\r\n\t\t\t\t\theight -= $(this).outerHeight();\r\n\t\t\t\t});\r\n\t\t\t\tcc._outerHeight(height);\r\n\t\t\t}\r\n\t\t\tstate.calendar.calendar('resize');\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * called when user inputs some value in text box\r\n\t */\r\n\tfunction doQuery(target, q){\r\n\t\tsetValue(target, q, true);\r\n\t}\r\n\t\r\n\t/**\r\n\t * called when user press enter key\r\n\t */\r\n\tfunction doEnter(target){\r\n\t\tvar state = $.data(target, 'datebox');\r\n\t\tvar opts = state.options;\r\n\t\tvar current = state.calendar.calendar('options').current;\r\n\t\tif (current){\r\n\t\t\tsetValue(target, opts.formatter.call(target, current));\r\n\t\t\t$(target).combo('hidePanel');\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction setValue(target, value, remainText){\r\n\t\tvar state = $.data(target, 'datebox');\r\n\t\tvar opts = state.options;\r\n\t\tvar calendar = state.calendar;\r\n\t\t$(target).combo('setValue', value);\r\n\t\tcalendar.calendar('moveTo', opts.parser.call(target, value));\r\n\t\tif (!remainText){\r\n\t\t\tif (value){\r\n\t\t\t\tvalue = opts.formatter.call(target, calendar.calendar('options').current);\r\n\t\t\t\t$(target).combo('setValue', value).combo('setText', value);\r\n\t\t\t} else {\r\n\t\t\t\t$(target).combo('setText', value);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t$.fn.datebox = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\tvar method = $.fn.datebox.methods[options];\r\n\t\t\tif (method){\r\n\t\t\t\treturn method(this, param);\r\n\t\t\t} else {\r\n\t\t\t\treturn this.combo(options, param);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'datebox');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\t$.data(this, 'datebox', {\r\n\t\t\t\t\toptions: $.extend({}, $.fn.datebox.defaults, $.fn.datebox.parseOptions(this), options)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tcreateBox(this);\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.datebox.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\tvar copts = jq.combo('options');\r\n\t\t\treturn $.extend($.data(jq[0], 'datebox').options, {\r\n\t\t\t\toriginalValue: copts.originalValue,\r\n\t\t\t\tdisabled: copts.disabled,\r\n\t\t\t\treadonly: copts.readonly\r\n\t\t\t});\r\n\t\t},\r\n\t\tcalendar: function(jq){\t// get the calendar object\r\n\t\t\treturn $.data(jq[0], 'datebox').calendar;\r\n\t\t},\r\n\t\tsetValue: function(jq, value){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetValue(this, value);\r\n\t\t\t});\r\n\t\t},\r\n\t\treset: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tvar opts = $(this).datebox('options');\r\n\t\t\t\t$(this).datebox('setValue', opts.originalValue);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.datebox.parseOptions = function(target){\r\n\t\treturn $.extend({}, $.fn.combo.parseOptions(target), $.parser.parseOptions(target, ['sharedCalendar']));\r\n\t};\r\n\t\r\n\t$.fn.datebox.defaults = $.extend({}, $.fn.combo.defaults, {\r\n\t\tpanelWidth:180,\r\n\t\tpanelHeight:'auto',\r\n\t\tsharedCalendar:null,\r\n\t\t\r\n\t\tkeyHandler: {\r\n\t\t\tup:function(e){},\r\n\t\t\tdown:function(e){},\r\n\t\t\tleft: function(e){},\r\n\t\t\tright: function(e){},\r\n\t\t\tenter:function(e){doEnter(this)},\r\n\t\t\tquery:function(q,e){doQuery(this, q)}\r\n\t\t},\r\n\t\t\r\n\t\tcurrentText:'Today',\r\n\t\tcloseText:'Close',\r\n\t\tokText:'Ok',\r\n\t\t\r\n\t\tbuttons:[{\r\n\t\t\ttext: function(target){return $(target).datebox('options').currentText;},\r\n\t\t\thandler: function(target){\r\n\t\t\t\t$(target).datebox('calendar').calendar({\r\n\t\t\t\t\tyear:new Date().getFullYear(),\r\n\t\t\t\t\tmonth:new Date().getMonth()+1,\r\n\t\t\t\t\tcurrent:new Date()\r\n\t\t\t\t});\r\n\t\t\t\tdoEnter(target);\r\n\t\t\t}\r\n\t\t},{\r\n\t\t\ttext: function(target){return $(target).datebox('options').closeText;},\r\n\t\t\thandler: function(target){\r\n\t\t\t\t$(this).closest('div.combo-panel').panel('close');\r\n\t\t\t}\r\n\t\t}],\r\n\t\t\r\n\t\tformatter:function(date){\r\n\t\t\tvar y = date.getFullYear();\r\n\t\t\tvar m = date.getMonth()+1;\r\n\t\t\tvar d = date.getDate();\r\n\t\t\treturn m+'/'+d+'/'+y;\r\n\t\t},\r\n\t\tparser:function(s){\r\n\t\t\tvar t = Date.parse(s);\r\n\t\t\tif (!isNaN(t)){\r\n\t\t\t\treturn new Date(t);\r\n\t\t\t} else {\r\n\t\t\t\treturn new Date();\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\tonSelect:function(date){}\r\n\t});\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.draggable.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * draggable - jQuery EasyUI\r\n * \r\n */\r\n(function($){\r\n//\tvar isDragging = false;\r\n\tfunction drag(e){\r\n\t\tvar state = $.data(e.data.target, 'draggable');\r\n\t\tvar opts = state.options;\r\n\t\tvar proxy = state.proxy;\r\n\t\t\r\n\t\tvar dragData = e.data;\r\n\t\tvar left = dragData.startLeft + e.pageX - dragData.startX;\r\n\t\tvar top = dragData.startTop + e.pageY - dragData.startY;\r\n\t\t\r\n\t\tif (proxy){\r\n\t\t\tif (proxy.parent()[0] == document.body){\r\n\t\t\t\tif (opts.deltaX != null && opts.deltaX != undefined){\r\n\t\t\t\t\tleft = e.pageX + opts.deltaX;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tleft = e.pageX - e.data.offsetWidth;\r\n\t\t\t\t}\r\n\t\t\t\tif (opts.deltaY != null && opts.deltaY != undefined){\r\n\t\t\t\t\ttop = e.pageY + opts.deltaY;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttop = e.pageY - e.data.offsetHeight;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (opts.deltaX != null && opts.deltaX != undefined){\r\n\t\t\t\t\tleft += e.data.offsetWidth + opts.deltaX;\r\n\t\t\t\t}\r\n\t\t\t\tif (opts.deltaY != null && opts.deltaY != undefined){\r\n\t\t\t\t\ttop += e.data.offsetHeight + opts.deltaY;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n//\t\tif (opts.deltaX != null && opts.deltaX != undefined){\r\n//\t\t\tleft = e.pageX + opts.deltaX;\r\n//\t\t}\r\n//\t\tif (opts.deltaY != null && opts.deltaY != undefined){\r\n//\t\t\ttop = e.pageY + opts.deltaY;\r\n//\t\t}\r\n\t\t\r\n\t\tif (e.data.parent != document.body) {\r\n\t\t\tleft += $(e.data.parent).scrollLeft();\r\n\t\t\ttop += $(e.data.parent).scrollTop();\r\n\t\t}\r\n\t\t\r\n\t\tif (opts.axis == 'h') {\r\n\t\t\tdragData.left = left;\r\n\t\t} else if (opts.axis == 'v') {\r\n\t\t\tdragData.top = top;\r\n\t\t} else {\r\n\t\t\tdragData.left = left;\r\n\t\t\tdragData.top = top;\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction applyDrag(e){\r\n\t\tvar state = $.data(e.data.target, 'draggable');\r\n\t\tvar opts = state.options;\r\n\t\tvar proxy = state.proxy;\r\n\t\tif (!proxy){\r\n\t\t\tproxy = $(e.data.target);\r\n\t\t}\r\n//\t\tif (proxy){\r\n//\t\t\tproxy.css('cursor', opts.cursor);\r\n//\t\t} else {\r\n//\t\t\tproxy = $(e.data.target);\r\n//\t\t\t$.data(e.data.target, 'draggable').handle.css('cursor', opts.cursor);\r\n//\t\t}\r\n\t\tproxy.css({\r\n\t\t\tleft:e.data.left,\r\n\t\t\ttop:e.data.top\r\n\t\t});\r\n\t\t$('body').css('cursor', opts.cursor);\r\n\t}\r\n\t\r\n\tfunction doDown(e){\r\n//\t\tisDragging = true;\r\n\t\t$.fn.draggable.isDragging = true;\r\n\t\tvar state = $.data(e.data.target, 'draggable');\r\n\t\tvar opts = state.options;\r\n\t\t\r\n\t\tvar droppables = $('.droppable').filter(function(){\r\n\t\t\treturn e.data.target != this;\r\n\t\t}).filter(function(){\r\n\t\t\tvar accept = $.data(this, 'droppable').options.accept;\r\n\t\t\tif (accept){\r\n\t\t\t\treturn $(accept).filter(function(){\r\n\t\t\t\t\treturn this == e.data.target;\r\n\t\t\t\t}).length > 0;\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t});\r\n\t\tstate.droppables = droppables;\r\n\t\t\r\n\t\tvar proxy = state.proxy;\r\n\t\tif (!proxy){\r\n\t\t\tif (opts.proxy){\r\n\t\t\t\tif (opts.proxy == 'clone'){\r\n\t\t\t\t\tproxy = $(e.data.target).clone().insertAfter(e.data.target);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tproxy = opts.proxy.call(e.data.target, e.data.target);\r\n\t\t\t\t}\r\n\t\t\t\tstate.proxy = proxy;\r\n\t\t\t} else {\r\n\t\t\t\tproxy = $(e.data.target);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tproxy.css('position', 'absolute');\r\n\t\tdrag(e);\r\n\t\tapplyDrag(e);\r\n\t\t\r\n\t\topts.onStartDrag.call(e.data.target, e);\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tfunction doMove(e){\r\n\t\tvar state = $.data(e.data.target, 'draggable');\r\n\t\tdrag(e);\r\n\t\tif (state.options.onDrag.call(e.data.target, e) != false){\r\n\t\t\tapplyDrag(e);\r\n\t\t}\r\n\t\t\r\n\t\tvar source = e.data.target;\r\n\t\tstate.droppables.each(function(){\r\n\t\t\tvar dropObj = $(this);\r\n\t\t\tif (dropObj.droppable('options').disabled){return;}\r\n\t\t\t\r\n\t\t\tvar p2 = dropObj.offset();\r\n\t\t\tif (e.pageX > p2.left && e.pageX < p2.left + dropObj.outerWidth()\r\n\t\t\t\t\t&& e.pageY > p2.top && e.pageY < p2.top + dropObj.outerHeight()){\r\n\t\t\t\tif (!this.entered){\r\n\t\t\t\t\t$(this).trigger('_dragenter', [source]);\r\n\t\t\t\t\tthis.entered = true;\r\n\t\t\t\t}\r\n\t\t\t\t$(this).trigger('_dragover', [source]);\r\n\t\t\t} else {\r\n\t\t\t\tif (this.entered){\r\n\t\t\t\t\t$(this).trigger('_dragleave', [source]);\r\n\t\t\t\t\tthis.entered = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\tfunction doUp(e){\r\n//\t\tisDragging = false;\r\n\t\t$.fn.draggable.isDragging = false;\r\n//\t\tdrag(e);\r\n\t\tdoMove(e);\r\n\t\t\r\n\t\tvar state = $.data(e.data.target, 'draggable');\r\n\t\tvar proxy = state.proxy;\r\n\t\tvar opts = state.options;\r\n\t\tif (opts.revert){\r\n\t\t\tif (checkDrop() == true){\r\n\t\t\t\t$(e.data.target).css({\r\n\t\t\t\t\tposition:e.data.startPosition,\r\n\t\t\t\t\tleft:e.data.startLeft,\r\n\t\t\t\t\ttop:e.data.startTop\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tif (proxy){\r\n\t\t\t\t\tvar left, top;\r\n\t\t\t\t\tif (proxy.parent()[0] == document.body){\r\n\t\t\t\t\t\tleft = e.data.startX - e.data.offsetWidth;\r\n\t\t\t\t\t\ttop = e.data.startY - e.data.offsetHeight;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tleft = e.data.startLeft;\r\n\t\t\t\t\t\ttop = e.data.startTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tproxy.animate({\r\n\t\t\t\t\t\tleft: left,\r\n\t\t\t\t\t\ttop: top\r\n\t\t\t\t\t}, function(){\r\n\t\t\t\t\t\tremoveProxy();\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$(e.data.target).animate({\r\n\t\t\t\t\t\tleft:e.data.startLeft,\r\n\t\t\t\t\t\ttop:e.data.startTop\r\n\t\t\t\t\t}, function(){\r\n\t\t\t\t\t\t$(e.data.target).css('position', e.data.startPosition);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t$(e.data.target).css({\r\n\t\t\t\tposition:'absolute',\r\n\t\t\t\tleft:e.data.left,\r\n\t\t\t\ttop:e.data.top\r\n\t\t\t});\r\n\t\t\tcheckDrop();\r\n\t\t}\r\n\t\t\r\n\t\topts.onStopDrag.call(e.data.target, e);\r\n\t\t\r\n\t\t$(document).unbind('.draggable');\r\n\t\tsetTimeout(function(){\r\n\t\t\t$('body').css('cursor','');\r\n\t\t},100);\r\n\t\t\r\n\t\tfunction removeProxy(){\r\n\t\t\tif (proxy){\r\n\t\t\t\tproxy.remove();\r\n\t\t\t}\r\n\t\t\tstate.proxy = null;\r\n\t\t}\r\n\t\t\r\n\t\tfunction checkDrop(){\r\n\t\t\tvar dropped = false;\r\n\t\t\tstate.droppables.each(function(){\r\n\t\t\t\tvar dropObj = $(this);\r\n\t\t\t\tif (dropObj.droppable('options').disabled){return;}\r\n\t\t\t\t\r\n\t\t\t\tvar p2 = dropObj.offset();\r\n\t\t\t\tif (e.pageX > p2.left && e.pageX < p2.left + dropObj.outerWidth()\r\n\t\t\t\t\t\t&& e.pageY > p2.top && e.pageY < p2.top + dropObj.outerHeight()){\r\n\t\t\t\t\tif (opts.revert){\r\n\t\t\t\t\t\t$(e.data.target).css({\r\n\t\t\t\t\t\t\tposition:e.data.startPosition,\r\n\t\t\t\t\t\t\tleft:e.data.startLeft,\r\n\t\t\t\t\t\t\ttop:e.data.startTop\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$(this).trigger('_drop', [e.data.target]);\r\n\t\t\t\t\tremoveProxy();\r\n\t\t\t\t\tdropped = true;\r\n\t\t\t\t\tthis.entered = false;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (!dropped && !opts.revert){\r\n\t\t\t\tremoveProxy();\r\n\t\t\t}\r\n\t\t\treturn dropped;\r\n\t\t}\r\n\t\t\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\t$.fn.draggable = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\treturn $.fn.draggable.methods[options](this, param);\r\n\t\t}\r\n\t\t\r\n\t\treturn this.each(function(){\r\n\t\t\tvar opts;\r\n\t\t\tvar state = $.data(this, 'draggable');\r\n\t\t\tif (state) {\r\n\t\t\t\tstate.handle.unbind('.draggable');\r\n\t\t\t\topts = $.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\topts = $.extend({}, $.fn.draggable.defaults, $.fn.draggable.parseOptions(this), options || {});\r\n\t\t\t}\r\n\t\t\tvar handle = opts.handle ? (typeof opts.handle=='string' ? $(opts.handle, this) : opts.handle) : $(this);\r\n\t\t\t\r\n\t\t\t$.data(this, 'draggable', {\r\n\t\t\t\toptions: opts,\r\n\t\t\t\thandle: handle\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif (opts.disabled) {\r\n\t\t\t\t$(this).css('cursor', '');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\thandle.unbind('.draggable').bind('mousemove.draggable', {target:this}, function(e){\r\n//\t\t\t\tif (isDragging) return;\r\n\t\t\t\tif ($.fn.draggable.isDragging){return}\r\n\t\t\t\tvar opts = $.data(e.data.target, 'draggable').options;\r\n\t\t\t\tif (checkArea(e)){\r\n\t\t\t\t\t$(this).css('cursor', opts.cursor);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$(this).css('cursor', '');\r\n\t\t\t\t}\r\n\t\t\t}).bind('mouseleave.draggable', {target:this}, function(e){\r\n\t\t\t\t$(this).css('cursor', '');\r\n\t\t\t}).bind('mousedown.draggable', {target:this}, function(e){\r\n\t\t\t\tif (checkArea(e) == false) return;\r\n\t\t\t\t$(this).css('cursor', '');\r\n\r\n\t\t\t\tvar position = $(e.data.target).position();\r\n\t\t\t\tvar offset = $(e.data.target).offset();\r\n\t\t\t\tvar data = {\r\n\t\t\t\t\tstartPosition: $(e.data.target).css('position'),\r\n\t\t\t\t\tstartLeft: position.left,\r\n\t\t\t\t\tstartTop: position.top,\r\n\t\t\t\t\tleft: position.left,\r\n\t\t\t\t\ttop: position.top,\r\n\t\t\t\t\tstartX: e.pageX,\r\n\t\t\t\t\tstartY: e.pageY,\r\n\t\t\t\t\toffsetWidth: (e.pageX - offset.left),\r\n\t\t\t\t\toffsetHeight: (e.pageY - offset.top),\r\n\t\t\t\t\ttarget: e.data.target,\r\n\t\t\t\t\tparent: $(e.data.target).parent()[0]\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\t$.extend(e.data, data);\r\n\t\t\t\tvar opts = $.data(e.data.target, 'draggable').options;\r\n\t\t\t\tif (opts.onBeforeDrag.call(e.data.target, e) == false) return;\r\n\t\t\t\t\r\n\t\t\t\t$(document).bind('mousedown.draggable', e.data, doDown);\r\n\t\t\t\t$(document).bind('mousemove.draggable', e.data, doMove);\r\n\t\t\t\t$(document).bind('mouseup.draggable', e.data, doUp);\r\n//\t\t\t\t$('body').css('cursor', opts.cursor);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t// check if the handle can be dragged\r\n\t\t\tfunction checkArea(e) {\r\n\t\t\t\tvar state = $.data(e.data.target, 'draggable');\r\n\t\t\t\tvar handle = state.handle;\r\n\t\t\t\tvar offset = $(handle).offset();\r\n\t\t\t\tvar width = $(handle).outerWidth();\r\n\t\t\t\tvar height = $(handle).outerHeight();\r\n\t\t\t\tvar t = e.pageY - offset.top;\r\n\t\t\t\tvar r = offset.left + width - e.pageX;\r\n\t\t\t\tvar b = offset.top + height - e.pageY;\r\n\t\t\t\tvar l = e.pageX - offset.left;\r\n\t\t\t\t\r\n\t\t\t\treturn Math.min(t,r,b,l) > state.options.edge;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.draggable.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\treturn $.data(jq[0], 'draggable').options;\r\n\t\t},\r\n\t\tproxy: function(jq){\r\n\t\t\treturn $.data(jq[0], 'draggable').proxy;\r\n\t\t},\r\n\t\tenable: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(this).draggable({disabled:false});\r\n\t\t\t});\r\n\t\t},\r\n\t\tdisable: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(this).draggable({disabled:true});\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.draggable.parseOptions = function(target){\r\n\t\tvar t = $(target);\r\n\t\treturn $.extend({}, \r\n\t\t\t\t$.parser.parseOptions(target, ['cursor','handle','axis',\r\n\t\t\t\t       {'revert':'boolean','deltaX':'number','deltaY':'number','edge':'number'}]), {\r\n\t\t\tdisabled: (t.attr('disabled') ? true : undefined)\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.draggable.defaults = {\r\n\t\tproxy:null,\t// 'clone' or a function that will create the proxy object, \r\n\t\t\t\t\t// the function has the source parameter that indicate the source object dragged.\r\n\t\trevert:false,\r\n\t\tcursor:'move',\r\n\t\tdeltaX:null,\r\n\t\tdeltaY:null,\r\n\t\thandle: null,\r\n\t\tdisabled: false,\r\n\t\tedge:0,\r\n\t\taxis:null,\t// v or h\r\n\t\t\r\n\t\tonBeforeDrag: function(e){},\r\n\t\tonStartDrag: function(e){},\r\n\t\tonDrag: function(e){},\r\n\t\tonStopDrag: function(e){}\r\n\t};\r\n\t\r\n\t$.fn.draggable.isDragging = false;\r\n\t\r\n//\t$(function(){\r\n//\t\tfunction touchHandler(e) {\r\n//\t\t\tvar touches = e.changedTouches, first = touches[0], type = \"\";\r\n//\r\n//\t\t\tswitch(e.type) {\r\n//\t\t\t\tcase \"touchstart\": type = \"mousedown\"; break;\r\n//\t\t\t\tcase \"touchmove\":  type = \"mousemove\"; break;        \r\n//\t\t\t\tcase \"touchend\":   type = \"mouseup\";   break;\r\n//\t\t\t\tdefault: return;\r\n//\t\t\t}\r\n//\t\t\tvar simulatedEvent = document.createEvent(\"MouseEvent\");\r\n//\t\t\tsimulatedEvent.initMouseEvent(type, true, true, window, 1,\r\n//\t\t\t\t\t\t\t\t\t  first.screenX, first.screenY,\r\n//\t\t\t\t\t\t\t\t\t  first.clientX, first.clientY, false,\r\n//\t\t\t\t\t\t\t\t\t  false, false, false, 0/*left*/, null);\r\n//\r\n//\t\t\tfirst.target.dispatchEvent(simulatedEvent);\r\n//\t\t\tif (isDragging){\r\n//\t\t\t\te.preventDefault();\r\n//\t\t\t}\r\n//\t\t}\r\n//\t\t\r\n//\t\tif (document.addEventListener){\r\n//\t\t\tdocument.addEventListener(\"touchstart\", touchHandler, true);\r\n//\t\t\tdocument.addEventListener(\"touchmove\", touchHandler, true);\r\n//\t\t\tdocument.addEventListener(\"touchend\", touchHandler, true);\r\n//\t\t\tdocument.addEventListener(\"touchcancel\", touchHandler, true); \r\n//\t\t}\r\n//\t});\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.droppable.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * droppable - jQuery EasyUI\r\n * \r\n */\r\n(function($){\r\n\tfunction init(target){\r\n\t\t$(target).addClass('droppable');\r\n\t\t$(target).bind('_dragenter', function(e, source){\r\n\t\t\t$.data(target, 'droppable').options.onDragEnter.apply(target, [e, source]);\r\n\t\t});\r\n\t\t$(target).bind('_dragleave', function(e, source){\r\n\t\t\t$.data(target, 'droppable').options.onDragLeave.apply(target, [e, source]);\r\n\t\t});\r\n\t\t$(target).bind('_dragover', function(e, source){\r\n\t\t\t$.data(target, 'droppable').options.onDragOver.apply(target, [e, source]);\r\n\t\t});\r\n\t\t$(target).bind('_drop', function(e, source){\r\n\t\t\t$.data(target, 'droppable').options.onDrop.apply(target, [e, source]);\r\n\t\t});\r\n\t}\r\n\t\r\n\t$.fn.droppable = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\treturn $.fn.droppable.methods[options](this, param);\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'droppable');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\tinit(this);\r\n\t\t\t\t$.data(this, 'droppable', {\r\n\t\t\t\t\toptions: $.extend({}, $.fn.droppable.defaults, $.fn.droppable.parseOptions(this), options)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.droppable.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\treturn $.data(jq[0], 'droppable').options;\r\n\t\t},\r\n\t\tenable: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(this).droppable({disabled:false});\r\n\t\t\t});\r\n\t\t},\r\n\t\tdisable: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(this).droppable({disabled:true});\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.droppable.parseOptions = function(target){\r\n\t\tvar t = $(target);\r\n\t\treturn $.extend({},\t$.parser.parseOptions(target, ['accept']), {\r\n\t\t\tdisabled: (t.attr('disabled') ? true : undefined)\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.droppable.defaults = {\r\n\t\taccept:null,\r\n\t\tdisabled:false,\r\n\t\tonDragEnter:function(e, source){},\r\n\t\tonDragOver:function(e, source){},\r\n\t\tonDragLeave:function(e, source){},\r\n\t\tonDrop:function(e, source){}\r\n\t};\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.form.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * form - jQuery EasyUI\r\n * \r\n */\r\n(function($){\r\n\t/**\r\n\t * submit the form\r\n\t */\r\n\tfunction ajaxSubmit(target, options){\r\n\t\toptions = options || {};\r\n\t\t\r\n\t\tvar param = {};\r\n\t\tif (options.onSubmit){\r\n\t\t\tif (options.onSubmit.call(target, param) == false) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tvar form = $(target);\r\n\t\tif (options.url){\r\n\t\t\tform.attr('action', options.url);\r\n\t\t}\r\n\t\tvar frameId = 'easyui_frame_' + (new Date().getTime());\r\n\t\tvar frame = $('<iframe id='+frameId+' name='+frameId+'></iframe>')\r\n\t\t\t\t.attr('src', window.ActiveXObject ? 'javascript:false' : 'about:blank')\r\n\t\t\t\t.css({\r\n\t\t\t\t\tposition:'absolute',\r\n\t\t\t\t\ttop:-1000,\r\n\t\t\t\t\tleft:-1000\r\n\t\t\t\t});\r\n\t\tvar t = form.attr('target'), a = form.attr('action');\r\n\t\tform.attr('target', frameId);\r\n\t\t\r\n\t\tvar paramFields = $();\r\n\t\ttry {\r\n\t\t\tframe.appendTo('body');\r\n\t\t\tframe.bind('load', cb);\r\n\t\t\tfor(var n in param){\r\n\t\t\t\tvar f = $('<input type=\"hidden\" name=\"' + n + '\">').val(param[n]).appendTo(form);\r\n\t\t\t\tparamFields = paramFields.add(f);\r\n\t\t\t}\r\n\t\t\tcheckState();\r\n\t\t\tform[0].submit();\r\n\t\t} finally {\r\n\t\t\tform.attr('action', a);\r\n\t\t\tt ? form.attr('target', t) : form.removeAttr('target');\r\n\t\t\tparamFields.remove();\r\n\t\t}\r\n\t\t\r\n\t\tfunction checkState(){\r\n\t\t\tvar f = $('#'+frameId);\r\n\t\t\tif (!f.length){return}\r\n\t\t\ttry{\r\n\t\t\t\tvar s = f.contents()[0].readyState;\r\n\t\t\t\tif (s && s.toLowerCase() == 'uninitialized'){\r\n\t\t\t\t\tsetTimeout(checkState, 100);\r\n\t\t\t\t}\r\n\t\t\t} catch(e){\r\n\t\t\t\tcb();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tvar checkCount = 10;\r\n\t\tfunction cb(){\r\n\t\t\tvar frame = $('#'+frameId);\r\n\t\t\tif (!frame.length){return}\r\n\t\t\tframe.unbind();\r\n\t\t\tvar data = '';\r\n\t\t\ttry{\r\n\t\t\t\tvar body = frame.contents().find('body');\r\n\t\t\t\tdata = body.html();\r\n\t\t\t\tif (data == ''){\r\n\t\t\t\t\tif (--checkCount){\r\n\t\t\t\t\t\tsetTimeout(cb, 100);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n//\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tvar ta = body.find('>textarea');\r\n\t\t\t\tif (ta.length){\r\n\t\t\t\t\tdata = ta.val();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar pre = body.find('>pre');\r\n\t\t\t\t\tif (pre.length){\r\n\t\t\t\t\t\tdata = pre.html();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} catch(e){\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\tif (options.success){\r\n\t\t\t\toptions.success(data);\r\n\t\t\t}\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tframe.unbind();\r\n\t\t\t\tframe.remove();\r\n\t\t\t}, 100);\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * load form data\r\n\t * if data is a URL string type load from remote site, \r\n\t * otherwise load from local data object. \r\n\t */\r\n\tfunction load(target, data){\r\n\t\tif (!$.data(target, 'form')){\r\n\t\t\t$.data(target, 'form', {\r\n\t\t\t\toptions: $.extend({}, $.fn.form.defaults)\r\n\t\t\t});\r\n\t\t}\r\n\t\tvar opts = $.data(target, 'form').options;\r\n\t\t\r\n\t\tif (typeof data == 'string'){\r\n\t\t\tvar param = {};\r\n\t\t\tif (opts.onBeforeLoad.call(target, param) == false) return;\r\n\t\t\t\r\n\t\t\t$.ajax({\r\n\t\t\t\turl: data,\r\n\t\t\t\tdata: param,\r\n\t\t\t\tdataType: 'json',\r\n\t\t\t\tsuccess: function(data){\r\n\t\t\t\t\t_load(data);\r\n\t\t\t\t},\r\n\t\t\t\terror: function(){\r\n\t\t\t\t\topts.onLoadError.apply(target, arguments);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t_load(data);\r\n\t\t}\r\n\t\t\r\n\t\tfunction _load(data){\r\n\t\t\tvar form = $(target);\r\n\t\t\tfor(var name in data){\r\n\t\t\t\tvar val = data[name];\r\n\t\t\t\tvar rr = _checkField(name, val);\r\n\t\t\t\tif (!rr.length){\r\n//\t\t\t\t\tvar f = form.find('input[numberboxName=\"'+name+'\"]');\r\n//\t\t\t\t\tif (f.length){\r\n//\t\t\t\t\t\tf.numberbox('setValue', val);\t// set numberbox value\r\n//\t\t\t\t\t} else {\r\n//\t\t\t\t\t\t$('input[name=\"'+name+'\"]', form).val(val);\r\n//\t\t\t\t\t\t$('textarea[name=\"'+name+'\"]', form).val(val);\r\n//\t\t\t\t\t\t$('select[name=\"'+name+'\"]', form).val(val);\r\n//\t\t\t\t\t}\r\n\t\t\t\t\tvar count = _loadOther(name, val);\r\n\t\t\t\t\tif (!count){\r\n\t\t\t\t\t\t$('input[name=\"'+name+'\"]', form).val(val);\r\n\t\t\t\t\t\t$('textarea[name=\"'+name+'\"]', form).val(val);\r\n\t\t\t\t\t\t$('select[name=\"'+name+'\"]', form).val(val);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t_loadCombo(name, val);\r\n\t\t\t}\r\n\t\t\topts.onLoadSuccess.call(target, data);\r\n\t\t\tvalidate(target);\r\n\t\t}\r\n\t\t\r\n\t\t/**\r\n\t\t * check the checkbox and radio fields\r\n\t\t */\r\n\t\tfunction _checkField(name, val){\r\n\t\t\tvar rr = $(target).find('input[name=\"'+name+'\"][type=radio], input[name=\"'+name+'\"][type=checkbox]');\r\n\t\t\trr._propAttr('checked', false);\r\n\t\t\trr.each(function(){\r\n\t\t\t\tvar f = $(this);\r\n\t\t\t\tif (f.val() == String(val) || $.inArray(f.val(), $.isArray(val)?val:[val]) >= 0){\r\n\t\t\t\t\tf._propAttr('checked', true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn rr;\r\n\t\t}\r\n\t\t\r\n\t\tfunction _loadOther(name, val){\r\n\t\t\tvar count = 0;\r\n\t\t\tvar pp = ['numberbox','slider'];\r\n\t\t\tfor(var i=0; i<pp.length; i++){\r\n\t\t\t\tvar p = pp[i];\r\n\t\t\t\tvar f = $(target).find('input['+p+'Name=\"'+name+'\"]');\r\n\t\t\t\tif (f.length){\r\n\t\t\t\t\tf[p]('setValue', val);\r\n\t\t\t\t\tcount += f.length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn count;\r\n\t\t}\r\n\t\t\r\n\t\tfunction _loadCombo(name, val){\r\n\t\t\tvar form = $(target);\r\n\t\t\tvar cc = ['combobox','combotree','combogrid','datetimebox','datebox','combo'];\r\n\t\t\tvar c = form.find('[comboName=\"' + name + '\"]');\r\n\t\t\tif (c.length){\r\n\t\t\t\tfor(var i=0; i<cc.length; i++){\r\n\t\t\t\t\tvar type = cc[i];\r\n\t\t\t\t\tif (c.hasClass(type+'-f')){\r\n\t\t\t\t\t\tif (c[type]('options').multiple){\r\n\t\t\t\t\t\t\tc[type]('setValues', val);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tc[type]('setValue', val);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * clear the form fields\r\n\t */\r\n\tfunction clear(target){\r\n\t\t$('input,select,textarea', target).each(function(){\r\n\t\t\tvar t = this.type, tag = this.tagName.toLowerCase();\r\n\t\t\tif (t == 'text' || t == 'hidden' || t == 'password' || tag == 'textarea'){\r\n\t\t\t\tthis.value = '';\r\n\t\t\t} else if (t == 'file'){\r\n\t\t\t\tvar file = $(this);\r\n\t\t\t\tvar newfile = file.clone().val('');\r\n\t\t\t\tnewfile.insertAfter(file);\r\n\t\t\t\tif (file.data('validatebox')){\r\n\t\t\t\t\tfile.validatebox('destroy');\r\n\t\t\t\t\tnewfile.validatebox();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfile.remove();\r\n\t\t\t\t}\r\n\t\t\t} else if (t == 'checkbox' || t == 'radio'){\r\n\t\t\t\tthis.checked = false;\r\n\t\t\t} else if (tag == 'select'){\r\n\t\t\t\tthis.selectedIndex = -1;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t});\r\n//\t\tif ($.fn.combo) $('.combo-f', target).combo('clear');\r\n//\t\tif ($.fn.combobox) $('.combobox-f', target).combobox('clear');\r\n//\t\tif ($.fn.combotree) $('.combotree-f', target).combotree('clear');\r\n//\t\tif ($.fn.combogrid) $('.combogrid-f', target).combogrid('clear');\r\n\t\t\r\n\t\tvar t = $(target);\r\n\t\tvar plugins = ['combo','combobox','combotree','combogrid','slider'];\r\n\t\tfor(var i=0; i<plugins.length; i++){\r\n\t\t\tvar plugin = plugins[i];\r\n\t\t\tvar r = t.find('.'+plugin+'-f');\r\n\t\t\tif (r.length && r[plugin]){\r\n\t\t\t\tr[plugin]('clear');\r\n\t\t\t}\r\n\t\t}\r\n\t\tvalidate(target);\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * enable the form fields\r\n\t */\r\n\tfunction enabled(target){\r\n\t\t$('input,select,textarea', target).each(function(){\r\n\t\t\t\r\n\t\t\t$(this).attr(\"disabled\",\"disabled\");\r\n\t\t\t\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction reset(target){\r\n\t\ttarget.reset();\r\n\t\tvar t = $(target);\r\n//\t\tif ($.fn.combo){t.find('.combo-f').combo('reset');}\r\n//\t\tif ($.fn.combobox){t.find('.combobox-f').combobox('reset');}\r\n//\t\tif ($.fn.combotree){t.find('.combotree-f').combotree('reset');}\r\n//\t\tif ($.fn.combogrid){t.find('.combogrid-f').combogrid('reset');}\r\n//\t\tif ($.fn.datebox){t.find('.datebox-f').datebox('reset');}\r\n//\t\tif ($.fn.datetimebox){t.find('.datetimebox-f').datetimebox('reset');}\r\n//\t\tif ($.fn.spinner){t.find('.spinner-f').spinner('reset');}\r\n//\t\tif ($.fn.timespinner){t.find('.timespinner-f').timespinner('reset');}\r\n//\t\tif ($.fn.numberbox){t.find('.numberbox-f').numberbox('reset');}\r\n//\t\tif ($.fn.numberspinner){t.find('.numberspinner-f').numberspinner('reset');}\r\n\t\t\r\n\t\tvar plugins = ['combo','combobox','combotree','combogrid','datebox','datetimebox','spinner','timespinner','numberbox','numberspinner','slider'];\r\n\t\tfor(var i=0; i<plugins.length; i++){\r\n\t\t\tvar plugin = plugins[i];\r\n\t\t\tvar r = t.find('.'+plugin+'-f');\r\n\t\t\tif (r.length && r[plugin]){\r\n\t\t\t\tr[plugin]('reset');\r\n\t\t\t}\r\n\t\t}\r\n\t\tvalidate(target);\r\n\t}\r\n\t\r\n\t/**\r\n\t * set the form to make it can submit with ajax.\r\n\t */\r\n\tfunction setForm(target){\r\n\t\tvar options = $.data(target, 'form').options;\r\n\t\tvar form = $(target);\r\n\t\tform.unbind('.form').bind('submit.form', function(){\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tajaxSubmit(target, options);\r\n\t\t\t}, 0);\r\n\t\t\treturn false;\r\n\t\t});\r\n\t}\r\n\t\r\n//\tfunction validate(target){\r\n//\t\tif ($.fn.validatebox){\r\n//\t\t\tvar box = $('.validatebox-text', target);\r\n//\t\t\tif (box.length){\r\n//\t\t\t\tbox.validatebox('validate');\r\n////\t\t\t\tbox.trigger('focus');\r\n////\t\t\t\tbox.trigger('blur');\r\n//\t\t\t\tvar invalidbox = $('.validatebox-invalid:first', target).focus();\r\n//\t\t\t\treturn invalidbox.length == 0;\r\n//\t\t\t}\r\n//\t\t}\r\n//\t\treturn true;\r\n//\t}\r\n\tfunction validate(target){\r\n\t\tif ($.fn.validatebox){\r\n\t\t\tvar t = $(target);\r\n\t\t\tt.find('.validatebox-text:not(:disabled)').validatebox('validate');\r\n\t\t\tvar invalidbox = t.find('.validatebox-invalid');\r\n\t\t\tinvalidbox.filter(':not(:disabled):first').focus();\r\n\t\t\treturn invalidbox.length == 0;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\t\r\n\tfunction setValidation(target, novalidate){\r\n\t\t$(target).find('.validatebox-text:not(:disabled)').validatebox(novalidate ? 'disableValidation' : 'enableValidation');\r\n\t}\r\n\t\r\n\t$.fn.form = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\treturn $.fn.form.methods[options](this, param);\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tif (!$.data(this, 'form')){\r\n\t\t\t\t$.data(this, 'form', {\r\n\t\t\t\t\toptions: $.extend({}, $.fn.form.defaults, options)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tsetForm(this);\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.form.methods = {\r\n\t\tsubmit: function(jq, options){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tvar opts = $.extend({}, \r\n\t\t\t\t\t$.fn.form.defaults, \r\n\t\t\t\t\t$.data(this, 'form') ? $.data(this, 'form').options : {},\r\n\t\t\t\t\toptions||{}\r\n\t\t\t\t);\r\n\t\t\t\tajaxSubmit(this, opts);\r\n\t\t\t});\r\n\t\t},\r\n\t\tload: function(jq, data){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tload(this, data);\r\n\t\t\t});\r\n\t\t},\r\n\t\tclear: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tclear(this);\r\n\t\t\t});\r\n\t\t},\r\n\t\tenabled: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tenabled(this);\r\n\t\t\t});\r\n\t\t},\r\n\t\treset: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\treset(this);\r\n\t\t\t});\r\n\t\t},\r\n\t\tvalidate: function(jq){\r\n\t\t\treturn validate(jq[0]);\r\n\t\t},\r\n\t\tdisableValidation: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetValidation(this, true);\r\n\t\t\t});\r\n\t\t},\r\n\t\tenableValidation: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetValidation(this, false);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.form.defaults = {\r\n\t\turl: null,\r\n\t\tonSubmit: function(param){return $(this).form('validate');},\r\n\t\tsuccess: function(data){},\r\n\t\tonBeforeLoad: function(param){},\r\n\t\tonLoadSuccess: function(data){},\r\n\t\tonLoadError: function(){}\r\n\t};\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.linkbutton.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * linkbutton - jQuery EasyUI\r\n * \r\n */\r\n(function($){\r\n\t\r\n\tfunction createButton(target) {\r\n\t\tvar opts = $.data(target, 'linkbutton').options;\r\n\t\tvar t = $(target).empty();\r\n\t\t\r\n\t\tt.addClass('l-btn').removeClass('l-btn-plain l-btn-selected l-btn-plain-selected');\r\n\t\tt.removeClass('l-btn-small l-btn-medium l-btn-large').addClass('l-btn-'+opts.size);\r\n\t\tif (opts.plain){t.addClass('l-btn-plain')}\r\n\t\tif (opts.selected){\r\n\t\t\tt.addClass(opts.plain ? 'l-btn-selected l-btn-plain-selected' : 'l-btn-selected');\r\n\t\t}\r\n\t\tt.attr('group', opts.group || '');\r\n\t\tt.attr('id', opts.id || '');\r\n\t\t\r\n\t\tvar inner = $('<span class=\"l-btn-left\"></span>').appendTo(t);\r\n\t\tif (opts.text){\r\n\t\t\t$('<span class=\"l-btn-text\"></span>').html(opts.text).appendTo(inner);\r\n\t\t} else {\r\n\t\t\t$('<span class=\"l-btn-text l-btn-empty\">&nbsp;</span>').appendTo(inner);\r\n\t\t}\r\n\t\tif (opts.iconCls){\r\n\t\t\t$('<span class=\"l-btn-icon\">&nbsp;</span>').addClass(opts.iconCls).appendTo(inner);\r\n\t\t\tinner.addClass('l-btn-icon-'+opts.iconAlign);\r\n\t\t}\r\n\t\t\r\n\t\tt.unbind('.linkbutton').bind('focus.linkbutton',function(){\r\n\t\t\tif (!opts.disabled){\r\n\t\t\t\t$(this).addClass('l-btn-focus');\r\n\t\t\t}\r\n\t\t}).bind('blur.linkbutton',function(){\r\n\t\t\t$(this).removeClass('l-btn-focus');\r\n\t\t}).bind('click.linkbutton',function(){\r\n\t\t\tif (!opts.disabled){\r\n\t\t\t\tif (opts.toggle){\r\n\t\t\t\t\tif (opts.selected){\r\n\t\t\t\t\t\t$(this).linkbutton('unselect');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$(this).linkbutton('select');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\topts.onClick.call(this);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n//\t\tif (opts.toggle && !opts.disabled){\r\n//\t\t\tt.bind('click.linkbutton', function(){\r\n//\t\t\t\tif (opts.selected){\r\n//\t\t\t\t\t$(this).linkbutton('unselect');\r\n//\t\t\t\t} else {\r\n//\t\t\t\t\t$(this).linkbutton('select');\r\n//\t\t\t\t}\r\n//\t\t\t});\r\n//\t\t}\r\n\t\t\r\n\t\tsetSelected(target, opts.selected)\r\n\t\tsetDisabled(target, opts.disabled);\r\n\t}\r\n\t\r\n\tfunction setSelected(target, selected){\r\n\t\tvar opts = $.data(target, 'linkbutton').options;\r\n\t\tif (selected){\r\n\t\t\tif (opts.group){\r\n\t\t\t\t$('a.l-btn[group=\"'+opts.group+'\"]').each(function(){\r\n\t\t\t\t\tvar o = $(this).linkbutton('options');\r\n\t\t\t\t\tif (o.toggle){\r\n\t\t\t\t\t\t$(this).removeClass('l-btn-selected l-btn-plain-selected');\r\n\t\t\t\t\t\to.selected = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t$(target).addClass(opts.plain ? 'l-btn-selected l-btn-plain-selected' : 'l-btn-selected');\r\n\t\t\topts.selected = true;\r\n\t\t} else {\r\n\t\t\tif (!opts.group){\r\n\t\t\t\t$(target).removeClass('l-btn-selected l-btn-plain-selected');\r\n\t\t\t\topts.selected = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction setDisabled(target, disabled){\r\n\t\tvar state = $.data(target, 'linkbutton');\r\n\t\tvar opts = state.options;\r\n\t\t$(target).removeClass('l-btn-disabled l-btn-plain-disabled');\r\n\t\tif (disabled){\r\n\t\t\topts.disabled = true;\r\n\t\t\tvar href = $(target).attr('href');\r\n\t\t\tif (href){\r\n\t\t\t\tstate.href = href;\r\n\t\t\t\t$(target).attr('href', 'javascript:void(0)');\r\n\t\t\t}\r\n\t\t\tif (target.onclick){\r\n\t\t\t\tstate.onclick = target.onclick;\r\n\t\t\t\ttarget.onclick = null;\r\n\t\t\t}\r\n\t\t\topts.plain ? $(target).addClass('l-btn-disabled l-btn-plain-disabled') : $(target).addClass('l-btn-disabled');\r\n\t\t} else {\r\n\t\t\topts.disabled = false;\r\n\t\t\tif (state.href) {\r\n\t\t\t\t$(target).attr('href', state.href);\r\n\t\t\t}\r\n\t\t\tif (state.onclick) {\r\n\t\t\t\ttarget.onclick = state.onclick;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t$.fn.linkbutton = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\treturn $.fn.linkbutton.methods[options](this, param);\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'linkbutton');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\t$.data(this, 'linkbutton', {\r\n\t\t\t\t\toptions: $.extend({}, $.fn.linkbutton.defaults, $.fn.linkbutton.parseOptions(this), options)\r\n\t\t\t\t});\r\n\t\t\t\t$(this).removeAttr('disabled');\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcreateButton(this);\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.linkbutton.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\treturn $.data(jq[0], 'linkbutton').options;\r\n\t\t},\r\n\t\tenable: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetDisabled(this, false);\r\n\t\t\t});\r\n\t\t},\r\n\t\tdisable: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetDisabled(this, true);\r\n\t\t\t});\r\n\t\t},\r\n\t\tselect: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetSelected(this, true);\r\n\t\t\t});\r\n\t\t},\r\n\t\tunselect: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetSelected(this, false);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.linkbutton.parseOptions = function(target){\r\n\t\tvar t = $(target);\r\n\t\treturn $.extend({}, $.parser.parseOptions(target, \r\n\t\t\t['id','iconCls','iconAlign','group','size',{plain:'boolean',toggle:'boolean',selected:'boolean'}]\r\n\t\t), {\r\n\t\t\tdisabled: (t.attr('disabled') ? true : undefined),\r\n\t\t\ttext: $.trim(t.html()),\r\n\t\t\ticonCls: (t.attr('icon') || t.attr('iconCls'))\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.linkbutton.defaults = {\r\n\t\tid: null,\r\n\t\tdisabled: false,\r\n\t\ttoggle: false,\r\n\t\tselected: false,\r\n\t\tgroup: null,\r\n\t\tplain: false,\r\n\t\ttext: '',\r\n\t\ticonCls: null,\r\n\t\ticonAlign: 'left',\r\n\t\tsize: 'small',\t// small,large\r\n\t\tonClick: function(){}\r\n\t};\r\n\t\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.menu.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * menu - jQuery EasyUI\r\n * \r\n */\r\n(function($){\r\n\t\r\n\t/**\r\n\t * initialize the target menu, the function can be invoked only once\r\n\t */\r\n\tfunction init(target){\r\n\t\t$(target).appendTo('body');\r\n\t\t$(target).addClass('menu-top');\t// the top menu\r\n\t\t\r\n\t\t$(document).unbind('.menu').bind('mousedown.menu', function(e){\r\n//\t\t\tvar allMenu = $('body>div.menu:visible');\r\n//\t\t\tvar m = $(e.target).closest('div.menu', allMenu);\r\n\t\t\tvar m = $(e.target).closest('div.menu,div.combo-p');\r\n\t\t\tif (m.length){return}\r\n\t\t\t$('body>div.menu-top:visible').menu('hide');\r\n\t\t});\r\n\t\t\r\n\t\tvar menus = splitMenu($(target));\r\n\t\tfor(var i=0; i<menus.length; i++){\r\n\t\t\tcreateMenu(menus[i]);\r\n\t\t}\r\n\t\t\r\n\t\tfunction splitMenu(menu){\r\n\t\t\tvar menus = [];\r\n\t\t\tmenu.addClass('menu');\r\n\t\t\tmenus.push(menu);\r\n\t\t\tif (!menu.hasClass('menu-content')){\r\n\t\t\t\tmenu.children('div').each(function(){\r\n\t\t\t\t\tvar submenu = $(this).children('div');\r\n\t\t\t\t\tif (submenu.length){\r\n\t\t\t\t\t\tsubmenu.insertAfter(target);\r\n\t\t\t\t\t\tthis.submenu = submenu;\t\t// point to the sub menu\r\n\t\t\t\t\t\tvar mm = splitMenu(submenu);\r\n\t\t\t\t\t\tmenus = menus.concat(mm);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn menus;\r\n\t\t}\r\n\t\t\r\n\t\tfunction createMenu(menu){\r\n\t\t\tvar wh = $.parser.parseOptions(menu[0], ['width','height']);\r\n\t\t\tmenu[0].originalHeight = wh.height || 0;\r\n\t\t\tif (menu.hasClass('menu-content')){\r\n\t\t\t\tmenu[0].originalWidth = wh.width || menu._outerWidth();\r\n\t\t\t} else {\r\n\t\t\t\tmenu[0].originalWidth = wh.width || 0;\r\n\t\t\t\tmenu.children('div').each(function(){\r\n\t\t\t\t\tvar item = $(this);\r\n\t\t\t\t\tvar itemOpts = $.extend({}, $.parser.parseOptions(this,['name','iconCls','href',{separator:'boolean'}]), {\r\n\t\t\t\t\t\tdisabled: (item.attr('disabled') ? true : undefined)\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (itemOpts.separator){\r\n\t\t\t\t\t\titem.addClass('menu-sep');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!item.hasClass('menu-sep')){\r\n\t\t\t\t\t\titem[0].itemName = itemOpts.name || '';\r\n\t\t\t\t\t\titem[0].itemHref = itemOpts.href || '';\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tvar text = item.addClass('menu-item').html();\r\n\t\t\t\t\t\titem.empty().append($('<div class=\"menu-text\"></div>').html(text));\r\n\t\t\t\t\t\tif (itemOpts.iconCls){\r\n\t\t\t\t\t\t\t$('<div class=\"menu-icon\"></div>').addClass(itemOpts.iconCls).appendTo(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (itemOpts.disabled){\r\n\t\t\t\t\t\t\tsetDisabled(target, item[0], true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (item[0].submenu){\r\n\t\t\t\t\t\t\t$('<div class=\"menu-rightarrow\"></div>').appendTo(item);\t// has sub menu\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tbindMenuItemEvent(target, item);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t$('<div class=\"menu-line\"></div>').prependTo(menu);\r\n\t\t\t}\r\n\t\t\tsetMenuWidth(target, menu);\r\n\t\t\tmenu.hide();\r\n\t\t\t\r\n\t\t\tbindMenuEvent(target, menu);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction setMenuWidth(target, menu){\r\n\t\tvar opts = $.data(target, 'menu').options;\r\n\t\tvar style = menu.attr('style') || '';\r\n\t\tmenu.css({\r\n\t\t\tdisplay: 'block',\r\n\t\t\tleft:-10000,\r\n\t\t\theight: 'auto',\r\n\t\t\toverflow: 'hidden'\r\n\t\t});\r\n\t\t\r\n\t\tvar el = menu[0];\r\n\t\tvar width = el.originalWidth || 0;\r\n\t\tif (!width){\r\n\t\t\twidth = 0;\r\n\t\t\tmenu.find('div.menu-text').each(function(){\r\n\t\t\t\tif (width < $(this)._outerWidth()){\r\n\t\t\t\t\twidth = $(this)._outerWidth();\r\n\t\t\t\t}\r\n\t\t\t\t$(this).closest('div.menu-item')._outerHeight($(this)._outerHeight()+2);\r\n\t\t\t});\r\n\t\t\twidth += 40;\r\n\t\t}\r\n\t\t\r\n\t\twidth = Math.max(width, opts.minWidth);\r\n\t\tvar height = el.originalHeight || menu.outerHeight();\r\n\t\tvar lineHeight = Math.max(el.originalHeight, menu.outerHeight()) - 2;\r\n\t\tmenu._outerWidth(width)._outerHeight(height);\r\n\t\tmenu.children('div.menu-line')._outerHeight(lineHeight);\r\n\t\t\r\n//\t\tmenu._outerWidth(Math.max((menu[0].originalWidth || 0), width, opts.minWidth));\r\n//\t\t\r\n//\t\tmenu.children('div.menu-line')._outerHeight(menu.outerHeight());\r\n\t\t\r\n\t\tstyle += ';width:' + el.style.width + ';height:' + el.style.height;\r\n\t\t\r\n\t\tmenu.attr('style', style);\r\n\t}\r\n\t\r\n\t/**\r\n\t * bind menu event\r\n\t */\r\n\tfunction bindMenuEvent(target, menu){\r\n\t\tvar state = $.data(target, 'menu');\r\n\t\tmenu.unbind('.menu').bind('mouseenter.menu', function(){\r\n\t\t\tif (state.timer){\r\n\t\t\t\tclearTimeout(state.timer);\r\n\t\t\t\tstate.timer = null;\r\n\t\t\t}\r\n\t\t}).bind('mouseleave.menu', function(){\r\n\t\t\tif (state.options.hideOnUnhover){\r\n\t\t\t\tstate.timer = setTimeout(function(){\r\n\t\t\t\t\thideAll(target);\r\n\t\t\t\t}, 100);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t/**\r\n\t * bind menu item event\r\n\t */\r\n\tfunction bindMenuItemEvent(target, item){\r\n\t\tif (!item.hasClass('menu-item')){return}\r\n\t\titem.unbind('.menu');\r\n\t\titem.bind('click.menu', function(){\r\n\t\t\tif ($(this).hasClass('menu-item-disabled')){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t// only the sub menu clicked can hide all menus\r\n\t\t\tif (!this.submenu){\r\n\t\t\t\thideAll(target);\r\n\t\t\t\tvar href = $(this).attr('href');\r\n\t\t\t\tif (href){\r\n\t\t\t\t\tlocation.href = href;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tvar item = $(target).menu('getItem', this);\r\n\t\t\t$.data(target, 'menu').options.onClick.call(target, item);\r\n\t\t}).bind('mouseenter.menu', function(e){\r\n\t\t\t// hide other menu\r\n\t\t\titem.siblings().each(function(){\r\n\t\t\t\tif (this.submenu){\r\n\t\t\t\t\thideMenu(this.submenu);\r\n\t\t\t\t}\r\n\t\t\t\t$(this).removeClass('menu-active');\r\n\t\t\t});\r\n\t\t\t// show this menu\r\n\t\t\titem.addClass('menu-active');\r\n\t\t\t\r\n\t\t\tif ($(this).hasClass('menu-item-disabled')){\r\n\t\t\t\titem.addClass('menu-active-disabled');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tvar submenu = item[0].submenu;\r\n\t\t\tif (submenu){\r\n\t\t\t\t$(target).menu('show', {\r\n\t\t\t\t\tmenu: submenu,\r\n\t\t\t\t\tparent: item\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}).bind('mouseleave.menu', function(e){\r\n\t\t\titem.removeClass('menu-active menu-active-disabled');\r\n\t\t\tvar submenu = item[0].submenu;\r\n\t\t\tif (submenu){\r\n\t\t\t\tif (e.pageX>=parseInt(submenu.css('left'))){\r\n\t\t\t\t\titem.addClass('menu-active');\r\n\t\t\t\t} else {\r\n\t\t\t\t\thideMenu(submenu);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t} else {\r\n\t\t\t\titem.removeClass('menu-active');\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t/**\r\n\t * hide top menu and it's all sub menus\r\n\t */\r\n\tfunction hideAll(target){\r\n\t\tvar state = $.data(target, 'menu');\r\n\t\tif (state){\r\n\t\t\tif ($(target).is(':visible')){\r\n\t\t\t\thideMenu($(target));\r\n\t\t\t\tstate.options.onHide.call(target);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\t\r\n\t/**\r\n\t * show the menu, the 'param' object has one or more properties:\r\n\t * left: the left position to display\r\n\t * top: the top position to display\r\n\t * menu: the menu to display, if not defined, the 'target menu' is used\r\n\t * parent: the parent menu item to align to\r\n\t * alignTo: the element object to align to\r\n\t */\r\n\tfunction showMenu(target, param){\r\n\t\tvar left,top;\r\n\t\tparam = param || {};\r\n\t\tvar menu = $(param.menu || target);\r\n\t\tif (menu.hasClass('menu-top')){\r\n\t\t\tvar opts = $.data(target, 'menu').options;\r\n\t\t\t$.extend(opts, param);\r\n\t\t\tleft = opts.left;\r\n\t\t\ttop = opts.top;\r\n\t\t\tif (opts.alignTo){\r\n\t\t\t\tvar at = $(opts.alignTo);\r\n\t\t\t\tleft = at.offset().left;\r\n\t\t\t\ttop = at.offset().top + at._outerHeight();\r\n\t\t\t\tif (opts.align == 'right'){\r\n\t\t\t\t\tleft += at.outerWidth() - menu.outerWidth();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (left + menu.outerWidth() > $(window)._outerWidth() + $(document)._scrollLeft()){\r\n\t\t\t\tleft = $(window)._outerWidth() + $(document).scrollLeft() - menu.outerWidth() - 5;\r\n\t\t\t}\r\n\t\t\tif (left < 0){left = 0;}\r\n\t\t\tif (top + menu.outerHeight() > $(window)._outerHeight() + $(document).scrollTop()){\r\n\t\t\t\ttop = $(window)._outerHeight() + $(document).scrollTop() - menu.outerHeight() - 5;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvar parent = param.parent;\t// the parent menu item\r\n\t\t\tleft = parent.offset().left + parent.outerWidth() - 2;\r\n\t\t\tif (left + menu.outerWidth() + 5 > $(window)._outerWidth() + $(document).scrollLeft()){\r\n\t\t\t\tleft = parent.offset().left - menu.outerWidth() + 2;\r\n\t\t\t}\r\n\t\t\tvar top = parent.offset().top - 3;\r\n\t\t\tif (top + menu.outerHeight() > $(window)._outerHeight() + $(document).scrollTop()){\r\n\t\t\t\ttop = $(window)._outerHeight() + $(document).scrollTop() - menu.outerHeight() - 5;\r\n\t\t\t}\r\n\t\t}\r\n\t\tmenu.css({left:left,top:top});\r\n\t\tmenu.show(0, function(){\r\n\t\t\tif (!menu[0].shadow){\r\n\t\t\t\tmenu[0].shadow = $('<div class=\"menu-shadow\"></div>').insertAfter(menu);\r\n\t\t\t}\r\n\t\t\tmenu[0].shadow.css({\r\n\t\t\t\tdisplay:'block',\r\n\t\t\t\tzIndex:$.fn.menu.defaults.zIndex++,\r\n\t\t\t\tleft:menu.css('left'),\r\n\t\t\t\ttop:menu.css('top'),\r\n\t\t\t\twidth:menu.outerWidth(),\r\n\t\t\t\theight:menu.outerHeight()\r\n\t\t\t});\r\n\t\t\tmenu.css('z-index', $.fn.menu.defaults.zIndex++);\r\n\t\t\tif (menu.hasClass('menu-top')){\r\n\t\t\t\t$.data(menu[0], 'menu').options.onShow.call(menu[0]);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction hideMenu(menu){\r\n\t\tif (!menu) return;\r\n\t\t\r\n\t\thideit(menu);\r\n\t\tmenu.find('div.menu-item').each(function(){\r\n\t\t\tif (this.submenu){\r\n\t\t\t\thideMenu(this.submenu);\r\n\t\t\t}\r\n\t\t\t$(this).removeClass('menu-active');\r\n\t\t});\r\n\t\t\r\n\t\tfunction hideit(m){\r\n\t\t\tm.stop(true,true);\r\n\t\t\tif (m[0].shadow){\r\n\t\t\t\tm[0].shadow.hide();\r\n\t\t\t}\r\n\t\t\tm.hide();\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction findItem(target, text){\r\n\t\tvar result = null;\r\n\t\tvar tmp = $('<div></div>');\r\n\t\tfunction find(menu){\r\n\t\t\tmenu.children('div.menu-item').each(function(){\r\n\t\t\t\tvar item = $(target).menu('getItem', this);\r\n\t\t\t\tvar s = tmp.empty().html(item.text).text();\r\n\t\t\t\tif (text == $.trim(s)) {\r\n\t\t\t\t\tresult = item;\r\n\t\t\t\t} else if (this.submenu && !result){\r\n\t\t\t\t\tfind(this.submenu);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tfind($(target));\r\n\t\ttmp.remove();\r\n\t\treturn result;\r\n\t}\r\n\t\r\n\tfunction setDisabled(target, itemEl, disabled){\r\n\t\tvar t = $(itemEl);\r\n\t\tif (!t.hasClass('menu-item')){return}\r\n\t\t\r\n\t\tif (disabled){\r\n\t\t\tt.addClass('menu-item-disabled');\r\n\t\t\tif (itemEl.onclick){\r\n\t\t\t\titemEl.onclick1 = itemEl.onclick;\r\n\t\t\t\titemEl.onclick = null;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tt.removeClass('menu-item-disabled');\r\n\t\t\tif (itemEl.onclick1){\r\n\t\t\t\titemEl.onclick = itemEl.onclick1;\r\n\t\t\t\titemEl.onclick1 = null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction appendItem(target, param){\r\n\t\tvar menu = $(target);\r\n\t\tif (param.parent){\r\n\t\t\tif (!param.parent.submenu){\r\n\t\t\t\tvar submenu = $('<div class=\"menu\"><div class=\"menu-line\"></div></div>').appendTo('body');\r\n\t\t\t\tsubmenu.hide();\r\n\t\t\t\tparam.parent.submenu = submenu;\r\n\t\t\t\t$('<div class=\"menu-rightarrow\"></div>').appendTo(param.parent);\r\n\t\t\t}\r\n\t\t\tmenu = param.parent.submenu;\r\n\t\t}\r\n\t\tif (param.separator){\r\n\t\t\tvar item = $('<div class=\"menu-sep\"></div>').appendTo(menu);\r\n\t\t} else {\r\n\t\t\tvar item = $('<div class=\"menu-item\"></div>').appendTo(menu);\r\n\t\t\t$('<div class=\"menu-text\"></div>').html(param.text).appendTo(item);\r\n\t\t}\r\n\t\tif (param.iconCls) $('<div class=\"menu-icon\"></div>').addClass(param.iconCls).appendTo(item);\r\n\t\tif (param.id) item.attr('id', param.id);\r\n\t\tif (param.name){item[0].itemName = param.name}\r\n\t\tif (param.href){item[0].itemHref = param.href}\r\n\t\tif (param.onclick){\r\n\t\t\tif (typeof param.onclick == 'string'){\r\n\t\t\t\titem.attr('onclick', param.onclick);\r\n\t\t\t} else {\r\n\t\t\t\titem[0].onclick = eval(param.onclick);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (param.handler){item[0].onclick = eval(param.handler)}\r\n\t\tif (param.disabled){setDisabled(target, item[0], true)}\r\n\t\t\r\n\t\tbindMenuItemEvent(target, item);\r\n\t\tbindMenuEvent(target, menu);\r\n\t\tsetMenuWidth(target, menu);\r\n\t}\r\n\t\r\n\tfunction removeItem(target, itemEl){\r\n\t\tfunction removeit(el){\r\n\t\t\tif (el.submenu){\r\n\t\t\t\tel.submenu.children('div.menu-item').each(function(){\r\n\t\t\t\t\tremoveit(this);\r\n\t\t\t\t});\r\n\t\t\t\tvar shadow = el.submenu[0].shadow;\r\n\t\t\t\tif (shadow) shadow.remove();\r\n\t\t\t\tel.submenu.remove();\r\n\t\t\t}\r\n\t\t\t$(el).remove();\r\n\t\t}\r\n\t\tremoveit(itemEl);\r\n\t}\r\n\t\r\n\tfunction destroyMenu(target){\r\n\t\t$(target).children('div.menu-item').each(function(){\r\n\t\t\tremoveItem(target, this);\r\n\t\t});\r\n\t\tif (target.shadow) target.shadow.remove();\r\n\t\t$(target).remove();\r\n\t}\r\n\t\r\n\t$.fn.menu = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\treturn $.fn.menu.methods[options](this, param);\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'menu');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\tstate = $.data(this, 'menu', {\r\n\t\t\t\t\toptions: $.extend({}, $.fn.menu.defaults, $.fn.menu.parseOptions(this), options)\r\n\t\t\t\t});\r\n\t\t\t\tinit(this);\r\n\t\t\t}\r\n\t\t\t$(this).css({\r\n\t\t\t\tleft: state.options.left,\r\n\t\t\t\ttop: state.options.top\r\n\t\t\t});\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.menu.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\treturn $.data(jq[0], 'menu').options;\r\n\t\t},\r\n\t\tshow: function(jq, pos){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tshowMenu(this, pos);\r\n\t\t\t});\r\n\t\t},\r\n\t\thide: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\thideAll(this);\r\n\t\t\t});\r\n\t\t},\r\n\t\tdestroy: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tdestroyMenu(this);\r\n\t\t\t});\r\n\t\t},\r\n\t\t/**\r\n\t\t * set the menu item text\r\n\t\t * param: {\r\n\t\t * \ttarget: DOM object, indicate the menu item\r\n\t\t * \ttext: string, the new text\r\n\t\t * }\r\n\t\t */\r\n\t\tsetText: function(jq, param){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(param.target).children('div.menu-text').html(param.text);\r\n\t\t\t});\r\n\t\t},\r\n\t\t/**\r\n\t\t * set the menu icon class\r\n\t\t * param: {\r\n\t\t * \ttarget: DOM object, indicate the menu item\r\n\t\t * \ticonCls: the menu item icon class\r\n\t\t * }\r\n\t\t */\r\n\t\tsetIcon: function(jq, param){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(param.target).children('div.menu-icon').remove();\r\n\t\t\t\tif (param.iconCls){\r\n\t\t\t\t\t$('<div class=\"menu-icon\"></div>').addClass(param.iconCls).appendTo(param.target);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\t/**\r\n\t\t * get the menu item data that contains the following property:\r\n\t\t * {\r\n\t\t * \ttarget: DOM object, the menu item\r\n\t\t *  id: the menu id\r\n\t\t * \ttext: the menu item text\r\n\t\t * \ticonCls: the icon class\r\n\t\t *  href: a remote address to redirect to\r\n\t\t *  onclick: a function to be called when the item is clicked\r\n\t\t * }\r\n\t\t */\r\n\t\tgetItem: function(jq, itemEl){\r\n\t\t\tvar t = $(itemEl);\r\n\t\t\tvar item = {\r\n\t\t\t\ttarget: itemEl,\r\n\t\t\t\tid: t.attr('id'),\r\n\t\t\t\ttext: $.trim(t.children('div.menu-text').html()),\r\n\t\t\t\tdisabled: t.hasClass('menu-item-disabled'),\r\n//\t\t\t\thref: t.attr('href'),\r\n//\t\t\t\tname: t.attr('name'),\r\n\t\t\t\tname: itemEl.itemName,\r\n\t\t\t\thref: itemEl.itemHref,\r\n\t\t\t\tonclick: itemEl.onclick\r\n\t\t\t}\r\n\t\t\tvar icon = t.children('div.menu-icon');\r\n\t\t\tif (icon.length){\r\n\t\t\t\tvar cc = [];\r\n\t\t\t\tvar aa = icon.attr('class').split(' ');\r\n\t\t\t\tfor(var i=0; i<aa.length; i++){\r\n\t\t\t\t\tif (aa[i] != 'menu-icon'){\r\n\t\t\t\t\t\tcc.push(aa[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\titem.iconCls = cc.join(' ');\r\n\t\t\t}\r\n\t\t\treturn item;\r\n\t\t},\r\n\t\tfindItem: function(jq, text){\r\n\t\t\treturn findItem(jq[0], text);\r\n\t\t},\r\n\t\t/**\r\n\t\t * append menu item, the param contains following properties:\r\n\t\t * parent,id,text,iconCls,href,onclick\r\n\t\t * when parent property is assigned, append menu item to it\r\n\t\t */\r\n\t\tappendItem: function(jq, param){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tappendItem(this, param);\r\n\t\t\t});\r\n\t\t},\r\n\t\tremoveItem: function(jq, itemEl){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tremoveItem(this, itemEl);\r\n\t\t\t});\r\n\t\t},\r\n\t\tenableItem: function(jq, itemEl){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetDisabled(this, itemEl, false);\r\n\t\t\t});\r\n\t\t},\r\n\t\tdisableItem: function(jq, itemEl){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetDisabled(this, itemEl, true);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.menu.parseOptions = function(target){\r\n\t\treturn $.extend({}, $.parser.parseOptions(target, ['left','top',{minWidth:'number',hideOnUnhover:'boolean'}]));\r\n\t};\r\n\t\r\n\t$.fn.menu.defaults = {\r\n\t\tzIndex:110000,\r\n\t\tleft: 0,\r\n\t\ttop: 0,\r\n\t\talignTo: null,\r\n\t\talign: 'left',\r\n\t\tminWidth: 120,\r\n\t\thideOnUnhover: true,\t// Automatically hides the menu when mouse exits it\r\n\t\tonShow: function(){},\r\n\t\tonHide: function(){},\r\n\t\tonClick: function(item){}\r\n\t};\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.parser.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * parser - jQuery EasyUI\r\n * \r\n */\r\n\r\n(function($){\r\n\t$.parser = {\r\n\t\tauto: true,\r\n\t\tonComplete: function(context){},\r\n\t\tplugins:['draggable','droppable','resizable','pagination','tooltip',\r\n\t\t         'linkbutton','menu','menubutton','splitbutton','progressbar',\r\n\t\t\t\t 'tree','combobox','combotree','combogrid','numberbox','validatebox','searchbox',\r\n\t\t\t\t 'numberspinner','timespinner','calendar','datebox','datetimebox','slider',\r\n\t\t\t\t 'layout','panel','datagrid','propertygrid','treegrid','tabs','accordion','window','dialog'\r\n\t\t],\r\n\t\tparse: function(context){\r\n\t\t\tvar aa = [];\r\n\t\t\tfor(var i=0; i<$.parser.plugins.length; i++){\r\n\t\t\t\tvar name = $.parser.plugins[i];\r\n\t\t\t\tvar r = $('.easyui-' + name, context);\r\n\t\t\t\tif (r.length){\r\n\t\t\t\t\tif (r[name]){\r\n\t\t\t\t\t\tr[name]();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\taa.push({name:name,jq:r});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (aa.length && window.easyloader){\r\n\t\t\t\tvar names = [];\r\n\t\t\t\tfor(var i=0; i<aa.length; i++){\r\n\t\t\t\t\tnames.push(aa[i].name);\r\n\t\t\t\t}\r\n\t\t\t\teasyloader.load(names, function(){\r\n\t\t\t\t\tfor(var i=0; i<aa.length; i++){\r\n\t\t\t\t\t\tvar name = aa[i].name;\r\n\t\t\t\t\t\tvar jq = aa[i].jq;\r\n\t\t\t\t\t\tjq[name]();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t$.parser.onComplete.call($.parser, context);\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t$.parser.onComplete.call($.parser, context);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t/**\r\n\t\t * parse options, including standard 'data-options' attribute.\r\n\t\t * \r\n\t\t * calling examples:\r\n\t\t * $.parser.parseOptions(target);\r\n\t\t * $.parser.parseOptions(target, ['id','title','width',{fit:'boolean',border:'boolean'},{min:'number'}]);\r\n\t\t */\r\n\t\tparseOptions: function(target, properties){\r\n\t\t\tvar t = $(target);\r\n\t\t\tvar options = {};\r\n\t\t\t\r\n\t\t\tvar s = $.trim(t.attr('data-options'));\r\n\t\t\tif (s){\r\n//\t\t\t\tvar first = s.substring(0,1);\r\n//\t\t\t\tvar last = s.substring(s.length-1,1);\r\n//\t\t\t\tif (first != '{') s = '{' + s;\r\n//\t\t\t\tif (last != '}') s = s + '}';\r\n\t\t\t\tif (s.substring(0, 1) != '{'){\r\n\t\t\t\t\ts = '{' + s + '}';\r\n\t\t\t\t}\r\n\t\t\t\toptions = (new Function('return ' + s))();\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t\tif (properties){\r\n\t\t\t\tvar opts = {};\r\n\t\t\t\tfor(var i=0; i<properties.length; i++){\r\n\t\t\t\t\tvar pp = properties[i];\r\n\t\t\t\t\tif (typeof pp == 'string'){\r\n\t\t\t\t\t\tif (pp == 'width' || pp == 'height' || pp == 'left' || pp == 'top'){\r\n\t\t\t\t\t\t\topts[pp] = parseInt(target.style[pp]) || undefined;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\topts[pp] = t.attr(pp);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tfor(var name in pp){\r\n\t\t\t\t\t\t\tvar type = pp[name];\r\n\t\t\t\t\t\t\tif (type == 'boolean'){\r\n\t\t\t\t\t\t\t\topts[name] = t.attr(name) ? (t.attr(name) == 'true') : undefined;\r\n\t\t\t\t\t\t\t} else if (type == 'number'){\r\n\t\t\t\t\t\t\t\topts[name] = t.attr(name)=='0' ? 0 : parseFloat(t.attr(name)) || undefined;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t$.extend(options, opts);\r\n\t\t\t}\r\n\t\t\treturn options;\r\n\t\t}\r\n\t};\r\n\t$(function(){\r\n\t\tvar d = $('<div style=\"position:absolute;top:-1000px;width:100px;height:100px;padding:5px\"></div>').appendTo('body');\r\n\t\td.width(100);\r\n\t\t$._boxModel = parseInt(d.width()) == 100;\r\n\t\td.remove();\r\n\t\t\r\n\t\tif (!window.easyloader && $.parser.auto){\r\n\t\t\t$.parser.parse();\r\n\t\t}\r\n\t});\r\n\t\r\n\t/**\r\n\t * extend plugin to set box model width\r\n\t */\r\n\t$.fn._outerWidth = function(width){\r\n\t\tif (width == undefined){\r\n\t\t\tif (this[0] == window){\r\n\t\t\t\treturn this.width() || document.body.clientWidth;\r\n\t\t\t}\r\n\t\t\treturn this.outerWidth()||0;\r\n\t\t}\r\n\t\treturn this.each(function(){\r\n\t\t\tif ($._boxModel){\r\n\t\t\t\t$(this).width(width - ($(this).outerWidth() - $(this).width()));\r\n\t\t\t} else {\r\n\t\t\t\t$(this).width(width);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\t\r\n\t/**\r\n\t * extend plugin to set box model height\r\n\t */\r\n\t$.fn._outerHeight = function(height){\r\n\t\tif (height == undefined){\r\n\t\t\tif (this[0] == window){\r\n\t\t\t\treturn this.height() || document.body.clientHeight;\r\n\t\t\t}\r\n\t\t\treturn this.outerHeight()||0;\r\n\t\t}\r\n\t\treturn this.each(function(){\r\n\t\t\tif ($._boxModel){\r\n\t\t\t\t$(this).height(height - ($(this).outerHeight() - $(this).height()));\r\n\t\t\t} else {\r\n\t\t\t\t$(this).height(height);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn._scrollLeft = function(left){\r\n\t\tif (left == undefined){\r\n\t\t\treturn this.scrollLeft();\r\n\t\t} else {\r\n\t\t\treturn this.each(function(){$(this).scrollLeft(left)});\r\n\t\t}\r\n\t}\r\n\t\r\n\t$.fn._propAttr = $.fn.prop || $.fn.attr;\r\n\t\r\n\t/**\r\n\t * set or unset the fit property of parent container, return the width and height of parent container\r\n\t */\r\n\t$.fn._fit = function(fit){\r\n\t\tfit = fit == undefined ? true : fit;\r\n\t\tvar t = this[0];\r\n\t\tvar p = (t.tagName == 'BODY' ? t : this.parent()[0]);\r\n\t\tvar fcount = p.fcount || 0;\r\n\t\tif (fit){\r\n\t\t\tif (!t.fitted){\r\n\t\t\t\tt.fitted = true;\r\n\t\t\t\tp.fcount = fcount + 1;\r\n\t\t\t\t$(p).addClass('panel-noscroll');\r\n\t\t\t\tif (p.tagName == 'BODY'){\r\n\t\t\t\t\t$('html').addClass('panel-fit');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (t.fitted){\r\n\t\t\t\tt.fitted = false;\r\n\t\t\t\tp.fcount = fcount - 1;\r\n\t\t\t\tif (p.fcount == 0){\r\n\t\t\t\t\t$(p).removeClass('panel-noscroll');\r\n\t\t\t\t\tif (p.tagName == 'BODY'){\r\n\t\t\t\t\t\t$('html').removeClass('panel-fit');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {\r\n\t\t\twidth: $(p).width(),\r\n\t\t\theight: $(p).height()\r\n\t\t}\r\n\t}\r\n\t\r\n})(jQuery);\r\n\r\n/**\r\n * support for mobile devices\r\n */\r\n(function($){\r\n\tvar longTouchTimer = null;\r\n\tvar dblTouchTimer = null;\r\n\tvar isDblClick = false;\r\n\t\r\n\tfunction onTouchStart(e){\r\n\t\tif (e.touches.length != 1){return}\r\n\t\tif (!isDblClick){\r\n\t\t\tisDblClick = true;\r\n\t\t\tdblClickTimer = setTimeout(function(){\r\n\t\t\t\tisDblClick = false;\r\n\t\t\t}, 500);\r\n\t\t} else {\r\n\t\t\tclearTimeout(dblClickTimer);\r\n\t\t\tisDblClick = false;\r\n\t\t\tfire(e, 'dblclick');\r\n//\t\t\te.preventDefault();\r\n\t\t}\r\n\t\tlongTouchTimer = setTimeout(function(){\r\n\t\t\tfire(e, 'contextmenu', 3);\r\n\t\t}, 1000);\r\n\t\tfire(e, 'mousedown');\r\n\t\tif ($.fn.draggable.isDragging || $.fn.resizable.isResizing){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t}\r\n\tfunction onTouchMove(e){\r\n\t\tif (e.touches.length != 1){return}\r\n\t\tif (longTouchTimer){\r\n\t\t\tclearTimeout(longTouchTimer);\r\n\t\t}\r\n\t\tfire(e, 'mousemove');\r\n\t\tif ($.fn.draggable.isDragging || $.fn.resizable.isResizing){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t}\r\n\tfunction onTouchEnd(e){\r\n//\t\tif (e.touches.length > 0){return}\r\n\t\tif (longTouchTimer){\r\n\t\t\tclearTimeout(longTouchTimer);\r\n\t\t}\r\n\t\tfire(e, 'mouseup');\r\n\t\tif ($.fn.draggable.isDragging || $.fn.resizable.isResizing){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction fire(e, name, which){\r\n\t\tvar event = new $.Event(name);\r\n\t\tevent.pageX = e.changedTouches[0].pageX;\r\n\t\tevent.pageY = e.changedTouches[0].pageY;\r\n\t\tevent.which = which || 1;\r\n\t\t$(e.target).trigger(event);\r\n\t}\r\n\t\r\n\tif (document.addEventListener){\r\n\t\tdocument.addEventListener(\"touchstart\", onTouchStart, true);\r\n\t\tdocument.addEventListener(\"touchmove\", onTouchMove, true);\r\n\t\tdocument.addEventListener(\"touchend\", onTouchEnd, true);\r\n\t}\r\n})(jQuery);\r\n\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.progressbar.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * progressbar - jQuery EasyUI\r\n * \r\n * Dependencies:\r\n * \t none\r\n * \r\n */\r\n(function($){\r\n\tfunction init(target){\r\n\t\t$(target).addClass('progressbar');\r\n\t\t$(target).html('<div class=\"progressbar-text\"></div><div class=\"progressbar-value\"><div class=\"progressbar-text\"></div></div>');\r\n\t\treturn $(target);\r\n\t}\r\n\t\r\n\tfunction setSize(target,width){\r\n\t\tvar opts = $.data(target, 'progressbar').options;\r\n\t\tvar bar = $.data(target, 'progressbar').bar;\r\n\t\tif (width) opts.width = width;\r\n\t\tbar._outerWidth(opts.width)._outerHeight(opts.height);\r\n\t\t\r\n\t\tbar.find('div.progressbar-text').width(bar.width());\r\n\t\tbar.find('div.progressbar-text,div.progressbar-value').css({\r\n\t\t\theight: bar.height()+'px',\r\n\t\t\tlineHeight: bar.height()+'px'\r\n\t\t});\r\n\t}\r\n\t\r\n\t$.fn.progressbar = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\tvar method = $.fn.progressbar.methods[options];\r\n\t\t\tif (method){\r\n\t\t\t\treturn method(this, param);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'progressbar');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\tstate = $.data(this, 'progressbar', {\r\n\t\t\t\t\toptions: $.extend({}, $.fn.progressbar.defaults, $.fn.progressbar.parseOptions(this), options),\r\n\t\t\t\t\tbar: init(this)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t$(this).progressbar('setValue', state.options.value);\r\n\t\t\tsetSize(this);\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.progressbar.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\treturn $.data(jq[0], 'progressbar').options;\r\n\t\t},\r\n\t\tresize: function(jq, width){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetSize(this, width);\r\n\t\t\t});\r\n\t\t},\r\n\t\tgetValue: function(jq){\r\n\t\t\treturn $.data(jq[0], 'progressbar').options.value;\r\n\t\t},\r\n\t\tsetValue: function(jq, value){\r\n\t\t\tif (value < 0) value = 0;\r\n\t\t\tif (value > 100) value = 100;\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tvar opts = $.data(this, 'progressbar').options;\r\n\t\t\t\tvar text = opts.text.replace(/{value}/, value);\r\n\t\t\t\tvar oldValue = opts.value;\r\n\t\t\t\topts.value = value;\r\n\t\t\t\t$(this).find('div.progressbar-value').width(value+'%');\r\n\t\t\t\t$(this).find('div.progressbar-text').html(text);\r\n\t\t\t\tif (oldValue != value){\r\n\t\t\t\t\topts.onChange.call(this, value, oldValue);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.progressbar.parseOptions = function(target){\r\n\t\treturn $.extend({}, $.parser.parseOptions(target, ['width','height','text',{value:'number'}]));\r\n\t};\r\n\t\r\n\t$.fn.progressbar.defaults = {\r\n\t\twidth: 'auto',\r\n\t\theight: 22,\r\n\t\tvalue: 0,\t// percentage value\r\n\t\ttext: '{value}%',\r\n\t\tonChange:function(newValue,oldValue){}\r\n\t};\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.propertygrid.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * propertygrid - jQuery EasyUI\r\n * \r\n * Dependencies:\r\n * \t datagrid\r\n * \r\n */\r\n(function($){\r\n\tvar currTarget;\r\n\t\r\n\tfunction buildGrid(target){\r\n\t\tvar state = $.data(target, 'propertygrid');\r\n\t\tvar opts = $.data(target, 'propertygrid').options;\r\n\t\t$(target).datagrid($.extend({}, opts, {\r\n\t\t\tcls:'propertygrid',\r\n\t\t\tview:(opts.showGroup ? opts.groupView : opts.view),\r\n\t\t\tonClickRow:function(index, row){\r\n\t\t\t\tif (currTarget != this){\r\n//\t\t\t\t\tleaveCurrRow();\r\n\t\t\t\t\tstopEditing(currTarget);\r\n\t\t\t\t\tcurrTarget = this;\r\n\t\t\t\t}\r\n\t\t\t\tif (opts.editIndex != index && row.editor){\r\n\t\t\t\t\tvar col = $(this).datagrid('getColumnOption', \"value\");\r\n\t\t\t\t\tcol.editor = row.editor;\r\n//\t\t\t\t\tleaveCurrRow();\r\n\t\t\t\t\tstopEditing(currTarget);\r\n\t\t\t\t\t$(this).datagrid('beginEdit', index);\r\n\t\t\t\t\t$(this).datagrid('getEditors', index)[0].target.focus();\r\n\t\t\t\t\topts.editIndex = index;\r\n\t\t\t\t}\r\n\t\t\t\topts.onClickRow.call(target, index, row);\r\n\t\t\t},\r\n\t\t\tloadFilter:function(data){\r\n\t\t\t\tstopEditing(this);\r\n\t\t\t\treturn opts.loadFilter.call(this, data);\r\n\t\t\t}\r\n\t\t}));\r\n\t\t$(document).unbind('.propertygrid').bind('mousedown.propertygrid', function(e){\r\n\t\t\tvar p = $(e.target).closest('div.datagrid-view,div.combo-panel');\r\n//\t\t\tvar p = $(e.target).closest('div.propertygrid,div.combo-panel');\r\n\t\t\tif (p.length){return;}\r\n\t\t\tstopEditing(currTarget);\r\n\t\t\tcurrTarget = undefined;\r\n\t\t});\r\n\t\t\r\n//\t\tfunction leaveCurrRow(){\r\n//\t\t\tvar t = $(currTarget);\r\n//\t\t\tif (!t.length){return;}\r\n//\t\t\tvar opts = $.data(currTarget, 'propertygrid').options;\r\n//\t\t\tvar index = opts.editIndex;\r\n//\t\t\tif (index == undefined){return;}\r\n//\t\t\tvar ed = t.datagrid('getEditors', index)[0];\r\n//\t\t\tif (ed){\r\n//\t\t\t\ted.target.blur();\r\n//\t\t\t\tif (t.datagrid('validateRow', index)){\r\n//\t\t\t\t\tt.datagrid('endEdit', index);\r\n//\t\t\t\t} else {\r\n//\t\t\t\t\tt.datagrid('cancelEdit', index);\r\n//\t\t\t\t}\r\n//\t\t\t}\r\n//\t\t\topts.editIndex = undefined;\r\n//\t\t}\r\n\t}\r\n\t\r\n\tfunction stopEditing(target){\r\n\t\tvar t = $(target);\r\n\t\tif (!t.length){return}\r\n\t\tvar opts = $.data(target, 'propertygrid').options;\r\n\t\tvar index = opts.editIndex;\r\n\t\tif (index == undefined){return;}\r\n\t\tvar ed = t.datagrid('getEditors', index)[0];\r\n\t\tif (ed){\r\n\t\t\ted.target.blur();\r\n\t\t\tif (t.datagrid('validateRow', index)){\r\n\t\t\t\tt.datagrid('endEdit', index);\r\n\t\t\t} else {\r\n\t\t\t\tt.datagrid('cancelEdit', index);\r\n\t\t\t}\r\n\t\t}\r\n\t\topts.editIndex = undefined;\r\n\t}\r\n\t\r\n\t$.fn.propertygrid = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\tvar method = $.fn.propertygrid.methods[options];\r\n\t\t\tif (method){\r\n\t\t\t\treturn method(this, param);\r\n\t\t\t} else {\r\n\t\t\t\treturn this.datagrid(options, param);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'propertygrid');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\tvar opts = $.extend({}, $.fn.propertygrid.defaults, $.fn.propertygrid.parseOptions(this), options);\r\n\t\t\t\topts.frozenColumns = $.extend(true, [], opts.frozenColumns);\r\n\t\t\t\topts.columns = $.extend(true, [], opts.columns);\r\n\t\t\t\t$.data(this, 'propertygrid', {\r\n\t\t\t\t\toptions: opts\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tbuildGrid(this);\r\n\t\t});\r\n\t}\r\n\t\r\n\t$.fn.propertygrid.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\treturn $.data(jq[0], 'propertygrid').options;\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.propertygrid.parseOptions = function(target){\r\n\t\treturn $.extend({}, $.fn.datagrid.parseOptions(target), $.parser.parseOptions(target,[{showGroup:'boolean'}]));\r\n\t};\r\n\t\r\n\t// the group view definition\r\n\tvar groupview = $.extend({}, $.fn.datagrid.defaults.view, {\r\n\t\trender: function(target, container, frozen){\r\n\t\t\tvar table = [];\r\n\t\t\tvar groups = this.groups;\r\n\t\t\tfor(var i=0; i<groups.length; i++){\r\n\t\t\t\ttable.push(this.renderGroup.call(this, target, i, groups[i], frozen));\r\n\t\t\t}\r\n\t\t\t$(container).html(table.join(''));\r\n\t\t},\r\n\t\t\r\n\t\trenderGroup: function(target, groupIndex, group, frozen){\r\n\t\t\tvar state = $.data(target, 'datagrid');\r\n\t\t\tvar opts = state.options;\r\n\t\t\tvar fields = $(target).datagrid('getColumnFields', frozen);\r\n\t\t\t\r\n\t\t\tvar table = [];\r\n\t\t\ttable.push('<div class=\"datagrid-group\" group-index=' + groupIndex + '>');\r\n\t\t\ttable.push('<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"height:100%\"><tbody>');\r\n\t\t\ttable.push('<tr>');\r\n\t\t\tif ((frozen && (opts.rownumbers || opts.frozenColumns.length)) ||\r\n\t\t\t\t\t(!frozen && !(opts.rownumbers || opts.frozenColumns.length))){\r\n\t\t\t\ttable.push('<td style=\"border:0;text-align:center;width:25px\"><span class=\"datagrid-row-expander datagrid-row-collapse\" style=\"display:inline-block;width:16px;height:16px;cursor:pointer\">&nbsp;</span></td>');\r\n\t\t\t}\r\n\t\t\ttable.push('<td style=\"border:0;\">');\r\n\t\t\tif (!frozen){\r\n\t\t\t\ttable.push('<span class=\"datagrid-group-title\">');\r\n\t\t\t\ttable.push(opts.groupFormatter.call(target, group.value, group.rows));\r\n\t\t\t\ttable.push('</span>');\r\n\t\t\t}\r\n\t\t\ttable.push('</td>');\r\n\t\t\ttable.push('</tr>');\r\n\t\t\ttable.push('</tbody></table>');\r\n\t\t\ttable.push('</div>');\r\n\t\t\t\r\n\t\t\ttable.push('<table class=\"datagrid-btable\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody>');\r\n\t\t\tvar index = group.startIndex;\r\n\t\t\tfor(var j=0; j<group.rows.length; j++) {\r\n\t\t\t\tvar css = opts.rowStyler ? opts.rowStyler.call(target, index, group.rows[j]) : '';\r\n\t\t\t\tvar classValue = '';\r\n\t\t\t\tvar styleValue = '';\r\n\t\t\t\tif (typeof css == 'string'){\r\n\t\t\t\t\tstyleValue = css;\r\n\t\t\t\t} else if (css){\r\n\t\t\t\t\tclassValue = css['class'] || '';\r\n\t\t\t\t\tstyleValue = css['style'] || '';\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar cls = 'class=\"datagrid-row ' + (index % 2 && opts.striped ? 'datagrid-row-alt ' : ' ') + classValue + '\"';\r\n\t\t\t\tvar style = styleValue ? 'style=\"' + styleValue + '\"' : '';\r\n\t\t\t\tvar rowId = state.rowIdPrefix + '-' + (frozen?1:2) + '-' + index;\r\n\t\t\t\ttable.push('<tr id=\"' + rowId + '\" datagrid-row-index=\"' + index + '\" ' + cls + ' ' + style + '>');\r\n\t\t\t\ttable.push(this.renderRow.call(this, target, fields, frozen, index, group.rows[j]));\r\n\t\t\t\ttable.push('</tr>');\r\n\t\t\t\tindex++;\r\n\t\t\t}\r\n\t\t\ttable.push('</tbody></table>');\r\n\t\t\treturn table.join('');\r\n\t\t},\r\n\t\t\r\n\t\tbindEvents: function(target){\r\n\t\t\tvar state = $.data(target, 'datagrid');\r\n\t\t\tvar dc = state.dc;\r\n\t\t\tvar body = dc.body1.add(dc.body2);\r\n\t\t\tvar clickHandler = ($.data(body[0],'events')||$._data(body[0],'events')).click[0].handler;\r\n\t\t\tbody.unbind('click').bind('click', function(e){\r\n\t\t\t\tvar tt = $(e.target);\r\n\t\t\t\tvar expander = tt.closest('span.datagrid-row-expander');\r\n\t\t\t\tif (expander.length){\r\n\t\t\t\t\tvar gindex = expander.closest('div.datagrid-group').attr('group-index');\r\n\t\t\t\t\tif (expander.hasClass('datagrid-row-collapse')){\r\n\t\t\t\t\t\t$(target).datagrid('collapseGroup', gindex);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$(target).datagrid('expandGroup', gindex);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tclickHandler(e);\r\n\t\t\t\t}\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\t\t},\r\n\t\t\r\n\t\tonBeforeRender: function(target, rows){\r\n\t\t\tvar state = $.data(target, 'datagrid');\r\n\t\t\tvar opts = state.options;\r\n\t\t\t\r\n\t\t\tinitCss();\r\n\t\t\t\r\n\t\t\tvar groups = [];\r\n\t\t\tfor(var i=0; i<rows.length; i++){\r\n\t\t\t\tvar row = rows[i];\r\n\t\t\t\tvar group = getGroup(row[opts.groupField]);\r\n\t\t\t\tif (!group){\r\n\t\t\t\t\tgroup = {\r\n\t\t\t\t\t\tvalue: row[opts.groupField],\r\n\t\t\t\t\t\trows: [row]\r\n\t\t\t\t\t};\r\n\t\t\t\t\tgroups.push(group);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tgroup.rows.push(row);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tvar index = 0;\r\n\t\t\tvar newRows = [];\r\n\t\t\tfor(var i=0; i<groups.length; i++){\r\n\t\t\t\tvar group = groups[i];\r\n\t\t\t\tgroup.startIndex = index;\r\n\t\t\t\tindex += group.rows.length;\r\n\t\t\t\tnewRows = newRows.concat(group.rows);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tstate.data.rows = newRows;\r\n\t\t\tthis.groups = groups;\r\n\t\t\t\r\n\t\t\tvar that = this;\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tthat.bindEvents(target);\r\n\t\t\t},0);\r\n\t\t\t\r\n\t\t\tfunction getGroup(value){\r\n\t\t\t\tfor(var i=0; i<groups.length; i++){\r\n\t\t\t\t\tvar group = groups[i];\r\n\t\t\t\t\tif (group.value == value){\r\n\t\t\t\t\t\treturn group;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tfunction initCss(){\r\n\t\t\t\tif (!$('#datagrid-group-style').length){\r\n\t\t\t\t\t$('head').append(\r\n\t\t\t\t\t\t'<style id=\"datagrid-group-style\">' +\r\n\t\t\t\t\t\t'.datagrid-group{height:25px;overflow:hidden;font-weight:bold;border-bottom:1px solid #ccc;}' +\r\n\t\t\t\t\t\t'</style>'\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t$.extend($.fn.datagrid.methods, {\r\n\t    expandGroup:function(jq, groupIndex){\r\n\t        return jq.each(function(){\r\n\t            var view = $.data(this, 'datagrid').dc.view;\r\n\t            var group = view.find(groupIndex!=undefined ? 'div.datagrid-group[group-index=\"'+groupIndex+'\"]' : 'div.datagrid-group');\r\n\t            var expander = group.find('span.datagrid-row-expander');\r\n\t            if (expander.hasClass('datagrid-row-expand')){\r\n\t                expander.removeClass('datagrid-row-expand').addClass('datagrid-row-collapse');\r\n\t                group.next('table').show();\r\n\t            }\r\n\t            $(this).datagrid('fixRowHeight');\r\n\t        });\r\n\t    },\r\n\t    collapseGroup:function(jq, groupIndex){\r\n\t        return jq.each(function(){\r\n\t            var view = $.data(this, 'datagrid').dc.view;\r\n\t            var group = view.find(groupIndex!=undefined ? 'div.datagrid-group[group-index=\"'+groupIndex+'\"]' : 'div.datagrid-group');\r\n\t            var expander = group.find('span.datagrid-row-expander');\r\n\t            if (expander.hasClass('datagrid-row-collapse')){\r\n\t                expander.removeClass('datagrid-row-collapse').addClass('datagrid-row-expand');\r\n\t                group.next('table').hide();\r\n\t            }\r\n\t            $(this).datagrid('fixRowHeight');\r\n\t        });\r\n\t    }\r\n\t});\r\n\t// end of group view definition\r\n\t\r\n\t$.fn.propertygrid.defaults = $.extend({}, $.fn.datagrid.defaults, {\r\n\t\tsingleSelect:true,\r\n\t\tremoteSort:false,\r\n\t\tfitColumns:true,\r\n\t\tloadMsg:'',\r\n\t\tfrozenColumns:[[\r\n\t\t    {field:'f',width:16,resizable:false}\r\n\t\t]],\r\n\t\tcolumns:[[\r\n\t\t    {field:'name',title:'Name',width:100,sortable:true},\r\n\t\t    {field:'value',title:'Value',width:100,resizable:false}\r\n\t\t]],\r\n\t\t\r\n\t\tshowGroup:false,\r\n\t\tgroupView:groupview,\r\n\t\tgroupField:'group',\r\n\t\tgroupFormatter:function(fvalue,rows){return fvalue}\r\n\t});\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.resizable.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * resizable - jQuery EasyUI\r\n * \r\n */\r\n(function($){\r\n//\tvar isResizing = false;\r\n\t$.fn.resizable = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\treturn $.fn.resizable.methods[options](this, param);\r\n\t\t}\r\n\t\t\r\n\t\tfunction resize(e){\r\n\t\t\tvar resizeData = e.data;\r\n\t\t\tvar options = $.data(resizeData.target, 'resizable').options;\r\n\t\t\tif (resizeData.dir.indexOf('e') != -1) {\r\n\t\t\t\tvar width = resizeData.startWidth + e.pageX - resizeData.startX;\r\n\t\t\t\twidth = Math.min(\r\n\t\t\t\t\t\t\tMath.max(width, options.minWidth),\r\n\t\t\t\t\t\t\toptions.maxWidth\r\n\t\t\t\t\t\t);\r\n\t\t\t\tresizeData.width = width;\r\n\t\t\t}\r\n\t\t\tif (resizeData.dir.indexOf('s') != -1) {\r\n\t\t\t\tvar height = resizeData.startHeight + e.pageY - resizeData.startY;\r\n\t\t\t\theight = Math.min(\r\n\t\t\t\t\t\tMath.max(height, options.minHeight),\r\n\t\t\t\t\t\toptions.maxHeight\r\n\t\t\t\t);\r\n\t\t\t\tresizeData.height = height;\r\n\t\t\t}\r\n\t\t\tif (resizeData.dir.indexOf('w') != -1) {\r\n\t\t\t\tvar width = resizeData.startWidth - e.pageX + resizeData.startX;\r\n\t\t\t\twidth = Math.min(\r\n\t\t\t\t\t\t\tMath.max(width, options.minWidth),\r\n\t\t\t\t\t\t\toptions.maxWidth\r\n\t\t\t\t\t\t);\r\n\t\t\t\tresizeData.width = width;\r\n\t\t\t\tresizeData.left = resizeData.startLeft + resizeData.startWidth - resizeData.width;\r\n\t\t\t\t\r\n//\t\t\t\tresizeData.width = resizeData.startWidth - e.pageX + resizeData.startX;\r\n//\t\t\t\tif (resizeData.width >= options.minWidth && resizeData.width <= options.maxWidth) {\r\n//\t\t\t\t\tresizeData.left = resizeData.startLeft + e.pageX - resizeData.startX;\r\n//\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (resizeData.dir.indexOf('n') != -1) {\r\n\t\t\t\tvar height = resizeData.startHeight - e.pageY + resizeData.startY;\r\n\t\t\t\theight = Math.min(\r\n\t\t\t\t\t\t\tMath.max(height, options.minHeight),\r\n\t\t\t\t\t\t\toptions.maxHeight\r\n\t\t\t\t\t\t);\r\n\t\t\t\tresizeData.height = height;\r\n\t\t\t\tresizeData.top = resizeData.startTop + resizeData.startHeight - resizeData.height;\r\n\t\t\t\t\r\n//\t\t\t\tresizeData.height = resizeData.startHeight - e.pageY + resizeData.startY;\r\n//\t\t\t\tif (resizeData.height >= options.minHeight && resizeData.height <= options.maxHeight) {\r\n//\t\t\t\t\tresizeData.top = resizeData.startTop + e.pageY - resizeData.startY;\r\n//\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tfunction applySize(e){\r\n\t\t\tvar resizeData = e.data;\r\n\t\t\tvar t = $(resizeData.target);\r\n\t\t\tt.css({\r\n\t\t\t\tleft: resizeData.left,\r\n\t\t\t\ttop: resizeData.top\r\n\t\t\t});\r\n\t\t\tif (t.outerWidth() != resizeData.width){t._outerWidth(resizeData.width)}\r\n\t\t\tif (t.outerHeight() != resizeData.height){t._outerHeight(resizeData.height)}\r\n//\t\t\tt._outerWidth(resizeData.width)._outerHeight(resizeData.height);\r\n\t\t}\r\n\t\t\r\n\t\tfunction doDown(e){\r\n//\t\t\tisResizing = true;\r\n\t\t\t$.fn.resizable.isResizing = true;\r\n\t\t\t$.data(e.data.target, 'resizable').options.onStartResize.call(e.data.target, e);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t\r\n\t\tfunction doMove(e){\r\n\t\t\tresize(e);\r\n\t\t\tif ($.data(e.data.target, 'resizable').options.onResize.call(e.data.target, e) != false){\r\n\t\t\t\tapplySize(e)\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t\r\n\t\tfunction doUp(e){\r\n//\t\t\tisResizing = false;\r\n\t\t\t$.fn.resizable.isResizing = false;\r\n\t\t\tresize(e, true);\r\n\t\t\tapplySize(e);\r\n\t\t\t$.data(e.data.target, 'resizable').options.onStopResize.call(e.data.target, e);\r\n\t\t\t$(document).unbind('.resizable');\r\n\t\t\t$('body').css('cursor','');\r\n//\t\t\t$('body').css('cursor','auto');\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\t\r\n\t\treturn this.each(function(){\r\n\t\t\tvar opts = null;\r\n\t\t\tvar state = $.data(this, 'resizable');\r\n\t\t\tif (state) {\r\n\t\t\t\t$(this).unbind('.resizable');\r\n\t\t\t\topts = $.extend(state.options, options || {});\r\n\t\t\t} else {\r\n\t\t\t\topts = $.extend({}, $.fn.resizable.defaults, $.fn.resizable.parseOptions(this), options || {});\r\n\t\t\t\t$.data(this, 'resizable', {\r\n\t\t\t\t\toptions:opts\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (opts.disabled == true) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t// bind mouse event using namespace resizable\r\n\t\t\t$(this).bind('mousemove.resizable', {target:this}, function(e){\r\n//\t\t\t\tif (isResizing) return;\r\n\t\t\t\tif ($.fn.resizable.isResizing){return}\r\n\t\t\t\tvar dir = getDirection(e);\r\n\t\t\t\tif (dir == '') {\r\n\t\t\t\t\t$(e.data.target).css('cursor', '');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$(e.data.target).css('cursor', dir + '-resize');\r\n\t\t\t\t}\r\n\t\t\t}).bind('mouseleave.resizable', {target:this}, function(e){\r\n\t\t\t\t$(e.data.target).css('cursor', '');\r\n\t\t\t}).bind('mousedown.resizable', {target:this}, function(e){\r\n\t\t\t\tvar dir = getDirection(e);\r\n\t\t\t\tif (dir == '') return;\r\n\t\t\t\t\r\n\t\t\t\tfunction getCssValue(css) {\r\n\t\t\t\t\tvar val = parseInt($(e.data.target).css(css));\r\n\t\t\t\t\tif (isNaN(val)) {\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn val;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar data = {\r\n\t\t\t\t\ttarget: e.data.target,\r\n\t\t\t\t\tdir: dir,\r\n\t\t\t\t\tstartLeft: getCssValue('left'),\r\n\t\t\t\t\tstartTop: getCssValue('top'),\r\n\t\t\t\t\tleft: getCssValue('left'),\r\n\t\t\t\t\ttop: getCssValue('top'),\r\n\t\t\t\t\tstartX: e.pageX,\r\n\t\t\t\t\tstartY: e.pageY,\r\n\t\t\t\t\tstartWidth: $(e.data.target).outerWidth(),\r\n\t\t\t\t\tstartHeight: $(e.data.target).outerHeight(),\r\n\t\t\t\t\twidth: $(e.data.target).outerWidth(),\r\n\t\t\t\t\theight: $(e.data.target).outerHeight(),\r\n\t\t\t\t\tdeltaWidth: $(e.data.target).outerWidth() - $(e.data.target).width(),\r\n\t\t\t\t\tdeltaHeight: $(e.data.target).outerHeight() - $(e.data.target).height()\r\n\t\t\t\t};\r\n\t\t\t\t$(document).bind('mousedown.resizable', data, doDown);\r\n\t\t\t\t$(document).bind('mousemove.resizable', data, doMove);\r\n\t\t\t\t$(document).bind('mouseup.resizable', data, doUp);\r\n\t\t\t\t$('body').css('cursor', dir+'-resize');\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t// get the resize direction\r\n\t\t\tfunction getDirection(e) {\r\n\t\t\t\tvar tt = $(e.data.target);\r\n\t\t\t\tvar dir = '';\r\n\t\t\t\tvar offset = tt.offset();\r\n\t\t\t\tvar width = tt.outerWidth();\r\n\t\t\t\tvar height = tt.outerHeight();\r\n\t\t\t\tvar edge = opts.edge;\r\n\t\t\t\tif (e.pageY > offset.top && e.pageY < offset.top + edge) {\r\n\t\t\t\t\tdir += 'n';\r\n\t\t\t\t} else if (e.pageY < offset.top + height && e.pageY > offset.top + height - edge) {\r\n\t\t\t\t\tdir += 's';\r\n\t\t\t\t}\r\n\t\t\t\tif (e.pageX > offset.left && e.pageX < offset.left + edge) {\r\n\t\t\t\t\tdir += 'w';\r\n\t\t\t\t} else if (e.pageX < offset.left + width && e.pageX > offset.left + width - edge) {\r\n\t\t\t\t\tdir += 'e';\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar handles = opts.handles.split(',');\r\n\t\t\t\tfor(var i=0; i<handles.length; i++) {\r\n\t\t\t\t\tvar handle = handles[i].replace(/(^\\s*)|(\\s*$)/g, '');\r\n\t\t\t\t\tif (handle == 'all' || handle == dir) {\r\n\t\t\t\t\t\treturn dir;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn '';\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.resizable.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\treturn $.data(jq[0], 'resizable').options;\r\n\t\t},\r\n\t\tenable: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(this).resizable({disabled:false});\r\n\t\t\t});\r\n\t\t},\r\n\t\tdisable: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(this).resizable({disabled:true});\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.resizable.parseOptions = function(target){\r\n\t\tvar t = $(target);\r\n\t\treturn $.extend({},\r\n\t\t\t\t$.parser.parseOptions(target, [\r\n\t\t\t\t\t'handles',{minWidth:'number',minHeight:'number',maxWidth:'number',maxHeight:'number',edge:'number'}\r\n\t\t\t\t]), {\r\n\t\t\tdisabled: (t.attr('disabled') ? true : undefined)\r\n\t\t})\r\n\t};\r\n\t\r\n\t$.fn.resizable.defaults = {\r\n\t\tdisabled:false,\r\n\t\thandles:'n, e, s, w, ne, se, sw, nw, all',\r\n\t\tminWidth: 10,\r\n\t\tminHeight: 10,\r\n\t\tmaxWidth: 10000,//$(document).width(),\r\n\t\tmaxHeight: 10000,//$(document).height(),\r\n\t\tedge:5,\r\n\t\tonStartResize: function(e){},\r\n\t\tonResize: function(e){},\r\n\t\tonStopResize: function(e){}\r\n\t};\r\n\t\r\n\t$.fn.resizable.isResizing = false;\r\n\t\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.slider.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * slider - jQuery EasyUI\r\n * \r\n * Dependencies:\r\n *  draggable\r\n * \r\n */\r\n(function($){\r\n\tfunction init(target){\r\n\t\tvar slider = $('<div class=\"slider\">' +\r\n\t\t\t\t'<div class=\"slider-inner\">' +\r\n\t\t\t\t'<a href=\"javascript:void(0)\" class=\"slider-handle\"></a>' +\r\n\t\t\t\t'<span class=\"slider-tip\"></span>' +\r\n\t\t\t\t'</div>' +\r\n\t\t\t\t'<div class=\"slider-rule\"></div>' +\r\n\t\t\t\t'<div class=\"slider-rulelabel\"></div>' +\r\n\t\t\t\t'<div style=\"clear:both\"></div>' +\r\n\t\t\t\t'<input type=\"hidden\" class=\"slider-value\">' +\r\n\t\t\t\t'</div>').insertAfter(target);\r\n\t\tvar t = $(target);\r\n\t\tt.addClass('slider-f').hide();\r\n\t\tvar name = t.attr('name');\r\n\t\tif (name){\r\n\t\t\tslider.find('input.slider-value').attr('name', name);\r\n\t\t\tt.removeAttr('name').attr('sliderName', name);\r\n\t\t}\r\n\t\treturn slider;\r\n\t}\r\n\t\r\n\t/**\r\n\t * set the slider size, for vertical slider, the height property is required\r\n\t */\r\n\tfunction setSize(target, param){\r\n\t\tvar state = $.data(target, 'slider');\r\n\t\tvar opts = state.options;\r\n\t\tvar slider = state.slider;\r\n\t\t\r\n\t\tif (param){\r\n\t\t\tif (param.width) opts.width = param.width;\r\n\t\t\tif (param.height) opts.height = param.height;\r\n\t\t}\r\n\t\tif (opts.mode == 'h'){\r\n\t\t\tslider.css('height', '');\r\n\t\t\tslider.children('div').css('height', '');\r\n\t\t\tif (!isNaN(opts.width)){\r\n\t\t\t\tslider.width(opts.width);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tslider.css('width', '');\r\n\t\t\tslider.children('div').css('width', '');\r\n\t\t\tif (!isNaN(opts.height)){\r\n\t\t\t\tslider.height(opts.height);\r\n\t\t\t\tslider.find('div.slider-rule').height(opts.height);\r\n\t\t\t\tslider.find('div.slider-rulelabel').height(opts.height);\r\n\t\t\t\tslider.find('div.slider-inner')._outerHeight(opts.height);\r\n\t\t\t}\r\n\t\t}\r\n\t\tinitValue(target);\r\n\t}\r\n\t\r\n\t/**\r\n\t * show slider rule if needed\r\n\t */\r\n\tfunction showRule(target){\r\n\t\tvar state = $.data(target, 'slider');\r\n\t\tvar opts = state.options;\r\n\t\tvar slider = state.slider;\r\n\t\t\r\n\t\tvar aa = opts.mode == 'h' ? opts.rule : opts.rule.slice(0).reverse();\r\n\t\tif (opts.reversed){\r\n\t\t\taa = aa.slice(0).reverse();\r\n\t\t}\r\n\t\t_build(aa);\r\n\t\t\r\n\t\tfunction _build(aa){\r\n\t\t\tvar rule = slider.find('div.slider-rule');\r\n\t\t\tvar label = slider.find('div.slider-rulelabel');\r\n\t\t\trule.empty();\r\n\t\t\tlabel.empty();\r\n\t\t\tfor(var i=0; i<aa.length; i++){\r\n\t\t\t\tvar distance = i*100/(aa.length-1)+'%';\r\n\t\t\t\tvar span = $('<span></span>').appendTo(rule);\r\n\t\t\t\tspan.css((opts.mode=='h'?'left':'top'), distance);\r\n\t\t\t\t\r\n\t\t\t\t// show the labels\r\n\t\t\t\tif (aa[i] != '|'){\r\n\t\t\t\t\tspan = $('<span></span>').appendTo(label);\r\n\t\t\t\t\tspan.html(aa[i]);\r\n\t\t\t\t\tif (opts.mode == 'h'){\r\n\t\t\t\t\t\tspan.css({\r\n\t\t\t\t\t\t\tleft: distance,\r\n\t\t\t\t\t\t\tmarginLeft: -Math.round(span.outerWidth()/2)\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tspan.css({\r\n\t\t\t\t\t\t\ttop: distance,\r\n\t\t\t\t\t\t\tmarginTop: -Math.round(span.outerHeight()/2)\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * build the slider and set some properties\r\n\t */\r\n\tfunction buildSlider(target){\r\n\t\tvar state = $.data(target, 'slider');\r\n\t\tvar opts = state.options;\r\n\t\tvar slider = state.slider;\r\n\t\t\r\n\t\tslider.removeClass('slider-h slider-v slider-disabled');\r\n\t\tslider.addClass(opts.mode == 'h' ? 'slider-h' : 'slider-v');\r\n\t\tslider.addClass(opts.disabled ? 'slider-disabled' : '');\r\n\t\t\r\n\t\tslider.find('a.slider-handle').draggable({\r\n\t\t\taxis:opts.mode,\r\n\t\t\tcursor:'pointer',\r\n\t\t\tdisabled: opts.disabled,\r\n\t\t\tonDrag:function(e){\r\n\t\t\t\tvar left = e.data.left;\r\n\t\t\t\tvar width = slider.width();\r\n\t\t\t\tif (opts.mode!='h'){\r\n\t\t\t\t\tleft = e.data.top;\r\n\t\t\t\t\twidth = slider.height();\r\n\t\t\t\t}\r\n\t\t\t\tif (left < 0 || left > width) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar value = pos2value(target, left);\r\n\t\t\t\t\tadjustValue(value);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonBeforeDrag:function(){\r\n\t\t\t\tstate.isDragging = true;\r\n\t\t\t},\r\n\t\t\tonStartDrag:function(){\r\n\t\t\t\topts.onSlideStart.call(target, opts.value);\r\n\t\t\t},\r\n\t\t\tonStopDrag:function(e){\r\n\t\t\t\tvar value = pos2value(target, (opts.mode=='h'?e.data.left:e.data.top));\r\n\t\t\t\tadjustValue(value);\r\n\t\t\t\topts.onSlideEnd.call(target, opts.value);\r\n\t\t\t\topts.onComplete.call(target, opts.value);\r\n\t\t\t\tstate.isDragging = false;\r\n\t\t\t}\r\n\t\t});\r\n\t\tslider.find('div.slider-inner').unbind('.slider').bind('mousedown.slider', function(e){\r\n\t\t\tif (state.isDragging){return}\r\n\t\t\tvar pos = $(this).offset();\r\n\t\t\tvar value = pos2value(target, (opts.mode=='h'?(e.pageX-pos.left):(e.pageY-pos.top)));\r\n\t\t\tadjustValue(value);\r\n\t\t\topts.onComplete.call(target, opts.value);\r\n\t\t});\r\n\t\t\r\n\t\tfunction adjustValue(value){\r\n\t\t\tvar s = Math.abs(value % opts.step);\r\n\t\t\tif (s < opts.step/2){\r\n\t\t\t\tvalue -= s;\r\n\t\t\t} else {\r\n\t\t\t\tvalue = value - s + opts.step;\r\n\t\t\t}\r\n\t\t\tsetValue(target, value);\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * set a specified value to slider\r\n\t */\r\n\tfunction setValue(target, value){\r\n\t\tvar state = $.data(target, 'slider');\r\n\t\tvar opts = state.options;\r\n\t\tvar slider = state.slider;\r\n\t\tvar oldValue = opts.value;\r\n\t\tif (value < opts.min) value = opts.min;\r\n\t\tif (value > opts.max) value = opts.max;\r\n\t\t\r\n\t\topts.value = value;\r\n\t\t$(target).val(value);\r\n\t\tslider.find('input.slider-value').val(value);\r\n\t\t\r\n\t\tvar pos = value2pos(target, value);\r\n\t\tvar tip = slider.find('.slider-tip');\r\n\t\tif (opts.showTip){\r\n\t\t\ttip.show();\r\n\t\t\ttip.html(opts.tipFormatter.call(target, opts.value));\r\n\t\t} else {\r\n\t\t\ttip.hide();\r\n\t\t}\r\n\t\t\r\n\t\tif (opts.mode == 'h'){\r\n\t\t\tvar style = 'left:'+pos+'px;';\r\n\t\t\tslider.find('.slider-handle').attr('style', style);\r\n\t\t\ttip.attr('style', style +  'margin-left:' + (-Math.round(tip.outerWidth()/2)) + 'px');\r\n\t\t} else {\r\n\t\t\tvar style = 'top:' + pos + 'px;';\r\n\t\t\tslider.find('.slider-handle').attr('style', style);\r\n\t\t\ttip.attr('style', style + 'margin-left:' + (-Math.round(tip.outerWidth())) + 'px');\r\n\t\t}\r\n\t\t\r\n\t\tif (oldValue != value){\r\n\t\t\topts.onChange.call(target, value, oldValue);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction initValue(target){\r\n\t\tvar opts = $.data(target, 'slider').options;\r\n\t\tvar fn = opts.onChange;\r\n\t\topts.onChange = function(){};\r\n\t\tsetValue(target, opts.value);\r\n\t\topts.onChange = fn;\r\n\t}\r\n\t\r\n\t/**\r\n\t * translate value to slider position\r\n\t */\r\n//\tfunction value2pos(target, value){\r\n//\t\tvar state = $.data(target, 'slider');\r\n//\t\tvar opts = state.options;\r\n//\t\tvar slider = state.slider;\r\n//\t\tif (opts.mode == 'h'){\r\n//\t\t\tvar pos = (value-opts.min)/(opts.max-opts.min)*slider.width();\r\n//\t\t\tif (opts.reversed){\r\n//\t\t\t\tpos = slider.width() - pos;\r\n//\t\t\t}\r\n//\t\t} else {\r\n//\t\t\tvar pos = slider.height() - (value-opts.min)/(opts.max-opts.min)*slider.height();\r\n//\t\t\tif (opts.reversed){\r\n//\t\t\t\tpos = slider.height() - pos;\r\n//\t\t\t}\r\n//\t\t}\r\n//\t\treturn pos.toFixed(0);\r\n//\t}\r\n\tfunction value2pos(target, value){\r\n\t\tvar state = $.data(target, 'slider');\r\n\t\tvar opts = state.options;\r\n\t\tvar slider = state.slider;\r\n\t\tvar size = opts.mode == 'h' ? slider.width() : slider.height();\r\n\t\tvar pos = opts.converter.toPosition.call(target, value, size);\r\n\t\tif (opts.mode == 'v'){\r\n\t\t\tpos = slider.height() - pos;\r\n\t\t}\r\n\t\tif (opts.reversed){\r\n\t\t\tpos = size - pos;\r\n\t\t}\r\n\t\treturn pos.toFixed(0);\r\n\t}\r\n\t\r\n\t/**\r\n\t * translate slider position to value\r\n\t */\r\n//\tfunction pos2value(target, pos){\r\n//\t\tvar state = $.data(target, 'slider');\r\n//\t\tvar opts = state.options;\r\n//\t\tvar slider = state.slider;\r\n//\t\tif (opts.mode == 'h'){\r\n//\t\t\tvar value = opts.min + (opts.max-opts.min)*(pos/slider.width());\r\n//\t\t} else {\r\n//\t\t\tvar value = opts.min + (opts.max-opts.min)*((slider.height()-pos)/slider.height());\r\n//\t\t}\r\n//\t\treturn opts.reversed ? opts.max - value.toFixed(0) : value.toFixed(0);\r\n//\t}\r\n\tfunction pos2value(target, pos){\r\n\t\tvar state = $.data(target, 'slider');\r\n\t\tvar opts = state.options;\r\n\t\tvar slider = state.slider;\r\n\t\tvar size = opts.mode == 'h' ? slider.width() : slider.height();\r\n\t\tvar value = opts.converter.toValue.call(target, opts.mode=='h'?(opts.reversed?(size-pos):pos):(size-pos), size);\r\n\t\treturn value.toFixed(0);\r\n//\t\tvar value = opts.converter.toValue.call(target, opts.mode=='h'?pos:(size-pos), size);\r\n//\t\treturn opts.reversed ? opts.max - value.toFixed(0) : value.toFixed(0);\r\n\t}\r\n\t\r\n\t$.fn.slider = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\treturn $.fn.slider.methods[options](this, param);\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'slider');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\tstate = $.data(this, 'slider', {\r\n\t\t\t\t\toptions: $.extend({}, $.fn.slider.defaults, $.fn.slider.parseOptions(this), options),\r\n\t\t\t\t\tslider: init(this)\r\n\t\t\t\t});\r\n\t\t\t\t$(this).removeAttr('disabled');\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tvar opts = state.options;\r\n\t\t\topts.min = parseFloat(opts.min);\r\n\t\t\topts.max = parseFloat(opts.max);\r\n\t\t\topts.value = parseFloat(opts.value);\r\n\t\t\topts.step = parseFloat(opts.step);\r\n\t\t\topts.originalValue = opts.value;\r\n\t\t\t\r\n\t\t\tbuildSlider(this);\r\n\t\t\tshowRule(this);\r\n\t\t\tsetSize(this);\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.slider.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\treturn $.data(jq[0], 'slider').options;\r\n\t\t},\r\n\t\tdestroy: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$.data(this, 'slider').slider.remove();\r\n\t\t\t\t$(this).remove();\r\n\t\t\t});\r\n\t\t},\r\n\t\tresize: function(jq, param){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetSize(this, param);\r\n\t\t\t});\r\n\t\t},\r\n\t\tgetValue: function(jq){\r\n\t\t\treturn jq.slider('options').value;\r\n\t\t},\r\n\t\tsetValue: function(jq, value){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetValue(this, value);\r\n\t\t\t});\r\n\t\t},\r\n\t\tclear: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tvar opts = $(this).slider('options');\r\n\t\t\t\tsetValue(this, opts.min);\r\n\t\t\t});\r\n\t\t},\r\n\t\treset: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tvar opts = $(this).slider('options');\r\n\t\t\t\tsetValue(this, opts.originalValue);\r\n\t\t\t});\r\n\t\t},\r\n\t\tenable: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$.data(this, 'slider').options.disabled = false;\r\n\t\t\t\tbuildSlider(this);\r\n\t\t\t});\r\n\t\t},\r\n\t\tdisable: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$.data(this, 'slider').options.disabled = true;\r\n\t\t\t\tbuildSlider(this);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.slider.parseOptions = function(target){\r\n\t\tvar t = $(target);\r\n\t\treturn $.extend({}, $.parser.parseOptions(target, [\r\n\t\t\t'width','height','mode',{reversed:'boolean',showTip:'boolean',min:'number',max:'number',step:'number'}\r\n\t\t]), {\r\n\t\t\tvalue: (t.val() || undefined),\r\n\t\t\tdisabled: (t.attr('disabled') ? true : undefined),\r\n\t\t\trule: (t.attr('rule') ? eval(t.attr('rule')) : undefined)\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.slider.defaults = {\r\n\t\twidth: 'auto',\r\n\t\theight: 'auto',\r\n\t\tmode: 'h',\t// 'h'(horizontal) or 'v'(vertical)\r\n\t\treversed: false,\r\n\t\tshowTip: false,\r\n\t\tdisabled: false,\r\n\t\tvalue: 0,\r\n\t\tmin: 0,\r\n\t\tmax: 100,\r\n\t\tstep: 1,\r\n\t\trule: [],\t// [0,'|',100]\r\n\t\ttipFormatter: function(value){return value},\r\n\t\tconverter:{\r\n\t\t\ttoPosition:function(value, size){\r\n\t\t\t\tvar opts = $(this).slider('options');\r\n\t\t\t\treturn (value-opts.min)/(opts.max-opts.min)*size;\r\n\t\t\t},\r\n\t\t\ttoValue:function(pos, size){\r\n\t\t\t\tvar opts = $(this).slider('options');\r\n\t\t\t\treturn opts.min + (opts.max-opts.min)*(pos/size);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonChange: function(value, oldValue){},\r\n\t\tonSlideStart: function(value){},\r\n\t\tonSlideEnd: function(value){},\r\n\t\tonComplete: function(value){}\r\n\t};\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.tabs.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * tabs - jQuery EasyUI\r\n * \r\n * Dependencies:\r\n * \t panel\r\n *   linkbutton\r\n * \r\n */\r\n(function($){\r\n\t\r\n\t/**\r\n\t * set the tabs scrollers to show or not,\r\n\t * dependent on the tabs count and width\r\n\t */\r\n\tfunction setScrollers(container) {\r\n\t\tvar opts = $.data(container, 'tabs').options;\r\n\t\tif (opts.tabPosition == 'left' || opts.tabPosition == 'right' || !opts.showHeader){return}\r\n\t\t\r\n\t\tvar header = $(container).children('div.tabs-header');\r\n\t\tvar tool = header.children('div.tabs-tool');\r\n\t\tvar sLeft = header.children('div.tabs-scroller-left');\r\n\t\tvar sRight = header.children('div.tabs-scroller-right');\r\n\t\tvar wrap = header.children('div.tabs-wrap');\r\n\t\t\r\n\t\t// set the tool height\r\n\t\tvar tHeight = header.outerHeight();\r\n\t\tif (opts.plain){\r\n\t\t\ttHeight -= tHeight - header.height();\r\n\t\t}\r\n\t\ttool._outerHeight(tHeight);\r\n\t\t\r\n\t\tvar tabsWidth = 0;\r\n\t\t$('ul.tabs li', header).each(function(){\r\n\t\t\ttabsWidth += $(this).outerWidth(true);\r\n\t\t});\r\n\t\tvar cWidth = header.width() - tool._outerWidth();\r\n\t\t\r\n\t\tif (tabsWidth > cWidth) {\r\n\t\t\tsLeft.add(sRight).show()._outerHeight(tHeight);\r\n\t\t\tif (opts.toolPosition == 'left'){\r\n\t\t\t\ttool.css({\r\n\t\t\t\t\tleft: sLeft.outerWidth(),\r\n\t\t\t\t\tright: ''\r\n\t\t\t\t});\r\n\t\t\t\twrap.css({\r\n\t\t\t\t\tmarginLeft: sLeft.outerWidth() + tool._outerWidth(),\r\n\t\t\t\t\tmarginRight: sRight._outerWidth(),\r\n\t\t\t\t\twidth: cWidth - sLeft.outerWidth() - sRight.outerWidth()\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\ttool.css({\r\n\t\t\t\t\tleft: '',\r\n\t\t\t\t\tright: sRight.outerWidth()\r\n\t\t\t\t});\r\n\t\t\t\twrap.css({\r\n\t\t\t\t\tmarginLeft: sLeft.outerWidth(),\r\n\t\t\t\t\tmarginRight: sRight.outerWidth() + tool._outerWidth(),\r\n\t\t\t\t\twidth: cWidth - sLeft.outerWidth() - sRight.outerWidth()\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tsLeft.add(sRight).hide();\r\n\t\t\tif (opts.toolPosition == 'left'){\r\n\t\t\t\ttool.css({\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\tright: ''\r\n\t\t\t\t});\r\n\t\t\t\twrap.css({\r\n\t\t\t\t\tmarginLeft: tool._outerWidth(),\r\n\t\t\t\t\tmarginRight: 0,\r\n\t\t\t\t\twidth: cWidth\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\ttool.css({\r\n\t\t\t\t\tleft: '',\r\n\t\t\t\t\tright: 0\r\n\t\t\t\t});\r\n\t\t\t\twrap.css({\r\n\t\t\t\t\tmarginLeft: 0,\r\n\t\t\t\t\tmarginRight: tool._outerWidth(),\r\n\t\t\t\t\twidth: cWidth\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction addTools(container){\r\n\t\tvar opts = $.data(container, 'tabs').options;\r\n\t\tvar header = $(container).children('div.tabs-header');\r\n\t\tif (opts.tools) {\r\n\t\t\tif (typeof opts.tools == 'string'){\r\n\t\t\t\t$(opts.tools).addClass('tabs-tool').appendTo(header);\r\n\t\t\t\t$(opts.tools).show();\r\n\t\t\t} else {\r\n\t\t\t\theader.children('div.tabs-tool').remove();\r\n\t\t\t\tvar tools = $('<div class=\"tabs-tool\"><table cellspacing=\"0\" cellpadding=\"0\" style=\"height:100%\"><tr></tr></table></div>').appendTo(header);\r\n\t\t\t\tvar tr = tools.find('tr');\r\n\t\t\t\tfor(var i=0; i<opts.tools.length; i++){\r\n\t\t\t\t\tvar td = $('<td></td>').appendTo(tr);\r\n\t\t\t\t\tvar tool = $('<a href=\"javascript:void(0);\"></a>').appendTo(td);\r\n\t\t\t\t\ttool[0].onclick = eval(opts.tools[i].handler || function(){});\r\n\t\t\t\t\ttool.linkbutton($.extend({}, opts.tools[i], {\r\n\t\t\t\t\t\tplain: true\r\n\t\t\t\t\t}));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\theader.children('div.tabs-tool').remove();\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction setSize(container) {\r\n\t\tvar state = $.data(container, 'tabs');\r\n\t\tvar opts = state.options;\r\n\t\tvar cc = $(container);\r\n\t\t\r\n\t\topts.fit ? $.extend(opts, cc._fit()) : cc._fit(false);\r\n\t\tcc.width(opts.width).height(opts.height);\r\n\t\t\r\n\t\tvar header = $(container).children('div.tabs-header');\r\n\t\tvar panels = $(container).children('div.tabs-panels');\r\n\t\tvar wrap = header.find('div.tabs-wrap');\r\n\t\tvar ul = wrap.find('.tabs');\r\n\t\t\r\n\t\tfor(var i=0; i<state.tabs.length; i++){\r\n\t\t\tvar p_opts = state.tabs[i].panel('options');\r\n\t\t\tvar p_t = p_opts.tab.find('a.tabs-inner');\r\n\t\t\tvar width = parseInt(p_opts.tabWidth || opts.tabWidth) || undefined;\r\n\t\t\tif (width){\r\n\t\t\t\tp_t._outerWidth(width);\r\n\t\t\t} else {\r\n\t\t\t\tp_t.css('width', '');\r\n\t\t\t}\r\n\t\t\tp_t._outerHeight(opts.tabHeight);\r\n\t\t\tp_t.css('lineHeight', p_t.height()+'px');\r\n\t\t}\r\n\t\tif (opts.tabPosition == 'left' || opts.tabPosition == 'right'){\r\n\t\t\theader._outerWidth(opts.showHeader ? opts.headerWidth : 0);\r\n//\t\t\theader._outerWidth(opts.headerWidth);\r\n\t\t\tpanels._outerWidth(cc.width() - header.outerWidth());\r\n\t\t\theader.add(panels)._outerHeight(opts.height);\r\n\t\t\twrap._outerWidth(header.width());\r\n\t\t\tul._outerWidth(wrap.width()).css('height','');\r\n\t\t} else {\r\n\t\t\tvar lrt = header.children('div.tabs-scroller-left,div.tabs-scroller-right,div.tabs-tool');\r\n\t\t\theader._outerWidth(opts.width).css('height','');\r\n\t\t\tif (opts.showHeader){\r\n\t\t\t\theader.css('background-color','');\r\n\t\t\t\twrap.css('height','');\r\n\t\t\t\tlrt.show();\r\n\t\t\t} else {\r\n\t\t\t\theader.css('background-color','transparent');\r\n\t\t\t\theader._outerHeight(0);\r\n\t\t\t\twrap._outerHeight(0);\r\n\t\t\t\tlrt.hide();\r\n\t\t\t}\r\n\t\t\tul._outerHeight(opts.tabHeight).css('width','');\r\n\t\t\t\r\n\t\t\tsetScrollers(container);\r\n\t\t\t\r\n\t\t\tvar height = opts.height;\r\n\t\t\tif (!isNaN(height)) {\r\n\t\t\t\tpanels._outerHeight(height - header.outerHeight());\r\n\t\t\t} else {\r\n\t\t\t\tpanels.height('auto');\r\n\t\t\t}\r\n\t\t\tvar width = opts.width;\r\n\t\t\tif (!isNaN(width)){\r\n\t\t\t\tpanels._outerWidth(width);\r\n\t\t\t} else {\r\n\t\t\t\tpanels.width('auto');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * set selected tab panel size\r\n\t */\r\n\tfunction setSelectedSize(container){\r\n\t\tvar opts = $.data(container, 'tabs').options;\r\n\t\tvar tab = getSelectedTab(container);\r\n\t\tif (tab){\r\n\t\t\tvar panels = $(container).children('div.tabs-panels');\r\n\t\t\tvar width = opts.width=='auto' ? 'auto' : panels.width();\r\n\t\t\tvar height = opts.height=='auto' ? 'auto' : panels.height();\r\n\t\t\ttab.panel('resize', {\r\n\t\t\t\twidth: width,\r\n\t\t\t\theight: height\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * wrap the tabs header and body\r\n\t */\r\n\tfunction wrapTabs(container) {\r\n\t\tvar tabs = $.data(container, 'tabs').tabs;\r\n\t\tvar cc = $(container);\r\n\t\tcc.addClass('tabs-container');\r\n\t\tvar pp = $('<div class=\"tabs-panels\"></div>').insertBefore(cc);\r\n\t\tcc.children('div').each(function(){\r\n\t\t\tpp[0].appendChild(this);\r\n\t\t});\r\n\t\tcc[0].appendChild(pp[0]);\r\n//\t\tcc.wrapInner('<div class=\"tabs-panels\"/>');\r\n\t\t$('<div class=\"tabs-header\">'\r\n\t\t\t\t+ '<div class=\"tabs-scroller-left\"></div>'\r\n\t\t\t\t+ '<div class=\"tabs-scroller-right\"></div>'\r\n\t\t\t\t+ '<div class=\"tabs-wrap\">'\r\n\t\t\t\t+ '<ul class=\"tabs\"></ul>'\r\n\t\t\t\t+ '</div>'\r\n\t\t\t\t+ '</div>').prependTo(container);\r\n\t\t\r\n\t\tcc.children('div.tabs-panels').children('div').each(function(i){\r\n\t\t\tvar opts = $.extend({}, $.parser.parseOptions(this), {\r\n\t\t\t\tselected: ($(this).attr('selected') ? true : undefined)\r\n\t\t\t});\r\n\t\t\tvar pp = $(this);\r\n\t\t\ttabs.push(pp);\r\n\t\t\tcreateTab(container, pp, opts);\r\n\t\t});\r\n\t\tcc.children('div.tabs-header').find('.tabs-scroller-left, .tabs-scroller-right').hover(\r\n\t\t\t\tfunction(){$(this).addClass('tabs-scroller-over');},\r\n\t\t\t\tfunction(){$(this).removeClass('tabs-scroller-over');}\r\n\t\t);\r\n\t\tcc.bind('_resize', function(e,force){\r\n\t\t\tvar opts = $.data(container, 'tabs').options;\r\n\t\t\tif (opts.fit == true || force){\r\n\t\t\t\tsetSize(container);\r\n\t\t\t\tsetSelectedSize(container);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction bindEvents(container){\r\n\t\tvar state = $.data(container, 'tabs')\r\n\t\tvar opts = state.options;\r\n\t\t$(container).children('div.tabs-header').unbind().bind('click', function(e){\r\n\t\t\tif ($(e.target).hasClass('tabs-scroller-left')){\r\n\t\t\t\t$(container).tabs('scrollBy', -opts.scrollIncrement);\r\n\t\t\t} else if ($(e.target).hasClass('tabs-scroller-right')){\r\n\t\t\t\t$(container).tabs('scrollBy', opts.scrollIncrement);\r\n\t\t\t} else {\r\n\t\t\t\tvar li = $(e.target).closest('li');\r\n\t\t\t\tif (li.hasClass('tabs-disabled')){return;}\r\n\t\t\t\tvar a = $(e.target).closest('a.tabs-close');\r\n\t\t\t\tif (a.length){\r\n\t\t\t\t\tcloseTab(container, getLiIndex(li));\r\n\t\t\t\t} else if (li.length){\r\n//\t\t\t\t\tselectTab(container, getLiIndex(li));\r\n\t\t\t\t\tvar index = getLiIndex(li);\r\n\t\t\t\t\tvar popts = state.tabs[index].panel('options');\r\n\t\t\t\t\tif (popts.collapsible){\r\n\t\t\t\t\t\tpopts.closed ? selectTab(container, index) : unselectTab(container, index);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tselectTab(container, index);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}).bind('contextmenu', function(e){\r\n\t\t\tvar li = $(e.target).closest('li');\r\n\t\t\tif (li.hasClass('tabs-disabled')){return;}\r\n\t\t\tif (li.length){\r\n\t\t\t\topts.onContextMenu.call(container, e, li.find('span.tabs-title').html(), getLiIndex(li));\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tfunction getLiIndex(li){\r\n\t\t\tvar index = 0;\r\n\t\t\tli.parent().children('li').each(function(i){\r\n\t\t\t\tif (li[0] == this){\r\n\t\t\t\t\tindex = i;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn index;\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction setProperties(container){\r\n\t\tvar opts = $.data(container, 'tabs').options;\r\n\t\tvar header = $(container).children('div.tabs-header');\r\n\t\tvar panels = $(container).children('div.tabs-panels');\r\n\t\t\r\n\t\theader.removeClass('tabs-header-top tabs-header-bottom tabs-header-left tabs-header-right');\r\n\t\tpanels.removeClass('tabs-panels-top tabs-panels-bottom tabs-panels-left tabs-panels-right');\r\n\t\tif (opts.tabPosition == 'top'){\r\n\t\t\theader.insertBefore(panels);\r\n\t\t} else if (opts.tabPosition == 'bottom'){\r\n\t\t\theader.insertAfter(panels);\r\n\t\t\theader.addClass('tabs-header-bottom');\r\n\t\t\tpanels.addClass('tabs-panels-top');\r\n\t\t} else if (opts.tabPosition == 'left'){\r\n\t\t\theader.addClass('tabs-header-left');\r\n\t\t\tpanels.addClass('tabs-panels-right');\r\n\t\t} else if (opts.tabPosition == 'right'){\r\n\t\t\theader.addClass('tabs-header-right');\r\n\t\t\tpanels.addClass('tabs-panels-left');\r\n\t\t}\r\n\t\t\r\n\t\tif (opts.plain == true) {\r\n\t\t\theader.addClass('tabs-header-plain');\r\n\t\t} else {\r\n\t\t\theader.removeClass('tabs-header-plain');\r\n\t\t}\r\n\t\tif (opts.border == true){\r\n\t\t\theader.removeClass('tabs-header-noborder');\r\n\t\t\tpanels.removeClass('tabs-panels-noborder');\r\n\t\t} else {\r\n\t\t\theader.addClass('tabs-header-noborder');\r\n\t\t\tpanels.addClass('tabs-panels-noborder');\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction createTab(container, pp, options) {\r\n\t\tvar state = $.data(container, 'tabs');\r\n\t\toptions = options || {};\r\n\t\t\r\n\t\t// create panel\r\n\t\tpp.panel($.extend({}, options, {\r\n\t\t\tborder: false,\r\n\t\t\tnoheader: true,\r\n\t\t\tclosed: true,\r\n\t\t\tdoSize: false,\r\n\t\t\ticonCls: (options.icon ? options.icon : undefined),\r\n\t\t\tonLoad: function(){\r\n\t\t\t\tif (options.onLoad){\r\n\t\t\t\t\toptions.onLoad.call(this, arguments);\r\n\t\t\t\t}\r\n\t\t\t\tstate.options.onLoad.call(container, $(this));\r\n\t\t\t}\r\n\t\t}));\r\n\t\t\r\n\t\tvar opts = pp.panel('options');\r\n\t\t\r\n\t\tvar tabs = $(container).children('div.tabs-header').find('ul.tabs');\r\n\t\t\r\n\t\topts.tab = $('<li></li>').appendTo(tabs);\t// set the tab object in panel options\r\n\t\topts.tab.append(\r\n\t\t\t\t'<a href=\"javascript:void(0)\" class=\"tabs-inner\">' +\r\n\t\t\t\t'<span class=\"tabs-title\"></span>' +\r\n\t\t\t\t'<span class=\"tabs-icon\"></span>' +\r\n\t\t\t\t'</a>'\r\n\t\t);\r\n\t\t\r\n\t\t$(container).tabs('update', {\r\n\t\t\ttab: pp,\r\n\t\t\toptions: opts\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction addTab(container, options) {\r\n\t\tvar opts = $.data(container, 'tabs').options;\r\n\t\tvar tabs = $.data(container, 'tabs').tabs;\r\n\t\tif (options.selected == undefined) options.selected = true;\r\n\t\t\r\n\t\tvar pp = $('<div></div>').appendTo($(container).children('div.tabs-panels'));\r\n\t\ttabs.push(pp);\r\n\t\tcreateTab(container, pp, options);\r\n\t\t\r\n\t\topts.onAdd.call(container, options.title, tabs.length-1);\r\n\t\t\r\n//\t\tsetScrollers(container);\r\n\t\tsetSize(container);\r\n\t\tif (options.selected){\r\n\t\t\tselectTab(container, tabs.length-1);\t// select the added tab panel\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * update tab panel, param has following properties:\r\n\t * tab: the tab panel to be updated\r\n\t * options: the tab panel options\r\n\t */\r\n\tfunction updateTab(container, param){\r\n\t\tvar selectHis = $.data(container, 'tabs').selectHis;\r\n\t\tvar pp = param.tab;\t// the tab panel\r\n\t\tvar oldTitle = pp.panel('options').title; \r\n\t\tpp.panel($.extend({}, param.options, {\r\n\t\t\ticonCls: (param.options.icon ? param.options.icon : undefined)\r\n\t\t}));\r\n\t\t\r\n\t\tvar opts = pp.panel('options');\t// get the tab panel options\r\n\t\tvar tab = opts.tab;\r\n\t\t\r\n\t\tvar s_title = tab.find('span.tabs-title');\r\n\t\tvar s_icon = tab.find('span.tabs-icon');\r\n\t\ts_title.html(opts.title);\r\n\t\ts_icon.attr('class', 'tabs-icon');\r\n\t\t\r\n\t\ttab.find('a.tabs-close').remove();\r\n\t\tif (opts.closable){\r\n\t\t\ts_title.addClass('tabs-closable');\r\n\t\t\t$('<a href=\"javascript:void(0)\" class=\"tabs-close\"></a>').appendTo(tab);\r\n\t\t} else{\r\n\t\t\ts_title.removeClass('tabs-closable');\r\n\t\t}\r\n\t\tif (opts.iconCls){\r\n\t\t\ts_title.addClass('tabs-with-icon');\r\n\t\t\ts_icon.addClass(opts.iconCls);\r\n\t\t} else {\r\n\t\t\ts_title.removeClass('tabs-with-icon');\r\n\t\t}\r\n\t\t\r\n\t\tif (oldTitle != opts.title){\r\n\t\t\tfor(var i=0; i<selectHis.length; i++){\r\n\t\t\t\tif (selectHis[i] == oldTitle){\r\n\t\t\t\t\tselectHis[i] = opts.title;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\ttab.find('span.tabs-p-tool').remove();\r\n\t\tif (opts.tools){\r\n\t\t\tvar p_tool = $('<span class=\"tabs-p-tool\"></span>').insertAfter(tab.find('a.tabs-inner'));\r\n\t\t\tif ($.isArray(opts.tools)){\r\n\t\t\t\tfor(var i=0; i<opts.tools.length; i++){\r\n\t\t\t\t\tvar t = $('<a href=\"javascript:void(0)\"></a>').appendTo(p_tool);\r\n\t\t\t\t\tt.addClass(opts.tools[i].iconCls);\r\n\t\t\t\t\tif (opts.tools[i].handler){\r\n\t\t\t\t\t\tt.bind('click', {handler:opts.tools[i].handler}, function(e){\r\n\t\t\t\t\t\t\tif ($(this).parents('li').hasClass('tabs-disabled')){return;}\r\n\t\t\t\t\t\t\te.data.handler.call(this);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t$(opts.tools).children().appendTo(p_tool);\r\n\t\t\t}\r\n\t\t\tvar pr = p_tool.children().length * 12;\r\n\t\t\tif (opts.closable) {\r\n\t\t\t\tpr += 8;\r\n\t\t\t} else {\r\n\t\t\t\tpr -= 3;\r\n\t\t\t\tp_tool.css('right','5px');\r\n\t\t\t}\r\n\t\t\ts_title.css('padding-right', pr+'px');\r\n\t\t}\r\n\t\t\r\n//\t\tsetProperties(container);\r\n//\t\tsetScrollers(container);\r\n\t\tsetSize(container);\r\n\t\t\r\n\t\t$.data(container, 'tabs').options.onUpdate.call(container, opts.title, getTabIndex(container, pp));\r\n\t}\r\n\t\r\n\t/**\r\n\t * close a tab with specified index or title\r\n\t */\r\n\tfunction closeTab(container, which) {\r\n\t\tvar opts = $.data(container, 'tabs').options;\r\n\t\tvar tabs = $.data(container, 'tabs').tabs;\r\n\t\tvar selectHis = $.data(container, 'tabs').selectHis;\r\n\t\t\r\n\t\tif (!exists(container, which)) return;\r\n\t\t\r\n\t\tvar tab = getTab(container, which);\r\n\t\tvar title = tab.panel('options').title;\r\n\t\tvar index = getTabIndex(container, tab);\r\n\t\t\r\n\t\tif (opts.onBeforeClose.call(container, title, index) == false) return;\r\n\t\t\r\n\t\tvar tab = getTab(container, which, true);\r\n\t\ttab.panel('options').tab.remove();\r\n\t\ttab.panel('destroy');\r\n\t\t\r\n\t\topts.onClose.call(container, title, index);\r\n\t\t\r\n//\t\tsetScrollers(container);\r\n\t\tsetSize(container);\r\n\t\t\r\n\t\t// remove the select history item\r\n\t\tfor(var i=0; i<selectHis.length; i++){\r\n\t\t\tif (selectHis[i] == title){\r\n\t\t\t\tselectHis.splice(i, 1);\r\n\t\t\t\ti --;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// select the nearest tab panel\r\n\t\tvar hisTitle = selectHis.pop();\r\n\t\tif (hisTitle){\r\n\t\t\tselectTab(container, hisTitle);\r\n\t\t} else if (tabs.length){\r\n\t\t\tselectTab(container, 0);\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * get the specified tab panel\r\n\t */\r\n\tfunction getTab(container, which, removeit){\r\n\t\tvar tabs = $.data(container, 'tabs').tabs;\r\n\t\tif (typeof which == 'number'){\r\n\t\t\tif (which < 0 || which >= tabs.length){\r\n\t\t\t\treturn null;\r\n\t\t\t} else {\r\n\t\t\t\tvar tab = tabs[which];\r\n\t\t\t\tif (removeit) {\r\n\t\t\t\t\ttabs.splice(which, 1);\r\n\t\t\t\t}\r\n\t\t\t\treturn tab;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor(var i=0; i<tabs.length; i++){\r\n\t\t\tvar tab = tabs[i];\r\n\t\t\tif (tab.panel('options').title == which){\r\n\t\t\t\tif (removeit){\r\n\t\t\t\t\ttabs.splice(i, 1);\r\n\t\t\t\t}\r\n\t\t\t\treturn tab;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\t\r\n\tfunction getTabIndex(container, tab){\r\n\t\tvar tabs = $.data(container, 'tabs').tabs;\r\n\t\tfor(var i=0; i<tabs.length; i++){\r\n\t\t\tif (tabs[i][0] == $(tab)[0]){\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t}\r\n\t\r\n\tfunction getSelectedTab(container){\r\n\t\tvar tabs = $.data(container, 'tabs').tabs;\r\n\t\tfor(var i=0; i<tabs.length; i++){\r\n\t\t\tvar tab = tabs[i];\r\n\t\t\tif (tab.panel('options').closed == false){\r\n\t\t\t\treturn tab;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\t\r\n\t/**\r\n\t * do first select action, if no tab is setted the first tab will be selected.\r\n\t */\r\n\tfunction doFirstSelect(container){\r\n\t\tvar state = $.data(container, 'tabs')\r\n\t\tvar tabs = state.tabs;\r\n\t\tfor(var i=0; i<tabs.length; i++){\r\n\t\t\tif (tabs[i].panel('options').selected){\r\n\t\t\t\tselectTab(container, i);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n//\t\tif (tabs.length){\r\n//\t\t\tselectTab(container, 0);\r\n//\t\t}\r\n\t\tselectTab(container, state.options.selected);\r\n\t}\r\n\t\r\n\tfunction selectTab(container, which){\r\n\t\tvar state = $.data(container, 'tabs');\r\n\t\tvar opts = state.options;\r\n\t\tvar tabs = state.tabs;\r\n\t\tvar selectHis = state.selectHis;\r\n\t\t\r\n\t\tif (tabs.length == 0) {return;}\r\n\t\t\r\n\t\tvar panel = getTab(container, which); // get the panel to be activated\r\n\t\tif (!panel){return}\r\n\t\t\r\n\t\tvar selected = getSelectedTab(container);\r\n\t\tif (selected){\r\n\t\t\tif (panel[0] == selected[0]){\r\n\t\t\t\tsetSelectedSize(container);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tunselectTab(container, getTabIndex(container, selected));\r\n\t\t\tif (!selected.panel('options').closed){return}\r\n\t\t}\r\n\t\t\r\n\t\tpanel.panel('open');\r\n\t\tvar title = panel.panel('options').title;\t// the panel title\r\n\t\tselectHis.push(title);\t// push select history\r\n\t\t\r\n\t\tvar tab = panel.panel('options').tab;\t// get the tab object\r\n\t\ttab.addClass('tabs-selected');\r\n\t\t\r\n\t\t// scroll the tab to center position if required.\r\n\t\tvar wrap = $(container).find('>div.tabs-header>div.tabs-wrap');\r\n\t\tvar left = tab.position().left;\r\n\t\tvar right = left + tab.outerWidth();\r\n\t\tif (left < 0 || right > wrap.width()){\r\n\t\t\tvar deltaX = left - (wrap.width()-tab.width()) / 2;\r\n\t\t\t$(container).tabs('scrollBy', deltaX);\r\n\t\t} else {\r\n\t\t\t$(container).tabs('scrollBy', 0);\r\n\t\t}\r\n\t\t\r\n\t\tsetSelectedSize(container);\r\n\t\t\r\n\t\topts.onSelect.call(container, title, getTabIndex(container, panel));\r\n\t}\r\n\t\r\n\tfunction unselectTab(container, which){\r\n\t\tvar state = $.data(container, 'tabs');\r\n\t\tvar p = getTab(container, which);\r\n\t\tif (p){\r\n\t\t\tvar opts = p.panel('options');\r\n\t\t\tif (!opts.closed){\r\n\t\t\t\tp.panel('close');\r\n\t\t\t\tif (opts.closed){\r\n\t\t\t\t\topts.tab.removeClass('tabs-selected');\r\n\t\t\t\t\tstate.options.onUnselect.call(container, opts.title, getTabIndex(container, p));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction exists(container, which){\r\n\t\treturn getTab(container, which) != null;\r\n\t}\r\n\t\r\n\tfunction showHeader(container, visible){\r\n\t\tvar opts = $.data(container, 'tabs').options;\r\n\t\topts.showHeader = visible;\r\n\t\t$(container).tabs('resize');\r\n\t}\r\n\t\r\n\t\r\n\t$.fn.tabs = function(options, param){\r\n\t\tif (typeof options == 'string') {\r\n\t\t\treturn $.fn.tabs.methods[options](this, param);\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'tabs');\r\n\t\t\tvar opts;\r\n\t\t\tif (state) {\r\n\t\t\t\topts = $.extend(state.options, options);\r\n\t\t\t\tstate.options = opts;\r\n\t\t\t} else {\r\n\t\t\t\t$.data(this, 'tabs', {\r\n\t\t\t\t\toptions: $.extend({},$.fn.tabs.defaults, $.fn.tabs.parseOptions(this), options),\r\n\t\t\t\t\ttabs: [],\r\n\t\t\t\t\tselectHis: []\r\n\t\t\t\t});\r\n\t\t\t\twrapTabs(this);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\taddTools(this);\r\n\t\t\tsetProperties(this);\r\n\t\t\tsetSize(this);\r\n\t\t\tbindEvents(this);\r\n\t\t\t\r\n\t\t\tdoFirstSelect(this);\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.tabs.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\tvar cc = jq[0];\r\n\t\t\tvar opts = $.data(cc, 'tabs').options;\r\n\t\t\tvar s = getSelectedTab(cc);\r\n\t\t\topts.selected = s ? getTabIndex(cc, s) : -1;\r\n\t\t\treturn opts;\r\n\t\t},\r\n\t\ttabs: function(jq){\r\n\t\t\treturn $.data(jq[0], 'tabs').tabs;\r\n\t\t},\r\n\t\tresize: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetSize(this);\r\n\t\t\t\tsetSelectedSize(this);\r\n\t\t\t});\r\n\t\t},\r\n\t\tadd: function(jq, options){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\taddTab(this, options);\r\n\t\t\t});\r\n\t\t},\r\n\t\tclose: function(jq, which){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tcloseTab(this, which);\r\n\t\t\t});\r\n\t\t},\r\n\t\tgetTab: function(jq, which){\r\n\t\t\treturn getTab(jq[0], which);\r\n\t\t},\r\n\t\tgetTabIndex: function(jq, tab){\r\n\t\t\treturn getTabIndex(jq[0], tab);\r\n\t\t},\r\n\t\tgetSelected: function(jq){\r\n\t\t\treturn getSelectedTab(jq[0]);\r\n\t\t},\r\n\t\tselect: function(jq, which){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tselectTab(this, which);\r\n\t\t\t});\r\n\t\t},\r\n\t\tunselect: function(jq, which){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tunselectTab(this, which);\r\n\t\t\t});\r\n\t\t},\r\n\t\texists: function(jq, which){\r\n\t\t\treturn exists(jq[0], which);\r\n\t\t},\r\n\t\tupdate: function(jq, options){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tupdateTab(this, options);\r\n\t\t\t});\r\n\t\t},\r\n\t\tenableTab: function(jq, which){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(this).tabs('getTab', which).panel('options').tab.removeClass('tabs-disabled');\r\n\t\t\t});\r\n\t\t},\r\n\t\tdisableTab: function(jq, which){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\t$(this).tabs('getTab', which).panel('options').tab.addClass('tabs-disabled');\r\n\t\t\t});\r\n\t\t},\r\n\t\tshowHeader: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tshowHeader(this, true);\r\n\t\t\t});\r\n\t\t},\r\n\t\thideHeader: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tshowHeader(this, false);\r\n\t\t\t});\r\n\t\t},\r\n\t\tscrollBy: function(jq, deltaX){\t// scroll the tab header by the specified amount of pixels\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tvar opts = $(this).tabs('options');\r\n\t\t\t\tvar wrap = $(this).find('>div.tabs-header>div.tabs-wrap');\r\n\t\t\t\tvar pos = Math.min(wrap._scrollLeft() + deltaX, getMaxScrollWidth());\r\n\t\t\t\twrap.animate({scrollLeft: pos}, opts.scrollDuration);\r\n\t\t\t\tfunction getMaxScrollWidth(){\r\n\t\t\t\t\tvar w = 0;\r\n\t\t\t\t\tvar ul = wrap.children('ul');\r\n\t\t\t\t\tul.children('li').each(function(){\r\n\t\t\t\t\t\tw += $(this).outerWidth(true);\r\n\t\t\t\t\t});\r\n\t\t\t\t\treturn w - wrap.width() + (ul.outerWidth() - ul.width());\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.tabs.parseOptions = function(target){\r\n\t\treturn $.extend({}, $.parser.parseOptions(target, [\r\n\t\t\t'width','height','tools','toolPosition','tabPosition',\r\n\t\t\t{fit:'boolean',border:'boolean',plain:'boolean',headerWidth:'number',tabWidth:'number',tabHeight:'number',selected:'number',showHeader:'boolean'}\r\n\t\t]));\r\n\t};\r\n\t\r\n\t$.fn.tabs.defaults = {\r\n\t\twidth: 'auto',\r\n\t\theight: 'auto',\r\n\t\theaderWidth: 150,\t// the tab header width, it is valid only when tabPosition set to 'left' or 'right' \r\n\t\ttabWidth: 'auto',\t// the tab width\r\n\t\ttabHeight: 27,\t\t// the tab height\r\n\t\tselected: 0,\t\t// the initialized selected tab index\r\n\t\tshowHeader: true,\r\n\t\tplain: false,\r\n\t\tfit: false,\r\n\t\tborder: true,\r\n\t\ttools: null,\r\n\t\ttoolPosition: 'right',\t// left,right\r\n\t\ttabPosition: 'top',\t\t// possible values: top,bottom\r\n\t\tscrollIncrement: 100,\r\n\t\tscrollDuration: 0,\r\n\t\tonLoad: function(panel){},\r\n\t\tonSelect: function(title, index){},\r\n\t\tonUnselect: function(title, index){},\r\n\t\tonBeforeClose: function(title, index){},\r\n\t\tonClose: function(title, index){},\r\n\t\tonAdd: function(title, index){},\r\n\t\tonUpdate: function(title, index){},\r\n\t\tonContextMenu: function(e, title, index){}\r\n\t};\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/src/jquery.window.js",
    "content": "﻿/**\r\n * jQuery EasyUI 1.3.6\r\n * \r\n * Copyright (c) 2009-2014 www.jeasyui.com. All rights reserved.\r\n *\r\n * Licensed under the GPL license: http://www.gnu.org/licenses/gpl.txt\r\n * To use it on other terms please contact us at info@jeasyui.com\r\n *\r\n */\r\n/**\r\n * window - jQuery EasyUI\r\n * \r\n * Dependencies:\r\n * \t panel\r\n *   draggable\r\n *   resizable\r\n * \r\n */\r\n(function($){\r\n\tfunction setSize(target, param){\r\n\t\tvar opts = $.data(target, 'window').options;\r\n\t\tif (param){\r\n\t\t\t$.extend(opts, param);\r\n//\t\t\tif (param.width) opts.width = param.width;\r\n//\t\t\tif (param.height) opts.height = param.height;\r\n//\t\t\tif (param.left != null) opts.left = param.left;\r\n//\t\t\tif (param.top != null) opts.top = param.top;\r\n\t\t}\r\n\t\t$(target).panel('resize', opts);\r\n\t}\r\n\t\r\n\tfunction moveWindow(target, param){\r\n\t\tvar state = $.data(target, 'window');\r\n\t\tif (param){\r\n\t\t\tif (param.left != null) state.options.left = param.left;\r\n\t\t\tif (param.top != null) state.options.top = param.top;\r\n\t\t}\r\n\t\t$(target).panel('move', state.options);\r\n\t\tif (state.shadow){\r\n\t\t\tstate.shadow.css({\r\n\t\t\t\tleft: state.options.left,\r\n\t\t\t\ttop: state.options.top\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t *  center the window only horizontally\r\n\t */\r\n\tfunction hcenter(target, tomove){\r\n\t\tvar state = $.data(target, 'window');\r\n\t\tvar opts = state.options;\r\n\t\tvar width = opts.width;\r\n\t\tif (isNaN(width)){\r\n\t\t\twidth = state.window._outerWidth();\r\n\t\t}\r\n\t\tif (opts.inline){\r\n\t\t\tvar parent = state.window.parent();\r\n\t\t\topts.left = (parent.width() - width) / 2 + parent.scrollLeft();\r\n\t\t} else {\r\n\t\t\topts.left = ($(window)._outerWidth() - width) / 2 + $(document).scrollLeft();\r\n\t\t}\r\n\t\tif (tomove){moveWindow(target);}\r\n\t}\r\n\t\r\n\t/**\r\n\t * center the window only vertically\r\n\t */\r\n\tfunction vcenter(target, tomove){\r\n\t\tvar state = $.data(target, 'window');\r\n\t\tvar opts = state.options;\r\n\t\tvar height = opts.height;\r\n\t\tif (isNaN(height)){\r\n\t\t\theight = state.window._outerHeight();\r\n\t\t}\r\n\t\tif (opts.inline){\r\n\t\t\tvar parent = state.window.parent();\r\n\t\t\topts.top = (parent.height() - height) / 2 + parent.scrollTop();\r\n\t\t} else {\r\n\t\t\topts.top = ($(window)._outerHeight() - height) / 2 + $(document).scrollTop();\r\n\t\t}\r\n\t\tif (tomove){moveWindow(target);}\r\n\t}\r\n\t\r\n\tfunction create(target){\r\n\t\tvar state = $.data(target, 'window');\r\n\t\tvar winClosed = state.options.closed;\r\n\t\tvar win = $(target).panel($.extend({}, state.options, {\r\n\t\t\tborder: false,\r\n\t\t\tdoSize: true,\t// size the panel, the property undefined in window component\r\n\t\t\tclosed: true,\t// close the panel\r\n\t\t\tcls: 'window',\r\n\t\t\theaderCls: 'window-header',\r\n\t\t\tbodyCls: 'window-body ' + (state.options.noheader ? 'window-body-noheader' : ''),\r\n\t\t\t\r\n\t\t\tonBeforeDestroy: function(){\r\n\t\t\t\tif (state.options.onBeforeDestroy.call(target) == false) return false;\r\n\t\t\t\tif (state.shadow) state.shadow.remove();\r\n\t\t\t\tif (state.mask) state.mask.remove();\r\n\t\t\t},\r\n\t\t\tonClose: function(){\r\n\t\t\t\tif (state.shadow) state.shadow.hide();\r\n\t\t\t\tif (state.mask) state.mask.hide();\r\n\t\t\t\t\r\n\t\t\t\tstate.options.onClose.call(target);\r\n\t\t\t},\r\n\t\t\tonOpen: function(){\r\n\t\t\t\tif (state.mask){\r\n\t\t\t\t\tstate.mask.css({\r\n\t\t\t\t\t\tdisplay:'block',\r\n\t\t\t\t\t\tzIndex: $.fn.window.defaults.zIndex++\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tif (state.shadow){\r\n\t\t\t\t\tstate.shadow.css({\r\n\t\t\t\t\t\tdisplay:'block',\r\n\t\t\t\t\t\tzIndex: $.fn.window.defaults.zIndex++,\r\n\t\t\t\t\t\tleft: state.options.left,\r\n\t\t\t\t\t\ttop: state.options.top,\r\n\t\t\t\t\t\twidth: state.window._outerWidth(),\r\n\t\t\t\t\t\theight: state.window._outerHeight()\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tstate.window.css('z-index', $.fn.window.defaults.zIndex++);\r\n\t\t\t\t\r\n\t\t\t\tstate.options.onOpen.call(target);\r\n\t\t\t},\r\n\t\t\tonResize: function(width, height){\r\n\t\t\t\tvar opts = $(this).panel('options');\r\n\t\t\t\t$.extend(state.options, {\r\n\t\t\t\t\twidth: opts.width,\r\n\t\t\t\t\theight: opts.height,\r\n\t\t\t\t\tleft: opts.left,\r\n\t\t\t\t\ttop: opts.top\r\n\t\t\t\t});\r\n\t\t\t\tif (state.shadow){\r\n\t\t\t\t\tstate.shadow.css({\r\n\t\t\t\t\t\tleft: state.options.left,\r\n\t\t\t\t\t\ttop: state.options.top,\r\n\t\t\t\t\t\twidth: state.window._outerWidth(),\r\n\t\t\t\t\t\theight: state.window._outerHeight()\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tstate.options.onResize.call(target, width, height);\r\n\t\t\t},\r\n\t\t\tonMinimize: function(){\r\n\t\t\t\tif (state.shadow) state.shadow.hide();\r\n\t\t\t\tif (state.mask) state.mask.hide();\r\n\t\t\t\t\r\n\t\t\t\tstate.options.onMinimize.call(target);\r\n\t\t\t},\r\n\t\t\tonBeforeCollapse: function(){\r\n\t\t\t\tif (state.options.onBeforeCollapse.call(target) == false) return false;\r\n\t\t\t\tif (state.shadow) state.shadow.hide();\r\n\t\t\t},\r\n\t\t\tonExpand: function(){\r\n\t\t\t\tif (state.shadow) state.shadow.show();\r\n\t\t\t\tstate.options.onExpand.call(target);\r\n\t\t\t}\r\n\t\t}));\r\n\t\t\r\n\t\tstate.window = win.panel('panel');\r\n\t\t\r\n\t\t// create mask\r\n\t\tif (state.mask) state.mask.remove();\r\n\t\tif (state.options.modal == true){\r\n\t\t\tstate.mask = $('<div class=\"window-mask\"></div>').insertAfter(state.window);\r\n\t\t\tstate.mask.css({\r\n\t\t\t\twidth: (state.options.inline ? state.mask.parent().width() : getPageArea().width),\r\n\t\t\t\theight: (state.options.inline ? state.mask.parent().height() : getPageArea().height),\r\n\t\t\t\tdisplay: 'none'\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\t// create shadow\r\n\t\tif (state.shadow) state.shadow.remove();\r\n\t\tif (state.options.shadow == true){\r\n\t\t\tstate.shadow = $('<div class=\"window-shadow\"></div>').insertAfter(state.window);\r\n\t\t\tstate.shadow.css({\r\n\t\t\t\tdisplay: 'none'\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\t// if require center the window\r\n\t\tif (state.options.left == null){hcenter(target);}\r\n\t\tif (state.options.top == null){vcenter(target);}\r\n\t\tmoveWindow(target);\r\n\t\t\r\n\t\tif (!winClosed){\r\n\t\t\twin.window('open');\t// open the window\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\t/**\r\n\t * set window drag and resize property\r\n\t */\r\n\tfunction setProperties(target){\r\n\t\tvar state = $.data(target, 'window');\r\n\t\t\r\n\t\tstate.window.draggable({\r\n\t\t\thandle: '>div.panel-header>div.panel-title',\r\n\t\t\tdisabled: state.options.draggable == false,\r\n\t\t\tonStartDrag: function(e){\r\n\t\t\t\tif (state.mask) state.mask.css('z-index', $.fn.window.defaults.zIndex++);\r\n\t\t\t\tif (state.shadow) state.shadow.css('z-index', $.fn.window.defaults.zIndex++);\r\n\t\t\t\tstate.window.css('z-index', $.fn.window.defaults.zIndex++);\r\n\t\t\t\t\r\n\t\t\t\tif (!state.proxy){\r\n\t\t\t\t\tstate.proxy = $('<div class=\"window-proxy\"></div>').insertAfter(state.window);\r\n\t\t\t\t}\r\n\t\t\t\tstate.proxy.css({\r\n\t\t\t\t\tdisplay:'none',\r\n\t\t\t\t\tzIndex: $.fn.window.defaults.zIndex++,\r\n\t\t\t\t\tleft: e.data.left,\r\n\t\t\t\t\ttop: e.data.top\r\n\t\t\t\t});\r\n\t\t\t\tstate.proxy._outerWidth(state.window._outerWidth());\r\n\t\t\t\tstate.proxy._outerHeight(state.window._outerHeight());\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\tif (state.proxy) state.proxy.show();\r\n\t\t\t\t}, 500);\r\n\t\t\t},\r\n\t\t\tonDrag: function(e){\r\n\t\t\t\tstate.proxy.css({\r\n\t\t\t\t\tdisplay:'block',\r\n\t\t\t\t\tleft: e.data.left,\r\n\t\t\t\t\ttop: e.data.top\r\n\t\t\t\t});\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\t\t\tonStopDrag: function(e){\r\n\t\t\t\tstate.options.left = e.data.left;\r\n\t\t\t\tstate.options.top = e.data.top;\r\n\t\t\t\t$(target).window('move');\r\n\t\t\t\tstate.proxy.remove();\r\n\t\t\t\tstate.proxy = null;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tstate.window.resizable({\r\n\t\t\tdisabled: state.options.resizable == false,\r\n\t\t\tonStartResize:function(e){\r\n\t\t\t\tstate.pmask = $('<div class=\"window-proxy-mask\"></div>').insertAfter(state.window);\r\n\t\t\t\tstate.pmask.css({\r\n\t\t\t\t\tzIndex: $.fn.window.defaults.zIndex++,\r\n\t\t\t\t\tleft: e.data.left,\r\n\t\t\t\t\ttop: e.data.top,\r\n\t\t\t\t\twidth: state.window._outerWidth(),\r\n\t\t\t\t\theight: state.window._outerHeight()\r\n\t\t\t\t});\r\n\t\t\t\tif (!state.proxy){\r\n\t\t\t\t\tstate.proxy = $('<div class=\"window-proxy\"></div>').insertAfter(state.window);\r\n\t\t\t\t}\r\n\t\t\t\tstate.proxy.css({\r\n\t\t\t\t\tzIndex: $.fn.window.defaults.zIndex++,\r\n\t\t\t\t\tleft: e.data.left,\r\n\t\t\t\t\ttop: e.data.top\r\n\t\t\t\t});\r\n\t\t\t\tstate.proxy._outerWidth(e.data.width);\r\n\t\t\t\tstate.proxy._outerHeight(e.data.height);\r\n\t\t\t},\r\n\t\t\tonResize: function(e){\r\n\t\t\t\tstate.proxy.css({\r\n\t\t\t\t\tleft: e.data.left,\r\n\t\t\t\t\ttop: e.data.top\r\n\t\t\t\t});\r\n\t\t\t\tstate.proxy._outerWidth(e.data.width);\r\n\t\t\t\tstate.proxy._outerHeight(e.data.height);\r\n\t\t\t\treturn false;\r\n\t\t\t},\r\n\t\t\tonStopResize: function(e){\r\n\t\t\t\t$.extend(state.options, {\r\n\t\t\t\t\tleft: e.data.left,\r\n\t\t\t\t\ttop: e.data.top,\r\n\t\t\t\t\twidth: e.data.width,\r\n\t\t\t\t\theight: e.data.height\r\n\t\t\t\t});\r\n\t\t\t\tsetSize(target);\r\n\t\t\t\tstate.pmask.remove();\r\n\t\t\t\tstate.pmask = null;\r\n\t\t\t\tstate.proxy.remove();\r\n\t\t\t\tstate.proxy = null;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tfunction getPageArea() {\r\n\t\tif (document.compatMode == 'BackCompat') {\r\n\t\t\treturn {\r\n\t\t\t\twidth: Math.max(document.body.scrollWidth, document.body.clientWidth),\r\n\t\t\t\theight: Math.max(document.body.scrollHeight, document.body.clientHeight)\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn {\r\n\t\t\t\twidth: Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth),\r\n\t\t\t\theight: Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t// when window resize, reset the width and height of the window's mask\r\n\t$(window).resize(function(){\r\n\t\t$('body>div.window-mask').css({\r\n\t\t\twidth: $(window)._outerWidth(),\r\n\t\t\theight: $(window)._outerHeight()\r\n\t\t});\r\n\t\tsetTimeout(function(){\r\n\t\t\t$('body>div.window-mask').css({\r\n\t\t\t\twidth: getPageArea().width,\r\n\t\t\t\theight: getPageArea().height\r\n\t\t\t});\r\n\t\t}, 50);\r\n\t});\r\n\t\r\n\t$.fn.window = function(options, param){\r\n\t\tif (typeof options == 'string'){\r\n\t\t\tvar method = $.fn.window.methods[options];\r\n\t\t\tif (method){\r\n\t\t\t\treturn method(this, param);\r\n\t\t\t} else {\r\n\t\t\t\treturn this.panel(options, param);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\toptions = options || {};\r\n\t\treturn this.each(function(){\r\n\t\t\tvar state = $.data(this, 'window');\r\n\t\t\tif (state){\r\n\t\t\t\t$.extend(state.options, options);\r\n\t\t\t} else {\r\n\t\t\t\tstate = $.data(this, 'window', {\r\n\t\t\t\t\toptions: $.extend({}, $.fn.window.defaults, $.fn.window.parseOptions(this), options)\r\n\t\t\t\t});\r\n\t\t\t\tif (!state.options.inline){\r\n//\t\t\t\t\t$(this).appendTo('body');\r\n\t\t\t\t\tdocument.body.appendChild(this);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcreate(this);\r\n\t\t\tsetProperties(this);\r\n\t\t});\r\n\t};\r\n\t\r\n\t$.fn.window.methods = {\r\n\t\toptions: function(jq){\r\n\t\t\tvar popts = jq.panel('options');\r\n\t\t\tvar wopts = $.data(jq[0], 'window').options;\r\n\t\t\treturn $.extend(wopts, {\r\n\t\t\t\tclosed: popts.closed,\r\n\t\t\t\tcollapsed: popts.collapsed,\r\n\t\t\t\tminimized: popts.minimized,\r\n\t\t\t\tmaximized: popts.maximized\r\n\t\t\t});\r\n\t\t},\r\n\t\twindow: function(jq){\r\n\t\t\treturn $.data(jq[0], 'window').window;\r\n\t\t},\r\n\t\tresize: function(jq, param){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tsetSize(this, param);\r\n\t\t\t});\r\n\t\t},\r\n\t\tmove: function(jq, param){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tmoveWindow(this, param);\r\n\t\t\t});\r\n\t\t},\r\n\t\thcenter: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\thcenter(this, true);\r\n\t\t\t});\r\n\t\t},\r\n\t\tvcenter: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\tvcenter(this, true);\r\n\t\t\t});\r\n\t\t},\r\n\t\tcenter: function(jq){\r\n\t\t\treturn jq.each(function(){\r\n\t\t\t\thcenter(this);\r\n\t\t\t\tvcenter(this);\r\n\t\t\t\tmoveWindow(this);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\t\r\n\t$.fn.window.parseOptions = function(target){\r\n\t\treturn $.extend({}, $.fn.panel.parseOptions(target), $.parser.parseOptions(target, [\r\n\t\t\t{draggable:'boolean',resizable:'boolean',shadow:'boolean',modal:'boolean',inline:'boolean'}\r\n\t\t]));\r\n\t};\r\n\t\r\n\t// Inherited from $.fn.panel.defaults\r\n\t$.fn.window.defaults = $.extend({}, $.fn.panel.defaults, {\r\n\t\tzIndex: 9000,\r\n\t\tdraggable: true,\r\n\t\tresizable: false,\r\n\t\tshadow: true,\r\n\t\tmodal: false,\r\n\t\tinline: false,\t// true to stay inside its parent, false to go on top of all elements\r\n\t\t\r\n\t\t// window's property which difference from panel\r\n\t\ttitle: 'New Window',\r\n\t\tcollapsible: true,\r\n\t\tminimizable: true,\r\n\t\tmaximizable: true,\r\n\t\tclosable: true,\r\n\t\tclosed: false\r\n\t});\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/color.css",
    "content": ".c1,.c1:hover{\r\n\tcolor: #fff;\r\n\tborder-color: #3c8b3c;\r\n\tbackground: #4cae4c;\r\n\tbackground: -webkit-linear-gradient(top,#4cae4c 0,#449d44 100%);\r\n\tbackground: -moz-linear-gradient(top,#4cae4c 0,#449d44 100%);\r\n\tbackground: -o-linear-gradient(top,#4cae4c 0,#449d44 100%);\r\n\tbackground: linear-gradient(to bottom,#4cae4c 0,#449d44 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4cae4c,endColorstr=#449d44,GradientType=0);\r\n}\r\na.c1:hover{\r\n\tbackground: #449d44;\r\n\tfilter: none;\r\n}\r\n.c2,.c2:hover{\r\n\tcolor: #fff;\r\n\tborder-color: #5f5f5f;\r\n\tbackground: #747474;\r\n\tbackground: -webkit-linear-gradient(top,#747474 0,#676767 100%);\r\n\tbackground: -moz-linear-gradient(top,#747474 0,#676767 100%);\r\n\tbackground: -o-linear-gradient(top,#747474 0,#676767 100%);\r\n\tbackground: linear-gradient(to bottom,#747474 0,#676767 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#747474,endColorstr=#676767,GradientType=0);\r\n}\r\na.c2:hover{\r\n\tbackground: #676767;\r\n\tfilter: none;\r\n}\r\n.c3,.c3:hover{\r\n\tcolor: #333;\r\n\tborder-color: #ff8080;\r\n\tbackground: #ffb3b3;\r\n\tbackground: -webkit-linear-gradient(top,#ffb3b3 0,#ff9999 100%);\r\n\tbackground: -moz-linear-gradient(top,#ffb3b3 0,#ff9999 100%);\r\n\tbackground: -o-linear-gradient(top,#ffb3b3 0,#ff9999 100%);\r\n\tbackground: linear-gradient(to bottom,#ffb3b3 0,#ff9999 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffb3b3,endColorstr=#ff9999,GradientType=0);\r\n}\r\na.c3:hover{\r\n\tbackground: #ff9999;\r\n\tfilter: none;\r\n}\r\n.c4,.c4:hover{\r\n\tcolor: #333;\r\n\tborder-color: #52d689;\r\n\tbackground: #b8eecf;\r\n\tbackground: -webkit-linear-gradient(top,#b8eecf 0,#a4e9c1 100%);\r\n\tbackground: -moz-linear-gradient(top,#b8eecf 0,#a4e9c1 100%);\r\n\tbackground: -o-linear-gradient(top,#b8eecf 0,#a4e9c1 100%);\r\n\tbackground: linear-gradient(to bottom,#b8eecf 0,#a4e9c1 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#b8eecf,endColorstr=#a4e9c1,GradientType=0);\r\n}\r\na.c4:hover{\r\n\tbackground: #a4e9c1;\r\n\tfilter: none;\r\n}\r\n.c5,.c5:hover{\r\n\tcolor: #fff;\r\n\tborder-color: #b52b27;\r\n\tbackground: #d84f4b;\r\n\tbackground: -webkit-linear-gradient(top,#d84f4b 0,#c9302c 100%);\r\n\tbackground: -moz-linear-gradient(top,#d84f4b 0,#c9302c 100%);\r\n\tbackground: -o-linear-gradient(top,#d84f4b 0,#c9302c 100%);\r\n\tbackground: linear-gradient(to bottom,#d84f4b 0,#c9302c 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d84f4b,endColorstr=#c9302c,GradientType=0);\r\n}\r\na.c5:hover{\r\n\tbackground: #c9302c;\r\n\tfilter: none;\r\n}\r\n.c6,.c6:hover{\r\n\tcolor: #fff;\r\n\tborder-color: #1f637b;\r\n\tbackground: #2984a4;\r\n\tbackground: -webkit-linear-gradient(top,#2984a4 0,#24748f 100%);\r\n\tbackground: -moz-linear-gradient(top,#2984a4 0,#24748f 100%);\r\n\tbackground: -o-linear-gradient(top,#2984a4 0,#24748f 100%);\r\n\tbackground: linear-gradient(to bottom,#2984a4 0,#24748f 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#2984a4,endColorstr=#24748f,GradientType=0);\r\n}\r\na.c6:hover{\r\n\tbackground: #24748f;\r\n\tfilter: none;\r\n}\r\n.c7,.c7:hover{\r\n\tcolor: #333;\r\n\tborder-color: #e68900;\r\n\tbackground: #ffab2e;\r\n\tbackground: -webkit-linear-gradient(top,#ffab2e 0,#ff9900 100%);\r\n\tbackground: -moz-linear-gradient(top,#ffab2e 0,#ff9900 100%);\r\n\tbackground: -o-linear-gradient(top,#ffab2e 0,#ff9900 100%);\r\n\tbackground: linear-gradient(to bottom,#ffab2e 0,#ff9900 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffab2e,endColorstr=#ff9900,GradientType=0);\r\n}\r\na.c7:hover{\r\n\tbackground: #ff9900;\r\n\tfilter: none;\r\n}\r\n.c8,.c8:hover{\r\n\tcolor: #fff;\r\n\tborder-color: #4b72a4;\r\n\tbackground: #698cba;\r\n\tbackground: -webkit-linear-gradient(top,#698cba 0,#577eb2 100%);\r\n\tbackground: -moz-linear-gradient(top,#698cba 0,#577eb2 100%);\r\n\tbackground: -o-linear-gradient(top,#698cba 0,#577eb2 100%);\r\n\tbackground: linear-gradient(to bottom,#698cba 0,#577eb2 100%);\r\n\tfilter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#698cba,endColorstr=#577eb2,GradientType=0);\r\n}\r\na.c8:hover{\r\n\tbackground: #577eb2;\r\n\tfilter: none;\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/icon.css",
    "content": "/*-----------------------------------\r\n      扩展图片\r\n-----------------------------------*/\r\n.icon-cyan-file {\r\n\tbackground:url('icons/cyan_file.png') no-repeat center center;\r\n}\r\n.icon-cyan-folder-open {\r\n\tbackground:url('icons/cyan_folder_open.png') no-repeat center center;\r\n}\r\n.icon-cyan-folder-close {\r\n\tbackground:url('icons/cyan_folder_close.png') no-repeat center center;\r\n}\r\n.icon-ceisTree {\r\n\tbackground:url('icons/ceis_folder.png') no-repeat center center;\r\n}\r\n.icon-ceisTreeOpen {\r\n\tbackground:url('icons/ceis_folderOpen.png') no-repeat center center;\r\n}\r\n.icon-blank{\r\n\tbackground:url('icons/blank.gif') no-repeat center center;\r\n}\r\n.icon-add{\r\n\tbackground:url('icons/edit_add.png') no-repeat center center;\r\n}\r\n/* .icon-edit{\r\n\tbackground:url('icons/pencil.png') no-repeat center center;\r\n} */\r\n/* .icon-remove{\r\n\tbackground:url('icons/edit_remove.png') no-repeat center center;\r\n} */\r\n/* .icon-save{\r\n\tbackground:url('icons/filesave.png') no-repeat center center;\r\n} */\r\n.icon-cut{\r\n\tbackground:url('icons/cut.png') no-repeat center center;\r\n}\r\n/* .icon-ok{\r\n\tbackground:url('icons/ok.png') no-repeat center center;\r\n} */\r\n.icon-no{\r\n\tbackground:url('icons/no.png') no-repeat center center;\r\n}\r\n.icon-cancel{\r\n\tbackground:url('icons/cancel.png') no-repeat center center;\r\n}\r\n.icon-reload{\r\n\tbackground:url('icons/reload.png') no-repeat center center;\r\n}\r\n/* .icon-search{\r\n\tbackground:url('icons/search.png') no-repeat center center;\r\n} */\r\n.icon-print{\r\n\tbackground:url('icons/print.png') no-repeat center center;\r\n}\r\n.icon-help{\r\n\tbackground:url('icons/help.png') no-repeat center center;\r\n}\r\n/* .icon-undo{\r\n\tbackground:url('icons/undo.png') no-repeat center center;\r\n} */\r\n.icon-redo{\r\n\tbackground:url('icons/redo.png') no-repeat center center;\r\n}\r\n.icon-back{\r\n\tbackground:url('icons/back.png') no-repeat center center;\r\n}\r\n.icon-sum{\r\n\tbackground:url('icons/sum.png') no-repeat center center;\r\n}\r\n.icon-tip{\r\n\tbackground:url('icons/tip.png') no-repeat center center;\r\n}\r\n.icon-filter{\r\n\tbackground:url('icons/filter.png') no-repeat center center;\r\n}\r\n\r\n\r\n.icon-mini-add{\r\n\tbackground:url('icons/mini_add.png') no-repeat center center;\r\n}\r\n.icon-mini-edit{\r\n\tbackground:url('icons/mini_edit.png') no-repeat center center;\r\n}\r\n.icon-mini-refresh{\r\n\tbackground:url('icons/mini_refresh.png') no-repeat center center;\r\n}\r\n\r\n.icon-large-picture{\r\n\tbackground:url('icons/large_picture.png') no-repeat center center;\r\n}\r\n.icon-large-clipart{\r\n\tbackground:url('icons/large_clipart.png') no-repeat center center;\r\n}\r\n.icon-large-shapes{\r\n\tbackground:url('icons/large_shapes.png') no-repeat center center;\r\n}\r\n.icon-large-smartart{\r\n\tbackground:url('icons/large_smartart.png') no-repeat center center;\r\n}\r\n.icon-large-chart{\r\n\tbackground:url('icons/large_chart.png') no-repeat center center;\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/accordion.css",
    "content": ".accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #fff;\n  border-color: #ddd;\n}\n.accordion .accordion-header {\n  background: #ffffff;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #CCE6FF;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/calendar.css",
    "content": ".calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 12px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 12px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 22px;\n}\n.calendar-title {\n  text-align: center;\n  height: 22px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 2px;\n  padding: 0 3px;\n  height: 18px;\n  line-height: 18px;\n  font-size: 12px;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -7px;\n  width: 14px;\n  height: 14px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-prevmonth {\n  left: 20px;\n  background: url('images/calendar_arrows.png') no-repeat -18px -2px;\n}\n.calendar-nextmonth {\n  right: 20px;\n  background: url('images/calendar_arrows.png') no-repeat -34px -2px;\n}\n.calendar-prevyear {\n  left: 3px;\n  background: url('images/calendar_arrows.png') no-repeat -1px -2px;\n}\n.calendar-nextyear {\n  right: 3px;\n  background: url('images/calendar_arrows.png') no-repeat -49px -2px;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 12px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 40px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  margin: 0;\n  padding: 2px;\n  font-weight: bold;\n  font-size: 12px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 21px;\n  height: 21px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 2px 2px;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -45px 2px;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #919191;\n}\n.calendar-day {\n  color: #444;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #ddd;\n}\n.calendar {\n  border-color: #ddd;\n}\n.calendar-header {\n  background: #ffffff;\n}\n.calendar-body,\n.calendar-menu {\n  background: #fff;\n}\n.calendar-body th {\n  background: #fff;\n  padding: 2px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #E6E6E6;\n  color: #444;\n}\n.calendar-hover {\n  border: 1px solid #ddd;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #CCE6FF;\n  color: #000;\n  border: 1px solid #99cdff;\n  padding: 0;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/combo.css",
    "content": ".combo {\n  display: inline-block;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n  vertical-align: middle;\n}\n.combo .combo-text {\n  font-size: 12px;\n  border: 0px;\n  margin: 0;\n  padding: 0px 2px;\n  vertical-align: baseline;\n}\n.combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #fff;\n}\n.combo {\n  border-color: #ddd;\n  background-color: #fff;\n}\n.combo-arrow {\n  background-color: #ffffff;\n}\n.combo-arrow-hover {\n  background-color: #E6E6E6;\n}\n.combo-arrow:hover {\n  background-color: #E6E6E6;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/combobox.css",
    "content": ".combobox-item,\n.combobox-group {\n  font-size: 12px;\n  padding: 3px;\n  padding-right: 0px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group {\n  font-weight: bold;\n}\n.combobox-item-hover {\n  background-color: #E6E6E6;\n  color: #444;\n}\n.combobox-item-selected {\n  background-color: #CCE6FF;\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/datagrid.css",
    "content": ".datagrid .panel-body {\n    overflow: hidden;\n    position: relative;\n}\n\n.datagrid-view {\n    position: relative;\n    overflow: hidden;\n    border-radius: 5px;\n}\n\n.datagrid-view1,\n.datagrid-view2 {\n    position: absolute;\n    overflow: hidden;\n    top: 0;\n    border-radius: 5px;\n}\n\n.datagrid-view1 {\n    left: 0;\n}\n\n.datagrid-view2 {\n    right: 0;\n}\n\n.datagrid-mask {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    opacity: 0.3;\n    filter: alpha(opacity=30);\n    display: none;\n}\n\n.datagrid-mask-msg {\n    position: absolute;\n    top: 50%;\n    margin-top: -20px;\n    padding: 10px 5px 10px 30px;\n    width: auto;\n    height: 16px;\n    border-width: 2px;\n    border-style: solid;\n    display: none;\n}\n\n.datagrid-sort-icon {\n    padding: 0;\n}\n\n.datagrid-toolbar {\n    height: auto;\n    padding: 1px 2px;\n    border-width: 0 0 1px 0;\n    border-style: solid;\n}\n\n.datagrid-btn-separator {\n    float: left;\n    height: 24px;\n    border-left: 1px solid #ddd;\n    border-right: 1px solid #fff;\n    margin: 2px 1px;\n}\n\n.datagrid .datagrid-pager {\n    display: block;\n    margin: 0;\n    border-width: 1px 0 0 0;\n    border-style: solid;\n}\n\n.datagrid .datagrid-pager-top {\n    border-width: 0 0 1px 0;\n}\n\n.datagrid-header {\n    overflow: hidden;\n    cursor: default;\n    border-width: 0 0 1px 0;\n    border-style: solid;\n    border-radius: 0px;\n}\n\n.datagrid-header-inner {\n    float: left;\n    width: 10000px;\n}\n\n.datagrid-header-row,\n.datagrid-row {\n    height: 25px;\n}\n\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n    border-width: 0 1px 1px 0;\n    border-style: solid;\n    margin: 0;\n    padding: 0;\n}\n\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n    margin: 0;\n    padding: 0 10px;\n    white-space: nowrap;\n    word-wrap: normal;\n    overflow: hidden;\n    height: 26px;\n    line-height: 26px;\n    font-size: 12px;\n}\n\n.datagrid-header .datagrid-cell {\n    height: 27;\n    background-color:#fff;\n}\n\n.datagrid-header .datagrid-cell span {\n\tfont-weight: bold;\n    font-size: 12px;\n}\n\n.datagrid-cell-group {\n    text-align: center;\n}\n\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n    width: 25px;\n    text-align: center;\n    margin: 0;\n    padding: 0;\n}\n\n.datagrid-body {\n    margin: 0;\n    padding: 0;\n    overflow: auto;\n    zoom: 1;\n}\n\n.datagrid-view1 .datagrid-body-inner {\n    padding-bottom: 20px;\n}\n\n.datagrid-view1 .datagrid-body {\n    overflow: hidden;\n}\n\n.datagrid-footer {\n    overflow: hidden;\n}\n\n.datagrid-footer-inner {\n    border-width: 1px 0 0 0;\n    border-style: solid;\n    width: 10000px;\n    float: left;\n}\n\n.datagrid-row-editing .datagrid-cell {\n    height: auto;\n}\n\n.datagrid-header-check,\n.datagrid-cell-check {\n    padding: 0;\n    width: 27px;\n    height: 18px;\n    font-size: 1px;\n    text-align: center;\n    overflow: hidden;\n}\n\n.datagrid-header-check input,\n.datagrid-cell-check input {\n    margin: 0;\n    padding: 0;\n    width: 15px;\n    height: 18px;\n}\n\n.datagrid-resize-proxy {\n    position: absolute;\n    width: 1px;\n    height: 10000px;\n    top: 0;\n    cursor: e-resize;\n    display: none;\n}\n\n.datagrid-body .datagrid-editable {\n    margin: 0;\n    padding: 0;\n}\n\n.datagrid-body .datagrid-editable table {\n    width: 100%;\n    height: 100%;\n}\n\n.datagrid-body .datagrid-editable td {\n    border: 0;\n    margin: 0;\n    padding: 0;\n}\n\n.datagrid-body .datagrid-editable .datagrid-editable-input {\n    margin: 0;\n    padding: 2px;\n    border-width: 1px;\n    border-style: solid;\n}\n\n.datagrid-sort-desc .datagrid-sort-icon {\n    padding: 0 13px 0 0;\n    background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n\n.datagrid-sort-asc .datagrid-sort-icon {\n    padding: 0 13px 0 0;\n    background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n\n.datagrid-row-collapse {\n    background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n\n.datagrid-row-expand {\n    background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n\n.datagrid-mask-msg {\n    background: #fff url('images/loading.gif') no-repeat scroll 5px center;\n}\n\n.datagrid-header,\n.datagrid-td-rownumber {\n    background-color: #ffffff;\n}\n\n.datagrid-cell-rownumber {\n    color: #444;\n}\n\n.datagrid-resize-proxy {\n    background: #b3b3b3;\n}\n\n.datagrid-mask {\n    background: #eee;\n}\n\n.datagrid-mask-msg {\n    border-color: #ddd;\n}\n\n.datagrid-toolbar,\n.datagrid-pager {\n    background: #fff;\n}\n\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n    border-color: #ddd;\n}\n\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n    border-color: #ddd;\n}\n\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n    color: #444;\n    border-collapse: separate;\n}\n\n.datagrid-row-alt {\n    background: #f5f5f5;\n}\n\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n    background: #E6E6E6;\n    color: #444;\n    cursor: default;\n}\n\n.datagrid-row-selected {\n    background: #CCE6FF;\n    color: #000;\n}\n\n.datagrid-body .datagrid-editable .datagrid-editable-input {\n    border-color: #ddd;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/datebox.css",
    "content": ".datebox-calendar-inner {\n  height: 180px;\n}\n.datebox-button {\n  height: 18px;\n  padding: 2px 5px;\n  text-align: center;\n}\n.datebox-button a {\n  font-size: 12px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fff;\n}\n.datebox-button a {\n  color: #777;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/dialog.css",
    "content": ".dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fff;\n  border-width: 1px;\n  border-style: solid;\n}\n.dialog-toolbar {\n  border-color: #ddd #ddd #ddd #ddd;\n}\n.dialog-button {\n  border-color: #ddd #ddd #ddd #ddd;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/easyui.css",
    "content": ".panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0 4px 0 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  color:#5E97BF;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #E6E6E6;\n  -moz-border-radius: -2px -2px -2px -2px;\n  -webkit-border-radius: -2px -2px -2px -2px;\n  border-radius: -2px -2px -2px -2px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #ddd;\n}\n.panel-header {\n  height: 18px;\n  background-color: #ffffff;\n}\n.panel-body {\n  background-color: #fff;\n  color: #444;\n  font-size: 12px;\n}\n.panel-title {\n  padding-left: 8px;\n  font-size: 14px;\n  font-family:'微软雅黑';\n  color: #777;\n  height: 20px;\n  line-height: 20px;\n  vertical-align: middle;\n}\n.panel-footer {\n  border: 1px solid #ddd;\n  overflow: hidden;\n  background: #fff;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n.accordion {\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.accordion .accordion-header {\n  border-width: 0 0 1px;\n  cursor: pointer;\n}\n.accordion .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-noborder {\n  border-width: 0;\n}\n.accordion-noborder .accordion-header {\n  border-width: 0 0 1px;\n}\n.accordion-noborder .accordion-body {\n  border-width: 0 0 1px;\n}\n.accordion-collapse {\n  background: url('images/accordion_arrows.png') no-repeat 0 0;\n}\n.accordion-expand {\n  background: url('images/accordion_arrows.png') no-repeat -16px 0;\n}\n.accordion {\n  background: #fff;\n  border-color: #ddd;\n}\n.accordion .accordion-header {\n  background: #ffffff;\n  filter: none;\n}\n.accordion .accordion-header-selected {\n  background: #CCE6FF;\n}\n.accordion .accordion-header-selected .panel-title {\n  color: #000;\n}\n.window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 3px 0px 3px 0px;\n}\n.window .window-body {\n  /* border-width: 1px;\n  border-style: solid; */\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 4px;\n  -webkit-border-radius: 4px;\n  border-radius: 4px;\n}\n.window-shadow {\n  background: #eee;\n  -moz-box-shadow: 3px 3px 3px 10px rgba(186, 186, 186, 1);\n  -webkit-box-shadow: 3px 3px 10px 2px rgba(186, 186, 186, 1);\n  box-shadow: 3px 3px 10px 2px rgba(186, 186, 186, 1);\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #d4d4d4;\n}\n.window {\n  background-color: #ffffff;\n}\n.window-proxy {\n  border: 1px dashed #ddd;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #eee;\n}\n.window .panel-footer {\n  border: 1px solid #ddd;\n  position: relative;\n  top: -1px;\n}\n.dialog-content {\n  overflow: auto;\n}\n.dialog-toolbar {\n  padding: 2px 5px;\n}\n.dialog-tool-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.dialog-button {\n  padding: 5px;\n  text-align: right;\n}\n.dialog-button .l-btn {\n  margin-left: 5px;\n}\n.dialog-toolbar,\n.dialog-button {\n  background: #fff;\n  /* border-width: 1px;\n  border-style: solid; */\n}\n.dialog-toolbar {\n  border-bottom: 1px solid #ddd;\n}\n.dialog-button {\n  border-top: 1px solid #ddd;\n}\n.l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n}\n.l-btn-plain {\n  border: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 24px;\n  font-size: 12px;\n  padding: 0;\n  margin: 0 4px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 4px 0 24px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 4px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 24px 0 4px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 4px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 4px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 40px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 4px;\n  width: 32px;\n}\n.l-btn {\n  color: #777;\n  background: #ffffff;\n  background-repeat: repeat-x;\n  border: 1px solid #dddddd;\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.l-btn:hover {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border: 0;\n  filter: none;\n}\n.l-btn-plain:hover {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #ffffff;\n  color: #777;\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #ddd;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #ddd;\n}\n.textbox {\n  position: relative;\n  border: 1px solid #ddd;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.textbox .textbox-text {\n  font-size: 12px;\n  border: 0;\n  margin: 0;\n  /* padding: 4px; */\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.textbox .textbox-prompt {\n  font-size: 12px;\n  color: #aaa;\n}\n.textbox-button,\n.textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox-button-right,\n.textbox-button-right:hover {\n  border-width: 0 0 0 1px;\n}\n.textbox-button-left,\n.textbox-button-left:hover {\n  border-width: 0 1px 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  -moz-box-shadow: 0 0 3px 0 #ddd;\n  -webkit-box-shadow: 0 0 3px 0 #ddd;\n  box-shadow: 0 0 3px 0 #ddd;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n.combo {\n  display: inline-block;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n  vertical-align: middle;\n}\n.combo .combo-text {\n  font-size: 12px;\n  border: 0px;\n  margin: 0;\n  padding: 0px 2px;\n  vertical-align: baseline;\n}\n.combo-arrow {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.combo-arrow-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.combo-panel {\n  overflow: auto;\n}\n.combo-arrow {\n  background: url('images/combo_arrow.png') no-repeat center center;\n}\n.combo-panel {\n  background-color: #fff;\n}\n.combo {\n  border-color: #ddd;\n  background-color: #fff;\n}\n.combo-arrow {\n  background-color: #ffffff;\n}\n.combo-arrow-hover {\n  background-color: #E6E6E6;\n}\n.combo-arrow:hover {\n  background-color: #E6E6E6;\n}\n.combo .textbox-icon-disabled:hover {\n  cursor: default;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.combobox-item,\n.combobox-group {\n  font-size: 12px;\n  font-family: ​Arial,​sans-serif,\"微软雅黑\";\n  padding: 3px;\n  padding-right: 0px;\n}\n.combobox-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.combobox-gitem {\n  padding-left: 10px;\n}\n.combobox-group {\n  font-weight: bold;\n}\n.combobox-item-hover {\n  background-color: #E6E6E6;\n  color: #444;\n}\n.combobox-item-selected {\n  background-color: #CCE6FF;\n  color: #000;\n}\n.layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #b3b3b3;\n}\n.layout-split-north {\n  border-bottom: 5px solid #fff;\n}\n.layout-split-south {\n  border-top: 5px solid #fff;\n}\n.layout-split-east {\n  border-left: 5px solid #fff;\n}\n.layout-split-west {\n  border-right: 5px solid #fff;\n}\n.layout-expand {\n  background-color: #ffffff;\n}\n.layout-expand-over {\n  background-color: #ffffff;\n}\n.tabs-container {\n  overflow: hidden;\n}\n.tabs-header {\n  border-width: 1px;\n  border-style: solid;\n  border-bottom-width: 0;\n  position: relative;\n  padding: 0;\n  padding-top: 2px;\n  overflow: hidden;\n}\n.tabs-header-plain {\n  border: 0;\n  background: transparent;\n}\n.tabs-scroller-left,\n.tabs-scroller-right {\n  position: absolute;\n  top: auto;\n  bottom: 0;\n  width: 18px;\n  font-size: 1px;\n  display: none;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-scroller-left {\n  left: 0;\n}\n.tabs-scroller-right {\n  right: 0;\n}\n.tabs-tool {\n  position: absolute;\n  bottom: 0;\n  padding: 1px;\n  overflow: hidden;\n  border-width: 1px;\n  border-style: solid;\n}\n.tabs-header-plain .tabs-tool {\n  padding: 0 1px;\n}\n.tabs-wrap {\n  position: relative;\n  left: 0;\n  overflow: hidden;\n  width: 100%;\n  margin: 0;\n  padding: 0;\n}\n.tabs-scrolling {\n  margin-left: 18px;\n  margin-right: 18px;\n}\n.tabs-disabled {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.tabs {\n  list-style-type: none;\n  height: 26px;\n  margin: 0px;\n  padding: 0px;\n  padding-left: 4px;\n  width: 50000px;\n  border-style: solid;\n  border-width: 0 0 1px 0;\n}\n.tabs li {\n  float: left;\n  display: inline-block;\n  margin: 0 4px -1px 0;\n  padding: 0;\n  position: relative;\n  min-width:80px;\n  border: 0;\n}\n.tabs li a.tabs-inner {\n  min-width:80px;\n  display: inline-block;\n  text-decoration: none;\n  margin: 0;\n  padding: 0 10px;\n  height: 25px;\n  line-height: 25px;\n  text-align: center;\n  white-space: nowrap;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0 0;\n  -webkit-border-radius: 0px 0px 0 0;\n  border-radius: 0px 0px 0 0;\n}\n.tabs li.tabs-selected a.tabs-inner {\n  font-weight: bold;\n  outline: none;\n}\n.tabs li.tabs-selected a:hover.tabs-inner {\n  cursor: default;\n  pointer: default;\n}\n.tabs li a.tabs-close,\n.tabs-p-tool {\n  position: absolute;\n  font-size: 1px;\n  display: block;\n  height: 12px;\n  padding: 0;\n  top: 50%;\n  margin-top: -6px;\n  overflow: hidden;\n}\n.tabs li a.tabs-close {\n  width: 12px;\n  right: 5px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs-p-tool {\n  right: 16px;\n}\n.tabs-p-tool a {\n  display: inline-block;\n  font-size: 1px;\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  cursor: hand;\n  cursor: pointer;\n}\n.tabs-with-icon {\n  padding-left: 18px;\n}\n.tabs-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 10px;\n  top: 50%;\n  margin-top: -8px;\n}\n.tabs-title {\n  font-size: 12px;\n}\n.tabs-closable {\n  padding-right: 8px;\n}\n.tabs-panels {\n  margin: 0px;\n  padding: 0px;\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0;\n  overflow: hidden;\n}\n.tabs-header-bottom {\n  border-width: 0 1px 1px 1px;\n  padding: 0 0 2px 0;\n}\n.tabs-header-bottom .tabs {\n  border-width: 1px 0 0 0;\n}\n.tabs-header-bottom .tabs li {\n  margin: -1px 4px 0 0;\n}\n.tabs-header-bottom .tabs li a.tabs-inner {\n  -moz-border-radius: 0 0 0px 0px;\n  -webkit-border-radius: 0 0 0px 0px;\n  border-radius: 0 0 0px 0px;\n}\n.tabs-header-bottom .tabs-tool {\n  top: 0;\n}\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n  top: 0;\n  bottom: auto;\n}\n.tabs-panels-top {\n  border-width: 1px 1px 0 1px;\n}\n.tabs-header-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n  padding: 0;\n}\n.tabs-header-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n  padding: 0;\n}\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n  height: 100%;\n}\n.tabs-header-left .tabs {\n  height: 100%;\n  padding: 4px 0 0 4px;\n  border-width: 0 1px 0 0;\n}\n.tabs-header-right .tabs {\n  height: 100%;\n  padding: 4px 4px 0 0;\n  border-width: 0 0 0 1px;\n}\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n  display: block;\n  width: 100%;\n  position: relative;\n}\n.tabs-header-left .tabs li {\n  left: auto;\n  right: 0;\n  margin: 0 -1px 4px 0;\n  float: right;\n}\n.tabs-header-right .tabs li {\n  left: 0;\n  right: auto;\n  margin: 0 0 4px -1px;\n  float: left;\n}\n.tabs-header-left .tabs li a.tabs-inner {\n  display: block;\n  text-align: left;\n  -moz-border-radius: 0px 0 0 0px;\n  -webkit-border-radius: 0px 0 0 0px;\n  border-radius: 0px 0 0 0px;\n}\n.tabs-header-right .tabs li a.tabs-inner {\n  display: block;\n  text-align: left;\n  -moz-border-radius: 0 0px 0px 0;\n  -webkit-border-radius: 0 0px 0px 0;\n  border-radius: 0 0px 0px 0;\n}\n.tabs-panels-right {\n  float: right;\n  border-width: 1px 1px 1px 0;\n}\n.tabs-panels-left {\n  float: left;\n  border-width: 1px 0 1px 1px;\n}\n.tabs-header-noborder,\n.tabs-panels-noborder {\n  border: 0px;\n}\n.tabs-header-plain {\n  border: 0px;\n  background: transparent;\n}\n.tabs-scroller-left {\n  background: #ffffff url('images/tabs_icons.png') no-repeat 1px center;\n}\n.tabs-scroller-right {\n  background: #ffffff url('images/tabs_icons.png') no-repeat -15px center;\n}\n.tabs li a.tabs-close {\n  background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n.tabs li a.tabs-inner:hover {\n  background: #E6E6E6;\n  color: #444;\n  filter: none;\n}\n.tabs li.tabs-selected a.tabs-inner {\n  background-color: #fff;\n  color: #777;\n}\n.tabs li a.tabs-inner {\n  color: #777;\n  background-color: #ffffff;\n}\n.tabs-header,\n.tabs-tool {\n  background-color: #ffffff;\n}\n.tabs-header-plain {\n  background: transparent;\n}\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li a.tabs-inner,\n.tabs li.tabs-selected a.tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner,\n.tabs-header-left .tabs li.tabs-selected a.tabs-inner,\n.tabs-header-right .tabs li.tabs-selected a.tabs-inner {\n  border-color: #ddd;\n}\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n  background-color: #E6E6E6;\n}\n.tabs li.tabs-selected a.tabs-inner {\n  border-bottom: 1px solid #fff;\n}\n.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner {\n  border-top: 1px solid #fff;\n}\n.tabs-header-left .tabs li.tabs-selected a.tabs-inner {\n  border-right: 1px solid #fff;\n}\n.tabs-header-right .tabs li.tabs-selected a.tabs-inner {\n  border-left: 1px solid #fff;\n}\n.datagrid .panel-body {\n  overflow: hidden;\n  position: relative;\n}\n.datagrid-view {\n  position: relative;\n  overflow: hidden;\n}\n.datagrid-view1,\n.datagrid-view2 {\n  position: absolute;\n  overflow: hidden;\n  top: 0;\n}\n.datagrid-view1 {\n  left: 0;\n}\n.datagrid-view2 {\n  right: 0;\n}\n.datagrid-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  display: none;\n}\n.datagrid-mask-msg {\n  position: absolute;\n  top: 50%;\n  margin-top: -20px;\n  padding: 10px 5px 10px 30px;\n  width: auto;\n  height: 16px;\n  border-width: 2px;\n  border-style: solid;\n  display: none;\n}\n.datagrid-sort-icon {\n  padding: 0;\n}\n.datagrid-toolbar {\n  height: auto;\n  padding: 1px 2px;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 2px 1px;\n}\n.datagrid .datagrid-pager {\n  display: block;\n  margin: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.datagrid .datagrid-pager-top {\n  border-width: 0 0 1px 0;\n}\n.datagrid-header {\n  overflow: hidden;\n  cursor: default;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.datagrid-header-inner {\n  float: left;\n  width: 10000px;\n}\n.datagrid-header-row,\n.datagrid-row {\n  height: 25px;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-width: 0 1px 1px 0;\n  border-style: dotted;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-cell,\n.datagrid-cell-group,\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  margin: 0;\n  padding: 0 4px;\n  white-space: nowrap;\n  word-wrap: normal;\n  overflow: hidden;\n  height: 18px;\n  line-height: 18px;\n  font-size: 12px;\n}\n.datagrid-header .datagrid-cell {\n  height: auto;\n}\n.datagrid-header .datagrid-cell span {\n  font-size: 12px;\n}\n.datagrid-cell-group {\n  text-align: center;\n}\n.datagrid-header-rownumber,\n.datagrid-cell-rownumber {\n  width: 25px;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body {\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  zoom: 1;\n}\n.datagrid-view1 .datagrid-body-inner {\n  padding-bottom: 20px;\n}\n.datagrid-view1 .datagrid-body {\n  overflow: hidden;\n}\n.datagrid-footer {\n  overflow: hidden;\n}\n.datagrid-footer-inner {\n  border-width: 1px 0 0 0;\n  border-style: solid;\n  width: 10000px;\n  float: left;\n}\n.datagrid-row-editing .datagrid-cell {\n  height: auto;\n}\n.datagrid-header-check,\n.datagrid-cell-check {\n  padding: 0;\n  width: 27px;\n  height: 18px;\n  font-size: 1px;\n  text-align: center;\n  overflow: hidden;\n}\n.datagrid-header-check input,\n.datagrid-cell-check input {\n  margin: 0;\n  padding: 0;\n  width: 15px;\n  height: 18px;\n}\n.datagrid-resize-proxy {\n  position: absolute;\n  width: 1px;\n  height: 10000px;\n  top: 0;\n  cursor: e-resize;\n  display: none;\n}\n.datagrid-body .datagrid-editable {\n  margin: 0;\n  padding: 0;\n}\n.datagrid-body .datagrid-editable table {\n  width: 100%;\n  height: 100%;\n}\n.datagrid-body .datagrid-editable td {\n  border: 0;\n  margin: 0;\n  padding: 0;\n}\n.datagrid-view .datagrid-editable-input {\n  margin: 0;\n  padding: 2px 4px;\n  border: 1px solid #ddd;\n  font-size: 12px;\n  outline-style: none;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.datagrid-sort-desc .datagrid-sort-icon {\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat -16px center;\n}\n.datagrid-sort-asc .datagrid-sort-icon {\n  padding: 0 13px 0 0;\n  background: url('images/datagrid_icons.png') no-repeat 0px center;\n}\n.datagrid-row-collapse {\n  background: url('images/datagrid_icons.png') no-repeat -48px center;\n}\n.datagrid-row-expand {\n  background: url('images/datagrid_icons.png') no-repeat -32px center;\n}\n.datagrid-mask-msg {\n  background: #fff url('images/loading.gif') no-repeat scroll 5px center;\n}\n.datagrid-header,\n.datagrid-td-rownumber {\n  background-color: #ffffff;\n}\n.datagrid-cell-rownumber {\n  color: #444;\n}\n.datagrid-resize-proxy {\n  background: #b3b3b3;\n}\n.datagrid-mask {\n  background: #eee;\n}\n.datagrid-mask-msg {\n  border-color: #ddd;\n}\n.datagrid-toolbar,\n.datagrid-pager {\n  background: #fff;\n}\n.datagrid-header,\n.datagrid-toolbar,\n.datagrid-pager,\n.datagrid-footer-inner {\n  border-color: #ddd;\n}\n.datagrid-header td,\n.datagrid-body td,\n.datagrid-footer td {\n  border-color: #ddd;\n}\n.datagrid-htable,\n.datagrid-btable,\n.datagrid-ftable {\n  color: #444;\n  border-collapse: separate;\n}\n.datagrid-row-alt {\n  background: #f5f5f5;\n}\n.datagrid-row-over,\n.datagrid-header td.datagrid-header-over {\n  background: #E6E6E6;\n  color: #444;\n  cursor: default;\n}\n.datagrid-row-selected {\n  background: #CCE6FF;\n  color: #000;\n}\n.datagrid-row-editing .textbox,\n.datagrid-row-editing .textbox-text {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  height: 21px;\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #ffffff;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #ffffff;\n}\n.pagination {\n  zoom: 1;\n}\n.pagination table {\n  float: left;\n  height: 30px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 24px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  padding: 2px;\n  width: 2em;\n  height: auto;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px 0 0;\n  padding: 0;\n  height: 30px;\n  line-height: 30px;\n  font-size: 12px;\n}\n.pagination span {\n  font-size: 12px;\n}\n.pagination-link .l-btn-text {\n  width: 24px;\n  text-align: center;\n  margin: 0;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #ddd;\n}\n.calendar {\n  border-width: 1px;\n  border-style: solid;\n  padding: 1px;\n  overflow: hidden;\n}\n.calendar table {\n  table-layout: fixed;\n  border-collapse: separate;\n  font-size: 12px;\n  width: 100%;\n  height: 100%;\n}\n.calendar table td,\n.calendar table th {\n  font-size: 12px;\n}\n.calendar-noborder {\n  border: 0;\n}\n.calendar-header {\n  position: relative;\n  height: 22px;\n}\n.calendar-title {\n  text-align: center;\n  height: 22px;\n}\n.calendar-title span {\n  position: relative;\n  display: inline-block;\n  top: 2px;\n  padding: 0 3px;\n  height: 18px;\n  line-height: 18px;\n  font-size: 12px;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-prevmonth,\n.calendar-nextmonth,\n.calendar-prevyear,\n.calendar-nextyear {\n  position: absolute;\n  top: 50%;\n  margin-top: -7px;\n  width: 14px;\n  height: 14px;\n  cursor: pointer;\n  font-size: 1px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-prevmonth {\n  left: 20px;\n  background: url('images/calendar_arrows.png') no-repeat -18px -2px;\n}\n.calendar-nextmonth {\n  right: 20px;\n  background: url('images/calendar_arrows.png') no-repeat -34px -2px;\n}\n.calendar-prevyear {\n  left: 3px;\n  background: url('images/calendar_arrows.png') no-repeat -1px -2px;\n}\n.calendar-nextyear {\n  right: 3px;\n  background: url('images/calendar_arrows.png') no-repeat -49px -2px;\n}\n.calendar-body {\n  position: relative;\n}\n.calendar-body th,\n.calendar-body td {\n  text-align: center;\n}\n.calendar-day {\n  border: 0;\n  padding: 1px;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n}\n.calendar-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  cursor: default;\n}\n.calendar-menu {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 180px;\n  height: 150px;\n  padding: 5px;\n  font-size: 12px;\n  display: none;\n  overflow: hidden;\n}\n.calendar-menu-year-inner {\n  text-align: center;\n  padding-bottom: 5px;\n}\n.calendar-menu-year {\n  width: 40px;\n  text-align: center;\n  border-width: 1px;\n  border-style: solid;\n  margin: 0;\n  padding: 2px;\n  font-weight: bold;\n  font-size: 12px;\n}\n.calendar-menu-prev,\n.calendar-menu-next {\n  display: inline-block;\n  width: 21px;\n  height: 21px;\n  vertical-align: top;\n  cursor: pointer;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-menu-prev {\n  margin-right: 10px;\n  background: url('images/calendar_arrows.png') no-repeat 2px 2px;\n}\n.calendar-menu-next {\n  margin-left: 10px;\n  background: url('images/calendar_arrows.png') no-repeat -45px 2px;\n}\n.calendar-menu-month {\n  text-align: center;\n  cursor: pointer;\n  font-weight: bold;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.calendar-body th,\n.calendar-menu-month {\n  color: #919191;\n}\n.calendar-day {\n  color: #444;\n}\n.calendar-sunday {\n  color: #CC2222;\n}\n.calendar-saturday {\n  color: #00ee00;\n}\n.calendar-today {\n  color: #0000ff;\n}\n.calendar-menu-year {\n  border-color: #ddd;\n}\n.calendar {\n  border-color: #ddd;\n}\n.calendar-header {\n  background: #ffffff;\n}\n.calendar-body,\n.calendar-menu {\n  background: #fff;\n}\n.calendar-body th {\n  background: #fff;\n  padding: 2px 0;\n}\n.calendar-hover,\n.calendar-nav-hover,\n.calendar-menu-hover {\n  background-color: #E6E6E6;\n  color: #444;\n}\n.calendar-hover {\n  border: 1px solid #ddd;\n  padding: 0;\n}\n.calendar-selected {\n  background-color: #CCE6FF;\n  color: #000;\n  border: 1px solid #99cdff;\n  padding: 0;\n}\n.datebox-calendar-inner {\n  height: 180px;\n}\n.datebox-button {\n  height: 18px;\n  padding: 2px 5px;\n  text-align: center;\n}\n.datebox-button a {\n  font-size: 12px;\n  font-weight: bold;\n  text-decoration: none;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.datebox-button a:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.datebox-current,\n.datebox-close {\n  float: left;\n}\n.datebox-close {\n  float: right;\n}\n.datebox .combo-arrow {\n  background-image: url('images/datebox_arrow.png');\n  background-position: center center;\n}\n.datebox-button {\n  background-color: #fff;\n}\n.datebox-button a {\n  color: #777;\n}\n.numberbox {\n  border: 1px solid #ddd;\n  margin: 0;\n  padding: 0 2px;\n  vertical-align: middle;\n}\n.textbox {\n  padding: 0;\n}\n.spinner {\n  display: inline-block;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n  vertical-align: middle;\n}\n.spinner .spinner-text {\n  font-size: 12px;\n  border: 0px;\n  margin: 0;\n  padding: 0 2px;\n  vertical-align: baseline;\n}\n.spinner-arrow {\n  background-color: #ffffff;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  outline-style: none;\n}\n.spinner-arrow-hover {\n  background-color: #E6E6E6;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #E6E6E6;\n}\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #ffffff;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n}\n.spinner {\n  border-color: #ddd;\n}\n.progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 0px 0 0 0px;\n  -webkit-border-radius: 0px 0 0 0px;\n  border-radius: 0px 0 0 0px;\n}\n.progressbar {\n  border-color: #ddd;\n}\n.progressbar-text {\n  color: #444;\n  font-size: 12px;\n}\n.progressbar-value .progressbar-text {\n  background-color: #CCE6FF;\n  color: #000;\n}\n.searchbox {\n  display: inline-block;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n  vertical-align: middle;\n}\n.searchbox .searchbox-text {\n  font-size: 12px;\n  border: 0;\n  margin: 0;\n  padding: 0 2px;\n  vertical-align: top;\n}\n.searchbox .searchbox-prompt {\n  font-size: 12px;\n  color: #ccc;\n}\n.searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox {\n  border-color: #ddd;\n  background-color: #fff;\n}\n.searchbox .l-btn-plain {\n  background: #ffffff;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n.slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 0px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 12px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 12px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #ddd;\n  background: #ffffff;\n}\n.slider-rule span {\n  border-color: #ddd;\n}\n.slider-rulelabel span {\n  color: #444;\n}\n.menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-active {\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 12px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  background: #eee;\n  -moz-box-shadow: 2px 2px 3px #ededed;\n  -webkit-box-shadow: 2px 2px 3px #ededed;\n  box-shadow: 2px 2px 3px #ededed;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ddd;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #ffffff;\n  border-color: #ddd;\n  color: #444;\n}\n.menu-content {\n  background: #fff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #ffffff;\n}\n.menu-active {\n  border-color: #ddd;\n  color: #444;\n  background: #E6E6E6;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #444;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #b3b3b3;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ddd;\n  background-color: #E6E6E6;\n  color: #444;\n}\n.s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #b3b3b3;\n  border-width: 0 0 0 1px;\n}\n.messager-body {\n  padding: 10px;\n  overflow: hidden;\n}\n.messager-button {\n  text-align: center;\n  padding-top: 10px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 1px 0;\n  border: 1px solid #ddd;\n}\n.tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 18px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -112px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -112px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -96px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -96px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background:url('images/cyan_folder_close.png') no-repeat center center;\n}\n.tree-folder-open {\n  background:url('images/cyan_folder_open.png') no-repeat center center;\n}\n.tree-file {\n  background:url('images/cyan_folder_close.png') no-repeat center center;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 12px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: middle;\n  white-space: nowrap;\n  padding: 0 2px;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 12px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #ccc;\n  font-size: 12px;\n  height: 14px !important;\n  height: 18px;\n  line-height: 14px;\n  padding: 1px 2px;\n  width: 80px;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #fff;\n  color: #444;\n  border-color: #ddd;\n}\n.tree-node-hover .tree-title{\n  color: #444;\n}\n.tree-node-selected .tree-title {\n  background: #FFEBC0;\n  border: solid 1px #FFC774;\n}\n.validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n.tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.tooltip-content {\n  font-size: 12px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n  _border-color: tomato;\n  _filter: chroma(color=tomato);\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #fff;\n  border-color: #ddd;\n  color: #444;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #ddd;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #fff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #ddd;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #fff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #ddd;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #fff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #ddd;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #fff;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/filebox.css",
    "content": ".filebox .textbox-value {\n  vertical-align: top;\n  position: absolute;\n  top: 0;\n  left: -5000px;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/layout.css",
    "content": ".layout {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  z-index: 0;\n}\n.layout-panel {\n  position: absolute;\n  overflow: hidden;\n}\n.layout-panel-east,\n.layout-panel-west {\n  z-index: 2;\n}\n.layout-panel-north,\n.layout-panel-south {\n  z-index: 3;\n}\n.layout-expand {\n  position: absolute;\n  padding: 0px;\n  font-size: 1px;\n  cursor: pointer;\n  z-index: 1;\n}\n.layout-expand .panel-header,\n.layout-expand .panel-body {\n  background: transparent;\n  filter: none;\n  overflow: hidden;\n}\n.layout-expand .panel-header {\n  border-bottom-width: 0px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  position: absolute;\n  font-size: 1px;\n  display: none;\n  z-index: 5;\n}\n.layout-split-proxy-h {\n  width: 5px;\n  cursor: e-resize;\n}\n.layout-split-proxy-v {\n  height: 5px;\n  cursor: n-resize;\n}\n.layout-mask {\n  position: absolute;\n  background: #fafafa;\n  filter: alpha(opacity=10);\n  opacity: 0.10;\n  z-index: 4;\n}\n.layout-button-up {\n  background: url('images/layout_arrows.png') no-repeat -16px -16px;\n}\n.layout-button-down {\n  background: url('images/layout_arrows.png') no-repeat -16px 0;\n}\n.layout-button-left {\n  background: url('images/layout_arrows.png') no-repeat 0 0;\n}\n.layout-button-right {\n  background: url('images/layout_arrows.png') no-repeat 0 -16px;\n}\n.layout-split-proxy-h,\n.layout-split-proxy-v {\n  background-color: #b3b3b3;\n}\n.layout-split-north {\n  border-bottom: 5px solid #fff;\n}\n.layout-split-south {\n  border-top: 5px solid #fff;\n}\n.layout-split-east {\n  border-left: 5px solid #fff;\n}\n.layout-split-west {\n  border-right: 5px solid #fff;\n}\n.layout-expand {\n  background-color: #ffffff;\n}\n.layout-expand-over {\n  background-color: #ffffff;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/linkbutton.css",
    "content": ".l-btn {\n  text-decoration: none;\n  display: inline-block;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  cursor: pointer;\n  outline: none;\n  text-align: center;\n  vertical-align: middle;\n}\n.l-btn-plain {\n  border: 0;\n  padding: 1px;\n}\n.l-btn-left {\n  display: inline-block;\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n}\n.l-btn-text {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  line-height: 24px;\n  font-size: 12px;\n  padding: 0;\n  margin: 0 4px;\n}\n.l-btn-icon {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  font-size: 1px;\n}\n.l-btn span span .l-btn-empty {\n  display: inline-block;\n  margin: 0;\n  width: 16px;\n  height: 24px;\n  font-size: 1px;\n  vertical-align: top;\n}\n.l-btn span .l-btn-icon-left {\n  padding: 0 0 0 20px;\n  background-position: left center;\n}\n.l-btn span .l-btn-icon-right {\n  padding: 0 20px 0 0;\n  background-position: right center;\n}\n.l-btn-icon-left .l-btn-text {\n  margin: 0 4px 0 24px;\n}\n.l-btn-icon-left .l-btn-icon {\n  left: 4px;\n}\n.l-btn-icon-right .l-btn-text {\n  margin: 0 24px 0 4px;\n}\n.l-btn-icon-right .l-btn-icon {\n  right: 4px;\n}\n.l-btn-icon-top .l-btn-text {\n  margin: 20px 4px 0 4px;\n}\n.l-btn-icon-top .l-btn-icon {\n  top: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-icon-bottom .l-btn-text {\n  margin: 0 4px 20px 4px;\n}\n.l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 4px;\n  left: 50%;\n  margin: 0 0 0 -8px;\n}\n.l-btn-left .l-btn-empty {\n  margin: 0 4px;\n  width: 16px;\n}\n.l-btn-plain:hover {\n  padding: 0;\n}\n.l-btn-focus {\n  outline: #0000FF dotted thin;\n}\n.l-btn-large .l-btn-text {\n  line-height: 40px;\n}\n.l-btn-large .l-btn-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n  margin-top: -16px;\n}\n.l-btn-large .l-btn-icon-left .l-btn-text {\n  margin-left: 40px;\n}\n.l-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-text {\n  margin-top: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-top .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 36px;\n  line-height: 24px;\n  min-width: 32px;\n}\n.l-btn-large .l-btn-icon-bottom .l-btn-icon {\n  margin: 0 0 0 -16px;\n}\n.l-btn-large .l-btn-left .l-btn-empty {\n  margin: 0 4px;\n  width: 32px;\n}\n.l-btn {\n  color: #777;\n  background: #ffffff;\n  background-repeat: repeat-x;\n  border: 1px solid #dddddd;\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.l-btn:hover {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.l-btn-plain {\n  background: transparent;\n  border: 0;\n  filter: none;\n}\n.l-btn-plain:hover {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.l-btn-disabled,\n.l-btn-disabled:hover {\n  opacity: 0.5;\n  cursor: default;\n  background: #ffffff;\n  color: #777;\n  background: -webkit-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -moz-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: -o-linear-gradient(top,#ffffff 0,#ffffff 100%);\n  background: linear-gradient(to bottom,#ffffff 0,#ffffff 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff,endColorstr=#ffffff,GradientType=0);\n}\n.l-btn-disabled .l-btn-text,\n.l-btn-disabled .l-btn-icon {\n  filter: alpha(opacity=50);\n}\n.l-btn-plain-disabled,\n.l-btn-plain-disabled:hover {\n  background: transparent;\n  filter: alpha(opacity=50);\n}\n.l-btn-selected,\n.l-btn-selected:hover {\n  background: #ddd;\n  filter: none;\n}\n.l-btn-plain-selected,\n.l-btn-plain-selected:hover {\n  background: #ddd;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/menu.css",
    "content": ".menu {\n  position: absolute;\n  margin: 0;\n  padding: 2px;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n}\n.menu-item {\n  position: relative;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: pointer;\n  border-width: 1px;\n  border-style: solid;\n}\n.menu-text {\n  height: 20px;\n  line-height: 20px;\n  float: left;\n  padding-left: 28px;\n}\n.menu-icon {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 2px;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-rightarrow {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.menu-line {\n  position: absolute;\n  left: 26px;\n  top: 0;\n  height: 2000px;\n  font-size: 1px;\n}\n.menu-sep {\n  margin: 3px 0px 3px 25px;\n  font-size: 1px;\n}\n.menu-active {\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.menu-item-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n  cursor: default;\n}\n.menu-text,\n.menu-text span {\n  font-size: 12px;\n}\n.menu-shadow {\n  position: absolute;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  background: #eee;\n  -moz-box-shadow: 2px 2px 3px #ededed;\n  -webkit-box-shadow: 2px 2px 3px #ededed;\n  box-shadow: 2px 2px 3px #ededed;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.menu-rightarrow {\n  background: url('images/menu_arrows.png') no-repeat -32px center;\n}\n.menu-line {\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n}\n.menu-sep {\n  border-top: 1px solid #ddd;\n  border-bottom: 1px solid #fff;\n}\n.menu {\n  background-color: #ffffff;\n  border-color: #ddd;\n  color: #444;\n}\n.menu-content {\n  background: #fff;\n}\n.menu-item {\n  border-color: transparent;\n  _border-color: #ffffff;\n}\n.menu-active {\n  border-color: #ddd;\n  color: #444;\n  background: #E6E6E6;\n}\n.menu-active-disabled {\n  border-color: transparent;\n  background: transparent;\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/menubutton.css",
    "content": ".m-btn-downarrow,\n.s-btn-downarrow {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  font-size: 1px;\n  right: 0;\n  top: 50%;\n  margin-top: -8px;\n}\n.m-btn-active,\n.s-btn-active {\n  background: #E6E6E6;\n  color: #444;\n  border: 1px solid #ddd;\n  filter: none;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  background: transparent;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.m-btn .l-btn-left .l-btn-text {\n  margin-right: 20px;\n}\n.m-btn .l-btn-icon-right .l-btn-text {\n  margin-right: 40px;\n}\n.m-btn .l-btn-icon-right .l-btn-icon {\n  right: 20px;\n}\n.m-btn .l-btn-icon-top .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 14px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-text {\n  margin-right: 4px;\n  margin-bottom: 34px;\n}\n.m-btn .l-btn-icon-bottom .l-btn-icon {\n  top: auto;\n  bottom: 20px;\n}\n.m-btn .l-btn-icon-top .m-btn-downarrow,\n.m-btn .l-btn-icon-bottom .m-btn-downarrow {\n  top: auto;\n  bottom: 0px;\n  left: 50%;\n  margin-left: -8px;\n}\n.m-btn-line {\n  display: inline-block;\n  position: absolute;\n  font-size: 1px;\n  display: none;\n}\n.m-btn .l-btn-left .m-btn-line {\n  right: 0;\n  width: 16px;\n  height: 500px;\n  border-style: solid;\n  border-color: #b3b3b3;\n  border-width: 0 0 0 1px;\n}\n.m-btn .l-btn-icon-top .m-btn-line,\n.m-btn .l-btn-icon-bottom .m-btn-line {\n  left: 0;\n  bottom: 0;\n  width: 500px;\n  height: 16px;\n  border-width: 1px 0 0 0;\n}\n.m-btn-large .l-btn-icon-right .l-btn-text {\n  margin-right: 56px;\n}\n.m-btn-large .l-btn-icon-bottom .l-btn-text {\n  margin-bottom: 50px;\n}\n.m-btn-downarrow,\n.s-btn-downarrow {\n  background: url('images/menu_arrows.png') no-repeat 0 center;\n}\n.m-btn-plain-active,\n.s-btn-plain-active {\n  border-color: #ddd;\n  background-color: #E6E6E6;\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/messager.css",
    "content": ".messager-body {\n  padding: 10px;\n  overflow: hidden;\n}\n.messager-button {\n  text-align: center;\n  padding-top: 10px;\n}\n.messager-button .l-btn {\n  width: 70px;\n}\n.messager-icon {\n  float: left;\n  width: 32px;\n  height: 32px;\n  margin: 0 10px 10px 0;\n}\n.messager-error {\n  background: url('images/messager_icons.png') no-repeat scroll -64px 0;\n}\n.messager-info {\n  background: url('images/messager_icons.png') no-repeat scroll 0 0;\n}\n.messager-question {\n  background: url('images/messager_icons.png') no-repeat scroll -32px 0;\n}\n.messager-warning {\n  background: url('images/messager_icons.png') no-repeat scroll -96px 0;\n}\n.messager-progress {\n  padding: 10px;\n}\n.messager-p-msg {\n  margin-bottom: 5px;\n}\n.messager-body .messager-input {\n  width: 100%;\n  padding: 1px 0;\n  border: 1px solid #ddd;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/numberbox.css",
    "content": ".numberbox {\n  border: 1px solid #ddd;\n  margin: 0;\n  padding: 0 2px;\n  vertical-align: middle;\n}\n.textbox {\n  padding: 0;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/pagination.css",
    "content": ".pagination {\n  zoom: 1;\n}\n.pagination table {\n  float: left;\n  height: 20px;\n}\n.pagination td {\n  border: 0;\n}\n.pagination-btn-separator {\n  float: left;\n  height: 14px;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #fff;\n  margin: 3px 1px;\n}\n.pagination .pagination-num {\n  border-width: 1px;\n  border-style: solid;\n  margin: 0 2px;\n  font-size:10px;\n  padding: 2px;\n  text-align:center;\n  width: 30px;                                                                                                                                                                                                                                                                                                                                                                                         ;\n  height: 16px;\n}\n.pagination-page-list {\n  margin: 0px 6px;\n  padding: 1px 2px;\n  width: auto;\n  height: auto;\n  border-width: 1px;\n  border-style: solid;\n}\n.pagination-info {\n  float: right;\n  margin: 0 6px 0 0;\n  padding: 0;\n  height: 20px;\n  line-height: 20px;\n  font-size: 10px;\n}\n.pagination span {\n  font-size: 10px;\n}\n.pagination-link .l-btn-text {\n  width: 14px;\n  text-align: center;\n  margin: 0;\n}\n.pagination-first {\n  background: url('images/pagination_icons.png') no-repeat 0 center;\n}\n.pagination-prev {\n  background: url('images/pagination_icons.png') no-repeat -16px center;\n}\n.pagination-next {\n  background: url('images/pagination_icons.png') no-repeat -32px center;\n}\n.pagination-last {\n  background: url('images/pagination_icons.png') no-repeat -48px center;\n}\n.pagination-load {\n  background: url('images/pagination_icons.png') no-repeat -64px center;\n}\n.pagination-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.pagination-page-list,\n.pagination .pagination-num {\n  border-color: #ddd;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/panel.css",
    "content": ".panel {\n  overflow: hidden;\n  text-align: left;\n  margin: 0;\n  border: 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.panel-header,\n.panel-body {\n  border-width: 1px;\n  border-style: solid;\n}\n.panel-header {\n  padding: 5px;\n  position: relative;\n}\n.panel-title {\n  background: url('images/blank.gif') no-repeat;\n}\n.panel-header-noborder {\n  border-width: 0 0 1px 0;\n}\n.panel-body {\n  overflow: auto;\n  border-top-width: 0;\n  padding: 0;\n}\n.panel-body-noheader {\n  border-top-width: 1px;\n}\n.panel-body-noborder {\n  border-width: 0px;\n}\n.panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.panel-with-icon {\n  padding-left: 18px;\n}\n.panel-icon,\n.panel-tool {\n  position: absolute;\n  top: 50%;\n  margin-top: -8px;\n  height: 16px;\n  overflow: hidden;\n}\n.panel-icon {\n  left: 5px;\n  width: 16px;\n}\n.panel-tool {\n  right: 5px;\n  width: auto;\n}\n.panel-tool a {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  margin: 0 0 0 2px;\n  vertical-align: top;\n}\n.panel-tool a:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n  background-color: #E6E6E6;\n  -moz-border-radius: -2px -2px -2px -2px;\n  -webkit-border-radius: -2px -2px -2px -2px;\n  border-radius: -2px -2px -2px -2px;\n}\n.panel-loading {\n  padding: 11px 0px 10px 30px;\n}\n.panel-noscroll {\n  overflow: hidden;\n}\n.panel-fit,\n.panel-fit body {\n  height: 100%;\n  margin: 0;\n  padding: 0;\n  border: 0;\n  overflow: hidden;\n}\n.panel-loading {\n  background: url('images/loading.gif') no-repeat 10px 10px;\n}\n.panel-tool-close {\n  background: url('images/panel_tools.png') no-repeat -16px 0px;\n}\n.panel-tool-min {\n  background: url('images/panel_tools.png') no-repeat 0px 0px;\n}\n.panel-tool-max {\n  background: url('images/panel_tools.png') no-repeat 0px -16px;\n}\n.panel-tool-restore {\n  background: url('images/panel_tools.png') no-repeat -16px -16px;\n}\n.panel-tool-collapse {\n  background: url('images/panel_tools.png') no-repeat -32px 0;\n}\n.panel-tool-expand {\n  background: url('images/panel_tools.png') no-repeat -32px -16px;\n}\n.panel-header,\n.panel-body {\n  border-color: #ddd;\n}\n.panel-header {\n  background-color: #ffffff;\n}\n.panel-body {\n  background-color: #fff;\n  color: #444;\n  font-size: 12px;\n}\n.panel-title {\n  font-size: 12px;\n  font-weight: bold;\n  color: #777;\n  height: 16px;\n  line-height: 16px;\n}\n.panel-footer {\n  border: 1px solid #ddd;\n  overflow: hidden;\n  background: #fff;\n}\n.panel-footer-noborder {\n  border-width: 1px 0 0 0;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/progressbar.css",
    "content": ".progressbar {\n  border-width: 1px;\n  border-style: solid;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n  overflow: hidden;\n  position: relative;\n}\n.progressbar-text {\n  text-align: center;\n  position: absolute;\n}\n.progressbar-value {\n  position: relative;\n  overflow: hidden;\n  width: 0;\n  -moz-border-radius: 0px 0 0 0px;\n  -webkit-border-radius: 0px 0 0 0px;\n  border-radius: 0px 0 0 0px;\n}\n.progressbar {\n  border-color: #ddd;\n}\n.progressbar-text {\n  color: #444;\n  font-size: 12px;\n}\n.progressbar-value .progressbar-text {\n  background-color: #CCE6FF;\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/propertygrid.css",
    "content": ".propertygrid .datagrid-view1 .datagrid-body td {\n  padding-bottom: 1px;\n  border-width: 0 1px 0 0;\n}\n.propertygrid .datagrid-group {\n  height: 21px;\n  overflow: hidden;\n  border-width: 0 0 1px 0;\n  border-style: solid;\n}\n.propertygrid .datagrid-group span {\n  font-weight: bold;\n}\n.propertygrid .datagrid-view1 .datagrid-body td {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-view1 .datagrid-group {\n  border-color: #ffffff;\n}\n.propertygrid .datagrid-view2 .datagrid-group {\n  border-color: #ddd;\n}\n.propertygrid .datagrid-group,\n.propertygrid .datagrid-view1 .datagrid-body,\n.propertygrid .datagrid-view1 .datagrid-row-over,\n.propertygrid .datagrid-view1 .datagrid-row-selected {\n  background: #ffffff;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/searchbox.css",
    "content": ".searchbox {\n  display: inline-block;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n  vertical-align: middle;\n}\n.searchbox .searchbox-text {\n  font-size: 12px;\n  border: 0;\n  margin: 0;\n  padding: 0 2px;\n  vertical-align: top;\n}\n.searchbox .searchbox-prompt {\n  font-size: 12px;\n  color: #ccc;\n}\n.searchbox-button {\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  display: inline-block;\n  vertical-align: top;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.searchbox-button-hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.searchbox .l-btn-plain {\n  border: 0;\n  padding: 0;\n  vertical-align: top;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .l-btn-plain:hover {\n  border: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox a.m-btn-plain-active {\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .m-btn-active {\n  border-width: 0 1px 0 0;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.searchbox .textbox-button-right {\n  border-width: 0 0 0 1px;\n}\n.searchbox .textbox-button-left {\n  border-width: 0 1px 0 0;\n}\n.searchbox-button {\n  background: url('images/searchbox_button.png') no-repeat center center;\n}\n.searchbox {\n  border-color: #ddd;\n  background-color: #fff;\n}\n.searchbox .l-btn-plain {\n  background: #ffffff;\n}\n.searchbox .l-btn-plain-disabled,\n.searchbox .l-btn-plain-disabled:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/slider.css",
    "content": ".slider-disabled {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.slider-h {\n  height: 22px;\n}\n.slider-v {\n  width: 22px;\n}\n.slider-inner {\n  position: relative;\n  height: 6px;\n  top: 7px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 0px;\n}\n.slider-handle {\n  position: absolute;\n  display: block;\n  outline: none;\n  width: 20px;\n  height: 20px;\n  top: 50%;\n  margin-top: -10px;\n  margin-left: -10px;\n}\n.slider-tip {\n  position: absolute;\n  display: inline-block;\n  line-height: 12px;\n  font-size: 12px;\n  white-space: nowrap;\n  top: -22px;\n}\n.slider-rule {\n  position: relative;\n  top: 15px;\n}\n.slider-rule span {\n  position: absolute;\n  display: inline-block;\n  font-size: 0;\n  height: 5px;\n  border-width: 0 0 0 1px;\n  border-style: solid;\n}\n.slider-rulelabel {\n  position: relative;\n  top: 20px;\n}\n.slider-rulelabel span {\n  position: absolute;\n  display: inline-block;\n  font-size: 12px;\n}\n.slider-v .slider-inner {\n  width: 6px;\n  left: 7px;\n  top: 0;\n  float: left;\n}\n.slider-v .slider-handle {\n  left: 50%;\n  margin-top: -10px;\n}\n.slider-v .slider-tip {\n  left: -10px;\n  margin-top: -6px;\n}\n.slider-v .slider-rule {\n  float: left;\n  top: 0;\n  left: 16px;\n}\n.slider-v .slider-rule span {\n  width: 5px;\n  height: 'auto';\n  border-left: 0;\n  border-width: 1px 0 0 0;\n  border-style: solid;\n}\n.slider-v .slider-rulelabel {\n  float: left;\n  top: 0;\n  left: 23px;\n}\n.slider-handle {\n  background: url('images/slider_handle.png') no-repeat;\n}\n.slider-inner {\n  border-color: #ddd;\n  background: #ffffff;\n}\n.slider-rule span {\n  border-color: #ddd;\n}\n.slider-rulelabel span {\n  color: #444;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/spinner.css",
    "content": ".spinner {\n  display: inline-block;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  border-width: 1px;\n  border-style: solid;\n  overflow: hidden;\n  vertical-align: middle;\n}\n.spinner .spinner-text {\n  font-size: 12px;\n  border: 0px;\n  margin: 0;\n  padding: 0 2px;\n  vertical-align: baseline;\n}\n.spinner-arrow {\n  background-color: #ffffff;\n  display: inline-block;\n  overflow: hidden;\n  vertical-align: top;\n  margin: 0;\n  padding: 0;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  width: 18px;\n}\n.spinner-arrow-up,\n.spinner-arrow-down {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  display: block;\n  font-size: 1px;\n  width: 18px;\n  height: 10px;\n  width: 100%;\n  height: 50%;\n  outline-style: none;\n}\n.spinner-arrow-hover {\n  background-color: #E6E6E6;\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.spinner-arrow-up:hover,\n.spinner-arrow-down:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n  background-color: #E6E6E6;\n}\n.textbox-icon-disabled .spinner-arrow-up:hover,\n.textbox-icon-disabled .spinner-arrow-down:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  background-color: #ffffff;\n  cursor: default;\n}\n.spinner .textbox-icon-disabled {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.spinner-arrow-up {\n  background: url('images/spinner_arrows.png') no-repeat 1px center;\n}\n.spinner-arrow-down {\n  background: url('images/spinner_arrows.png') no-repeat -15px center;\n}\n.spinner {\n  border-color: #ddd;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/splitbutton.css",
    "content": ".s-btn:hover .m-btn-line,\n.s-btn-active .m-btn-line,\n.s-btn-plain-active .m-btn-line {\n  display: inline-block;\n}\n.l-btn:hover .s-btn-downarrow,\n.s-btn-active .s-btn-downarrow,\n.s-btn-plain-active .s-btn-downarrow {\n  border-style: solid;\n  border-color: #b3b3b3;\n  border-width: 0 0 0 1px;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/tabs.css",
    "content": ".tabs-container {\n    overflow: hidden;\n    border-radius: 0px;\n}\n\n.tabs-header {\n    border-width: 1px;\n    border-style: solid;\n    border-bottom-width: 0;\n    position: relative;\n    padding: 0;\n    padding-top: 2px;\n    overflow: hidden;\n}\n\n.tabs-header-plain {\n    border: 0;\n    background: transparent;\n}\n\n.tabs-scroller-left,\n.tabs-scroller-right {\n    position: absolute;\n    top: auto;\n    bottom: 0;\n    width: 18px;\n    font-size: 1px;\n    display: none;\n    cursor: pointer;\n    border-width: 1px;\n    border-style: solid;\n}\n\n.tabs-scroller-left {\n    left: 0;\n}\n\n.tabs-scroller-right {\n    right: 0;\n}\n\n.tabs-tool {\n    position: absolute;\n    bottom: 0;\n    padding: 1px;\n    overflow: hidden;\n    border-width: 1px;\n    border-style: solid;\n}\n\n.tabs-header-plain .tabs-tool {\n    padding: 0 1px;\n}\n\n.tabs-wrap {\n    position: relative;\n    left: 0;\n    overflow: hidden;\n    width: 100%;\n    margin: 0;\n    padding: 0;\n}\n\n.tabs-scrolling {\n    margin-left: 18px;\n    margin-right: 18px;\n}\n\n.tabs-disabled {\n    opacity: 0.3;\n    filter: alpha(opacity=30);\n}\n\n.tabs {\n    list-style-type: none;\n    height: 26px;\n    margin: 0px;\n    padding: 0px;\n    padding-left: 4px;\n    width: 100%;\n    border-style: solid;\n    border-width: 0 0 1px 0;\n}\n\n.tabs li {\n    float: left;\n    display: inline-block;\n    margin: 0 4px -1px 0;\n    padding: 0;\n    position: relative;\n    border: 0;\n}\n\n.tabs li a.tabs-inner {\n    display: inline-block;\n    text-decoration: none;\n    margin: 0;\n    padding: 0 10px;\n    height: 25px;\n    line-height: 25px;\n    text-align: center;\n    white-space: nowrap;\n    /*border-width: 1px;*/\n    /*border-style: solid;*/\n    -moz-border-radius: 0px 0px 0 0;\n    -webkit-border-radius: 0px 0px 0 0;\n    border-radius: 0px 0px 0 0;\n}\n\n.tabs li.tabs-selected a.tabs-inner {\n    font-weight: bold;\n    outline: none;\n}\n\n.tabs li.tabs-selected a:hover.tabs-inner {\n    cursor: default;\n    pointer: default;\n}\n\n.tabs li a.tabs-close,\n.tabs-p-tool {\n    position: absolute;\n    font-size: 1px;\n    display: block;\n    height: 12px;\n    padding: 0;\n    top: 50%;\n    margin-top: -6px;\n    overflow: hidden;\n}\n\n.tabs li a.tabs-close {\n    width: 12px;\n    right: 5px;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n\n.tabs-p-tool {\n    right: 16px;\n}\n\n.tabs-p-tool a {\n    display: inline-block;\n    font-size: 1px;\n    width: 12px;\n    height: 12px;\n    margin: 0;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n\n.tabs li a:hover.tabs-close,\n.tabs-p-tool a:hover {\n    opacity: 1;\n    filter: alpha(opacity=100);\n    cursor: hand;\n    cursor: pointer;\n}\n\n.tabs-with-icon {\n    padding-left: 18px;\n}\n\n.tabs-icon {\n    position: absolute;\n    width: 16px;\n    height: 16px;\n    left: 10px;\n    top: 50%;\n    margin-top: -8px;\n}\n\n.tabs-title {\n    font-size: 12px;\n}\n\n.tabs-closable {\n    padding-right: 8px;\n}\n\n.tabs-panels {\n    margin: 0px;\n    padding: 0px;\n    overflow: hidden;\n    border: 1px solid #d4d4d4;\n    border-width:0 1px 1px 1px;\n}\n\n.tabs-header-bottom {\n    border-width: 0 1px 1px 1px;\n    padding: 0 0 2px 0;\n}\n\n.tabs-header-bottom .tabs {\n    border-width: 1px 0 0 0;\n}\n\n.tabs-header-bottom .tabs li {\n    margin: -1px 4px 0 0;\n}\n\n.tabs-header-bottom .tabs li a.tabs-inner {\n    -moz-border-radius: 0 0 0px 0px;\n    -webkit-border-radius: 0 0 0px 0px;\n    border-radius: 0 0 0px 0px;\n}\n\n.tabs-header-bottom .tabs-tool {\n    top: 0;\n}\n\n.tabs-header-bottom .tabs-scroller-left,\n.tabs-header-bottom .tabs-scroller-right {\n    top: 0;\n    bottom: auto;\n}\n\n.tabs-panels-top {\n    border-width: 1px 1px 0 1px;\n}\n\n.tabs-header-left {\n    float: left;\n    border-width: 1px 0 1px 1px;\n    padding: 0;\n}\n\n.tabs-header-right {\n    float: right;\n    border-width: 1px 1px 1px 0;\n    padding: 0;\n}\n\n.tabs-header-left .tabs-wrap,\n.tabs-header-right .tabs-wrap {\n    height: 100%;\n}\n\n.tabs-header-left .tabs {\n    height: 100%;\n    padding: 4px 0 0 4px;\n    border-width: 0 1px 0 0;\n}\n\n.tabs-header-right .tabs {\n    height: 100%;\n    padding: 4px 4px 0 0;\n    border-width: 0 0 0 1px;\n}\n\n.tabs-header-left .tabs li,\n.tabs-header-right .tabs li {\n    display: block;\n    width: 100%;\n    position: relative;\n}\n\n.tabs-header-left .tabs li {\n    left: auto;\n    right: 0;\n    margin: 0 -1px 4px 0;\n    float: right;\n}\n\n.tabs-header-right .tabs li {\n    left: 0;\n    right: auto;\n    margin: 0 0 4px -1px;\n    float: left;\n}\n\n.tabs-header-left .tabs li a.tabs-inner {\n    display: block;\n    text-align: left;\n    -moz-border-radius: 0px 0 0 0px;\n    -webkit-border-radius: 0px 0 0 0px;\n    border-radius: 0px 0 0 0px;\n}\n\n.tabs-header-right .tabs li a.tabs-inner {\n    display: block;\n    text-align: left;\n    -moz-border-radius: 0 0px 0px 0;\n    -webkit-border-radius: 0 0px 0px 0;\n    border-radius: 0 0px 0px 0;\n}\n\n.tabs-panels-right {\n    float: right;\n    border-width: 1px 1px 1px 0;\n}\n\n.tabs-panels-left {\n    float: left;\n    border-width: 1px 0 1px 1px;\n}\n\n.tabs-header-noborder,\n.tabs-panels-noborder {\n    border: 0px;\n}\n\n.tabs-header-plain {\n    border: 0px;\n    background: transparent;\n}\n\n.tabs-scroller-left {\n    background: #ffffff url('images/tabs_icons.png') no-repeat 1px center;\n}\n\n.tabs-scroller-right {\n    background: #ffffff url('images/tabs_icons.png') no-repeat -15px center;\n}\n\n.tabs li a.tabs-close {\n    background: url('images/tabs_icons.png') no-repeat -34px center;\n}\n\n.tabs li a.tabs-inner:hover {\n    background: #fff;\n    color: #444;\n    filter: none;\n    border-buttom:none;\n}\n\n.tabs li.tabs-selected a.tabs-inner {\n    /*background-color: #428bca;*/\n    color: #43BDC1;\n    font-weight:900;\n    border: 0px solid #E8E7E7;\n    border-bottom: solid 1px #000;\n}\n\n.tabs li a.tabs-inner {\n    border: none;\n    /*color: #777;*/\n    /*background-color: #E8E7E7;*/\n    border-bottom: 1px solid #E8E7E7;\n}\n.tabs-header,\n.tabs-tool {\n    background-color: #ffffff;\n}\n\n.tabs-header-plain {\n    background: transparent;\n}\n\n.tabs-header,\n.tabs-scroller-left,\n.tabs-scroller-right,\n.tabs-tool,\n.tabs,\n.tabs-panels,\n.tabs li a.tabs-inner,\n.tabs li.tabs-selected a.tabs-inner,\n.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner,\n.tabs-header-left .tabs li.tabs-selected a.tabs-inner,\n.tabs-header-right .tabs li.tabs-selected a.tabs-inner {\n    border-color: #d4d4d4;\n}\n\n.tabs-header {\n    margin-bottom: 0px;\n}\n\n.tabs-p-tool a:hover,\n.tabs li a:hover.tabs-close,\n.tabs-scroller-over {\n    background-color: #E6E6E6;\n}\n\n.tabs li.tabs-selected a.tabs-inner {\n    /*border-bottom: 1px solid #fff;*/\n    /*border-top-left-radius: 5px;*/\n    /*border-top-right-radius: 5px;*/\n}\n\n.tabs-header-bottom .tabs li.tabs-selected a.tabs-inner {\n    /*border-top: 1px solid #fff;*/\n}\n\n.tabs-header-left .tabs li.tabs-selected a.tabs-inner {\n    /*border-right: 1px solid #fff;*/\n}\n\n.tabs-header-right .tabs li.tabs-selected a.tabs-inner {\n    /*border-left: 1px solid #fff;*/\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/textbox.css",
    "content": ".textbox {\n  position: relative;\n  border: 1px solid #ddd;\n  background-color: #fff;\n  vertical-align: middle;\n  display: inline-block;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 0;\n  padding: 0;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.textbox .textbox-text {\n  font-size: 12px;\n  border: 0;\n  margin: 0;\n  padding: 4px;\n  white-space: normal;\n  vertical-align: top;\n  outline-style: none;\n  resize: none;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.textbox .textbox-prompt {\n  font-size: 12px;\n  color: #aaa;\n}\n.textbox-button,\n.textbox-button:hover {\n  position: absolute;\n  top: 0;\n  padding: 0;\n  vertical-align: top;\n  -moz-border-radius: 0 0 0 0;\n  -webkit-border-radius: 0 0 0 0;\n  border-radius: 0 0 0 0;\n}\n.textbox-button-right,\n.textbox-button-right:hover {\n  border-width: 0 0 0 1px;\n}\n.textbox-button-left,\n.textbox-button-left:hover {\n  border-width: 0 1px 0 0;\n}\n.textbox-addon {\n  position: absolute;\n  top: 0;\n}\n.textbox-icon {\n  display: inline-block;\n  width: 18px;\n  height: 20px;\n  overflow: hidden;\n  vertical-align: top;\n  background-position: center center;\n  cursor: pointer;\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n  text-decoration: none;\n  outline-style: none;\n}\n.textbox-icon-disabled,\n.textbox-icon-readonly {\n  cursor: default;\n}\n.textbox-icon:hover {\n  opacity: 1.0;\n  filter: alpha(opacity=100);\n}\n.textbox-icon-disabled:hover {\n  opacity: 0.6;\n  filter: alpha(opacity=60);\n}\n.textbox-focused {\n  -moz-box-shadow: 0 0 3px 0 #ddd;\n  -webkit-box-shadow: 0 0 3px 0 #ddd;\n  box-shadow: 0 0 3px 0 #ddd;\n}\n.textbox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/tooltip.css",
    "content": ".tooltip {\n  position: absolute;\n  display: none;\n  z-index: 9900000;\n  outline: none;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n  border-radius: 5px;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.tooltip-content {\n  font-size: 12px;\n}\n.tooltip-arrow-outer,\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  border-style: solid;\n  border-width: 6px;\n  border-color: transparent;\n  _border-color: tomato;\n  _filter: chroma(color=tomato);\n}\n.tooltip-right .tooltip-arrow-outer {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -13px;\n}\n.tooltip-right .tooltip-arrow {\n  left: 0;\n  top: 50%;\n  margin: -6px 0 0 -12px;\n}\n.tooltip-left .tooltip-arrow-outer {\n  right: 0;\n  top: 50%;\n  margin: -6px -13px 0 0;\n}\n.tooltip-left .tooltip-arrow {\n  right: 0;\n  top: 50%;\n  margin: -6px -12px 0 0;\n}\n.tooltip-top .tooltip-arrow-outer {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -13px -6px;\n}\n.tooltip-top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin: 0 0 -12px -6px;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  top: 0;\n  left: 50%;\n  margin: -13px 0 0 -6px;\n}\n.tooltip-bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin: -12px 0 0 -6px;\n}\n.tooltip {\n  background-color: #fff;\n  border-color: #ddd;\n  color: #444;\n}\n.tooltip-right .tooltip-arrow-outer {\n  border-right-color: #ddd;\n}\n.tooltip-right .tooltip-arrow {\n  border-right-color: #fff;\n}\n.tooltip-left .tooltip-arrow-outer {\n  border-left-color: #ddd;\n}\n.tooltip-left .tooltip-arrow {\n  border-left-color: #fff;\n}\n.tooltip-top .tooltip-arrow-outer {\n  border-top-color: #ddd;\n}\n.tooltip-top .tooltip-arrow {\n  border-top-color: #fff;\n}\n.tooltip-bottom .tooltip-arrow-outer {\n  border-bottom-color: #ddd;\n}\n.tooltip-bottom .tooltip-arrow {\n  border-bottom-color: #fff;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/tree.css",
    "content": ".tree {\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n}\n.tree li {\n  white-space: nowrap;\n}\n.tree li ul {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n.tree-node {\n  height: 18px;\n  white-space: nowrap;\n  cursor: pointer;\n}\n.tree-hit {\n  cursor: pointer;\n}\n.tree-expanded,\n.tree-collapsed,\n.tree-folder,\n.tree-file,\n.tree-checkbox,\n.tree-indent {\n  display: inline-block;\n  width: 16px;\n  height: 18px;\n  vertical-align: top;\n  overflow: hidden;\n}\n.tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -18px 0px;\n}\n.tree-expanded-hover {\n  background: url('images/tree_icons.png') no-repeat -50px 0px;\n}\n.tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat 0px 0px;\n}\n.tree-collapsed-hover {\n  background: url('images/tree_icons.png') no-repeat -32px 0px;\n}\n.tree-lines .tree-expanded,\n.tree-lines .tree-root-first .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -144px 0;\n}\n.tree-lines .tree-collapsed,\n.tree-lines .tree-root-first .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -128px 0;\n}\n.tree-lines .tree-node-last .tree-expanded,\n.tree-lines .tree-root-one .tree-expanded {\n  background: url('images/tree_icons.png') no-repeat -80px 0;\n}\n.tree-lines .tree-node-last .tree-collapsed,\n.tree-lines .tree-root-one .tree-collapsed {\n  background: url('images/tree_icons.png') no-repeat -64px 0;\n}\n.tree-line {\n  background: url('images/tree_icons.png') no-repeat -176px 0;\n}\n.tree-join {\n  background: url('images/tree_icons.png') no-repeat -192px 0;\n}\n.tree-joinbottom {\n  background: url('images/tree_icons.png') no-repeat -160px 0;\n}\n.tree-folder {\n  background: url('images/tree_icons.png') no-repeat -208px 0;\n}\n.tree-folder-open {\n  background: url('images/tree_icons.png') no-repeat -224px 0;\n}\n.tree-file {\n  background: url('images/tree_icons.png') no-repeat -240px 0;\n}\n.tree-loading {\n  background: url('images/loading.gif') no-repeat center center;\n}\n.tree-checkbox0 {\n  background: url('images/tree_icons.png') no-repeat -208px -18px;\n}\n.tree-checkbox1 {\n  background: url('images/tree_icons.png') no-repeat -224px -18px;\n}\n.tree-checkbox2 {\n  background: url('images/tree_icons.png') no-repeat -240px -18px;\n}\n.tree-title {\n  font-size: 12px;\n  display: inline-block;\n  text-decoration: none;\n  vertical-align: top;\n  white-space: nowrap;\n  padding: 0 2px;\n  height: 18px;\n  line-height: 18px;\n}\n.tree-node-proxy {\n  font-size: 12px;\n  line-height: 20px;\n  padding: 0 2px 0 20px;\n  border-width: 1px;\n  border-style: solid;\n  z-index: 9900000;\n}\n.tree-dnd-icon {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 18px;\n  left: 2px;\n  top: 50%;\n  margin-top: -9px;\n}\n.tree-dnd-yes {\n  background: url('images/tree_icons.png') no-repeat -256px 0;\n}\n.tree-dnd-no {\n  background: url('images/tree_icons.png') no-repeat -256px -18px;\n}\n.tree-node-top {\n  border-top: 1px dotted red;\n}\n.tree-node-bottom {\n  border-bottom: 1px dotted red;\n}\n.tree-node-append .tree-title {\n  border: 1px dotted red;\n}\n.tree-editor {\n  border: 1px solid #ccc;\n  font-size: 12px;\n  height: 14px !important;\n  height: 18px;\n  line-height: 14px;\n  padding: 1px 2px;\n  width: 80px;\n  position: absolute;\n  top: 0;\n}\n.tree-node-proxy {\n  background-color: #fff;\n  color: #444;\n  border-color: #ddd;\n}\n.tree-node-hover {\n  background: #E6E6E6;\n  color: #444;\n}\n.tree-node-selected {\n  background: #CCE6FF;\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/validatebox.css",
    "content": ".validatebox-invalid {\n  border-color: #ffa8a8;\n  background-color: #fff3f3;\n  color: #000;\n}\n"
  },
  {
    "path": "src/main/webapp/static/easyui/themes/metro/window.css",
    "content": ".window {\n  overflow: hidden;\n  padding: 5px;\n  border-width: 1px;\n  border-style: solid;\n}\n.window .window-header {\n  background: transparent;\n  padding: 0px 0px 6px 0px;\n}\n.window .window-body {\n  border-width: 1px;\n  border-style: solid;\n  border-top-width: 0px;\n}\n.window .window-body-noheader {\n  border-top-width: 1px;\n}\n.window .panel-body-nobottom {\n  border-bottom-width: 0;\n}\n.window .window-header .panel-icon,\n.window .window-header .panel-tool {\n  top: 50%;\n  margin-top: -11px;\n}\n.window .window-header .panel-icon {\n  left: 1px;\n}\n.window .window-header .panel-tool {\n  right: 1px;\n}\n.window .window-header .panel-with-icon {\n  padding-left: 18px;\n}\n.window-proxy {\n  position: absolute;\n  overflow: hidden;\n}\n.window-proxy-mask {\n  position: absolute;\n  filter: alpha(opacity=5);\n  opacity: 0.05;\n}\n.window-mask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  filter: alpha(opacity=40);\n  opacity: 0.40;\n  font-size: 1px;\n  overflow: hidden;\n}\n.window,\n.window-shadow {\n  position: absolute;\n  -moz-border-radius: 0px 0px 0px 0px;\n  -webkit-border-radius: 0px 0px 0px 0px;\n  border-radius: 0px 0px 0px 0px;\n}\n.window-shadow {\n  background: #eee;\n  -moz-box-shadow: 2px 2px 3px #ededed;\n  -webkit-box-shadow: 2px 2px 3px #ededed;\n  box-shadow: 2px 2px 3px #ededed;\n  filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=2,MakeShadow=false,ShadowOpacity=0.2);\n}\n.window,\n.window .window-body {\n  border-color: #ddd;\n}\n.window {\n  background-color: #ffffff;\n}\n.window-proxy {\n  border: 1px dashed #ddd;\n}\n.window-proxy-mask,\n.window-mask {\n  background: #eee;\n}\n.window .panel-footer {\n  border: 1px solid #ddd;\n  position: relative;\n  top: -1px;\n}\n"
  },
  {
    "path": "src/main/webapp/static/jcheckbox/css/jquery-labelauty.css",
    "content": "/*!\n * LABELAUTY jQuery Plugin Styles\n *\n * @file: jquery-labelauty.css\n * @author: Francisco Neves (@fntneves)\n * @site: www.francisconeves.com\n * @license: MIT License\n */\n\n/* Prevent text and blocks selection */\ninput.labelauty + label ::selection { background-color: rgba(255, 255, 255, 0); }\ninput.labelauty + label ::-moz-selection { background-color: rgba(255, 255, 255, 0); }\n\n/* Hide original checkboxes. They are ugly! */\ninput.labelauty { position: relative;margin-left:10px;}\n\n/*\n * Let's style the input\n * Feel free to work with it as you wish!\n */\ninput.labelauty + label\n{\n\tfont-size: 11px;\n\tpadding:5px 7px 8px 7px;\n\tbackground-color: #5E97BF;\n\tcolor: #fff;\n\tcursor: pointer;\n\n\tborder-radius: 2px 2px 2px 2px;\n\t-moz-border-radius: 2px 2px 2px 2px;\n\t-webkit-border-radius: 2px 2px 2px 2px;\n\n\n\ttransition: background-color 0.25s;\n\t-moz-transition: background-color 0.25s;\n\t-webkit-transition: background-color 0.25s;\n\t-o-transition: background-color 0.25s;\n\n\t-moz-user-select: none;\n\t-khtml-user-select: none;\n\t-webkit-user-select: none;\n\t-o-user-select: none;\n}\n\n/* Stylish text inside label */\n\ninput.labelauty + label > span.labelauty-unchecked,\ninput.labelauty + label > span.labelauty-checked\n{\n\tdisplay: inline-block;\n\tline-height: 18px;\n\tvertical-align: middle;\n}\n\n/* Stylish icons inside label */\n\ninput.labelauty + label > span.labelauty-unchecked-image,\ninput.labelauty + label > span.labelauty-checked-image\n{\n\tdisplay: inline-block;\n\twidth: 16px;\n\theight: 16px;\n\tvertical-align: middle;\n\tbackground-repeat: no-repeat;\n\tbackground-position: left center;\n\n\ttransition: background-image 0.5s linear;\n\t-moz-transition: background-image 0.5s linear;\n\t-webkit-transition: background-image 0.5s linear;\n\t-o-transition: background-image 0.5s linear;\n}\n\n/* When there's a label, add a little margin to the left */\ninput.labelauty + label > span.labelauty-unchecked-image + span.labelauty-unchecked,\ninput.labelauty + label > span.labelauty-checked-image + span.labelauty-checked\n{\n\tmargin-left: 4px;\n}\n\n/* When not Checked */\ninput.labelauty:not(:checked):not([disabled]) + label:hover\n{\n\tbackground-color: #6CB7DB;\n\tcolor: #fff;\n}\ninput.labelauty:not(:checked) + label > span.labelauty-checked-image\n{\n\tdisplay: none;\n}\n\ninput.labelauty:not(:checked) + label > span.labelauty-checked\n{\n\tdisplay: none;\n}\n\n/* When Checked */\ninput.labelauty:checked + label\n{\n\tbackground-color: #5DB734;\n\tcolor: #ffffff;\n}\n\ninput.labelauty:checked:not([disabled]) + label:hover\n{\n}\ninput.labelauty:checked + label > span.labelauty-unchecked-image\n{\n\tdisplay: none;\n}\n\ninput.labelauty:checked + label > span.labelauty-unchecked\n{\n\tdisplay: none;\n}\n\ninput.labelauty:checked + label > span.labelauty-checked\n{\n\tdisplay: inline-block;\n}\n\ninput.labelauty.no-label:checked + label > span.labelauty-checked\n{\n\tdisplay: block;\n}\n\n/* When Disabled */\ninput.labelauty[disabled] + label\n{\n\topacity: 0.5;\n}\n\n/* Add a background to (un)checked images */\ninput.labelauty + label > span.labelauty-unchecked-image\n{\n\tbackground-image: url( ../images/input-unchecked.png );\n}\n\ninput.labelauty + label > span.labelauty-checked-image\n{\n\tbackground-image: url( ../images/input-checked.png );\n}"
  },
  {
    "path": "src/main/webapp/static/jcheckbox/js/jquery-labelauty.js",
    "content": "/*!\n * LABELAUTY jQuery Plugin\n *\n * @file: jquery-labelauty.js\n * @author: Francisco Neves (@fntneves)\n * @site: www.francisconeves.com\n * @license: MIT License\n */\n\n(function( $ ){\n\n\t$.fn.labelauty = function( options )\n\t{\n\t\t/*\n\t\t * Our default settings\n\t\t * Hope you don't need to change anything, with these settings\n\t\t */\n\t\tvar settings = $.extend(\n\t\t{\n\t\t\t// Development Mode\n\t\t\t// This will activate console debug messages\n\t\t\tdevelopment: false,\n\n\t\t\t// Trigger Class\n\t\t\t// This class will be used to apply styles\n\t\t\tclass: \"labelauty\",\n\n\t\t\t// Use text label ?\n\t\t\t// If false, then only an icon represents the input\n\t\t\tlabel: true,\n\n\t\t\t// Separator between labels' messages\n\t\t\t// If you use this separator for anything, choose a new one\n\t\t\tseparator: \"|\",\n\n\t\t\t// Default Checked Message\n\t\t\t// This message will be visible when input is checked\n\t\t\tchecked_label: \"Checked\",\n\n\t\t\t// Default UnChecked Message\n\t\t\t// This message will be visible when input is unchecked\n\t\t\tunchecked_label: \"Unchecked\",\n\n\t\t\t// Minimum Label Width\n\t\t\t// This value will be used to apply a minimum width to the text labels\n\t\t\tminimum_width: false,\n\n\t\t\t// Use the greatest width between two text labels ?\n\t\t\t// If this has a true value, then label width will be the greatest between labels\n\t\t\tsame_width: true\n\t\t}, options);\n\n\t\t/*\n\t\t * Let's create the core function\n\t\t * It will try to cover all settings and mistakes of using\n\t\t */\n\t\treturn this.each(function()\n\t\t{\n\t\t\tvar $object = $( this );\n\t\t\tvar use_labels = true;\n\t\t\tvar labels;\n\t\t\tvar labels_object;\n\t\t\tvar input_id;\n\n\t\t\t// Test if object is a check input\n\t\t\t// Don't mess me up, come on\n\t\t\tif( $object.is( \":checkbox\" ) === false && $object.is( \":radio\" ) === false )\n\t\t\t\treturn this;\n\n\t\t\t// Add \"labelauty\" class to all checkboxes\n\t\t\t// So you can apply some custom styles\n\t\t\t$object.addClass( settings.class );\n\n\t\t\t// Get the value of \"data-labelauty\" attribute\n\t\t\t// Then, we have the labels for each case (or not, as we will see)\n\t\t\tlabels = $object.attr( \"data-labelauty\" );\n\n\t\t\tuse_labels = settings.label;\n\n\t\t\t// It's time to check if it's going to the right way\n\t\t\t// Null values, more labels than expected or no labels will be handled here\n\t\t\tif( use_labels === true )\n\t\t\t{\n\t\t\t\tif( labels == null || labels.length === 0 )\n\t\t\t\t{\n\t\t\t\t\t// If attribute has no label and we want to use, then use the default labels\n\t\t\t\t\tlabels_object = new Array();\n\t\t\t\t\tlabels_object[0] = settings.unchecked_label;\n\t\t\t\t\tlabels_object[1] = settings.checked_label;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Ok, ok, it's time to split Checked and Unchecked labels\n\t\t\t\t\t// We split, by the \"settings.separator\" option\n\t\t\t\t\tlabels_object = labels.split( settings.separator );\n\n\t\t\t\t\t// Now, let's check if exist _only_ two labels\n\t\t\t\t\t// If there's more than two, then we do not use labels :(\n\t\t\t\t\t// Else, do some additional tests\n\t\t\t\t\tif( labels_object.length > 2 )\n\t\t\t\t\t{\n\t\t\t\t\t\tuse_labels = false;\n\t\t\t\t\t\tdebug( settings.development, \"There's more than two labels. LABELAUTY will not use labels.\" );\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// If there's just one label (no split by \"settings.separator\"), it will be used for both cases\n\t\t\t\t\t\t// Here, we have the possibility of use the same label for both cases\n\t\t\t\t\t\tif( labels_object.length === 1 )\n\t\t\t\t\t\t\tdebug( settings.development, \"There's just one label. LABELAUTY will use this one for both cases.\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Let's begin the beauty\n\t\t\t */\n\n\t\t\t// Start hiding ugly checkboxes\n\t\t\t// Obviously, we don't need native checkboxes :O\n\t\t\t$object.css({ display : \"none\" });\n\n\t\t\t// We don't need more data-labelauty attributes!\n\t\t\t// Ok, ok, it's just for beauty improvement\n\t\t\t$object.removeAttr( \"data-labelauty\" );\n\n\t\t\t// Now, grab checkbox ID Attribute for \"label\" tag use\n\t\t\t// If there's no ID Attribute, then generate a new one\n\t\t\tinput_id = $object.attr( \"id\" );\n\n\t\t\tif( input_id == null )\n\t\t\t{\n\t\t\t\tvar input_id_number = 1 + Math.floor( Math.random() * 1024000 );\n\t\t\t\tinput_id = \"labelauty-\" + input_id_number;\n\n\t\t\t\t// Is there any element with this random ID ?\n\t\t\t\t// If exists, then increment until get an unused ID\n\t\t\t\twhile( $( input_id ).length !== 0 )\n\t\t\t\t{\n\t\t\t\t\tinput_id_number++;\n\t\t\t\t\tinput_id = \"labelauty-\" + input_id_number;\n\t\t\t\t\tdebug( settings.development, \"Holy crap, between 1024 thousand numbers, one raised a conflict. Trying again.\" );\n\t\t\t\t}\n\n\t\t\t\t$object.attr( \"id\", input_id );\n\t\t\t}\n\n\t\t\t// Now, add necessary tags to make this work\n\t\t\t// Here, we're going to test some control variables and act properly\n\t\t\t$object.after( create( input_id, labels_object, use_labels ) );\n\n\t\t\t// Now, add \"min-width\" to label\n\t\t\t// Let's say the truth, a fixed width is more beautiful than a variable width\n\t\t\tif( settings.minimum_width !== false )\n\t\t\t\t$object.next( \"label[for=\" + input_id + \"]\" ).css({ \"min-width\": settings.minimum_width });\n\n\t\t\t// Now, add \"min-width\" to label\n\t\t\t// Let's say the truth, a fixed width is more beautiful than a variable width\n\t\t\tif( settings.same_width != false && settings.label == true )\n\t\t\t{\n\t\t\t\tvar label_object = $object.next( \"label[for=\" + input_id + \"]\" );\n\t\t\t\tvar unchecked_width = getRealWidth(label_object.find( \"span.labelauty-unchecked\" ));\n\t\t\t\tvar checked_width = getRealWidth(label_object.find( \"span.labelauty-checked\" ));\n\n\t\t\t\tif( unchecked_width > checked_width )\n\t\t\t\t\tlabel_object.find( \"span.labelauty-checked\" ).width( unchecked_width );\n\t\t\t\telse\n\t\t\t\t\tlabel_object.find( \"span.labelauty-unchecked\" ).width( checked_width );\n\t\t\t}\n\t\t});\n\t};\n\n\t/*\n\t * Tricky code to work with hidden elements, like tabs.\n\t * Note: This code is based on jquery.actual plugin.\n\t * https://github.com/dreamerslab/jquery.actual\n\t */\n\tfunction getRealWidth( element )\n\t{\n\t\tvar width = 0;\n\t\tvar $target = element;\n\t\tvar style = 'position: absolute !important; top: -1000 !important; ';\n\n\t\t$target = $target.clone().attr('style', style).appendTo('body');\n\t\twidth = $target.width(true);\n\t\t$target.remove();\n\n\t\treturn width;\n\t}\n\n\tfunction debug( debug, message )\n\t{\n\t\tif( debug && window.console && window.console.log )\n\t\t\twindow.console.log( \"jQuery-LABELAUTY: \" + message );\n\t};\n\n\tfunction create( input_id, messages_object, label )\n\t{\n\t\tvar block;\n\t\tvar unchecked_message;\n\t\tvar checked_message;\n\n\t\tif( messages_object == null )\n\t\t\tunchecked_message = checked_message = \"\";\n\t\telse\n\t\t{\n\t\t\tunchecked_message = messages_object[0];\n\n\t\t\t// If checked message is null, then put the same text of unchecked message\n\t\t\tif( messages_object[1] == null )\n\t\t\t\tchecked_message = unchecked_message;\n\t\t\telse\n\t\t\t\tchecked_message = messages_object[1];\n\t\t}\n\n\t\tif( label == true )\n\t\t{\n\t\t\tblock = '<label for=\"' + input_id + '\">' +\n\t\t\t\t\t\t'<span class=\"labelauty-unchecked-image\"></span>' +\n\t\t\t\t\t\t'<span class=\"labelauty-unchecked\">' + unchecked_message + '</span>' +\n\t\t\t\t\t\t'<span class=\"labelauty-checked-image\"></span>' +\n\t\t\t\t\t\t'<span class=\"labelauty-checked\">' + checked_message + '</span>' +\n\t\t\t\t\t'</label>';\n\t\t}\n\t\telse\n\t\t{\n\t\t\tblock = '<label for=\"' + input_id + '\">' +\n\t\t\t\t\t\t'<span class=\"labelauty-unchecked-image\"></span>' +\n\t\t\t\t\t\t'<span class=\"labelauty-checked-image\"></span>' +\n\t\t\t\t\t'</label>';\n\t\t}\n\n\t\treturn block;\n\t};\n\n}( jQuery ));\n"
  },
  {
    "path": "src/main/webapp/static/js/bootstrap-editable.js",
    "content": "/*! X-editable - v1.5.1 \r\n* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery\r\n* http://github.com/vitalets/x-editable\r\n* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */\r\n/**\r\nForm with single input element, two buttons and two states: normal/loading.\r\nApplied as jQuery method to DIV tag (not to form tag!). This is because form can be in loading state when spinner shown.\r\nEditableform is linked with one of input types, e.g. 'text', 'select' etc.\r\n\r\n@class editableform\r\n@uses text\r\n@uses textarea\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var EditableForm = function (div, options) {\r\n        this.options = $.extend({}, $.fn.editableform.defaults, options);\r\n        this.$div = $(div); //div, containing form. Not form tag. Not editable-element.\r\n        if(!this.options.scope) {\r\n            this.options.scope = this;\r\n        }\r\n        //nothing shown after init\r\n    };\r\n\r\n    EditableForm.prototype = {\r\n        constructor: EditableForm,\r\n        initInput: function() {  //called once\r\n            //take input from options (as it is created in editable-element)\r\n            this.input = this.options.input;\r\n            \r\n            //set initial value\r\n            //todo: may be add check: typeof str === 'string' ? \r\n            this.value = this.input.str2value(this.options.value); \r\n            \r\n            //prerender: get input.$input\r\n            this.input.prerender();\r\n        },\r\n        initTemplate: function() {\r\n            this.$form = $($.fn.editableform.template); \r\n        },\r\n        initButtons: function() {\r\n            var $btn = this.$form.find('.editable-buttons');\r\n            $btn.append($.fn.editableform.buttons);\r\n            if(this.options.showbuttons === 'bottom') {\r\n                $btn.addClass('editable-buttons-bottom');\r\n            }\r\n        },\r\n        /**\r\n        Renders editableform\r\n\r\n        @method render\r\n        **/        \r\n        render: function() {\r\n            //init loader\r\n            this.$loading = $($.fn.editableform.loading);        \r\n            this.$div.empty().append(this.$loading);\r\n            \r\n            //init form template and buttons\r\n            this.initTemplate();\r\n            if(this.options.showbuttons) {\r\n                this.initButtons();\r\n            } else {\r\n                this.$form.find('.editable-buttons').remove();\r\n            }\r\n\r\n            //show loading state\r\n            this.showLoading();            \r\n            \r\n            //flag showing is form now saving value to server. \r\n            //It is needed to wait when closing form.\r\n            this.isSaving = false;\r\n            \r\n            /**        \r\n            Fired when rendering starts\r\n            @event rendering \r\n            @param {Object} event event object\r\n            **/            \r\n            this.$div.triggerHandler('rendering');\r\n            \r\n            //init input\r\n            this.initInput();\r\n            \r\n            //append input to form\r\n            this.$form.find('div.editable-input').append(this.input.$tpl);            \r\n            \r\n            //append form to container\r\n            this.$div.append(this.$form);\r\n            \r\n            //render input\r\n            $.when(this.input.render())\r\n            .then($.proxy(function () {\r\n                //setup input to submit automatically when no buttons shown\r\n                if(!this.options.showbuttons) {\r\n                    this.input.autosubmit(); \r\n                }\r\n                 \r\n                //attach 'cancel' handler\r\n                this.$form.find('.editable-cancel').click($.proxy(this.cancel, this));\r\n                \r\n                if(this.input.error) {\r\n                    this.error(this.input.error);\r\n                    this.$form.find('.editable-submit').attr('disabled', true);\r\n                    this.input.$input.attr('disabled', true);\r\n                    //prevent form from submitting\r\n                    this.$form.submit(function(e){ e.preventDefault(); });\r\n                } else {\r\n                    this.error(false);\r\n                    this.input.$input.removeAttr('disabled');\r\n                    this.$form.find('.editable-submit').removeAttr('disabled');\r\n                    var value = (this.value === null || this.value === undefined || this.value === '') ? this.options.defaultValue : this.value;\r\n                    this.input.value2input(value);\r\n                    //attach submit handler\r\n                    this.$form.submit($.proxy(this.submit, this));\r\n                }\r\n\r\n                /**        \r\n                Fired when form is rendered\r\n                @event rendered\r\n                @param {Object} event event object\r\n                **/            \r\n                this.$div.triggerHandler('rendered');                \r\n\r\n                this.showForm();\r\n                \r\n                //call postrender method to perform actions required visibility of form\r\n                if(this.input.postrender) {\r\n                    this.input.postrender();\r\n                }                \r\n            }, this));\r\n        },\r\n        cancel: function() {   \r\n            /**        \r\n            Fired when form was cancelled by user\r\n            @event cancel \r\n            @param {Object} event event object\r\n            **/              \r\n            this.$div.triggerHandler('cancel');\r\n        },\r\n        showLoading: function() {\r\n            var w, h;\r\n            if(this.$form) {\r\n                //set loading size equal to form\r\n                w = this.$form.outerWidth();\r\n                h = this.$form.outerHeight(); \r\n                if(w) {\r\n                    this.$loading.width(w);\r\n                }\r\n                if(h) {\r\n                    this.$loading.height(h);\r\n                }\r\n                this.$form.hide();\r\n            } else {\r\n                //stretch loading to fill container width\r\n                w = this.$loading.parent().width();\r\n                if(w) {\r\n                    this.$loading.width(w);\r\n                }\r\n            }\r\n            this.$loading.show(); \r\n        },\r\n\r\n        showForm: function(activate) {\r\n            this.$loading.hide();\r\n            this.$form.show();\r\n            if(activate !== false) {\r\n                this.input.activate(); \r\n            }\r\n            /**        \r\n            Fired when form is shown\r\n            @event show \r\n            @param {Object} event event object\r\n            **/                    \r\n            this.$div.triggerHandler('show');\r\n        },\r\n\r\n        error: function(msg) {\r\n            var $group = this.$form.find('.control-group'),\r\n                $block = this.$form.find('.editable-error-block'),\r\n                lines;\r\n\r\n            if(msg === false) {\r\n                $group.removeClass($.fn.editableform.errorGroupClass);\r\n                $block.removeClass($.fn.editableform.errorBlockClass).empty().hide(); \r\n            } else {\r\n                //convert newline to <br> for more pretty error display\r\n                if(msg) {\r\n                    lines = (''+msg).split('\\n');\r\n                    for (var i = 0; i < lines.length; i++) {\r\n                        lines[i] = $('<div>').text(lines[i]).html();\r\n                    }\r\n                    msg = lines.join('<br>');\r\n                }\r\n                $group.addClass($.fn.editableform.errorGroupClass);\r\n                $block.addClass($.fn.editableform.errorBlockClass).html(msg).show();\r\n            }\r\n        },\r\n\r\n        submit: function(e) {\r\n            e.stopPropagation();\r\n            e.preventDefault();\r\n            \r\n            //get new value from input\r\n            var newValue = this.input.input2value(); \r\n\r\n            //validation: if validate returns string or truthy value - means error\r\n            //if returns object like {newValue: '...'} => submitted value is reassigned to it\r\n            var error = this.validate(newValue);\r\n            if ($.type(error) === 'object' && error.newValue !== undefined) {\r\n                newValue = error.newValue;\r\n                this.input.value2input(newValue);\r\n                if(typeof error.msg === 'string') {\r\n                    this.error(error.msg);\r\n                    this.showForm();\r\n                    return;\r\n                }\r\n            } else if (error) {\r\n                this.error(error);\r\n                this.showForm();\r\n                return;\r\n            } \r\n            \r\n            //if value not changed --> trigger 'nochange' event and return\r\n            /*jslint eqeq: true*/\r\n            if (!this.options.savenochange && this.input.value2str(newValue) == this.input.value2str(this.value)) {\r\n            /*jslint eqeq: false*/                \r\n                /**        \r\n                Fired when value not changed but form is submitted. Requires savenochange = false.\r\n                @event nochange \r\n                @param {Object} event event object\r\n                **/                    \r\n                this.$div.triggerHandler('nochange');            \r\n                return;\r\n            } \r\n\r\n            //convert value for submitting to server\r\n            var submitValue = this.input.value2submit(newValue);\r\n            \r\n            this.isSaving = true;\r\n            \r\n            //sending data to server\r\n            $.when(this.save(submitValue))\r\n            .done($.proxy(function(response) {\r\n                this.isSaving = false;\r\n\r\n                //run success callback\r\n                var res = typeof this.options.success === 'function' ? this.options.success.call(this.options.scope, response, newValue) : null;\r\n\r\n                //if success callback returns false --> keep form open and do not activate input\r\n                if(res === false) {\r\n                    this.error(false);\r\n                    this.showForm(false);\r\n                    return;\r\n                }\r\n\r\n                //if success callback returns string -->  keep form open, show error and activate input               \r\n                if(typeof res === 'string') {\r\n                    this.error(res);\r\n                    this.showForm();\r\n                    return;\r\n                }\r\n\r\n                //if success callback returns object like {newValue: <something>} --> use that value instead of submitted\r\n                //it is usefull if you want to chnage value in url-function\r\n                if(res && typeof res === 'object' && res.hasOwnProperty('newValue')) {\r\n                    newValue = res.newValue;\r\n                }\r\n\r\n                //clear error message\r\n                this.error(false);   \r\n                this.value = newValue;\r\n                /**        \r\n                Fired when form is submitted\r\n                @event save \r\n                @param {Object} event event object\r\n                @param {Object} params additional params\r\n                @param {mixed} params.newValue raw new value\r\n                @param {mixed} params.submitValue submitted value as string\r\n                @param {Object} params.response ajax response\r\n\r\n                @example\r\n                $('#form-div').on('save'), function(e, params){\r\n                    if(params.newValue === 'username') {...}\r\n                });\r\n                **/\r\n                this.$div.triggerHandler('save', {newValue: newValue, submitValue: submitValue, response: response});\r\n            }, this))\r\n            .fail($.proxy(function(xhr) {\r\n                this.isSaving = false;\r\n\r\n                var msg;\r\n                if(typeof this.options.error === 'function') {\r\n                    msg = this.options.error.call(this.options.scope, xhr, newValue);\r\n                } else {\r\n                    msg = typeof xhr === 'string' ? xhr : xhr.responseText || xhr.statusText || 'Unknown error!';\r\n                }\r\n\r\n                this.error(msg);\r\n                this.showForm();\r\n            }, this));\r\n        },\r\n\r\n        save: function(submitValue) {\r\n            //try parse composite pk defined as json string in data-pk \r\n            this.options.pk = $.fn.editableutils.tryParseJson(this.options.pk, true); \r\n            \r\n            var pk = (typeof this.options.pk === 'function') ? this.options.pk.call(this.options.scope) : this.options.pk,\r\n            /*\r\n              send on server in following cases:\r\n              1. url is function\r\n              2. url is string AND (pk defined OR send option = always) \r\n            */\r\n            send = !!(typeof this.options.url === 'function' || (this.options.url && ((this.options.send === 'always') || (this.options.send === 'auto' && pk !== null && pk !== undefined)))),\r\n            params;\r\n\r\n            if (send) { //send to server\r\n                this.showLoading();\r\n\r\n                //standard params\r\n                params = {\r\n                    name: this.options.name || '',\r\n                    value: submitValue,\r\n                    pk: pk \r\n                };\r\n\r\n                //additional params\r\n                if(typeof this.options.params === 'function') {\r\n                    params = this.options.params.call(this.options.scope, params);  \r\n                } else {\r\n                    //try parse json in single quotes (from data-params attribute)\r\n                    this.options.params = $.fn.editableutils.tryParseJson(this.options.params, true);   \r\n                    $.extend(params, this.options.params);\r\n                }\r\n\r\n                if(typeof this.options.url === 'function') { //user's function\r\n                    return this.options.url.call(this.options.scope, params);\r\n                } else {  \r\n                    //send ajax to server and return deferred object\r\n                    return $.ajax($.extend({\r\n                        url     : this.options.url,\r\n                        data    : params,\r\n                        type    : 'POST'\r\n                    }, this.options.ajaxOptions));\r\n                }\r\n            }\r\n        }, \r\n\r\n        validate: function (value) {\r\n            if (value === undefined) {\r\n                value = this.value;\r\n            }\r\n            if (typeof this.options.validate === 'function') {\r\n                return this.options.validate.call(this.options.scope, value);\r\n            }\r\n        },\r\n\r\n        option: function(key, value) {\r\n            if(key in this.options) {\r\n                this.options[key] = value;\r\n            }\r\n            \r\n            if(key === 'value') {\r\n                this.setValue(value);\r\n            }\r\n            \r\n            //do not pass option to input as it is passed in editable-element\r\n        },\r\n\r\n        setValue: function(value, convertStr) {\r\n            if(convertStr) {\r\n                this.value = this.input.str2value(value);\r\n            } else {\r\n                this.value = value;\r\n            }\r\n            \r\n            //if form is visible, update input\r\n            if(this.$form && this.$form.is(':visible')) {\r\n                this.input.value2input(this.value);\r\n            }            \r\n        }               \r\n    };\r\n\r\n    /*\r\n    Initialize editableform. Applied to jQuery object.\r\n\r\n    @method $().editableform(options)\r\n    @params {Object} options\r\n    @example\r\n    var $form = $('&lt;div&gt;').editableform({\r\n        type: 'text',\r\n        name: 'username',\r\n        url: '/post',\r\n        value: 'vitaliy'\r\n    });\r\n\r\n    //to display form you should call 'render' method\r\n    $form.editableform('render');     \r\n    */\r\n    $.fn.editableform = function (option) {\r\n        var args = arguments;\r\n        return this.each(function () {\r\n            var $this = $(this), \r\n            data = $this.data('editableform'), \r\n            options = typeof option === 'object' && option; \r\n            if (!data) {\r\n                $this.data('editableform', (data = new EditableForm(this, options)));\r\n            }\r\n\r\n            if (typeof option === 'string') { //call method \r\n                data[option].apply(data, Array.prototype.slice.call(args, 1));\r\n            } \r\n        });\r\n    };\r\n\r\n    //keep link to constructor to allow inheritance\r\n    $.fn.editableform.Constructor = EditableForm;    \r\n\r\n    //defaults\r\n    $.fn.editableform.defaults = {\r\n        /* see also defaults for input */\r\n\r\n        /**\r\n        Type of input. Can be <code>text|textarea|select|date|checklist</code>\r\n\r\n        @property type \r\n        @type string\r\n        @default 'text'\r\n        **/\r\n        type: 'text',\r\n        /**\r\n        Url for submit, e.g. <code>'/post'</code>  \r\n        If function - it will be called instead of ajax. Function should return deferred object to run fail/done callbacks.\r\n\r\n        @property url \r\n        @type string|function\r\n        @default null\r\n        @example\r\n        url: function(params) {\r\n            var d = new $.Deferred;\r\n            if(params.value === 'abc') {\r\n                return d.reject('error message'); //returning error via deferred object\r\n            } else {\r\n                //async saving data in js model\r\n                someModel.asyncSaveMethod({\r\n                   ..., \r\n                   success: function(){\r\n                      d.resolve();\r\n                   }\r\n                }); \r\n                return d.promise();\r\n            }\r\n        } \r\n        **/        \r\n        url:null,\r\n        /**\r\n        Additional params for submit. If defined as <code>object</code> - it is **appended** to original ajax data (pk, name and value).  \r\n        If defined as <code>function</code> - returned object **overwrites** original ajax data.\r\n        @example\r\n        params: function(params) {\r\n            //originally params contain pk, name and value\r\n            params.a = 1;\r\n            return params;\r\n        }\r\n\r\n        @property params \r\n        @type object|function\r\n        @default null\r\n        **/          \r\n        params:null,\r\n        /**\r\n        Name of field. Will be submitted on server. Can be taken from <code>id</code> attribute\r\n\r\n        @property name \r\n        @type string\r\n        @default null\r\n        **/         \r\n        name: null,\r\n        /**\r\n        Primary key of editable object (e.g. record id in database). For composite keys use object, e.g. <code>{id: 1, lang: 'en'}</code>.\r\n        Can be calculated dynamically via function.\r\n\r\n        @property pk \r\n        @type string|object|function\r\n        @default null\r\n        **/         \r\n        pk: null,\r\n        /**\r\n        Initial value. If not defined - will be taken from element's content.\r\n        For __select__ type should be defined (as it is ID of shown text).\r\n\r\n        @property value \r\n        @type string|object\r\n        @default null\r\n        **/        \r\n        value: null,\r\n        /**\r\n        Value that will be displayed in input if original field value is empty (`null|undefined|''`).\r\n\r\n        @property defaultValue \r\n        @type string|object\r\n        @default null\r\n        @since 1.4.6\r\n        **/        \r\n        defaultValue: null,\r\n        /**\r\n        Strategy for sending data on server. Can be `auto|always|never`.\r\n        When 'auto' data will be sent on server **only if pk and url defined**, otherwise new value will be stored locally.\r\n\r\n        @property send \r\n        @type string\r\n        @default 'auto'\r\n        **/          \r\n        send: 'auto', \r\n        /**\r\n        Function for client-side validation. If returns string - means validation not passed and string showed as error.\r\n        Since 1.5.1 you can modify submitted value by returning object from `validate`: \r\n        `{newValue: '...'}` or `{newValue: '...', msg: '...'}`\r\n\r\n        @property validate \r\n        @type function\r\n        @default null\r\n        @example\r\n        validate: function(value) {\r\n            if($.trim(value) == '') {\r\n                return 'This field is required';\r\n            }\r\n        }\r\n        **/         \r\n        validate: null,\r\n        /**\r\n        Success callback. Called when value successfully sent on server and **response status = 200**.  \r\n        Usefull to work with json response. For example, if your backend response can be <code>{success: true}</code>\r\n        or <code>{success: false, msg: \"server error\"}</code> you can check it inside this callback.  \r\n        If it returns **string** - means error occured and string is shown as error message.  \r\n        If it returns **object like** <code>{newValue: &lt;something&gt;}</code> - it overwrites value, submitted by user.  \r\n        Otherwise newValue simply rendered into element.\r\n        \r\n        @property success \r\n        @type function\r\n        @default null\r\n        @example\r\n        success: function(response, newValue) {\r\n            if(!response.success) return response.msg;\r\n        }\r\n        **/          \r\n        success: null,\r\n        /**\r\n        Error callback. Called when request failed (response status != 200).  \r\n        Usefull when you want to parse error response and display a custom message.\r\n        Must return **string** - the message to be displayed in the error block.\r\n                \r\n        @property error \r\n        @type function\r\n        @default null\r\n        @since 1.4.4\r\n        @example\r\n        error: function(response, newValue) {\r\n            if(response.status === 500) {\r\n                return 'Service unavailable. Please try later.';\r\n            } else {\r\n                return response.responseText;\r\n            }\r\n        }\r\n        **/          \r\n        error: null,\r\n        /**\r\n        Additional options for submit ajax request.\r\n        List of values: http://api.jquery.com/jQuery.ajax\r\n        \r\n        @property ajaxOptions \r\n        @type object\r\n        @default null\r\n        @since 1.1.1        \r\n        @example \r\n        ajaxOptions: {\r\n            type: 'put',\r\n            dataType: 'json'\r\n        }        \r\n        **/        \r\n        ajaxOptions: null,\r\n        /**\r\n        Where to show buttons: left(true)|bottom|false  \r\n        Form without buttons is auto-submitted.\r\n\r\n        @property showbuttons \r\n        @type boolean|string\r\n        @default true\r\n        @since 1.1.1\r\n        **/         \r\n        showbuttons: true,\r\n        /**\r\n        Scope for callback methods (success, validate).  \r\n        If <code>null</code> means editableform instance itself. \r\n\r\n        @property scope \r\n        @type DOMElement|object\r\n        @default null\r\n        @since 1.2.0\r\n        @private\r\n        **/            \r\n        scope: null,\r\n        /**\r\n        Whether to save or cancel value when it was not changed but form was submitted\r\n\r\n        @property savenochange \r\n        @type boolean\r\n        @default false\r\n        @since 1.2.0\r\n        **/\r\n        savenochange: false\r\n    };   \r\n\r\n    /*\r\n    Note: following params could redefined in engine: bootstrap or jqueryui:\r\n    Classes 'control-group' and 'editable-error-block' must always present!\r\n    */      \r\n    $.fn.editableform.template = '<form class=\"form-inline editableform\">'+\r\n    '<div class=\"control-group\">' + \r\n    '<div><div class=\"editable-input\"></div><div class=\"editable-buttons\"></div></div>'+\r\n    '<div class=\"editable-error-block\"></div>' + \r\n    '</div>' + \r\n    '</form>';\r\n\r\n    //loading div\r\n    $.fn.editableform.loading = '<div class=\"editableform-loading\"></div>';\r\n\r\n    //buttons\r\n    $.fn.editableform.buttons = '<button type=\"submit\" class=\"editable-submit\">ok</button>'+\r\n    '<button type=\"button\" class=\"editable-cancel\">cancel</button>';      \r\n\r\n    //error class attached to control-group\r\n    $.fn.editableform.errorGroupClass = null;  \r\n\r\n    //error class attached to editable-error-block\r\n    $.fn.editableform.errorBlockClass = 'editable-error';\r\n    \r\n    //engine\r\n    $.fn.editableform.engine = 'jquery';\r\n}(window.jQuery));\r\n\r\n/**\r\n* EditableForm utilites\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    //utils\r\n    $.fn.editableutils = {\r\n        /**\r\n        * classic JS inheritance function\r\n        */  \r\n        inherit: function (Child, Parent) {\r\n            var F = function() { };\r\n            F.prototype = Parent.prototype;\r\n            Child.prototype = new F();\r\n            Child.prototype.constructor = Child;\r\n            Child.superclass = Parent.prototype;\r\n        },\r\n\r\n        /**\r\n        * set caret position in input\r\n        * see http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area\r\n        */        \r\n        setCursorPosition: function(elem, pos) {\r\n            if (elem.setSelectionRange) {\r\n                elem.setSelectionRange(pos, pos);\r\n            } else if (elem.createTextRange) {\r\n                var range = elem.createTextRange();\r\n                range.collapse(true);\r\n                range.moveEnd('character', pos);\r\n                range.moveStart('character', pos);\r\n                range.select();\r\n            }\r\n        },\r\n\r\n        /**\r\n        * function to parse JSON in *single* quotes. (jquery automatically parse only double quotes)\r\n        * That allows such code as: <a data-source=\"{'a': 'b', 'c': 'd'}\">\r\n        * safe = true --> means no exception will be thrown\r\n        * for details see http://stackoverflow.com/questions/7410348/how-to-set-json-format-to-html5-data-attributes-in-the-jquery\r\n        */\r\n        tryParseJson: function(s, safe) {\r\n            if (typeof s === 'string' && s.length && s.match(/^[\\{\\[].*[\\}\\]]$/)) {\r\n                if (safe) {\r\n                    try {\r\n                        /*jslint evil: true*/\r\n                        s = (new Function('return ' + s))();\r\n                        /*jslint evil: false*/\r\n                    } catch (e) {} finally {\r\n                        return s;\r\n                    }\r\n                } else {\r\n                    /*jslint evil: true*/\r\n                    s = (new Function('return ' + s))();\r\n                    /*jslint evil: false*/\r\n                }\r\n            }\r\n            return s;\r\n        },\r\n\r\n        /**\r\n        * slice object by specified keys\r\n        */\r\n        sliceObj: function(obj, keys, caseSensitive /* default: false */) {\r\n            var key, keyLower, newObj = {};\r\n\r\n            if (!$.isArray(keys) || !keys.length) {\r\n                return newObj;\r\n            }\r\n\r\n            for (var i = 0; i < keys.length; i++) {\r\n                key = keys[i];\r\n                if (obj.hasOwnProperty(key)) {\r\n                    newObj[key] = obj[key];\r\n                }\r\n\r\n                if(caseSensitive === true) {\r\n                    continue;\r\n                }\r\n\r\n                //when getting data-* attributes via $.data() it's converted to lowercase.\r\n                //details: http://stackoverflow.com/questions/7602565/using-data-attributes-with-jquery\r\n                //workaround is code below.\r\n                keyLower = key.toLowerCase();\r\n                if (obj.hasOwnProperty(keyLower)) {\r\n                    newObj[key] = obj[keyLower];\r\n                }\r\n            }\r\n\r\n            return newObj;\r\n        },\r\n\r\n        /*\r\n        exclude complex objects from $.data() before pass to config\r\n        */\r\n        getConfigData: function($element) {\r\n            var data = {};\r\n            $.each($element.data(), function(k, v) {\r\n                if(typeof v !== 'object' || (v && typeof v === 'object' && (v.constructor === Object || v.constructor === Array))) {\r\n                    data[k] = v;\r\n                }\r\n            });\r\n            return data;\r\n        },\r\n\r\n        /*\r\n         returns keys of object\r\n        */\r\n        objectKeys: function(o) {\r\n            if (Object.keys) {\r\n                return Object.keys(o);  \r\n            } else {\r\n                if (o !== Object(o)) {\r\n                    throw new TypeError('Object.keys called on a non-object');\r\n                }\r\n                var k=[], p;\r\n                for (p in o) {\r\n                    if (Object.prototype.hasOwnProperty.call(o,p)) {\r\n                        k.push(p);\r\n                    }\r\n                }\r\n                return k;\r\n            }\r\n\r\n        },\r\n        \r\n       /**\r\n        method to escape html.\r\n       **/\r\n       escape: function(str) {\r\n           return $('<div>').text(str).html();\r\n       },\r\n       \r\n       /*\r\n        returns array items from sourceData having value property equal or inArray of 'value'\r\n       */\r\n       itemsByValue: function(value, sourceData, valueProp) {\r\n           if(!sourceData || value === null) {\r\n               return [];\r\n           }\r\n           \r\n           if (typeof(valueProp) !== \"function\") {\r\n               var idKey = valueProp || 'value';\r\n               valueProp = function (e) { return e[idKey]; };\r\n           }\r\n                      \r\n           var isValArray = $.isArray(value),\r\n           result = [], \r\n           that = this;\r\n\r\n           $.each(sourceData, function(i, o) {\r\n               if(o.children) {\r\n                   result = result.concat(that.itemsByValue(value, o.children, valueProp));\r\n               } else {\r\n                   /*jslint eqeq: true*/\r\n                   if(isValArray) {\r\n                       if($.grep(value, function(v){  return v == (o && typeof o === 'object' ? valueProp(o) : o); }).length) {\r\n                           result.push(o); \r\n                       }\r\n                   } else {\r\n                       var itemValue = (o && (typeof o === 'object')) ? valueProp(o) : o;\r\n                       if(value == itemValue) {\r\n                           result.push(o); \r\n                       }\r\n                   }\r\n                   /*jslint eqeq: false*/\r\n               }\r\n           });\r\n           \r\n           return result;\r\n       },\r\n       \r\n       /*\r\n       Returns input by options: type, mode. \r\n       */\r\n       createInput: function(options) {\r\n           var TypeConstructor, typeOptions, input,\r\n           type = options.type;\r\n\r\n           //`date` is some kind of virtual type that is transformed to one of exact types\r\n           //depending on mode and core lib\r\n           if(type === 'date') {\r\n               //inline\r\n               if(options.mode === 'inline') {\r\n                   if($.fn.editabletypes.datefield) {\r\n                       type = 'datefield';\r\n                   } else if($.fn.editabletypes.dateuifield) {\r\n                       type = 'dateuifield';\r\n                   }\r\n               //popup\r\n               } else {\r\n                   if($.fn.editabletypes.date) {\r\n                       type = 'date';\r\n                   } else if($.fn.editabletypes.dateui) {\r\n                       type = 'dateui';\r\n                   }\r\n               }\r\n               \r\n               //if type still `date` and not exist in types, replace with `combodate` that is base input\r\n               if(type === 'date' && !$.fn.editabletypes.date) {\r\n                   type = 'combodate';\r\n               } \r\n           }\r\n           \r\n           //`datetime` should be datetimefield in 'inline' mode\r\n           if(type === 'datetime' && options.mode === 'inline') {\r\n             type = 'datetimefield';  \r\n           }           \r\n\r\n           //change wysihtml5 to textarea for jquery UI and plain versions\r\n           if(type === 'wysihtml5' && !$.fn.editabletypes[type]) {\r\n               type = 'textarea';\r\n           }\r\n\r\n           //create input of specified type. Input will be used for converting value, not in form\r\n           if(typeof $.fn.editabletypes[type] === 'function') {\r\n               TypeConstructor = $.fn.editabletypes[type];\r\n               typeOptions = this.sliceObj(options, this.objectKeys(TypeConstructor.defaults));\r\n               input = new TypeConstructor(typeOptions);\r\n               return input;\r\n           } else {\r\n               $.error('Unknown type: '+ type);\r\n               return false; \r\n           }  \r\n       },\r\n       \r\n       //see http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\r\n       supportsTransitions: function () {\r\n           var b = document.body || document.documentElement,\r\n               s = b.style,\r\n               p = 'transition',\r\n               v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'];\r\n               \r\n           if(typeof s[p] === 'string') {\r\n               return true; \r\n           }\r\n\r\n           // Tests for vendor specific prop\r\n           p = p.charAt(0).toUpperCase() + p.substr(1);\r\n           for(var i=0; i<v.length; i++) {\r\n               if(typeof s[v[i] + p] === 'string') { \r\n                   return true; \r\n               }\r\n           }\r\n           return false;\r\n       }            \r\n       \r\n    };      \r\n}(window.jQuery));\r\n\r\n/**\r\nAttaches stand-alone container with editable-form to HTML element. Element is used only for positioning, value is not stored anywhere.<br>\r\nThis method applied internally in <code>$().editable()</code>. You should subscribe on it's events (save / cancel) to get profit of it.<br>\r\nFinal realization can be different: bootstrap-popover, jqueryui-tooltip, poshytip, inline-div. It depends on which js file you include.<br>\r\nApplied as jQuery method.\r\n\r\n@class editableContainer\r\n@uses editableform\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n\r\n    var Popup = function (element, options) {\r\n        this.init(element, options);\r\n    };\r\n    \r\n    var Inline = function (element, options) {\r\n        this.init(element, options);\r\n    };    \r\n\r\n    //methods\r\n    Popup.prototype = {\r\n        containerName: null, //method to call container on element\r\n        containerDataName: null, //object name in element's .data()\r\n        innerCss: null, //tbd in child class\r\n        containerClass: 'editable-container editable-popup', //css class applied to container element\r\n        defaults: {}, //container itself defaults\r\n        \r\n        init: function(element, options) {\r\n            this.$element = $(element);\r\n            //since 1.4.1 container do not use data-* directly as they already merged into options.\r\n            this.options = $.extend({}, $.fn.editableContainer.defaults, options);         \r\n            this.splitOptions();\r\n            \r\n            //set scope of form callbacks to element\r\n            this.formOptions.scope = this.$element[0]; \r\n            \r\n            this.initContainer();\r\n            \r\n            //flag to hide container, when saving value will finish\r\n            this.delayedHide = false;\r\n\r\n            //bind 'destroyed' listener to destroy container when element is removed from dom\r\n            this.$element.on('destroyed', $.proxy(function(){\r\n                this.destroy();\r\n            }, this)); \r\n            \r\n            //attach document handler to close containers on click / escape\r\n            if(!$(document).data('editable-handlers-attached')) {\r\n                //close all on escape\r\n                $(document).on('keyup.editable', function (e) {\r\n                    if (e.which === 27) {\r\n                        $('.editable-open').editableContainer('hide');\r\n                        //todo: return focus on element \r\n                    }\r\n                });\r\n\r\n                //close containers when click outside \r\n                //(mousedown could be better than click, it closes everything also on drag drop)\r\n                $(document).on('click.editable', function(e) {\r\n                    var $target = $(e.target), i,\r\n                        exclude_classes = ['.editable-container', \r\n                                           '.ui-datepicker-header', \r\n                                           '.datepicker', //in inline mode datepicker is rendered into body\r\n                                           '.modal-backdrop', \r\n                                           '.bootstrap-wysihtml5-insert-image-modal', \r\n                                           '.bootstrap-wysihtml5-insert-link-modal'\r\n                                           ];\r\n                    \r\n                    //check if element is detached. It occurs when clicking in bootstrap datepicker\r\n                    if (!$.contains(document.documentElement, e.target)) {\r\n                      return;\r\n                    }\r\n\r\n                    //for some reason FF 20 generates extra event (click) in select2 widget with e.target = document\r\n                    //we need to filter it via construction below. See https://github.com/vitalets/x-editable/issues/199\r\n                    //Possibly related to http://stackoverflow.com/questions/10119793/why-does-firefox-react-differently-from-webkit-and-ie-to-click-event-on-selec\r\n                    if($target.is(document)) {\r\n                       return; \r\n                    }\r\n                    \r\n                    //if click inside one of exclude classes --> no nothing\r\n                    for(i=0; i<exclude_classes.length; i++) {\r\n                         if($target.is(exclude_classes[i]) || $target.parents(exclude_classes[i]).length) {\r\n                             return;\r\n                         }\r\n                    }\r\n                      \r\n                    //close all open containers (except one - target)\r\n                    Popup.prototype.closeOthers(e.target);\r\n                });\r\n                \r\n                $(document).data('editable-handlers-attached', true);\r\n            }                        \r\n        },\r\n\r\n        //split options on containerOptions and formOptions\r\n        splitOptions: function() {\r\n            this.containerOptions = {};\r\n            this.formOptions = {};\r\n            \r\n            if(!$.fn[this.containerName]) {\r\n                throw new Error(this.containerName + ' not found. Have you included corresponding js file?');   \r\n            }\r\n            \r\n            //keys defined in container defaults go to container, others go to form\r\n            for(var k in this.options) {\r\n              if(k in this.defaults) {\r\n                 this.containerOptions[k] = this.options[k];\r\n              } else {\r\n                 this.formOptions[k] = this.options[k];\r\n              } \r\n            }\r\n        },\r\n        \r\n        /*\r\n        Returns jquery object of container\r\n        @method tip()\r\n        */         \r\n        tip: function() {\r\n            return this.container() ? this.container().$tip : null;\r\n        },\r\n\r\n        /* returns container object */\r\n        container: function() {\r\n            var container;\r\n            //first, try get it by `containerDataName`\r\n            if(this.containerDataName) {\r\n                if(container = this.$element.data(this.containerDataName)) {\r\n                    return container;\r\n                }\r\n            }\r\n            //second, try `containerName`\r\n            container = this.$element.data(this.containerName);\r\n            return container;\r\n        },\r\n\r\n        /* call native method of underlying container, e.g. this.$element.popover('method') */ \r\n        call: function() {\r\n            this.$element[this.containerName].apply(this.$element, arguments); \r\n        },        \r\n        \r\n        initContainer: function(){\r\n            this.call(this.containerOptions);\r\n        },\r\n\r\n        renderForm: function() {\r\n            this.$form\r\n            .editableform(this.formOptions)\r\n            .on({\r\n                save: $.proxy(this.save, this), //click on submit button (value changed)\r\n                nochange: $.proxy(function(){ this.hide('nochange'); }, this), //click on submit button (value NOT changed)                \r\n                cancel: $.proxy(function(){ this.hide('cancel'); }, this), //click on calcel button\r\n                show: $.proxy(function() {\r\n                    if(this.delayedHide) {\r\n                        this.hide(this.delayedHide.reason);\r\n                        this.delayedHide = false;\r\n                    } else {\r\n                        this.setPosition();\r\n                    }\r\n                }, this), //re-position container every time form is shown (occurs each time after loading state)\r\n                rendering: $.proxy(this.setPosition, this), //this allows to place container correctly when loading shown\r\n                resize: $.proxy(this.setPosition, this), //this allows to re-position container when form size is changed \r\n                rendered: $.proxy(function(){\r\n                    /**        \r\n                    Fired when container is shown and form is rendered (for select will wait for loading dropdown options).  \r\n                    **Note:** Bootstrap popover has own `shown` event that now cannot be separated from x-editable's one.\r\n                    The workaround is to check `arguments.length` that is always `2` for x-editable.                     \r\n                    \r\n                    @event shown \r\n                    @param {Object} event event object\r\n                    @example\r\n                    $('#username').on('shown', function(e, editable) {\r\n                        editable.input.$input.val('overwriting value of input..');\r\n                    });                     \r\n                    **/                      \r\n                    /*\r\n                     TODO: added second param mainly to distinguish from bootstrap's shown event. It's a hotfix that will be solved in future versions via namespaced events.  \r\n                    */\r\n                    this.$element.triggerHandler('shown', $(this.options.scope).data('editable')); \r\n                }, this) \r\n            })\r\n            .editableform('render');\r\n        },        \r\n\r\n        /**\r\n        Shows container with form\r\n        @method show()\r\n        @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\r\n        **/\r\n        /* Note: poshytip owerwrites this method totally! */          \r\n        show: function (closeAll) {\r\n            this.$element.addClass('editable-open');\r\n            if(closeAll !== false) {\r\n                //close all open containers (except this)\r\n                this.closeOthers(this.$element[0]);  \r\n            }\r\n            \r\n            //show container itself\r\n            this.innerShow();\r\n            this.tip().addClass(this.containerClass);\r\n\r\n            /*\r\n            Currently, form is re-rendered on every show. \r\n            The main reason is that we dont know, what will container do with content when closed:\r\n            remove(), detach() or just hide() - it depends on container.\r\n            \r\n            Detaching form itself before hide and re-insert before show is good solution, \r\n            but visually it looks ugly --> container changes size before hide.  \r\n            */             \r\n            \r\n            //if form already exist - delete previous data \r\n            if(this.$form) {\r\n                //todo: destroy prev data!\r\n                //this.$form.destroy();\r\n            }\r\n\r\n            this.$form = $('<div>');\r\n            \r\n            //insert form into container body\r\n            if(this.tip().is(this.innerCss)) {\r\n                //for inline container\r\n                this.tip().append(this.$form); \r\n            } else {\r\n                this.tip().find(this.innerCss).append(this.$form);\r\n            } \r\n            \r\n            //render form\r\n            this.renderForm();\r\n        },\r\n\r\n        /**\r\n        Hides container with form\r\n        @method hide()\r\n        @param {string} reason Reason caused hiding. Can be <code>save|cancel|onblur|nochange|undefined (=manual)</code>\r\n        **/         \r\n        hide: function(reason) {  \r\n            if(!this.tip() || !this.tip().is(':visible') || !this.$element.hasClass('editable-open')) {\r\n                return;\r\n            }\r\n            \r\n            //if form is saving value, schedule hide\r\n            if(this.$form.data('editableform').isSaving) {\r\n                this.delayedHide = {reason: reason};\r\n                return;    \r\n            } else {\r\n                this.delayedHide = false;\r\n            }\r\n\r\n            this.$element.removeClass('editable-open');   \r\n            this.innerHide();\r\n\r\n            /**\r\n            Fired when container was hidden. It occurs on both save or cancel.  \r\n            **Note:** Bootstrap popover has own `hidden` event that now cannot be separated from x-editable's one.\r\n            The workaround is to check `arguments.length` that is always `2` for x-editable. \r\n\r\n            @event hidden \r\n            @param {object} event event object\r\n            @param {string} reason Reason caused hiding. Can be <code>save|cancel|onblur|nochange|manual</code>\r\n            @example\r\n            $('#username').on('hidden', function(e, reason) {\r\n                if(reason === 'save' || reason === 'cancel') {\r\n                    //auto-open next editable\r\n                    $(this).closest('tr').next().find('.editable').editable('show');\r\n                } \r\n            });\r\n            **/\r\n            this.$element.triggerHandler('hidden', reason || 'manual');   \r\n        },\r\n\r\n        /* internal show method. To be overwritten in child classes */\r\n        innerShow: function () {\r\n             \r\n        },        \r\n\r\n        /* internal hide method. To be overwritten in child classes */\r\n        innerHide: function () {\r\n\r\n        },\r\n        \r\n        /**\r\n        Toggles container visibility (show / hide)\r\n        @method toggle()\r\n        @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\r\n        **/          \r\n        toggle: function(closeAll) {\r\n            if(this.container() && this.tip() && this.tip().is(':visible')) {\r\n                this.hide();\r\n            } else {\r\n                this.show(closeAll);\r\n            } \r\n        },\r\n\r\n        /*\r\n        Updates the position of container when content changed.\r\n        @method setPosition()\r\n        */       \r\n        setPosition: function() {\r\n            //tbd in child class\r\n        },\r\n\r\n        save: function(e, params) {\r\n            /**        \r\n            Fired when new value was submitted. You can use <code>$(this).data('editableContainer')</code> inside handler to access to editableContainer instance\r\n            \r\n            @event save \r\n            @param {Object} event event object\r\n            @param {Object} params additional params\r\n            @param {mixed} params.newValue submitted value\r\n            @param {Object} params.response ajax response\r\n            @example\r\n            $('#username').on('save', function(e, params) {\r\n                //assuming server response: '{success: true}'\r\n                var pk = $(this).data('editableContainer').options.pk;\r\n                if(params.response && params.response.success) {\r\n                    alert('value: ' + params.newValue + ' with pk: ' + pk + ' saved!');\r\n                } else {\r\n                    alert('error!'); \r\n                } \r\n            });\r\n            **/             \r\n            this.$element.triggerHandler('save', params);\r\n            \r\n            //hide must be after trigger, as saving value may require methods of plugin, applied to input\r\n            this.hide('save');\r\n        },\r\n\r\n        /**\r\n        Sets new option\r\n        \r\n        @method option(key, value)\r\n        @param {string} key \r\n        @param {mixed} value \r\n        **/         \r\n        option: function(key, value) {\r\n            this.options[key] = value;\r\n            if(key in this.containerOptions) {\r\n                this.containerOptions[key] = value;\r\n                this.setContainerOption(key, value); \r\n            } else {\r\n                this.formOptions[key] = value;\r\n                if(this.$form) {\r\n                    this.$form.editableform('option', key, value);  \r\n                }\r\n            }\r\n        },\r\n        \r\n        setContainerOption: function(key, value) {\r\n            this.call('option', key, value);\r\n        },\r\n\r\n        /**\r\n        Destroys the container instance\r\n        @method destroy()\r\n        **/        \r\n        destroy: function() {\r\n            this.hide();\r\n            this.innerDestroy();\r\n            this.$element.off('destroyed');\r\n            this.$element.removeData('editableContainer');\r\n        },\r\n        \r\n        /* to be overwritten in child classes */\r\n        innerDestroy: function() {\r\n            \r\n        }, \r\n        \r\n        /*\r\n        Closes other containers except one related to passed element. \r\n        Other containers can be cancelled or submitted (depends on onblur option)\r\n        */\r\n        closeOthers: function(element) {\r\n            $('.editable-open').each(function(i, el){\r\n                //do nothing with passed element and it's children\r\n                if(el === element || $(el).find(element).length) {\r\n                    return;\r\n                }\r\n\r\n                //otherwise cancel or submit all open containers \r\n                var $el = $(el),\r\n                ec = $el.data('editableContainer');\r\n\r\n                if(!ec) {\r\n                    return;  \r\n                }\r\n                \r\n                if(ec.options.onblur === 'cancel') {\r\n                    $el.data('editableContainer').hide('onblur');\r\n                } else if(ec.options.onblur === 'submit') {\r\n                    $el.data('editableContainer').tip().find('form').submit();\r\n                }\r\n            });\r\n\r\n        },\r\n        \r\n        /**\r\n        Activates input of visible container (e.g. set focus)\r\n        @method activate()\r\n        **/         \r\n        activate: function() {\r\n            if(this.tip && this.tip().is(':visible') && this.$form) {\r\n               this.$form.data('editableform').input.activate(); \r\n            }\r\n        } \r\n\r\n    };\r\n\r\n    /**\r\n    jQuery method to initialize editableContainer.\r\n    \r\n    @method $().editableContainer(options)\r\n    @params {Object} options\r\n    @example\r\n    $('#edit').editableContainer({\r\n        type: 'text',\r\n        url: '/post',\r\n        pk: 1,\r\n        value: 'hello'\r\n    });\r\n    **/  \r\n    $.fn.editableContainer = function (option) {\r\n        var args = arguments;\r\n        return this.each(function () {\r\n            var $this = $(this),\r\n            dataKey = 'editableContainer', \r\n            data = $this.data(dataKey),\r\n            options = typeof option === 'object' && option,\r\n            Constructor = (options.mode === 'inline') ? Inline : Popup;             \r\n\r\n            if (!data) {\r\n                $this.data(dataKey, (data = new Constructor(this, options)));\r\n            }\r\n\r\n            if (typeof option === 'string') { //call method \r\n                data[option].apply(data, Array.prototype.slice.call(args, 1));\r\n            }            \r\n        });\r\n    };     \r\n\r\n    //store constructors\r\n    $.fn.editableContainer.Popup = Popup;\r\n    $.fn.editableContainer.Inline = Inline;\r\n\r\n    //defaults\r\n    $.fn.editableContainer.defaults = {\r\n        /**\r\n        Initial value of form input\r\n\r\n        @property value \r\n        @type mixed\r\n        @default null\r\n        @private\r\n        **/        \r\n        value: null,\r\n        /**\r\n        Placement of container relative to element. Can be <code>top|right|bottom|left</code>. Not used for inline container.\r\n\r\n        @property placement \r\n        @type string\r\n        @default 'top'\r\n        **/        \r\n        placement: 'top',\r\n        /**\r\n        Whether to hide container on save/cancel.\r\n\r\n        @property autohide \r\n        @type boolean\r\n        @default true\r\n        @private \r\n        **/        \r\n        autohide: true,\r\n        /**\r\n        Action when user clicks outside the container. Can be <code>cancel|submit|ignore</code>.  \r\n        Setting <code>ignore</code> allows to have several containers open. \r\n\r\n        @property onblur \r\n        @type string\r\n        @default 'cancel'\r\n        @since 1.1.1\r\n        **/        \r\n        onblur: 'cancel',\r\n        \r\n        /**\r\n        Animation speed (inline mode only)\r\n        @property anim \r\n        @type string\r\n        @default false\r\n        **/        \r\n        anim: false,\r\n        \r\n        /**\r\n        Mode of editable, can be `popup` or `inline` \r\n        \r\n        @property mode \r\n        @type string         \r\n        @default 'popup'\r\n        @since 1.4.0        \r\n        **/        \r\n        mode: 'popup'        \r\n    };\r\n\r\n    /* \r\n    * workaround to have 'destroyed' event to destroy popover when element is destroyed\r\n    * see http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom\r\n    */\r\n    jQuery.event.special.destroyed = {\r\n        remove: function(o) {\r\n            if (o.handler) {\r\n                o.handler();\r\n            }\r\n        }\r\n    };    \r\n\r\n}(window.jQuery));\r\n\r\n/**\r\n* Editable Inline \r\n* ---------------------\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    //copy prototype from EditableContainer\r\n    //extend methods\r\n    $.extend($.fn.editableContainer.Inline.prototype, $.fn.editableContainer.Popup.prototype, {\r\n        containerName: 'editableform',\r\n        innerCss: '.editable-inline',\r\n        containerClass: 'editable-container editable-inline', //css class applied to container element\r\n                 \r\n        initContainer: function(){\r\n            //container is <span> element\r\n            this.$tip = $('<span></span>');\r\n            \r\n            //convert anim to miliseconds (int)\r\n            if(!this.options.anim) {\r\n                this.options.anim = 0;\r\n            }         \r\n        },\r\n        \r\n        splitOptions: function() {\r\n            //all options are passed to form\r\n            this.containerOptions = {};\r\n            this.formOptions = this.options;\r\n        },\r\n        \r\n        tip: function() {\r\n           return this.$tip; \r\n        },\r\n        \r\n        innerShow: function () {\r\n            this.$element.hide();\r\n            this.tip().insertAfter(this.$element).show();\r\n        }, \r\n        \r\n        innerHide: function () {\r\n            this.$tip.hide(this.options.anim, $.proxy(function() {\r\n                this.$element.show();\r\n                this.innerDestroy();\r\n            }, this)); \r\n        },\r\n        \r\n        innerDestroy: function() {\r\n            if(this.tip()) {\r\n                this.tip().empty().remove();\r\n            }\r\n        } \r\n    });\r\n\r\n}(window.jQuery));\r\n/**\r\nMakes editable any HTML element on the page. Applied as jQuery method.\r\n\r\n@class editable\r\n@uses editableContainer\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n\r\n    var Editable = function (element, options) {\r\n        this.$element = $(element);\r\n        //data-* has more priority over js options: because dynamically created elements may change data-* \r\n        this.options = $.extend({}, $.fn.editable.defaults, options, $.fn.editableutils.getConfigData(this.$element));  \r\n        if(this.options.selector) {\r\n            this.initLive();\r\n        } else {\r\n            this.init();\r\n        }\r\n        \r\n        //check for transition support\r\n        if(this.options.highlight && !$.fn.editableutils.supportsTransitions()) {\r\n            this.options.highlight = false;\r\n        }\r\n    };\r\n\r\n    Editable.prototype = {\r\n        constructor: Editable, \r\n        init: function () {\r\n            var isValueByText = false, \r\n                doAutotext, finalize;\r\n\r\n            //name\r\n            this.options.name = this.options.name || this.$element.attr('id');\r\n             \r\n            //create input of specified type. Input needed already here to convert value for initial display (e.g. show text by id for select)\r\n            //also we set scope option to have access to element inside input specific callbacks (e. g. source as function)\r\n            this.options.scope = this.$element[0]; \r\n            this.input = $.fn.editableutils.createInput(this.options);\r\n            if(!this.input) {\r\n                return; \r\n            }            \r\n\r\n            //set value from settings or by element's text\r\n            if (this.options.value === undefined || this.options.value === null) {\r\n                this.value = this.input.html2value($.trim(this.$element.html()));\r\n                isValueByText = true;\r\n            } else {\r\n                /*\r\n                  value can be string when received from 'data-value' attribute\r\n                  for complext objects value can be set as json string in data-value attribute, \r\n                  e.g. data-value=\"{city: 'Moscow', street: 'Lenina'}\"\r\n                */\r\n                this.options.value = $.fn.editableutils.tryParseJson(this.options.value, true); \r\n                if(typeof this.options.value === 'string') {\r\n                    this.value = this.input.str2value(this.options.value);\r\n                } else {\r\n                    this.value = this.options.value;\r\n                }\r\n            }\r\n            \r\n            //add 'editable' class to every editable element\r\n            this.$element.addClass('editable');\r\n            \r\n            //specifically for \"textarea\" add class .editable-pre-wrapped to keep linebreaks\r\n            if(this.input.type === 'textarea') {\r\n                this.$element.addClass('editable-pre-wrapped');\r\n            }\r\n            \r\n            //attach handler activating editable. In disabled mode it just prevent default action (useful for links)\r\n            if(this.options.toggle !== 'manual') {\r\n                this.$element.addClass('editable-click');\r\n                this.$element.on(this.options.toggle + '.editable', $.proxy(function(e){\r\n                    //prevent following link if editable enabled\r\n                    if(!this.options.disabled) {\r\n                        e.preventDefault();\r\n                    }\r\n                    \r\n                    //stop propagation not required because in document click handler it checks event target\r\n                    //e.stopPropagation();\r\n                    \r\n                    if(this.options.toggle === 'mouseenter') {\r\n                        //for hover only show container\r\n                        this.show();\r\n                    } else {\r\n                        //when toggle='click' we should not close all other containers as they will be closed automatically in document click listener\r\n                        var closeAll = (this.options.toggle !== 'click');\r\n                        this.toggle(closeAll);\r\n                    }\r\n                }, this));\r\n            } else {\r\n                this.$element.attr('tabindex', -1); //do not stop focus on element when toggled manually\r\n            }\r\n            \r\n            //if display is function it's far more convinient to have autotext = always to render correctly on init\r\n            //see https://github.com/vitalets/x-editable-yii/issues/34\r\n            if(typeof this.options.display === 'function') {\r\n                this.options.autotext = 'always';\r\n            }\r\n            \r\n            //check conditions for autotext:\r\n            switch(this.options.autotext) {\r\n              case 'always':\r\n               doAutotext = true;\r\n              break;\r\n              case 'auto':\r\n                //if element text is empty and value is defined and value not generated by text --> run autotext\r\n                doAutotext = !$.trim(this.$element.text()).length && this.value !== null && this.value !== undefined && !isValueByText;\r\n              break;\r\n              default:\r\n               doAutotext = false;\r\n            }\r\n\r\n            //depending on autotext run render() or just finilize init\r\n            $.when(doAutotext ? this.render() : true).then($.proxy(function() {\r\n                if(this.options.disabled) {\r\n                    this.disable();\r\n                } else {\r\n                    this.enable(); \r\n                }\r\n               /**        \r\n               Fired when element was initialized by `$().editable()` method. \r\n               Please note that you should setup `init` handler **before** applying `editable`. \r\n                              \r\n               @event init \r\n               @param {Object} event event object\r\n               @param {Object} editable editable instance (as here it cannot accessed via data('editable'))\r\n               @since 1.2.0\r\n               @example\r\n               $('#username').on('init', function(e, editable) {\r\n                   alert('initialized ' + editable.options.name);\r\n               });\r\n               $('#username').editable();\r\n               **/                  \r\n                this.$element.triggerHandler('init', this);\r\n            }, this));\r\n        },\r\n\r\n        /*\r\n         Initializes parent element for live editables \r\n        */\r\n        initLive: function() {\r\n           //store selector \r\n           var selector = this.options.selector;\r\n           //modify options for child elements\r\n           this.options.selector = false; \r\n           this.options.autotext = 'never';\r\n           //listen toggle events\r\n           this.$element.on(this.options.toggle + '.editable', selector, $.proxy(function(e){\r\n               var $target = $(e.target);\r\n               if(!$target.data('editable')) {\r\n                   //if delegated element initially empty, we need to clear it's text (that was manually set to `empty` by user)\r\n                   //see https://github.com/vitalets/x-editable/issues/137 \r\n                   if($target.hasClass(this.options.emptyclass)) {\r\n                      $target.empty();\r\n                   }\r\n                   $target.editable(this.options).trigger(e);\r\n               }\r\n           }, this)); \r\n        },\r\n        \r\n        /*\r\n        Renders value into element's text.\r\n        Can call custom display method from options.\r\n        Can return deferred object.\r\n        @method render()\r\n        @param {mixed} response server response (if exist) to pass into display function\r\n        */          \r\n        render: function(response) {\r\n            //do not display anything\r\n            if(this.options.display === false) {\r\n                return;\r\n            }\r\n            \r\n            //if input has `value2htmlFinal` method, we pass callback in third param to be called when source is loaded\r\n            if(this.input.value2htmlFinal) {\r\n                return this.input.value2html(this.value, this.$element[0], this.options.display, response); \r\n            //if display method defined --> use it    \r\n            } else if(typeof this.options.display === 'function') {\r\n                return this.options.display.call(this.$element[0], this.value, response);\r\n            //else use input's original value2html() method    \r\n            } else {\r\n                return this.input.value2html(this.value, this.$element[0]); \r\n            }\r\n        },\r\n        \r\n        /**\r\n        Enables editable\r\n        @method enable()\r\n        **/          \r\n        enable: function() {\r\n            this.options.disabled = false;\r\n            this.$element.removeClass('editable-disabled');\r\n            this.handleEmpty(this.isEmpty);\r\n            if(this.options.toggle !== 'manual') {\r\n                if(this.$element.attr('tabindex') === '-1') {    \r\n                    this.$element.removeAttr('tabindex');                                \r\n                }\r\n            }\r\n        },\r\n        \r\n        /**\r\n        Disables editable\r\n        @method disable()\r\n        **/         \r\n        disable: function() {\r\n            this.options.disabled = true; \r\n            this.hide();           \r\n            this.$element.addClass('editable-disabled');\r\n            this.handleEmpty(this.isEmpty);\r\n            //do not stop focus on this element\r\n            this.$element.attr('tabindex', -1);                \r\n        },\r\n        \r\n        /**\r\n        Toggles enabled / disabled state of editable element\r\n        @method toggleDisabled()\r\n        **/         \r\n        toggleDisabled: function() {\r\n            if(this.options.disabled) {\r\n                this.enable();\r\n            } else { \r\n                this.disable(); \r\n            }\r\n        },  \r\n        \r\n        /**\r\n        Sets new option\r\n        \r\n        @method option(key, value)\r\n        @param {string|object} key option name or object with several options\r\n        @param {mixed} value option new value\r\n        @example\r\n        $('.editable').editable('option', 'pk', 2);\r\n        **/          \r\n        option: function(key, value) {\r\n            //set option(s) by object\r\n            if(key && typeof key === 'object') {\r\n               $.each(key, $.proxy(function(k, v){\r\n                  this.option($.trim(k), v); \r\n               }, this)); \r\n               return;\r\n            }\r\n\r\n            //set option by string             \r\n            this.options[key] = value;                          \r\n            \r\n            //disabled\r\n            if(key === 'disabled') {\r\n               return value ? this.disable() : this.enable();\r\n            } \r\n            \r\n            //value\r\n            if(key === 'value') {\r\n                this.setValue(value);\r\n            }\r\n            \r\n            //transfer new option to container! \r\n            if(this.container) {\r\n                this.container.option(key, value);  \r\n            }\r\n             \r\n            //pass option to input directly (as it points to the same in form)\r\n            if(this.input.option) {\r\n                this.input.option(key, value);\r\n            }\r\n            \r\n        },              \r\n        \r\n        /*\r\n        * set emptytext if element is empty\r\n        */\r\n        handleEmpty: function (isEmpty) {\r\n            //do not handle empty if we do not display anything\r\n            if(this.options.display === false) {\r\n                return;\r\n            }\r\n\r\n            /* \r\n            isEmpty may be set directly as param of method.\r\n            It is required when we enable/disable field and can't rely on content \r\n            as node content is text: \"Empty\" that is not empty %)\r\n            */\r\n            if(isEmpty !== undefined) { \r\n                this.isEmpty = isEmpty;\r\n            } else {\r\n                //detect empty\r\n                //for some inputs we need more smart check\r\n                //e.g. wysihtml5 may have <br>, <p></p>, <img>\r\n                if(typeof(this.input.isEmpty) === 'function') {\r\n                    this.isEmpty = this.input.isEmpty(this.$element);                    \r\n                } else {\r\n                    this.isEmpty = $.trim(this.$element.html()) === '';\r\n                }\r\n            }           \r\n            \r\n            //emptytext shown only for enabled\r\n            if(!this.options.disabled) {\r\n                if (this.isEmpty) {\r\n                    this.$element.html(this.options.emptytext);\r\n                    if(this.options.emptyclass) {\r\n                        this.$element.addClass(this.options.emptyclass);\r\n                    }\r\n                } else if(this.options.emptyclass) {\r\n                    this.$element.removeClass(this.options.emptyclass);\r\n                }\r\n            } else {\r\n                //below required if element disable property was changed\r\n                if(this.isEmpty) {\r\n                    this.$element.empty();\r\n                    if(this.options.emptyclass) {\r\n                        this.$element.removeClass(this.options.emptyclass);\r\n                    }\r\n                }\r\n            }\r\n        },        \r\n        \r\n        /**\r\n        Shows container with form\r\n        @method show()\r\n        @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\r\n        **/  \r\n        show: function (closeAll) {\r\n            if(this.options.disabled) {\r\n                return;\r\n            }\r\n            \r\n            //init editableContainer: popover, tooltip, inline, etc..\r\n            if(!this.container) {\r\n                var containerOptions = $.extend({}, this.options, {\r\n                    value: this.value,\r\n                    input: this.input //pass input to form (as it is already created)\r\n                });\r\n                this.$element.editableContainer(containerOptions);\r\n                //listen `save` event \r\n                this.$element.on(\"save.internal\", $.proxy(this.save, this));\r\n                this.container = this.$element.data('editableContainer'); \r\n            } else if(this.container.tip().is(':visible')) {\r\n                return;\r\n            }      \r\n            \r\n            //show container\r\n            this.container.show(closeAll);\r\n        },\r\n        \r\n        /**\r\n        Hides container with form\r\n        @method hide()\r\n        **/       \r\n        hide: function () {   \r\n            if(this.container) {  \r\n                this.container.hide();\r\n            }\r\n        },\r\n        \r\n        /**\r\n        Toggles container visibility (show / hide)\r\n        @method toggle()\r\n        @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\r\n        **/  \r\n        toggle: function(closeAll) {\r\n            if(this.container && this.container.tip().is(':visible')) {\r\n                this.hide();\r\n            } else {\r\n                this.show(closeAll);\r\n            }\r\n        },\r\n        \r\n        /*\r\n        * called when form was submitted\r\n        */          \r\n        save: function(e, params) {\r\n            //mark element with unsaved class if needed\r\n            if(this.options.unsavedclass) {\r\n                /*\r\n                 Add unsaved css to element if:\r\n                  - url is not user's function \r\n                  - value was not sent to server\r\n                  - params.response === undefined, that means data was not sent\r\n                  - value changed \r\n                */\r\n                var sent = false;\r\n                sent = sent || typeof this.options.url === 'function';\r\n                sent = sent || this.options.display === false; \r\n                sent = sent || params.response !== undefined; \r\n                sent = sent || (this.options.savenochange && this.input.value2str(this.value) !== this.input.value2str(params.newValue)); \r\n                \r\n                if(sent) {\r\n                    this.$element.removeClass(this.options.unsavedclass); \r\n                } else {\r\n                    this.$element.addClass(this.options.unsavedclass);                    \r\n                }\r\n            }\r\n            \r\n            //highlight when saving\r\n            if(this.options.highlight) {\r\n                var $e = this.$element,\r\n                    bgColor = $e.css('background-color');\r\n                    \r\n                $e.css('background-color', this.options.highlight);\r\n                setTimeout(function(){\r\n                    if(bgColor === 'transparent') {\r\n                        bgColor = ''; \r\n                    }\r\n                    $e.css('background-color', bgColor);\r\n                    $e.addClass('editable-bg-transition');\r\n                    setTimeout(function(){\r\n                       $e.removeClass('editable-bg-transition');  \r\n                    }, 1700);\r\n                }, 10);\r\n            }\r\n            \r\n            //set new value\r\n            this.setValue(params.newValue, false, params.response);\r\n            \r\n            /**        \r\n            Fired when new value was submitted. You can use <code>$(this).data('editable')</code> to access to editable instance\r\n            \r\n            @event save \r\n            @param {Object} event event object\r\n            @param {Object} params additional params\r\n            @param {mixed} params.newValue submitted value\r\n            @param {Object} params.response ajax response\r\n            @example\r\n            $('#username').on('save', function(e, params) {\r\n                alert('Saved value: ' + params.newValue);\r\n            });\r\n            **/\r\n            //event itself is triggered by editableContainer. Description here is only for documentation              \r\n        },\r\n\r\n        validate: function () {\r\n            if (typeof this.options.validate === 'function') {\r\n                return this.options.validate.call(this, this.value);\r\n            }\r\n        },\r\n        \r\n        /**\r\n        Sets new value of editable\r\n        @method setValue(value, convertStr)\r\n        @param {mixed} value new value \r\n        @param {boolean} convertStr whether to convert value from string to internal format\r\n        **/         \r\n        setValue: function(value, convertStr, response) {\r\n            if(convertStr) {\r\n                this.value = this.input.str2value(value);\r\n            } else {\r\n                this.value = value;\r\n            }\r\n            if(this.container) {\r\n                this.container.option('value', this.value);\r\n            }\r\n            $.when(this.render(response))\r\n            .then($.proxy(function() {\r\n                this.handleEmpty();\r\n            }, this));\r\n        },\r\n        \r\n        /**\r\n        Activates input of visible container (e.g. set focus)\r\n        @method activate()\r\n        **/         \r\n        activate: function() {\r\n            if(this.container) {\r\n               this.container.activate(); \r\n            }\r\n        },\r\n        \r\n        /**\r\n        Removes editable feature from element\r\n        @method destroy()\r\n        **/        \r\n        destroy: function() {\r\n            this.disable();\r\n            \r\n            if(this.container) {\r\n               this.container.destroy(); \r\n            }\r\n            \r\n            this.input.destroy();\r\n\r\n            if(this.options.toggle !== 'manual') {\r\n                this.$element.removeClass('editable-click');\r\n                this.$element.off(this.options.toggle + '.editable');\r\n            } \r\n            \r\n            this.$element.off(\"save.internal\");\r\n            \r\n            this.$element.removeClass('editable editable-open editable-disabled');\r\n            this.$element.removeData('editable');\r\n        }        \r\n    };\r\n\r\n    /* EDITABLE PLUGIN DEFINITION\r\n    * ======================= */\r\n\r\n    /**\r\n    jQuery method to initialize editable element.\r\n    \r\n    @method $().editable(options)\r\n    @params {Object} options\r\n    @example\r\n    $('#username').editable({\r\n        type: 'text',\r\n        url: '/post',\r\n        pk: 1\r\n    });\r\n    **/\r\n    $.fn.editable = function (option) {\r\n        //special API methods returning non-jquery object\r\n        var result = {}, args = arguments, datakey = 'editable';\r\n        switch (option) {\r\n            /**\r\n            Runs client-side validation for all matched editables\r\n            \r\n            @method validate()\r\n            @returns {Object} validation errors map\r\n            @example\r\n            $('#username, #fullname').editable('validate');\r\n            // possible result:\r\n            {\r\n              username: \"username is required\",\r\n              fullname: \"fullname should be minimum 3 letters length\"\r\n            }\r\n            **/\r\n            case 'validate':\r\n                this.each(function () {\r\n                    var $this = $(this), data = $this.data(datakey), error;\r\n                    if (data && (error = data.validate())) {\r\n                        result[data.options.name] = error;\r\n                    }\r\n                });\r\n            return result;\r\n\r\n            /**\r\n            Returns current values of editable elements.   \r\n            Note that it returns an **object** with name-value pairs, not a value itself. It allows to get data from several elements.    \r\n            If value of some editable is `null` or `undefined` it is excluded from result object.\r\n            When param `isSingle` is set to **true** - it is supposed you have single element and will return value of editable instead of object.   \r\n             \r\n            @method getValue()\r\n            @param {bool} isSingle whether to return just value of single element\r\n            @returns {Object} object of element names and values\r\n            @example\r\n            $('#username, #fullname').editable('getValue');\r\n            //result:\r\n            {\r\n            username: \"superuser\",\r\n            fullname: \"John\"\r\n            }\r\n            //isSingle = true\r\n            $('#username').editable('getValue', true);\r\n            //result \"superuser\" \r\n            **/\r\n            case 'getValue':\r\n                if(arguments.length === 2 && arguments[1] === true) { //isSingle = true\r\n                    result = this.eq(0).data(datakey).value;\r\n                } else {\r\n                    this.each(function () {\r\n                        var $this = $(this), data = $this.data(datakey);\r\n                        if (data && data.value !== undefined && data.value !== null) {\r\n                            result[data.options.name] = data.input.value2submit(data.value);\r\n                        }\r\n                    });\r\n                }\r\n            return result;\r\n\r\n            /**\r\n            This method collects values from several editable elements and submit them all to server.   \r\n            Internally it runs client-side validation for all fields and submits only in case of success.  \r\n            See <a href=\"#newrecord\">creating new records</a> for details.  \r\n            Since 1.5.1 `submit` can be applied to single element to send data programmatically. In that case\r\n            `url`, `success` and `error` is taken from initial options and you can just call `$('#username').editable('submit')`. \r\n            \r\n            @method submit(options)\r\n            @param {object} options \r\n            @param {object} options.url url to submit data \r\n            @param {object} options.data additional data to submit\r\n            @param {object} options.ajaxOptions additional ajax options\r\n            @param {function} options.error(obj) error handler \r\n            @param {function} options.success(obj,config) success handler\r\n            @returns {Object} jQuery object\r\n            **/\r\n            case 'submit':  //collects value, validate and submit to server for creating new record\r\n                var config = arguments[1] || {},\r\n                $elems = this,\r\n                errors = this.editable('validate');\r\n\r\n                // validation ok\r\n                if($.isEmptyObject(errors)) {\r\n                    var ajaxOptions = {};\r\n                                                      \r\n                    // for single element use url, success etc from options\r\n                    if($elems.length === 1) {\r\n                        var editable = $elems.data('editable');\r\n                        //standard params\r\n                        var params = {\r\n                            name: editable.options.name || '',\r\n                            value: editable.input.value2submit(editable.value),\r\n                            pk: (typeof editable.options.pk === 'function') ? \r\n                                editable.options.pk.call(editable.options.scope) : \r\n                                editable.options.pk \r\n                        };\r\n\r\n                        //additional params\r\n                        if(typeof editable.options.params === 'function') {\r\n                            params = editable.options.params.call(editable.options.scope, params);  \r\n                        } else {\r\n                            //try parse json in single quotes (from data-params attribute)\r\n                            editable.options.params = $.fn.editableutils.tryParseJson(editable.options.params, true);   \r\n                            $.extend(params, editable.options.params);\r\n                        }\r\n\r\n                        ajaxOptions = {\r\n                            url: editable.options.url,\r\n                            data: params,\r\n                            type: 'POST'  \r\n                        };\r\n                        \r\n                        // use success / error from options \r\n                        config.success = config.success || editable.options.success;\r\n                        config.error = config.error || editable.options.error;\r\n                        \r\n                    // multiple elements\r\n                    } else {\r\n                        var values = this.editable('getValue'); \r\n                        \r\n                        ajaxOptions = {\r\n                            url: config.url,\r\n                            data: values, \r\n                            type: 'POST'\r\n                        };                        \r\n                    }                    \r\n\r\n                    // ajax success callabck (response 200 OK)\r\n                    ajaxOptions.success = typeof config.success === 'function' ? function(response) {\r\n                            config.success.call($elems, response, config);\r\n                        } : $.noop;\r\n                                  \r\n                    // ajax error callabck\r\n                    ajaxOptions.error = typeof config.error === 'function' ? function() {\r\n                             config.error.apply($elems, arguments);\r\n                        } : $.noop;\r\n                       \r\n                    // extend ajaxOptions    \r\n                    if(config.ajaxOptions) { \r\n                        $.extend(ajaxOptions, config.ajaxOptions);\r\n                    }\r\n                    \r\n                    // extra data \r\n                    if(config.data) {\r\n                        $.extend(ajaxOptions.data, config.data);\r\n                    }                     \r\n                    \r\n                    // perform ajax request\r\n                    $.ajax(ajaxOptions);\r\n                } else { //client-side validation error\r\n                    if(typeof config.error === 'function') {\r\n                        config.error.call($elems, errors);\r\n                    }\r\n                }\r\n            return this;\r\n        }\r\n\r\n        //return jquery object\r\n        return this.each(function () {\r\n            var $this = $(this), \r\n                data = $this.data(datakey), \r\n                options = typeof option === 'object' && option;\r\n\r\n            //for delegated targets do not store `editable` object for element\r\n            //it's allows several different selectors.\r\n            //see: https://github.com/vitalets/x-editable/issues/312    \r\n            if(options && options.selector) {\r\n                data = new Editable(this, options);\r\n                return; \r\n            }    \r\n            \r\n            if (!data) {\r\n                $this.data(datakey, (data = new Editable(this, options)));\r\n            }\r\n\r\n            if (typeof option === 'string') { //call method \r\n                data[option].apply(data, Array.prototype.slice.call(args, 1));\r\n            } \r\n        });\r\n    };    \r\n            \r\n\r\n    $.fn.editable.defaults = {\r\n        /**\r\n        Type of input. Can be <code>text|textarea|select|date|checklist</code> and more\r\n\r\n        @property type \r\n        @type string\r\n        @default 'text'\r\n        **/\r\n        type: 'text',        \r\n        /**\r\n        Sets disabled state of editable\r\n\r\n        @property disabled \r\n        @type boolean\r\n        @default false\r\n        **/         \r\n        disabled: false,\r\n        /**\r\n        How to toggle editable. Can be <code>click|dblclick|mouseenter|manual</code>.   \r\n        When set to <code>manual</code> you should manually call <code>show/hide</code> methods of editable.    \r\n        **Note**: if you call <code>show</code> or <code>toggle</code> inside **click** handler of some DOM element, \r\n        you need to apply <code>e.stopPropagation()</code> because containers are being closed on any click on document.\r\n        \r\n        @example\r\n        $('#edit-button').click(function(e) {\r\n            e.stopPropagation();\r\n            $('#username').editable('toggle');\r\n        });\r\n\r\n        @property toggle \r\n        @type string\r\n        @default 'click'\r\n        **/          \r\n        toggle: 'click',\r\n        /**\r\n        Text shown when element is empty.\r\n\r\n        @property emptytext \r\n        @type string\r\n        @default 'Empty'\r\n        **/         \r\n        emptytext: 'Empty',\r\n        /**\r\n        Allows to automatically set element's text based on it's value. Can be <code>auto|always|never</code>. Useful for select and date.\r\n        For example, if dropdown list is <code>{1: 'a', 2: 'b'}</code> and element's value set to <code>1</code>, it's html will be automatically set to <code>'a'</code>.  \r\n        <code>auto</code> - text will be automatically set only if element is empty.  \r\n        <code>always|never</code> - always(never) try to set element's text.\r\n\r\n        @property autotext \r\n        @type string\r\n        @default 'auto'\r\n        **/          \r\n        autotext: 'auto', \r\n        /**\r\n        Initial value of input. If not set, taken from element's text.  \r\n        Note, that if element's text is empty - text is automatically generated from value and can be customized (see `autotext` option).  \r\n        For example, to display currency sign:\r\n        @example\r\n        <a id=\"price\" data-type=\"text\" data-value=\"100\"></a>\r\n        <script>\r\n        $('#price').editable({\r\n            ...\r\n            display: function(value) {\r\n              $(this).text(value + '$');\r\n            } \r\n        }) \r\n        </script>\r\n                \r\n        @property value \r\n        @type mixed\r\n        @default element's text\r\n        **/\r\n        value: null,\r\n        /**\r\n        Callback to perform custom displaying of value in element's text.  \r\n        If `null`, default input's display used.  \r\n        If `false`, no displaying methods will be called, element's text will never change.  \r\n        Runs under element's scope.  \r\n        _**Parameters:**_  \r\n        \r\n        * `value` current value to be displayed\r\n        * `response` server response (if display called after ajax submit), since 1.4.0\r\n         \r\n        For _inputs with source_ (select, checklist) parameters are different:  \r\n          \r\n        * `value` current value to be displayed\r\n        * `sourceData` array of items for current input (e.g. dropdown items) \r\n        * `response` server response (if display called after ajax submit), since 1.4.0\r\n                  \r\n        To get currently selected items use `$.fn.editableutils.itemsByValue(value, sourceData)`.\r\n        \r\n        @property display \r\n        @type function|boolean\r\n        @default null\r\n        @since 1.2.0\r\n        @example\r\n        display: function(value, sourceData) {\r\n           //display checklist as comma-separated values\r\n           var html = [],\r\n               checked = $.fn.editableutils.itemsByValue(value, sourceData);\r\n               \r\n           if(checked.length) {\r\n               $.each(checked, function(i, v) { html.push($.fn.editableutils.escape(v.text)); });\r\n               $(this).html(html.join(', '));\r\n           } else {\r\n               $(this).empty(); \r\n           }\r\n        }\r\n        **/          \r\n        display: null,\r\n        /**\r\n        Css class applied when editable text is empty.\r\n\r\n        @property emptyclass \r\n        @type string\r\n        @since 1.4.1        \r\n        @default editable-empty\r\n        **/        \r\n        emptyclass: 'editable-empty',\r\n        /**\r\n        Css class applied when value was stored but not sent to server (`pk` is empty or `send = 'never'`).  \r\n        You may set it to `null` if you work with editables locally and submit them together.  \r\n\r\n        @property unsavedclass \r\n        @type string\r\n        @since 1.4.1        \r\n        @default editable-unsaved\r\n        **/        \r\n        unsavedclass: 'editable-unsaved',\r\n        /**\r\n        If selector is provided, editable will be delegated to the specified targets.  \r\n        Usefull for dynamically generated DOM elements.  \r\n        **Please note**, that delegated targets can't be initialized with `emptytext` and `autotext` options, \r\n        as they actually become editable only after first click.  \r\n        You should manually set class `editable-click` to these elements.  \r\n        Also, if element originally empty you should add class `editable-empty`, set `data-value=\"\"` and write emptytext into element:\r\n\r\n        @property selector \r\n        @type string\r\n        @since 1.4.1        \r\n        @default null\r\n        @example\r\n        <div id=\"user\">\r\n          <!-- empty -->\r\n          <a href=\"#\" data-name=\"username\" data-type=\"text\" class=\"editable-click editable-empty\" data-value=\"\" title=\"Username\">Empty</a>\r\n          <!-- non-empty -->\r\n          <a href=\"#\" data-name=\"group\" data-type=\"select\" data-source=\"/groups\" data-value=\"1\" class=\"editable-click\" title=\"Group\">Operator</a>\r\n        </div>     \r\n        \r\n        <script>\r\n        $('#user').editable({\r\n            selector: 'a',\r\n            url: '/post',\r\n            pk: 1\r\n        });\r\n        </script>\r\n        **/         \r\n        selector: null,\r\n        /**\r\n        Color used to highlight element after update. Implemented via CSS3 transition, works in modern browsers.\r\n        \r\n        @property highlight \r\n        @type string|boolean\r\n        @since 1.4.5        \r\n        @default #FFFF80 \r\n        **/\r\n        highlight: '#FFFF80'\r\n    };\r\n    \r\n}(window.jQuery));\r\n\r\n/**\r\nAbstractInput - base class for all editable inputs.\r\nIt defines interface to be implemented by any input type.\r\nTo create your own input you can inherit from this class.\r\n\r\n@class abstractinput\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n\r\n    //types\r\n    $.fn.editabletypes = {};\r\n\r\n    var AbstractInput = function () { };\r\n\r\n    AbstractInput.prototype = {\r\n       /**\r\n        Initializes input\r\n\r\n        @method init() \r\n        **/\r\n       init: function(type, options, defaults) {\r\n           this.type = type;\r\n           this.options = $.extend({}, defaults, options);\r\n       },\r\n\r\n       /*\r\n       this method called before render to init $tpl that is inserted in DOM\r\n       */\r\n       prerender: function() {\r\n           this.$tpl = $(this.options.tpl); //whole tpl as jquery object    \r\n           this.$input = this.$tpl;         //control itself, can be changed in render method\r\n           this.$clear = null;              //clear button\r\n           this.error = null;               //error message, if input cannot be rendered           \r\n       },\r\n       \r\n       /**\r\n        Renders input from tpl. Can return jQuery deferred object.\r\n        Can be overwritten in child objects\r\n\r\n        @method render()\r\n       **/\r\n       render: function() {\r\n\r\n       }, \r\n\r\n       /**\r\n        Sets element's html by value. \r\n\r\n        @method value2html(value, element)\r\n        @param {mixed} value\r\n        @param {DOMElement} element\r\n       **/\r\n       value2html: function(value, element) {\r\n           $(element)[this.options.escape ? 'text' : 'html']($.trim(value));\r\n       },\r\n\r\n       /**\r\n        Converts element's html to value\r\n\r\n        @method html2value(html)\r\n        @param {string} html\r\n        @returns {mixed}\r\n       **/\r\n       html2value: function(html) {\r\n           return $('<div>').html(html).text();\r\n       },\r\n\r\n       /**\r\n        Converts value to string (for internal compare). For submitting to server used value2submit().\r\n\r\n        @method value2str(value) \r\n        @param {mixed} value\r\n        @returns {string}\r\n       **/\r\n       value2str: function(value) {\r\n           return value;\r\n       }, \r\n\r\n       /**\r\n        Converts string received from server into value. Usually from `data-value` attribute.\r\n\r\n        @method str2value(str)\r\n        @param {string} str\r\n        @returns {mixed}\r\n       **/\r\n       str2value: function(str) {\r\n           return str;\r\n       }, \r\n       \r\n       /**\r\n        Converts value for submitting to server. Result can be string or object.\r\n\r\n        @method value2submit(value) \r\n        @param {mixed} value\r\n        @returns {mixed}\r\n       **/\r\n       value2submit: function(value) {\r\n           return value;\r\n       },\r\n\r\n       /**\r\n        Sets value of input.\r\n\r\n        @method value2input(value) \r\n        @param {mixed} value\r\n       **/\r\n       value2input: function(value) {\r\n           this.$input.val(value);\r\n       },\r\n\r\n       /**\r\n        Returns value of input. Value can be object (e.g. datepicker)\r\n\r\n        @method input2value() \r\n       **/\r\n       input2value: function() { \r\n           return this.$input.val();\r\n       }, \r\n\r\n       /**\r\n        Activates input. For text it sets focus.\r\n\r\n        @method activate() \r\n       **/\r\n       activate: function() {\r\n           if(this.$input.is(':visible')) {\r\n               this.$input.focus();\r\n           }\r\n       },\r\n\r\n       /**\r\n        Creates input.\r\n\r\n        @method clear() \r\n       **/        \r\n       clear: function() {\r\n           this.$input.val(null);\r\n       },\r\n\r\n       /**\r\n        method to escape html.\r\n       **/\r\n       escape: function(str) {\r\n           return $('<div>').text(str).html();\r\n       },\r\n       \r\n       /**\r\n        attach handler to automatically submit form when value changed (useful when buttons not shown)\r\n       **/\r\n       autosubmit: function() {\r\n        \r\n       },\r\n       \r\n       /**\r\n       Additional actions when destroying element \r\n       **/\r\n       destroy: function() {\r\n       },\r\n\r\n       // -------- helper functions --------\r\n       setClass: function() {          \r\n           if(this.options.inputclass) {\r\n               this.$input.addClass(this.options.inputclass); \r\n           } \r\n       },\r\n\r\n       setAttr: function(attr) {\r\n           if (this.options[attr] !== undefined && this.options[attr] !== null) {\r\n               this.$input.attr(attr, this.options[attr]);\r\n           } \r\n       },\r\n       \r\n       option: function(key, value) {\r\n            this.options[key] = value;\r\n       }\r\n       \r\n    };\r\n        \r\n    AbstractInput.defaults = {  \r\n        /**\r\n        HTML template of input. Normally you should not change it.\r\n\r\n        @property tpl \r\n        @type string\r\n        @default ''\r\n        **/   \r\n        tpl: '',\r\n        /**\r\n        CSS class automatically applied to input\r\n        \r\n        @property inputclass \r\n        @type string\r\n        @default null\r\n        **/         \r\n        inputclass: null,\r\n        \r\n        /**\r\n        If `true` - html will be escaped in content of element via $.text() method.  \r\n        If `false` - html will not be escaped, $.html() used.  \r\n        When you use own `display` function, this option obviosly has no effect.\r\n        \r\n        @property escape \r\n        @type boolean\r\n        @since 1.5.0\r\n        @default true\r\n        **/         \r\n        escape: true,\r\n                \r\n        //scope for external methods (e.g. source defined as function)\r\n        //for internal use only\r\n        scope: null,\r\n        \r\n        //need to re-declare showbuttons here to get it's value from common config (passed only options existing in defaults)\r\n        showbuttons: true \r\n    };\r\n    \r\n    $.extend($.fn.editabletypes, {abstractinput: AbstractInput});\r\n        \r\n}(window.jQuery));\r\n\r\n/**\r\nList - abstract class for inputs that have source option loaded from js array or via ajax\r\n\r\n@class list\r\n@extends abstractinput\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var List = function (options) {\r\n       \r\n    };\r\n\r\n    $.fn.editableutils.inherit(List, $.fn.editabletypes.abstractinput);\r\n\r\n    $.extend(List.prototype, {\r\n        render: function () {\r\n            var deferred = $.Deferred();\r\n\r\n            this.error = null;\r\n            this.onSourceReady(function () {\r\n                this.renderList();\r\n                deferred.resolve();\r\n            }, function () {\r\n                this.error = this.options.sourceError;\r\n                deferred.resolve();\r\n            });\r\n\r\n            return deferred.promise();\r\n        },\r\n\r\n        html2value: function (html) {\r\n            return null; //can't set value by text\r\n        },\r\n        \r\n        value2html: function (value, element, display, response) {\r\n            var deferred = $.Deferred(),\r\n                success = function () {\r\n                    if(typeof display === 'function') {\r\n                        //custom display method\r\n                        display.call(element, value, this.sourceData, response); \r\n                    } else {\r\n                        this.value2htmlFinal(value, element);\r\n                    }\r\n                    deferred.resolve();\r\n               };\r\n            \r\n            //for null value just call success without loading source\r\n            if(value === null) {\r\n               success.call(this);   \r\n            } else {\r\n               this.onSourceReady(success, function () { deferred.resolve(); });\r\n            }\r\n\r\n            return deferred.promise();\r\n        },  \r\n\r\n        // ------------- additional functions ------------\r\n\r\n        onSourceReady: function (success, error) {\r\n            //run source if it function\r\n            var source;\r\n            if ($.isFunction(this.options.source)) {\r\n                source = this.options.source.call(this.options.scope);\r\n                this.sourceData = null;\r\n                //note: if function returns the same source as URL - sourceData will be taken from cahce and no extra request performed\r\n            } else {\r\n                source = this.options.source;\r\n            }            \r\n            \r\n            //if allready loaded just call success\r\n            if(this.options.sourceCache && $.isArray(this.sourceData)) {\r\n                success.call(this);\r\n                return; \r\n            }\r\n\r\n            //try parse json in single quotes (for double quotes jquery does automatically)\r\n            try {\r\n                source = $.fn.editableutils.tryParseJson(source, false);\r\n            } catch (e) {\r\n                error.call(this);\r\n                return;\r\n            }\r\n\r\n            //loading from url\r\n            if (typeof source === 'string') {\r\n                //try to get sourceData from cache\r\n                if(this.options.sourceCache) {\r\n                    var cacheID = source,\r\n                    cache;\r\n\r\n                    if (!$(document).data(cacheID)) {\r\n                        $(document).data(cacheID, {});\r\n                    }\r\n                    cache = $(document).data(cacheID);\r\n\r\n                    //check for cached data\r\n                    if (cache.loading === false && cache.sourceData) { //take source from cache\r\n                        this.sourceData = cache.sourceData;\r\n                        this.doPrepend();\r\n                        success.call(this);\r\n                        return;\r\n                    } else if (cache.loading === true) { //cache is loading, put callback in stack to be called later\r\n                        cache.callbacks.push($.proxy(function () {\r\n                            this.sourceData = cache.sourceData;\r\n                            this.doPrepend();\r\n                            success.call(this);\r\n                        }, this));\r\n\r\n                        //also collecting error callbacks\r\n                        cache.err_callbacks.push($.proxy(error, this));\r\n                        return;\r\n                    } else { //no cache yet, activate it\r\n                        cache.loading = true;\r\n                        cache.callbacks = [];\r\n                        cache.err_callbacks = [];\r\n                    }\r\n                }\r\n                \r\n                //ajaxOptions for source. Can be overwritten bt options.sourceOptions\r\n                var ajaxOptions = $.extend({\r\n                    url: source,\r\n                    type: 'get',\r\n                    cache: false,\r\n                    dataType: 'json',\r\n                    success: $.proxy(function (data) {\r\n                        if(cache) {\r\n                            cache.loading = false;\r\n                        }\r\n                        this.sourceData = this.makeArray(data);\r\n                        if($.isArray(this.sourceData)) {\r\n                            if(cache) {\r\n                                //store result in cache\r\n                                cache.sourceData = this.sourceData;\r\n                                //run success callbacks for other fields waiting for this source\r\n                                $.each(cache.callbacks, function () { this.call(); }); \r\n                            }\r\n                            this.doPrepend();\r\n                            success.call(this);\r\n                        } else {\r\n                            error.call(this);\r\n                            if(cache) {\r\n                                //run error callbacks for other fields waiting for this source\r\n                                $.each(cache.err_callbacks, function () { this.call(); }); \r\n                            }\r\n                        }\r\n                    }, this),\r\n                    error: $.proxy(function () {\r\n                        error.call(this);\r\n                        if(cache) {\r\n                             cache.loading = false;\r\n                             //run error callbacks for other fields\r\n                             $.each(cache.err_callbacks, function () { this.call(); }); \r\n                        }\r\n                    }, this)\r\n                }, this.options.sourceOptions);\r\n                \r\n                //loading sourceData from server\r\n                $.ajax(ajaxOptions);\r\n                \r\n            } else { //options as json/array\r\n                this.sourceData = this.makeArray(source);\r\n                    \r\n                if($.isArray(this.sourceData)) {\r\n                    this.doPrepend();\r\n                    success.call(this);   \r\n                } else {\r\n                    error.call(this);\r\n                }\r\n            }\r\n        },\r\n\r\n        doPrepend: function () {\r\n            if(this.options.prepend === null || this.options.prepend === undefined) {\r\n                return;  \r\n            }\r\n            \r\n            if(!$.isArray(this.prependData)) {\r\n                //run prepend if it is function (once)\r\n                if ($.isFunction(this.options.prepend)) {\r\n                    this.options.prepend = this.options.prepend.call(this.options.scope);\r\n                }\r\n              \r\n                //try parse json in single quotes\r\n                this.options.prepend = $.fn.editableutils.tryParseJson(this.options.prepend, true);\r\n                \r\n                //convert prepend from string to object\r\n                if (typeof this.options.prepend === 'string') {\r\n                    this.options.prepend = {'': this.options.prepend};\r\n                }\r\n                \r\n                this.prependData = this.makeArray(this.options.prepend);\r\n            }\r\n\r\n            if($.isArray(this.prependData) && $.isArray(this.sourceData)) {\r\n                this.sourceData = this.prependData.concat(this.sourceData);\r\n            }\r\n        },\r\n\r\n        /*\r\n         renders input list\r\n        */\r\n        renderList: function() {\r\n            // this method should be overwritten in child class\r\n        },\r\n       \r\n         /*\r\n         set element's html by value\r\n        */\r\n        value2htmlFinal: function(value, element) {\r\n            // this method should be overwritten in child class\r\n        },        \r\n\r\n        /**\r\n        * convert data to array suitable for sourceData, e.g. [{value: 1, text: 'abc'}, {...}]\r\n        */\r\n        makeArray: function(data) {\r\n            var count, obj, result = [], item, iterateItem;\r\n            if(!data || typeof data === 'string') {\r\n                return null; \r\n            }\r\n\r\n            if($.isArray(data)) { //array\r\n                /* \r\n                   function to iterate inside item of array if item is object.\r\n                   Caclulates count of keys in item and store in obj. \r\n                */\r\n                iterateItem = function (k, v) {\r\n                    obj = {value: k, text: v};\r\n                    if(count++ >= 2) {\r\n                        return false;// exit from `each` if item has more than one key.\r\n                    }\r\n                };\r\n            \r\n                for(var i = 0; i < data.length; i++) {\r\n                    item = data[i]; \r\n                    if(typeof item === 'object') {\r\n                        count = 0; //count of keys inside item\r\n                        $.each(item, iterateItem);\r\n                        //case: [{val1: 'text1'}, {val2: 'text2} ...]\r\n                        if(count === 1) { \r\n                            result.push(obj); \r\n                            //case: [{value: 1, text: 'text1'}, {value: 2, text: 'text2'}, ...]\r\n                        } else if(count > 1) {\r\n                            //removed check of existance: item.hasOwnProperty('value') && item.hasOwnProperty('text')\r\n                            if(item.children) {\r\n                                item.children = this.makeArray(item.children);   \r\n                            }\r\n                            result.push(item);\r\n                        }\r\n                    } else {\r\n                        //case: ['text1', 'text2' ...]\r\n                        result.push({value: item, text: item}); \r\n                    }\r\n                }\r\n            } else {  //case: {val1: 'text1', val2: 'text2, ...}\r\n                $.each(data, function (k, v) {\r\n                    result.push({value: k, text: v});\r\n                });  \r\n            }\r\n            return result;\r\n        },\r\n        \r\n        option: function(key, value) {\r\n            this.options[key] = value;\r\n            if(key === 'source') {\r\n                this.sourceData = null;\r\n            }\r\n            if(key === 'prepend') {\r\n                this.prependData = null;\r\n            }            \r\n        }        \r\n\r\n    });      \r\n\r\n    List.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n        /**\r\n        Source data for list.  \r\n        If **array** - it should be in format: `[{value: 1, text: \"text1\"}, {value: 2, text: \"text2\"}, ...]`  \r\n        For compability, object format is also supported: `{\"1\": \"text1\", \"2\": \"text2\" ...}` but it does not guarantee elements order.\r\n        \r\n        If **string** - considered ajax url to load items. In that case results will be cached for fields with the same source and name. See also `sourceCache` option.\r\n          \r\n        If **function**, it should return data in format above (since 1.4.0).\r\n        \r\n        Since 1.4.1 key `children` supported to render OPTGROUP (for **select** input only).  \r\n        `[{text: \"group1\", children: [{value: 1, text: \"text1\"}, {value: 2, text: \"text2\"}]}, ...]` \r\n\r\n\t\t\r\n        @property source \r\n        @type string | array | object | function\r\n        @default null\r\n        **/         \r\n        source: null, \r\n        /**\r\n        Data automatically prepended to the beginning of dropdown list.\r\n        \r\n        @property prepend \r\n        @type string | array | object | function\r\n        @default false\r\n        **/         \r\n        prepend: false,\r\n        /**\r\n        Error message when list cannot be loaded (e.g. ajax error)\r\n        \r\n        @property sourceError \r\n        @type string\r\n        @default Error when loading list\r\n        **/          \r\n        sourceError: 'Error when loading list',\r\n        /**\r\n        if <code>true</code> and source is **string url** - results will be cached for fields with the same source.    \r\n        Usefull for editable column in grid to prevent extra requests.\r\n        \r\n        @property sourceCache \r\n        @type boolean\r\n        @default true\r\n        @since 1.2.0\r\n        **/        \r\n        sourceCache: true,\r\n        /**\r\n        Additional ajax options to be used in $.ajax() when loading list from server.\r\n        Useful to send extra parameters (`data` key) or change request method (`type` key).\r\n        \r\n        @property sourceOptions \r\n        @type object|function\r\n        @default null\r\n        @since 1.5.0\r\n        **/        \r\n        sourceOptions: null\r\n    });\r\n\r\n    $.fn.editabletypes.list = List;      \r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nText input\r\n\r\n@class text\r\n@extends abstractinput\r\n@final\r\n@example\r\n<a href=\"#\" id=\"username\" data-type=\"text\" data-pk=\"1\">awesome</a>\r\n<script>\r\n$(function(){\r\n    $('#username').editable({\r\n        url: '/post',\r\n        title: 'Enter username'\r\n    });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Text = function (options) {\r\n        this.init('text', options, Text.defaults);\r\n    };\r\n\r\n    $.fn.editableutils.inherit(Text, $.fn.editabletypes.abstractinput);\r\n\r\n    $.extend(Text.prototype, {\r\n        render: function() {\r\n           this.renderClear();\r\n           this.setClass();\r\n           this.setAttr('placeholder');\r\n        },\r\n        \r\n        activate: function() {\r\n            if(this.$input.is(':visible')) {\r\n                this.$input.focus();\r\n                $.fn.editableutils.setCursorPosition(this.$input.get(0), this.$input.val().length);\r\n                if(this.toggleClear) {\r\n                    this.toggleClear();\r\n                }\r\n            }\r\n        },\r\n        \r\n        //render clear button\r\n        renderClear:  function() {\r\n           if (this.options.clear) {\r\n               this.$clear = $('<span class=\"editable-clear-x\"></span>');\r\n               this.$input.after(this.$clear)\r\n                          .css('padding-right', 24)\r\n                          .keyup($.proxy(function(e) {\r\n                              //arrows, enter, tab, etc\r\n                              if(~$.inArray(e.keyCode, [40,38,9,13,27])) {\r\n                                return;\r\n                              }                            \r\n\r\n                              clearTimeout(this.t);\r\n                              var that = this;\r\n                              this.t = setTimeout(function() {\r\n                                that.toggleClear(e);\r\n                              }, 100);\r\n                              \r\n                          }, this))\r\n                          .parent().css('position', 'relative');\r\n                          \r\n               this.$clear.click($.proxy(this.clear, this));                       \r\n           }            \r\n        },\r\n        \r\n        postrender: function() {\r\n            /*\r\n            //now `clear` is positioned via css\r\n            if(this.$clear) {\r\n                //can position clear button only here, when form is shown and height can be calculated\r\n//                var h = this.$input.outerHeight(true) || 20,\r\n                var h = this.$clear.parent().height(),\r\n                    delta = (h - this.$clear.height()) / 2;\r\n                    \r\n                //this.$clear.css({bottom: delta, right: delta});\r\n            }\r\n            */ \r\n        },\r\n        \r\n        //show / hide clear button\r\n        toggleClear: function(e) {\r\n            if(!this.$clear) {\r\n                return;\r\n            }\r\n            \r\n            var len = this.$input.val().length,\r\n                visible = this.$clear.is(':visible');\r\n                 \r\n            if(len && !visible) {\r\n                this.$clear.show();\r\n            } \r\n            \r\n            if(!len && visible) {\r\n                this.$clear.hide();\r\n            } \r\n        },\r\n        \r\n        clear: function() {\r\n           this.$clear.hide();\r\n           this.$input.val('').focus();\r\n        }          \r\n    });\r\n\r\n    Text.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n        /**\r\n        @property tpl \r\n        @default <input type=\"text\">\r\n        **/         \r\n        tpl: '<input type=\"text\">',\r\n        /**\r\n        Placeholder attribute of input. Shown when input is empty.\r\n\r\n        @property placeholder \r\n        @type string\r\n        @default null\r\n        **/             \r\n        placeholder: null,\r\n        \r\n        /**\r\n        Whether to show `clear` button \r\n        \r\n        @property clear \r\n        @type boolean\r\n        @default true        \r\n        **/\r\n        clear: true\r\n    });\r\n\r\n    $.fn.editabletypes.text = Text;\r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nTextarea input\r\n\r\n@class textarea\r\n@extends abstractinput\r\n@final\r\n@example\r\n<a href=\"#\" id=\"comments\" data-type=\"textarea\" data-pk=\"1\">awesome comment!</a>\r\n<script>\r\n$(function(){\r\n    $('#comments').editable({\r\n        url: '/post',\r\n        title: 'Enter comments',\r\n        rows: 10\r\n    });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Textarea = function (options) {\r\n        this.init('textarea', options, Textarea.defaults);\r\n    };\r\n\r\n    $.fn.editableutils.inherit(Textarea, $.fn.editabletypes.abstractinput);\r\n\r\n    $.extend(Textarea.prototype, {\r\n        render: function () {\r\n            this.setClass();\r\n            this.setAttr('placeholder');\r\n            this.setAttr('rows');                        \r\n            \r\n            //ctrl + enter\r\n            this.$input.keydown(function (e) {\r\n                if (e.ctrlKey && e.which === 13) {\r\n                    $(this).closest('form').submit();\r\n                }\r\n            });\r\n        },\r\n        \r\n       //using `white-space: pre-wrap` solves \\n  <--> BR conversion very elegant!\r\n       /* \r\n       value2html: function(value, element) {\r\n            var html = '', lines;\r\n            if(value) {\r\n                lines = value.split(\"\\n\");\r\n                for (var i = 0; i < lines.length; i++) {\r\n                    lines[i] = $('<div>').text(lines[i]).html();\r\n                }\r\n                html = lines.join('<br>');\r\n            }\r\n            $(element).html(html);\r\n        },\r\n       \r\n        html2value: function(html) {\r\n            if(!html) {\r\n                return '';\r\n            }\r\n\r\n            var regex = new RegExp(String.fromCharCode(10), 'g');\r\n            var lines = html.split(/<br\\s*\\/?>/i);\r\n            for (var i = 0; i < lines.length; i++) {\r\n                var text = $('<div>').html(lines[i]).text();\r\n\r\n                // Remove newline characters (\\n) to avoid them being converted by value2html() method\r\n                // thus adding extra <br> tags\r\n                text = text.replace(regex, '');\r\n\r\n                lines[i] = text;\r\n            }\r\n            return lines.join(\"\\n\");\r\n        },\r\n         */\r\n        activate: function() {\r\n            $.fn.editabletypes.text.prototype.activate.call(this);\r\n        }\r\n    });\r\n\r\n    Textarea.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n        /**\r\n        @property tpl\r\n        @default <textarea></textarea>\r\n        **/\r\n        tpl:'<textarea></textarea>',\r\n        /**\r\n        @property inputclass\r\n        @default input-large\r\n        **/\r\n        inputclass: 'input-large',\r\n        /**\r\n        Placeholder attribute of input. Shown when input is empty.\r\n\r\n        @property placeholder\r\n        @type string\r\n        @default null\r\n        **/\r\n        placeholder: null,\r\n        /**\r\n        Number of rows in textarea\r\n\r\n        @property rows\r\n        @type integer\r\n        @default 7\r\n        **/        \r\n        rows: 7        \r\n    });\r\n\r\n    $.fn.editabletypes.textarea = Textarea;\r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nSelect (dropdown)\r\n\r\n@class select\r\n@extends list\r\n@final\r\n@example\r\n<a href=\"#\" id=\"status\" data-type=\"select\" data-pk=\"1\" data-url=\"/post\" data-title=\"Select status\"></a>\r\n<script>\r\n$(function(){\r\n    $('#status').editable({\r\n        value: 2,    \r\n        source: [\r\n              {value: 1, text: 'Active'},\r\n              {value: 2, text: 'Blocked'},\r\n              {value: 3, text: 'Deleted'}\r\n           ]\r\n    });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Select = function (options) {\r\n        this.init('select', options, Select.defaults);\r\n    };\r\n\r\n    $.fn.editableutils.inherit(Select, $.fn.editabletypes.list);\r\n\r\n    $.extend(Select.prototype, {\r\n        renderList: function() {\r\n            this.$input.empty();\r\n\r\n            var fillItems = function($el, data) {\r\n                var attr;\r\n                if($.isArray(data)) {\r\n                    for(var i=0; i<data.length; i++) {\r\n                        attr = {};\r\n                        if(data[i].children) {\r\n                            attr.label = data[i].text;\r\n                            $el.append(fillItems($('<optgroup>', attr), data[i].children)); \r\n                        } else {\r\n                            attr.value = data[i].value;\r\n                            if(data[i].disabled) {\r\n                                attr.disabled = true;\r\n                            }\r\n                            $el.append($('<option>', attr).text(data[i].text)); \r\n                        }\r\n                    }\r\n                }\r\n                return $el;\r\n            };        \r\n\r\n            fillItems(this.$input, this.sourceData);\r\n            \r\n            this.setClass();\r\n            \r\n            //enter submit\r\n            this.$input.on('keydown.editable', function (e) {\r\n                if (e.which === 13) {\r\n                    $(this).closest('form').submit();\r\n                }\r\n            });            \r\n        },\r\n       \r\n        value2htmlFinal: function(value, element) {\r\n            var text = '', \r\n                items = $.fn.editableutils.itemsByValue(value, this.sourceData);\r\n                \r\n            if(items.length) {\r\n                text = items[0].text;\r\n            }\r\n            \r\n            //$(element).text(text);\r\n            $.fn.editabletypes.abstractinput.prototype.value2html.call(this, text, element);\r\n        },\r\n        \r\n        autosubmit: function() {\r\n            this.$input.off('keydown.editable').on('change.editable', function(){\r\n                $(this).closest('form').submit();\r\n            });\r\n        }\r\n    });      \r\n\r\n    Select.defaults = $.extend({}, $.fn.editabletypes.list.defaults, {\r\n        /**\r\n        @property tpl \r\n        @default <select></select>\r\n        **/         \r\n        tpl:'<select></select>'\r\n    });\r\n\r\n    $.fn.editabletypes.select = Select;      \r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nList of checkboxes. \r\nInternally value stored as javascript array of values.\r\n\r\n@class checklist\r\n@extends list\r\n@final\r\n@example\r\n<a href=\"#\" id=\"options\" data-type=\"checklist\" data-pk=\"1\" data-url=\"/post\" data-title=\"Select options\"></a>\r\n<script>\r\n$(function(){\r\n    $('#options').editable({\r\n        value: [2, 3],    \r\n        source: [\r\n              {value: 1, text: 'option1'},\r\n              {value: 2, text: 'option2'},\r\n              {value: 3, text: 'option3'}\r\n           ]\r\n    });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Checklist = function (options) {\r\n        this.init('checklist', options, Checklist.defaults);\r\n    };\r\n\r\n    $.fn.editableutils.inherit(Checklist, $.fn.editabletypes.list);\r\n\r\n    $.extend(Checklist.prototype, {\r\n        renderList: function() {\r\n            var $label, $div;\r\n            \r\n            this.$tpl.empty();\r\n            \r\n            if(!$.isArray(this.sourceData)) {\r\n                return;\r\n            }\r\n\r\n            for(var i=0; i<this.sourceData.length; i++) {\r\n                $label = $('<label>').append($('<input>', {\r\n                                           type: 'checkbox',\r\n                                           value: this.sourceData[i].value \r\n                                     }))\r\n                                     .append($('<span>').text(' '+this.sourceData[i].text));\r\n                \r\n                $('<div>').append($label).appendTo(this.$tpl);\r\n            }\r\n            \r\n            this.$input = this.$tpl.find('input[type=\"checkbox\"]');\r\n            this.setClass();\r\n        },\r\n       \r\n       value2str: function(value) {\r\n           return $.isArray(value) ? value.sort().join($.trim(this.options.separator)) : '';\r\n       },  \r\n       \r\n       //parse separated string\r\n        str2value: function(str) {\r\n           var reg, value = null;\r\n           if(typeof str === 'string' && str.length) {\r\n               reg = new RegExp('\\\\s*'+$.trim(this.options.separator)+'\\\\s*');\r\n               value = str.split(reg);\r\n           } else if($.isArray(str)) {\r\n               value = str; \r\n           } else {\r\n               value = [str];\r\n           }\r\n           return value;\r\n        },       \r\n       \r\n       //set checked on required checkboxes\r\n       value2input: function(value) {\r\n            this.$input.prop('checked', false);\r\n            if($.isArray(value) && value.length) {\r\n               this.$input.each(function(i, el) {\r\n                   var $el = $(el);\r\n                   // cannot use $.inArray as it performs strict comparison\r\n                   $.each(value, function(j, val){\r\n                       /*jslint eqeq: true*/\r\n                       if($el.val() == val) {\r\n                       /*jslint eqeq: false*/                           \r\n                           $el.prop('checked', true);\r\n                       }\r\n                   });\r\n               }); \r\n            }  \r\n        },  \r\n        \r\n       input2value: function() { \r\n           var checked = [];\r\n           this.$input.filter(':checked').each(function(i, el) {\r\n               checked.push($(el).val());\r\n           });\r\n           return checked;\r\n       },            \r\n          \r\n       //collect text of checked boxes\r\n        value2htmlFinal: function(value, element) {\r\n           var html = [],\r\n               checked = $.fn.editableutils.itemsByValue(value, this.sourceData),\r\n               escape = this.options.escape;\r\n               \r\n           if(checked.length) {\r\n               $.each(checked, function(i, v) {\r\n                   var text = escape ? $.fn.editableutils.escape(v.text) : v.text; \r\n                   html.push(text); \r\n               });\r\n               $(element).html(html.join('<br>'));\r\n           } else {\r\n               $(element).empty(); \r\n           }\r\n        },\r\n        \r\n       activate: function() {\r\n           this.$input.first().focus();\r\n       },\r\n       \r\n       autosubmit: function() {\r\n           this.$input.on('keydown', function(e){\r\n               if (e.which === 13) {\r\n                   $(this).closest('form').submit();\r\n               }\r\n           });\r\n       }\r\n    });      \r\n\r\n    Checklist.defaults = $.extend({}, $.fn.editabletypes.list.defaults, {\r\n        /**\r\n        @property tpl \r\n        @default <div></div>\r\n        **/         \r\n        tpl:'<div class=\"editable-checklist\"></div>',\r\n        \r\n        /**\r\n        @property inputclass \r\n        @type string\r\n        @default null\r\n        **/         \r\n        inputclass: null,        \r\n        \r\n        /**\r\n        Separator of values when reading from `data-value` attribute\r\n\r\n        @property separator \r\n        @type string\r\n        @default ','\r\n        **/         \r\n        separator: ','\r\n    });\r\n\r\n    $.fn.editabletypes.checklist = Checklist;      \r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nHTML5 input types.\r\nFollowing types are supported:\r\n\r\n* password\r\n* email\r\n* url\r\n* tel\r\n* number\r\n* range\r\n* time\r\n\r\nLearn more about html5 inputs:  \r\nhttp://www.w3.org/wiki/HTML5_form_additions  \r\nTo check browser compatibility please see:  \r\nhttps://developer.mozilla.org/en-US/docs/HTML/Element/Input\r\n            \r\n@class html5types \r\n@extends text\r\n@final\r\n@since 1.3.0\r\n@example\r\n<a href=\"#\" id=\"email\" data-type=\"email\" data-pk=\"1\">admin@example.com</a>\r\n<script>\r\n$(function(){\r\n    $('#email').editable({\r\n        url: '/post',\r\n        title: 'Enter email'\r\n    });\r\n});\r\n</script>\r\n**/\r\n\r\n/**\r\n@property tpl \r\n@default depends on type\r\n**/ \r\n\r\n/*\r\nPassword\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Password = function (options) {\r\n        this.init('password', options, Password.defaults);\r\n    };\r\n    $.fn.editableutils.inherit(Password, $.fn.editabletypes.text);\r\n    $.extend(Password.prototype, {\r\n       //do not display password, show '[hidden]' instead\r\n       value2html: function(value, element) {\r\n           if(value) {\r\n               $(element).text('[hidden]');\r\n           } else {\r\n               $(element).empty(); \r\n           }\r\n       },\r\n       //as password not displayed, should not set value by html\r\n       html2value: function(html) {\r\n           return null;\r\n       }       \r\n    });    \r\n    Password.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\r\n        tpl: '<input type=\"password\">'\r\n    });\r\n    $.fn.editabletypes.password = Password;\r\n}(window.jQuery));\r\n\r\n\r\n/*\r\nEmail\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Email = function (options) {\r\n        this.init('email', options, Email.defaults);\r\n    };\r\n    $.fn.editableutils.inherit(Email, $.fn.editabletypes.text);\r\n    Email.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\r\n        tpl: '<input type=\"email\">'\r\n    });\r\n    $.fn.editabletypes.email = Email;\r\n}(window.jQuery));\r\n\r\n\r\n/*\r\nUrl\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Url = function (options) {\r\n        this.init('url', options, Url.defaults);\r\n    };\r\n    $.fn.editableutils.inherit(Url, $.fn.editabletypes.text);\r\n    Url.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\r\n        tpl: '<input type=\"url\">'\r\n    });\r\n    $.fn.editabletypes.url = Url;\r\n}(window.jQuery));\r\n\r\n\r\n/*\r\nTel\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Tel = function (options) {\r\n        this.init('tel', options, Tel.defaults);\r\n    };\r\n    $.fn.editableutils.inherit(Tel, $.fn.editabletypes.text);\r\n    Tel.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\r\n        tpl: '<input type=\"tel\">'\r\n    });\r\n    $.fn.editabletypes.tel = Tel;\r\n}(window.jQuery));\r\n\r\n\r\n/*\r\nNumber\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var NumberInput = function (options) {\r\n        this.init('number', options, NumberInput.defaults);\r\n    };\r\n    $.fn.editableutils.inherit(NumberInput, $.fn.editabletypes.text);\r\n    $.extend(NumberInput.prototype, {\r\n         render: function () {\r\n            NumberInput.superclass.render.call(this);\r\n            this.setAttr('min');\r\n            this.setAttr('max');\r\n            this.setAttr('step');\r\n        },\r\n        postrender: function() {\r\n            if(this.$clear) {\r\n                //increase right ffset  for up/down arrows\r\n                this.$clear.css({right: 24});\r\n                /*\r\n                //can position clear button only here, when form is shown and height can be calculated\r\n                var h = this.$input.outerHeight(true) || 20,\r\n                    delta = (h - this.$clear.height()) / 2;\r\n                \r\n                //add 12px to offset right for up/down arrows    \r\n                this.$clear.css({top: delta, right: delta + 16});\r\n                */\r\n            } \r\n        }        \r\n    });     \r\n    NumberInput.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\r\n        tpl: '<input type=\"number\">',\r\n        inputclass: 'input-mini',\r\n        min: null,\r\n        max: null,\r\n        step: null\r\n    });\r\n    $.fn.editabletypes.number = NumberInput;\r\n}(window.jQuery));\r\n\r\n\r\n/*\r\nRange (inherit from number)\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Range = function (options) {\r\n        this.init('range', options, Range.defaults);\r\n    };\r\n    $.fn.editableutils.inherit(Range, $.fn.editabletypes.number);\r\n    $.extend(Range.prototype, {\r\n        render: function () {\r\n            this.$input = this.$tpl.filter('input');\r\n            \r\n            this.setClass();\r\n            this.setAttr('min');\r\n            this.setAttr('max');\r\n            this.setAttr('step');           \r\n            \r\n            this.$input.on('input', function(){\r\n                $(this).siblings('output').text($(this).val()); \r\n            });  \r\n        },\r\n        activate: function() {\r\n            this.$input.focus();\r\n        }         \r\n    });\r\n    Range.defaults = $.extend({}, $.fn.editabletypes.number.defaults, {\r\n        tpl: '<input type=\"range\"><output style=\"width: 30px; display: inline-block\"></output>',\r\n        inputclass: 'input-medium'\r\n    });\r\n    $.fn.editabletypes.range = Range;\r\n}(window.jQuery));\r\n\r\n/*\r\nTime\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n\r\n    var Time = function (options) {\r\n        this.init('time', options, Time.defaults);\r\n    };\r\n    //inherit from abstract, as inheritance from text gives selection error.\r\n    $.fn.editableutils.inherit(Time, $.fn.editabletypes.abstractinput);\r\n    $.extend(Time.prototype, {\r\n        render: function() {\r\n           this.setClass();\r\n        }        \r\n    });\r\n    Time.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n        tpl: '<input type=\"time\">'\r\n    });\r\n    $.fn.editabletypes.time = Time;\r\n}(window.jQuery));\r\n\r\n/**\r\nSelect2 input. Based on amazing work of Igor Vaynberg https://github.com/ivaynberg/select2.  \r\nPlease see [original select2 docs](http://ivaynberg.github.com/select2) for detailed description and options.  \r\n \r\nYou should manually download and include select2 distributive:  \r\n\r\n    <link href=\"select2/select2.css\" rel=\"stylesheet\" type=\"text/css\"></link>  \r\n    <script src=\"select2/select2.js\"></script>  \r\n    \r\nTo make it **bootstrap-styled** you can use css from [here](https://github.com/t0m/select2-bootstrap-css): \r\n\r\n    <link href=\"select2-bootstrap.css\" rel=\"stylesheet\" type=\"text/css\"></link>    \r\n    \r\n**Note:** currently `autotext` feature does not work for select2 with `ajax` remote source.    \r\nYou need initially put both `data-value` and element's text youself:    \r\n\r\n    <a href=\"#\" data-type=\"select2\" data-value=\"1\">Text1</a>\r\n    \r\n    \r\n@class select2\r\n@extends abstractinput\r\n@since 1.4.1\r\n@final\r\n@example\r\n<a href=\"#\" id=\"country\" data-type=\"select2\" data-pk=\"1\" data-value=\"ru\" data-url=\"/post\" data-title=\"Select country\"></a>\r\n<script>\r\n$(function(){\r\n    //local source\r\n    $('#country').editable({\r\n        source: [\r\n              {id: 'gb', text: 'Great Britain'},\r\n              {id: 'us', text: 'United States'},\r\n              {id: 'ru', text: 'Russia'}\r\n           ],\r\n        select2: {\r\n           multiple: true\r\n        }\r\n    });\r\n    //remote source (simple)\r\n    $('#country').editable({\r\n        source: '/getCountries',\r\n        select2: {\r\n            placeholder: 'Select Country',\r\n            minimumInputLength: 1\r\n        }\r\n    });\r\n    //remote source (advanced)\r\n    $('#country').editable({\r\n        select2: {\r\n            placeholder: 'Select Country',\r\n            allowClear: true,\r\n            minimumInputLength: 3,\r\n            id: function (item) {\r\n                return item.CountryId;\r\n            },\r\n            ajax: {\r\n                url: '/getCountries',\r\n                dataType: 'json',\r\n                data: function (term, page) {\r\n                    return { query: term };\r\n                },\r\n                results: function (data, page) {\r\n                    return { results: data };\r\n                }\r\n            },\r\n            formatResult: function (item) {\r\n                return item.CountryName;\r\n            },\r\n            formatSelection: function (item) {\r\n                return item.CountryName;\r\n            },\r\n            initSelection: function (element, callback) {\r\n                return $.get('/getCountryById', { query: element.val() }, function (data) {\r\n                    callback(data);\r\n                });\r\n            } \r\n        }  \r\n    });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Constructor = function (options) {\r\n        this.init('select2', options, Constructor.defaults);\r\n\r\n        options.select2 = options.select2 || {};\r\n\r\n        this.sourceData = null;\r\n        \r\n        //placeholder\r\n        if(options.placeholder) {\r\n            options.select2.placeholder = options.placeholder;\r\n        }\r\n       \r\n        //if not `tags` mode, use source\r\n        if(!options.select2.tags && options.source) {\r\n            var source = options.source;\r\n            //if source is function, call it (once!)\r\n            if ($.isFunction(options.source)) {\r\n                source = options.source.call(options.scope);\r\n            }               \r\n\r\n            if (typeof source === 'string') {\r\n                options.select2.ajax = options.select2.ajax || {};\r\n                //some default ajax params\r\n                if(!options.select2.ajax.data) {\r\n                    options.select2.ajax.data = function(term) {return { query:term };};\r\n                }\r\n                if(!options.select2.ajax.results) {\r\n                    options.select2.ajax.results = function(data) { return {results:data };};\r\n                }\r\n                options.select2.ajax.url = source;\r\n            } else {\r\n                //check format and convert x-editable format to select2 format (if needed)\r\n                this.sourceData = this.convertSource(source);\r\n                options.select2.data = this.sourceData;\r\n            }\r\n        } \r\n\r\n        //overriding objects in config (as by default jQuery extend() is not recursive)\r\n        this.options.select2 = $.extend({}, Constructor.defaults.select2, options.select2);\r\n\r\n        //detect whether it is multi-valued\r\n        this.isMultiple = this.options.select2.tags || this.options.select2.multiple;\r\n        this.isRemote = ('ajax' in this.options.select2);\r\n\r\n        //store function returning ID of item\r\n        //should be here as used inautotext for local source\r\n        this.idFunc = this.options.select2.id;\r\n        if (typeof(this.idFunc) !== \"function\") {\r\n            var idKey = this.idFunc || 'id';\r\n            this.idFunc = function (e) { return e[idKey]; };\r\n        }\r\n\r\n        //store function that renders text in select2\r\n        this.formatSelection = this.options.select2.formatSelection;\r\n        if (typeof(this.formatSelection) !== \"function\") {\r\n            this.formatSelection = function (e) { return e.text; };\r\n        }\r\n    };\r\n\r\n    $.fn.editableutils.inherit(Constructor, $.fn.editabletypes.abstractinput);\r\n\r\n    $.extend(Constructor.prototype, {\r\n        render: function() {\r\n            this.setClass();\r\n\r\n            //can not apply select2 here as it calls initSelection \r\n            //over input that does not have correct value yet.\r\n            //apply select2 only in value2input\r\n            //this.$input.select2(this.options.select2);\r\n\r\n            //when data is loaded via ajax, we need to know when it's done to populate listData\r\n            if(this.isRemote) {\r\n                //listen to loaded event to populate data\r\n                this.$input.on('select2-loaded', $.proxy(function(e) {\r\n                    this.sourceData = e.items.results;\r\n                }, this));\r\n            }\r\n\r\n            //trigger resize of editableform to re-position container in multi-valued mode\r\n            if(this.isMultiple) {\r\n               this.$input.on('change', function() {\r\n                   $(this).closest('form').parent().triggerHandler('resize');\r\n               });\r\n            }\r\n       },\r\n\r\n       value2html: function(value, element) {\r\n           var text = '', data,\r\n               that = this;\r\n\r\n           if(this.options.select2.tags) { //in tags mode just assign value\r\n              data = value; \r\n              //data = $.fn.editableutils.itemsByValue(value, this.options.select2.tags, this.idFunc);\r\n           } else if(this.sourceData) {\r\n              data = $.fn.editableutils.itemsByValue(value, this.sourceData, this.idFunc); \r\n           } else {\r\n              //can not get list of possible values \r\n              //(e.g. autotext for select2 with ajax source)\r\n           }\r\n\r\n           //data may be array (when multiple values allowed)\r\n           if($.isArray(data)) {\r\n               //collect selected data and show with separator\r\n               text = [];\r\n               $.each(data, function(k, v){\r\n                   text.push(v && typeof v === 'object' ? that.formatSelection(v) : v);\r\n               });\r\n           } else if(data) {\r\n               text = that.formatSelection(data);\r\n           }\r\n\r\n           text = $.isArray(text) ? text.join(this.options.viewseparator) : text;\r\n\r\n           //$(element).text(text);\r\n           Constructor.superclass.value2html.call(this, text, element); \r\n       },\r\n\r\n       html2value: function(html) {\r\n           return this.options.select2.tags ? this.str2value(html, this.options.viewseparator) : null;\r\n       },\r\n\r\n       value2input: function(value) {\r\n           // if value array => join it anyway\r\n           if($.isArray(value)) {\r\n              value = value.join(this.getSeparator());\r\n           }\r\n\r\n           //for remote source just set value, text is updated by initSelection\r\n           if(!this.$input.data('select2')) {\r\n               this.$input.val(value);\r\n               this.$input.select2(this.options.select2);\r\n           } else {\r\n               //second argument needed to separate initial change from user's click (for autosubmit)   \r\n               this.$input.val(value).trigger('change', true); \r\n\r\n               //Uncaught Error: cannot call val() if initSelection() is not defined\r\n               //this.$input.select2('val', value);\r\n           }\r\n\r\n           // if defined remote source AND no multiple mode AND no user's initSelection provided --> \r\n           // we should somehow get text for provided id.\r\n           // The solution is to use element's text as text for that id (exclude empty)\r\n           if(this.isRemote && !this.isMultiple && !this.options.select2.initSelection) {\r\n               // customId and customText are methods to extract `id` and `text` from data object\r\n               // we can use this workaround only if user did not define these methods\r\n               // otherwise we cant construct data object\r\n               var customId = this.options.select2.id,\r\n                   customText = this.options.select2.formatSelection;\r\n\r\n               if(!customId && !customText) {\r\n                   var $el = $(this.options.scope);\r\n                   if (!$el.data('editable').isEmpty) {\r\n                       var data = {id: value, text: $el.text()};\r\n                       this.$input.select2('data', data); \r\n                   }\r\n               }\r\n           }\r\n       },\r\n       \r\n       input2value: function() { \r\n           return this.$input.select2('val');\r\n       },\r\n\r\n       str2value: function(str, separator) {\r\n            if(typeof str !== 'string' || !this.isMultiple) {\r\n                return str;\r\n            }\r\n\r\n            separator = separator || this.getSeparator();\r\n\r\n            var val, i, l;\r\n\r\n            if (str === null || str.length < 1) {\r\n                return null;\r\n            }\r\n            val = str.split(separator);\r\n            for (i = 0, l = val.length; i < l; i = i + 1) {\r\n                val[i] = $.trim(val[i]);\r\n            }\r\n\r\n            return val;\r\n       },\r\n\r\n        autosubmit: function() {\r\n            this.$input.on('change', function(e, isInitial){\r\n                if(!isInitial) {\r\n                  $(this).closest('form').submit();\r\n                }\r\n            });\r\n        },\r\n\r\n        getSeparator: function() {\r\n            return this.options.select2.separator || $.fn.select2.defaults.separator;\r\n        },\r\n\r\n        /*\r\n        Converts source from x-editable format: {value: 1, text: \"1\"} to\r\n        select2 format: {id: 1, text: \"1\"}\r\n        */\r\n        convertSource: function(source) {\r\n            if($.isArray(source) && source.length && source[0].value !== undefined) {\r\n                for(var i = 0; i<source.length; i++) {\r\n                    if(source[i].value !== undefined) {\r\n                        source[i].id = source[i].value;\r\n                        delete source[i].value;\r\n                    }\r\n                }\r\n            }\r\n            return source;\r\n        },\r\n        \r\n        destroy: function() {\r\n            if(this.$input.data('select2')) {\r\n                this.$input.select2('destroy');\r\n            }\r\n        }\r\n        \r\n    });\r\n\r\n    Constructor.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n        /**\r\n        @property tpl \r\n        @default <input type=\"hidden\">\r\n        **/\r\n        tpl:'<input type=\"hidden\">',\r\n        /**\r\n        Configuration of select2. [Full list of options](http://ivaynberg.github.com/select2).\r\n\r\n        @property select2 \r\n        @type object\r\n        @default null\r\n        **/\r\n        select2: null,\r\n        /**\r\n        Placeholder attribute of select\r\n\r\n        @property placeholder \r\n        @type string\r\n        @default null\r\n        **/\r\n        placeholder: null,\r\n        /**\r\n        Source data for select. It will be assigned to select2 `data` property and kept here just for convenience.\r\n        Please note, that format is different from simple `select` input: use 'id' instead of 'value'.\r\n        E.g. `[{id: 1, text: \"text1\"}, {id: 2, text: \"text2\"}, ...]`.\r\n\r\n        @property source \r\n        @type array|string|function\r\n        @default null        \r\n        **/\r\n        source: null,\r\n        /**\r\n        Separator used to display tags.\r\n\r\n        @property viewseparator \r\n        @type string\r\n        @default ', '        \r\n        **/\r\n        viewseparator: ', '\r\n    });\r\n\r\n    $.fn.editabletypes.select2 = Constructor;\r\n\r\n}(window.jQuery));\r\n\r\n/**\r\n* Combodate - 1.0.5\r\n* Dropdown date and time picker.\r\n* Converts text input into dropdowns to pick day, month, year, hour, minute and second.\r\n* Uses momentjs as datetime library http://momentjs.com.\r\n* For i18n include corresponding file from https://github.com/timrwood/moment/tree/master/lang \r\n*\r\n* Confusion at noon and midnight - see http://en.wikipedia.org/wiki/12-hour_clock#Confusion_at_noon_and_midnight\r\n* In combodate: \r\n* 12:00 pm --> 12:00 (24-h format, midday)\r\n* 12:00 am --> 00:00 (24-h format, midnight, start of day)\r\n* \r\n* Differs from momentjs parse rules:\r\n* 00:00 pm, 12:00 pm --> 12:00 (24-h format, day not change)\r\n* 00:00 am, 12:00 am --> 00:00 (24-h format, day not change)\r\n* \r\n* \r\n* Author: Vitaliy Potapov\r\n* Project page: http://github.com/vitalets/combodate\r\n* Copyright (c) 2012 Vitaliy Potapov. Released under MIT License.\r\n**/\r\n(function ($) {\r\n\r\n    var Combodate = function (element, options) {\r\n        this.$element = $(element);\r\n        if(!this.$element.is('input')) {\r\n            $.error('Combodate should be applied to INPUT element');\r\n            return;\r\n        }\r\n        this.options = $.extend({}, $.fn.combodate.defaults, options, this.$element.data());\r\n        this.init();  \r\n     };\r\n\r\n    Combodate.prototype = {\r\n        constructor: Combodate, \r\n        init: function () {\r\n            this.map = {\r\n                //key   regexp    moment.method\r\n                day:    ['D',    'date'], \r\n                month:  ['M',    'month'], \r\n                year:   ['Y',    'year'], \r\n                hour:   ['[Hh]', 'hours'],\r\n                minute: ['m',    'minutes'], \r\n                second: ['s',    'seconds'],\r\n                ampm:   ['[Aa]', ''] \r\n            };\r\n            \r\n            this.$widget = $('<span class=\"combodate\"></span>').html(this.getTemplate());\r\n                      \r\n            this.initCombos();\r\n            \r\n            //update original input on change \r\n            this.$widget.on('change', 'select', $.proxy(function(e) {\r\n                this.$element.val(this.getValue()).change();\r\n                // update days count if month or year changes\r\n                if (this.options.smartDays) {\r\n                    if ($(e.target).is('.month') || $(e.target).is('.year')) {\r\n                        this.fillCombo('day');\r\n                    }\r\n                }\r\n            }, this));\r\n            \r\n            this.$widget.find('select').css('width', 'auto');\r\n                                       \r\n            // hide original input and insert widget                                       \r\n            this.$element.hide().after(this.$widget);\r\n            \r\n            // set initial value\r\n            this.setValue(this.$element.val() || this.options.value);\r\n        },\r\n        \r\n        /*\r\n         Replace tokens in template with <select> elements \r\n        */         \r\n        getTemplate: function() {\r\n            var tpl = this.options.template;\r\n\r\n            //first pass\r\n            $.each(this.map, function(k, v) {\r\n                v = v[0]; \r\n                var r = new RegExp(v+'+'),\r\n                    token = v.length > 1 ? v.substring(1, 2) : v;\r\n                    \r\n                tpl = tpl.replace(r, '{'+token+'}');\r\n            });\r\n\r\n            //replace spaces with &nbsp;\r\n            tpl = tpl.replace(/ /g, '&nbsp;');\r\n\r\n            //second pass\r\n            $.each(this.map, function(k, v) {\r\n                v = v[0];\r\n                var token = v.length > 1 ? v.substring(1, 2) : v;\r\n                    \r\n                tpl = tpl.replace('{'+token+'}', '<select class=\"'+k+'\"></select>');\r\n            });   \r\n\r\n            return tpl;\r\n        },\r\n        \r\n        /*\r\n         Initialize combos that presents in template \r\n        */        \r\n        initCombos: function() {\r\n            for (var k in this.map) {\r\n                var $c = this.$widget.find('.'+k);\r\n                // set properties like this.$day, this.$month etc.\r\n                this['$'+k] = $c.length ? $c : null;\r\n                // fill with items\r\n                this.fillCombo(k);\r\n            }\r\n        },\r\n\r\n        /*\r\n         Fill combo with items \r\n        */        \r\n        fillCombo: function(k) {\r\n            var $combo = this['$'+k];\r\n            if (!$combo) {\r\n                return;\r\n            }\r\n\r\n            // define method name to fill items, e.g `fillDays`\r\n            var f = 'fill' + k.charAt(0).toUpperCase() + k.slice(1); \r\n            var items = this[f]();\r\n            var value = $combo.val();\r\n\r\n            $combo.empty();\r\n            for(var i=0; i<items.length; i++) {\r\n                $combo.append('<option value=\"'+items[i][0]+'\">'+items[i][1]+'</option>');\r\n            }\r\n\r\n            $combo.val(value);\r\n        },\r\n\r\n        /*\r\n         Initialize items of combos. Handles `firstItem` option \r\n        */\r\n        fillCommon: function(key) {\r\n            var values = [],\r\n                relTime;\r\n                \r\n            if(this.options.firstItem === 'name') {\r\n                //need both to support moment ver < 2 and  >= 2\r\n                relTime = moment.relativeTime || moment.langData()._relativeTime; \r\n                var header = typeof relTime[key] === 'function' ? relTime[key](1, true, key, false) : relTime[key];\r\n                //take last entry (see momentjs lang files structure) \r\n                header = header.split(' ').reverse()[0];                \r\n                values.push(['', header]);\r\n            } else if(this.options.firstItem === 'empty') {\r\n                values.push(['', '']);\r\n            }\r\n            return values;\r\n        },  \r\n\r\n\r\n        /*\r\n        fill day\r\n        */\r\n        fillDay: function() {\r\n            var items = this.fillCommon('d'), name, i,\r\n                twoDigit = this.options.template.indexOf('DD') !== -1,\r\n                daysCount = 31;\r\n\r\n            // detect days count (depends on month and year)\r\n            // originally https://github.com/vitalets/combodate/pull/7\r\n            if (this.options.smartDays && this.$month && this.$year) {\r\n                var month = parseInt(this.$month.val(), 10);\r\n                var year = parseInt(this.$year.val(), 10);\r\n\r\n                if (!isNaN(month) && !isNaN(year)) {\r\n                    daysCount = moment([year, month]).daysInMonth();\r\n                }\r\n            }\r\n\r\n            for (i = 1; i <= daysCount; i++) {\r\n                name = twoDigit ? this.leadZero(i) : i;\r\n                items.push([i, name]);\r\n            }\r\n            return items;        \r\n        },\r\n        \r\n        /*\r\n        fill month\r\n        */\r\n        fillMonth: function() {\r\n            var items = this.fillCommon('M'), name, i, \r\n                longNames = this.options.template.indexOf('MMMM') !== -1,\r\n                shortNames = this.options.template.indexOf('MMM') !== -1,\r\n                twoDigit = this.options.template.indexOf('MM') !== -1;\r\n                \r\n            for(i=0; i<=11; i++) {\r\n                if(longNames) {\r\n                    //see https://github.com/timrwood/momentjs.com/pull/36\r\n                    name = moment().date(1).month(i).format('MMMM');\r\n                } else if(shortNames) {\r\n                    name = moment().date(1).month(i).format('MMM');\r\n                } else if(twoDigit) {\r\n                    name = this.leadZero(i+1);\r\n                } else {\r\n                    name = i+1;\r\n                }\r\n                items.push([i, name]);\r\n            } \r\n            return items;\r\n        },  \r\n        \r\n        /*\r\n        fill year\r\n        */\r\n        fillYear: function() {\r\n            var items = [], name, i, \r\n                longNames = this.options.template.indexOf('YYYY') !== -1;\r\n           \r\n            for(i=this.options.maxYear; i>=this.options.minYear; i--) {\r\n                name = longNames ? i : (i+'').substring(2);\r\n                items[this.options.yearDescending ? 'push' : 'unshift']([i, name]);\r\n            }\r\n            \r\n            items = this.fillCommon('y').concat(items);\r\n            \r\n            return items;              \r\n        },    \r\n        \r\n        /*\r\n        fill hour\r\n        */\r\n        fillHour: function() {\r\n            var items = this.fillCommon('h'), name, i,\r\n                h12 = this.options.template.indexOf('h') !== -1,\r\n                h24 = this.options.template.indexOf('H') !== -1,\r\n                twoDigit = this.options.template.toLowerCase().indexOf('hh') !== -1,\r\n                min = h12 ? 1 : 0, \r\n                max = h12 ? 12 : 23;\r\n                \r\n            for(i=min; i<=max; i++) {\r\n                name = twoDigit ? this.leadZero(i) : i;\r\n                items.push([i, name]);\r\n            } \r\n            return items;                 \r\n        },    \r\n        \r\n        /*\r\n        fill minute\r\n        */\r\n        fillMinute: function() {\r\n            var items = this.fillCommon('m'), name, i,\r\n                twoDigit = this.options.template.indexOf('mm') !== -1;\r\n\r\n            for(i=0; i<=59; i+= this.options.minuteStep) {\r\n                name = twoDigit ? this.leadZero(i) : i;\r\n                items.push([i, name]);\r\n            }    \r\n            return items;              \r\n        },  \r\n        \r\n        /*\r\n        fill second\r\n        */\r\n        fillSecond: function() {\r\n            var items = this.fillCommon('s'), name, i,\r\n                twoDigit = this.options.template.indexOf('ss') !== -1;\r\n\r\n            for(i=0; i<=59; i+= this.options.secondStep) {\r\n                name = twoDigit ? this.leadZero(i) : i;\r\n                items.push([i, name]);\r\n            }    \r\n            return items;              \r\n        },  \r\n        \r\n        /*\r\n        fill ampm\r\n        */\r\n        fillAmpm: function() {\r\n            var ampmL = this.options.template.indexOf('a') !== -1,\r\n                ampmU = this.options.template.indexOf('A') !== -1,            \r\n                items = [\r\n                    ['am', ampmL ? 'am' : 'AM'],\r\n                    ['pm', ampmL ? 'pm' : 'PM']\r\n                ];\r\n            return items;                              \r\n        },                                       \r\n\r\n        /*\r\n         Returns current date value from combos. \r\n         If format not specified - `options.format` used.\r\n         If format = `null` - Moment object returned.\r\n        */\r\n        getValue: function(format) {\r\n            var dt, values = {}, \r\n                that = this,\r\n                notSelected = false;\r\n                \r\n            //getting selected values    \r\n            $.each(this.map, function(k, v) {\r\n                if(k === 'ampm') {\r\n                    return;\r\n                }\r\n                var def = k === 'day' ? 1 : 0;\r\n                  \r\n                values[k] = that['$'+k] ? parseInt(that['$'+k].val(), 10) : def; \r\n                \r\n                if(isNaN(values[k])) {\r\n                   notSelected = true;\r\n                   return false; \r\n                }\r\n            });\r\n            \r\n            //if at least one visible combo not selected - return empty string\r\n            if(notSelected) {\r\n               return '';\r\n            }\r\n            \r\n            //convert hours 12h --> 24h \r\n            if(this.$ampm) {\r\n                //12:00 pm --> 12:00 (24-h format, midday), 12:00 am --> 00:00 (24-h format, midnight, start of day)\r\n                if(values.hour === 12) {\r\n                    values.hour = this.$ampm.val() === 'am' ? 0 : 12;                    \r\n                } else {\r\n                    values.hour = this.$ampm.val() === 'am' ? values.hour : values.hour+12;\r\n                }\r\n            }    \r\n            \r\n            dt = moment([values.year, values.month, values.day, values.hour, values.minute, values.second]);\r\n            \r\n            //highlight invalid date\r\n            this.highlight(dt);\r\n                              \r\n            format = format === undefined ? this.options.format : format;\r\n            if(format === null) {\r\n               return dt.isValid() ? dt : null; \r\n            } else {\r\n               return dt.isValid() ? dt.format(format) : ''; \r\n            }           \r\n        },\r\n        \r\n        setValue: function(value) {\r\n            if(!value) {\r\n                return;\r\n            }\r\n            \r\n            var dt = typeof value === 'string' ? moment(value, this.options.format) : moment(value),\r\n                that = this,\r\n                values = {};\r\n            \r\n            //function to find nearest value in select options\r\n            function getNearest($select, value) {\r\n                var delta = {};\r\n                $select.children('option').each(function(i, opt){\r\n                    var optValue = $(opt).attr('value'),\r\n                    distance;\r\n\r\n                    if(optValue === '') return;\r\n                    distance = Math.abs(optValue - value); \r\n                    if(typeof delta.distance === 'undefined' || distance < delta.distance) {\r\n                        delta = {value: optValue, distance: distance};\r\n                    } \r\n                }); \r\n                return delta.value;\r\n            }             \r\n            \r\n            if(dt.isValid()) {\r\n                //read values from date object\r\n                $.each(this.map, function(k, v) {\r\n                    if(k === 'ampm') {\r\n                       return; \r\n                    }\r\n                    values[k] = dt[v[1]]();\r\n                });\r\n               \r\n                if(this.$ampm) {\r\n                    //12:00 pm --> 12:00 (24-h format, midday), 12:00 am --> 00:00 (24-h format, midnight, start of day)\r\n                    if(values.hour >= 12) {\r\n                        values.ampm = 'pm';\r\n                        if(values.hour > 12) {\r\n                            values.hour -= 12;\r\n                        }\r\n                    } else {\r\n                        values.ampm = 'am';\r\n                        if(values.hour === 0) {\r\n                            values.hour = 12;\r\n                        }\r\n                    } \r\n                }\r\n               \r\n                $.each(values, function(k, v) {\r\n                    //call val() for each existing combo, e.g. this.$hour.val()\r\n                    if(that['$'+k]) {\r\n                       \r\n                        if(k === 'minute' && that.options.minuteStep > 1 && that.options.roundTime) {\r\n                           v = getNearest(that['$'+k], v);\r\n                        }\r\n                       \r\n                        if(k === 'second' && that.options.secondStep > 1 && that.options.roundTime) {\r\n                           v = getNearest(that['$'+k], v);\r\n                        }                       \r\n                       \r\n                        that['$'+k].val(v);\r\n                    }\r\n                });\r\n\r\n                // update days count\r\n                if (this.options.smartDays) {\r\n                    this.fillCombo('day');\r\n                }\r\n               \r\n               this.$element.val(dt.format(this.options.format)).change();\r\n            }\r\n        },\r\n        \r\n        /*\r\n         highlight combos if date is invalid\r\n        */\r\n        highlight: function(dt) {\r\n            if(!dt.isValid()) {\r\n                if(this.options.errorClass) {\r\n                    this.$widget.addClass(this.options.errorClass);\r\n                } else {\r\n                    //store original border color\r\n                    if(!this.borderColor) {\r\n                        this.borderColor = this.$widget.find('select').css('border-color'); \r\n                    }\r\n                    this.$widget.find('select').css('border-color', 'red');\r\n                } \r\n            } else {\r\n                if(this.options.errorClass) {\r\n                    this.$widget.removeClass(this.options.errorClass);\r\n                } else {\r\n                    this.$widget.find('select').css('border-color', this.borderColor);\r\n                }  \r\n            }\r\n        },\r\n        \r\n        leadZero: function(v) {\r\n            return v <= 9 ? '0' + v : v; \r\n        },\r\n        \r\n        destroy: function() {\r\n            this.$widget.remove();\r\n            this.$element.removeData('combodate').show();\r\n        }\r\n        \r\n        //todo: clear method        \r\n    };\r\n\r\n    $.fn.combodate = function ( option ) {\r\n        var d, args = Array.apply(null, arguments);\r\n        args.shift();\r\n\r\n        //getValue returns date as string / object (not jQuery object)\r\n        if(option === 'getValue' && this.length && (d = this.eq(0).data('combodate'))) {\r\n          return d.getValue.apply(d, args);\r\n        }        \r\n        \r\n        return this.each(function () {\r\n            var $this = $(this),\r\n            data = $this.data('combodate'),\r\n            options = typeof option == 'object' && option;\r\n            if (!data) {\r\n                $this.data('combodate', (data = new Combodate(this, options)));\r\n            }\r\n            if (typeof option == 'string' && typeof data[option] == 'function') {\r\n                data[option].apply(data, args);\r\n            }\r\n        });\r\n    };  \r\n    \r\n    $.fn.combodate.defaults = {\r\n         //in this format value stored in original input\r\n        format: 'DD-MM-YYYY HH:mm',      \r\n        //in this format items in dropdowns are displayed\r\n        template: 'D / MMM / YYYY   H : mm',\r\n        //initial value, can be `new Date()`    \r\n        value: null,                       \r\n        minYear: 1970,\r\n        maxYear: 2015,\r\n        yearDescending: true,\r\n        minuteStep: 5,\r\n        secondStep: 1,\r\n        firstItem: 'empty', //'name', 'empty', 'none'\r\n        errorClass: null,\r\n        roundTime: true, // whether to round minutes and seconds if step > 1\r\n        smartDays: false // whether days in combo depend on selected month: 31, 30, 28\r\n    };\r\n\r\n}(window.jQuery));\r\n/**\r\nCombodate input - dropdown date and time picker.    \r\nBased on [combodate](http://vitalets.github.com/combodate) plugin (included). To use it you should manually include [momentjs](http://momentjs.com).\r\n\r\n    <script src=\"js/moment.min.js\"></script>\r\n   \r\nAllows to input:\r\n\r\n* only date\r\n* only time \r\n* both date and time  \r\n\r\nPlease note, that format is taken from momentjs and **not compatible** with bootstrap-datepicker / jquery UI datepicker.  \r\nInternally value stored as `momentjs` object. \r\n\r\n@class combodate\r\n@extends abstractinput\r\n@final\r\n@since 1.4.0\r\n@example\r\n<a href=\"#\" id=\"dob\" data-type=\"combodate\" data-pk=\"1\" data-url=\"/post\" data-value=\"1984-05-15\" data-title=\"Select date\"></a>\r\n<script>\r\n$(function(){\r\n    $('#dob').editable({\r\n        format: 'YYYY-MM-DD',    \r\n        viewformat: 'DD.MM.YYYY',    \r\n        template: 'D / MMMM / YYYY',    \r\n        combodate: {\r\n                minYear: 2000,\r\n                maxYear: 2015,\r\n                minuteStep: 1\r\n           }\r\n        }\r\n    });\r\n});\r\n</script>\r\n**/\r\n\r\n/*global moment*/\r\n\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var Constructor = function (options) {\r\n        this.init('combodate', options, Constructor.defaults);\r\n        \r\n        //by default viewformat equals to format\r\n        if(!this.options.viewformat) {\r\n            this.options.viewformat = this.options.format;\r\n        }        \r\n        \r\n        //try parse combodate config defined as json string in data-combodate\r\n        options.combodate = $.fn.editableutils.tryParseJson(options.combodate, true);\r\n\r\n        //overriding combodate config (as by default jQuery extend() is not recursive)\r\n        this.options.combodate = $.extend({}, Constructor.defaults.combodate, options.combodate, {\r\n            format: this.options.format,\r\n            template: this.options.template\r\n        });\r\n    };\r\n\r\n    $.fn.editableutils.inherit(Constructor, $.fn.editabletypes.abstractinput);    \r\n    \r\n    $.extend(Constructor.prototype, {\r\n        render: function () {\r\n            this.$input.combodate(this.options.combodate);\r\n                    \r\n            if($.fn.editableform.engine === 'bs3') {\r\n                this.$input.siblings().find('select').addClass('form-control');\r\n            }\r\n            \r\n            if(this.options.inputclass) {\r\n                this.$input.siblings().find('select').addClass(this.options.inputclass);\r\n            }            \r\n            //\"clear\" link\r\n            /*\r\n            if(this.options.clear) {\r\n                this.$clear = $('<a href=\"#\"></a>').html(this.options.clear).click($.proxy(function(e){\r\n                    e.preventDefault();\r\n                    e.stopPropagation();\r\n                    this.clear();\r\n                }, this));\r\n                \r\n                this.$tpl.parent().append($('<div class=\"editable-clear\">').append(this.$clear));  \r\n            } \r\n            */               \r\n        },\r\n        \r\n        value2html: function(value, element) {\r\n            var text = value ? value.format(this.options.viewformat) : '';\r\n            //$(element).text(text);\r\n            Constructor.superclass.value2html.call(this, text, element);  \r\n        },\r\n\r\n        html2value: function(html) {\r\n            return html ? moment(html, this.options.viewformat) : null;\r\n        },   \r\n        \r\n        value2str: function(value) {\r\n            return value ? value.format(this.options.format) : '';\r\n       }, \r\n       \r\n       str2value: function(str) {\r\n           return str ? moment(str, this.options.format) : null;\r\n       }, \r\n       \r\n       value2submit: function(value) {\r\n           return this.value2str(value);\r\n       },                    \r\n\r\n       value2input: function(value) {\r\n           this.$input.combodate('setValue', value);\r\n       },\r\n        \r\n       input2value: function() { \r\n           return this.$input.combodate('getValue', null);\r\n       },       \r\n       \r\n       activate: function() {\r\n           this.$input.siblings('.combodate').find('select').eq(0).focus();\r\n       },\r\n       \r\n       /*\r\n       clear:  function() {\r\n          this.$input.data('datepicker').date = null;\r\n          this.$input.find('.active').removeClass('active');\r\n       },\r\n       */\r\n       \r\n       autosubmit: function() {\r\n           \r\n       }\r\n\r\n    });\r\n    \r\n    Constructor.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n        /**\r\n        @property tpl \r\n        @default <input type=\"text\">\r\n        **/         \r\n        tpl:'<input type=\"text\">',\r\n        /**\r\n        @property inputclass \r\n        @default null\r\n        **/         \r\n        inputclass: null,\r\n        /**\r\n        Format used for sending value to server. Also applied when converting date from <code>data-value</code> attribute.<br>\r\n        See list of tokens in [momentjs docs](http://momentjs.com/docs/#/parsing/string-format)  \r\n        \r\n        @property format \r\n        @type string\r\n        @default YYYY-MM-DD\r\n        **/         \r\n        format:'YYYY-MM-DD',\r\n        /**\r\n        Format used for displaying date. Also applied when converting date from element's text on init.   \r\n        If not specified equals to `format`.\r\n        \r\n        @property viewformat \r\n        @type string\r\n        @default null\r\n        **/          \r\n        viewformat: null,        \r\n        /**\r\n        Template used for displaying dropdowns.\r\n        \r\n        @property template \r\n        @type string\r\n        @default D / MMM / YYYY\r\n        **/          \r\n        template: 'D / MMM / YYYY',  \r\n        /**\r\n        Configuration of combodate.\r\n        Full list of options: http://vitalets.github.com/combodate/#docs\r\n        \r\n        @property combodate \r\n        @type object\r\n        @default null\r\n        **/\r\n        combodate: null\r\n        \r\n        /*\r\n        (not implemented yet)\r\n        Text shown as clear date button. \r\n        If <code>false</code> clear button will not be rendered.\r\n        \r\n        @property clear \r\n        @type boolean|string\r\n        @default 'x clear'         \r\n        */\r\n        //clear: '&times; clear'\r\n    });   \r\n\r\n    $.fn.editabletypes.combodate = Constructor;\r\n\r\n}(window.jQuery));\r\n\r\n/*\r\nEditableform based on Twitter Bootstrap 3\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    //store parent methods\r\n    var pInitInput = $.fn.editableform.Constructor.prototype.initInput;\r\n    \r\n    $.extend($.fn.editableform.Constructor.prototype, {\r\n        initTemplate: function() {\r\n            this.$form = $($.fn.editableform.template); \r\n            this.$form.find('.control-group').addClass('form-group');\r\n            this.$form.find('.editable-error-block').addClass('help-block');\r\n        },\r\n        initInput: function() {  \r\n            pInitInput.apply(this);\r\n\r\n            //for bs3 set default class `input-sm` to standard inputs\r\n            var emptyInputClass = this.input.options.inputclass === null || this.input.options.inputclass === false;\r\n            var defaultClass = 'input-sm';\r\n            \r\n            //bs3 add `form-control` class to standard inputs\r\n            var stdtypes = 'text,select,textarea,password,email,url,tel,number,range,time,typeaheadjs'.split(','); \r\n            if(~$.inArray(this.input.type, stdtypes)) {\r\n                this.input.$input.addClass('form-control');\r\n                if(emptyInputClass) {\r\n                    this.input.options.inputclass = defaultClass;\r\n                    this.input.$input.addClass(defaultClass);\r\n                }\r\n            }             \r\n        \r\n            //apply bs3 size class also to buttons (to fit size of control)\r\n            var $btn = this.$form.find('.editable-buttons');\r\n            var classes = emptyInputClass ? [defaultClass] : this.input.options.inputclass.split(' ');\r\n            for(var i=0; i<classes.length; i++) {\r\n                // `btn-sm` is default now\r\n                /*\r\n                if(classes[i].toLowerCase() === 'input-sm') { \r\n                    $btn.find('button').addClass('btn-sm');  \r\n                }\r\n                */\r\n                if(classes[i].toLowerCase() === 'input-lg') {\r\n                    $btn.find('button').removeClass('btn-sm').addClass('btn-lg'); \r\n                }\r\n            }\r\n        }\r\n    });    \r\n    \r\n    //buttons\r\n    $.fn.editableform.buttons = \r\n      '<button type=\"submit\" class=\"btn btn-primary btn-sm editable-submit\">'+\r\n        '<i class=\"glyphicon glyphicon-ok\"></i>'+\r\n      '</button>'+\r\n      '<button type=\"button\" class=\"btn btn-default btn-sm editable-cancel\">'+\r\n        '<i class=\"glyphicon glyphicon-remove\"></i>'+\r\n      '</button>';         \r\n    \r\n    //error classes\r\n    $.fn.editableform.errorGroupClass = 'has-error';\r\n    $.fn.editableform.errorBlockClass = null;  \r\n    //engine\r\n    $.fn.editableform.engine = 'bs3';  \r\n}(window.jQuery));\r\n/**\r\n* Editable Popover3 (for Bootstrap 3) \r\n* ---------------------\r\n* requires bootstrap-popover.js\r\n*/\r\n(function ($) {\r\n    \"use strict\";\r\n\r\n    //extend methods\r\n    $.extend($.fn.editableContainer.Popup.prototype, {\r\n        containerName: 'popover',\r\n        containerDataName: 'bs.popover',\r\n        innerCss: '.popover-content',\r\n        defaults: $.fn.popover.Constructor.DEFAULTS,\r\n\r\n        initContainer: function(){\r\n            $.extend(this.containerOptions, {\r\n                trigger: 'manual',\r\n                selector: false,\r\n                content: ' ',\r\n                template: this.defaults.template\r\n            });\r\n            \r\n            //as template property is used in inputs, hide it from popover\r\n            var t;\r\n            if(this.$element.data('template')) {\r\n               t = this.$element.data('template');\r\n               this.$element.removeData('template');  \r\n            } \r\n            \r\n            this.call(this.containerOptions);\r\n            \r\n            if(t) {\r\n               //restore data('template')\r\n               this.$element.data('template', t); \r\n            }\r\n        }, \r\n        \r\n        /* show */\r\n        innerShow: function () {\r\n            this.call('show');                \r\n        },  \r\n        \r\n        /* hide */\r\n        innerHide: function () {\r\n            this.call('hide');       \r\n        }, \r\n        \r\n        /* destroy */\r\n        innerDestroy: function() {\r\n            this.call('destroy');\r\n        },                               \r\n        \r\n        setContainerOption: function(key, value) {\r\n            this.container().options[key] = value; \r\n        },               \r\n\r\n        /**\r\n        * move popover to new position. This function mainly copied from bootstrap-popover.\r\n        */\r\n        /*jshint laxcomma: true, eqeqeq: false*/\r\n        setPosition: function () { \r\n\r\n            (function() {\r\n            /*    \r\n                var $tip = this.tip()\r\n                , inside\r\n                , pos\r\n                , actualWidth\r\n                , actualHeight\r\n                , placement\r\n                , tp\r\n                , tpt\r\n                , tpb\r\n                , tpl\r\n                , tpr;\r\n\r\n                placement = typeof this.options.placement === 'function' ?\r\n                this.options.placement.call(this, $tip[0], this.$element[0]) :\r\n                this.options.placement;\r\n\r\n                inside = /in/.test(placement);\r\n               \r\n                $tip\r\n              //  .detach()\r\n              //vitalets: remove any placement class because otherwise they dont influence on re-positioning of visible popover\r\n                .removeClass('top right bottom left')\r\n                .css({ top: 0, left: 0, display: 'block' });\r\n              //  .insertAfter(this.$element);\r\n               \r\n                pos = this.getPosition(inside);\r\n\r\n                actualWidth = $tip[0].offsetWidth;\r\n                actualHeight = $tip[0].offsetHeight;\r\n\r\n                placement = inside ? placement.split(' ')[1] : placement;\r\n\r\n                tpb = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2};\r\n                tpt = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2};\r\n                tpl = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth};\r\n                tpr = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width};\r\n\r\n                switch (placement) {\r\n                    case 'bottom':\r\n                        if ((tpb.top + actualHeight) > ($(window).scrollTop() + $(window).height())) {\r\n                            if (tpt.top > $(window).scrollTop()) {\r\n                                placement = 'top';\r\n                            } else if ((tpr.left + actualWidth) < ($(window).scrollLeft() + $(window).width())) {\r\n                                placement = 'right';\r\n                            } else if (tpl.left > $(window).scrollLeft()) {\r\n                                placement = 'left';\r\n                            } else {\r\n                                placement = 'right';\r\n                            }\r\n                        }\r\n                        break;\r\n                    case 'top':\r\n                        if (tpt.top < $(window).scrollTop()) {\r\n                            if ((tpb.top + actualHeight) < ($(window).scrollTop() + $(window).height())) {\r\n                                placement = 'bottom';\r\n                            } else if ((tpr.left + actualWidth) < ($(window).scrollLeft() + $(window).width())) {\r\n                                placement = 'right';\r\n                            } else if (tpl.left > $(window).scrollLeft()) {\r\n                                placement = 'left';\r\n                            } else {\r\n                                placement = 'right';\r\n                            }\r\n                        }\r\n                        break;\r\n                    case 'left':\r\n                        if (tpl.left < $(window).scrollLeft()) {\r\n                            if ((tpr.left + actualWidth) < ($(window).scrollLeft() + $(window).width())) {\r\n                                placement = 'right';\r\n                            } else if (tpt.top > $(window).scrollTop()) {\r\n                                placement = 'top';\r\n                            } else if (tpt.top > $(window).scrollTop()) {\r\n                                placement = 'bottom';\r\n                            } else {\r\n                                placement = 'right';\r\n                            }\r\n                        }\r\n                        break;\r\n                    case 'right':\r\n                        if ((tpr.left + actualWidth) > ($(window).scrollLeft() + $(window).width())) {\r\n                            if (tpl.left > $(window).scrollLeft()) {\r\n                                placement = 'left';\r\n                            } else if (tpt.top > $(window).scrollTop()) {\r\n                                placement = 'top';\r\n                            } else if (tpt.top > $(window).scrollTop()) {\r\n                                placement = 'bottom';\r\n                            }\r\n                        }\r\n                        break;\r\n                }\r\n\r\n                switch (placement) {\r\n                    case 'bottom':\r\n                        tp = tpb;\r\n                        break;\r\n                    case 'top':\r\n                        tp = tpt;\r\n                        break;\r\n                    case 'left':\r\n                        tp = tpl;\r\n                        break;\r\n                    case 'right':\r\n                        tp = tpr;\r\n                        break;\r\n                }\r\n\r\n                $tip\r\n                .offset(tp)\r\n                .addClass(placement)\r\n                .addClass('in');\r\n           */\r\n                     \r\n           \r\n            var $tip = this.tip();\r\n            \r\n            var placement = typeof this.options.placement == 'function' ?\r\n                this.options.placement.call(this, $tip[0], this.$element[0]) :\r\n                this.options.placement;            \r\n\r\n            var autoToken = /\\s?auto?\\s?/i;\r\n            var autoPlace = autoToken.test(placement);\r\n            if (autoPlace) {\r\n                placement = placement.replace(autoToken, '') || 'top';\r\n            }\r\n            \r\n            \r\n            var pos = this.getPosition();\r\n            var actualWidth = $tip[0].offsetWidth;\r\n            var actualHeight = $tip[0].offsetHeight;\r\n\r\n            if (autoPlace) {\r\n                var $parent = this.$element.parent();\r\n\r\n                var orgPlacement = placement;\r\n                var docScroll    = document.documentElement.scrollTop || document.body.scrollTop;\r\n                var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth();\r\n                var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight();\r\n                var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left;\r\n\r\n                placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :\r\n                            placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :\r\n                            placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :\r\n                            placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :\r\n                            placement;\r\n\r\n                $tip\r\n                  .removeClass(orgPlacement)\r\n                  .addClass(placement);\r\n            }\r\n\r\n\r\n            var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight);\r\n\r\n            this.applyPlacement(calculatedOffset, placement);            \r\n                     \r\n                \r\n            }).call(this.container());\r\n          /*jshint laxcomma: false, eqeqeq: true*/  \r\n        }            \r\n    });\r\n\r\n}(window.jQuery));\r\n\r\n/* =========================================================\r\n * bootstrap-datepicker.js\r\n * http://www.eyecon.ro/bootstrap-datepicker\r\n * =========================================================\r\n * Copyright 2012 Stefan Petre\r\n * Improvements by Andrew Rowls\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n * ========================================================= */\r\n\r\n(function( $ ) {\r\n\r\n\tfunction UTCDate(){\r\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\r\n\t}\r\n\tfunction UTCToday(){\r\n\t\tvar today = new Date();\r\n\t\treturn UTCDate(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate());\r\n\t}\r\n\r\n\t// Picker object\r\n\r\n\tvar Datepicker = function(element, options) {\r\n\t\tvar that = this;\r\n\r\n\t\tthis._process_options(options);\r\n\r\n\t\tthis.element = $(element);\r\n\t\tthis.isInline = false;\r\n\t\tthis.isInput = this.element.is('input');\r\n\t\tthis.component = this.element.is('.date') ? this.element.find('.add-on, .btn') : false;\r\n\t\tthis.hasInput = this.component && this.element.find('input').length;\r\n\t\tif(this.component && this.component.length === 0)\r\n\t\t\tthis.component = false;\r\n\r\n\t\tthis.picker = $(DPGlobal.template);\r\n\t\tthis._buildEvents();\r\n\t\tthis._attachEvents();\r\n\r\n\t\tif(this.isInline) {\r\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\r\n\t\t} else {\r\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\r\n\t\t}\r\n\r\n\t\tif (this.o.rtl){\r\n\t\t\tthis.picker.addClass('datepicker-rtl');\r\n\t\t\tthis.picker.find('.prev i, .next i')\r\n\t\t\t\t\t\t.toggleClass('icon-arrow-left icon-arrow-right');\r\n\t\t}\r\n\r\n\r\n\t\tthis.viewMode = this.o.startView;\r\n\r\n\t\tif (this.o.calendarWeeks)\r\n\t\t\tthis.picker.find('tfoot th.today')\r\n\t\t\t\t\t\t.attr('colspan', function(i, val){\r\n\t\t\t\t\t\t\treturn parseInt(val) + 1;\r\n\t\t\t\t\t\t});\r\n\r\n\t\tthis._allow_update = false;\r\n\r\n\t\tthis.setStartDate(this.o.startDate);\r\n\t\tthis.setEndDate(this.o.endDate);\r\n\t\tthis.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);\r\n\r\n\t\tthis.fillDow();\r\n\t\tthis.fillMonths();\r\n\r\n\t\tthis._allow_update = true;\r\n\r\n\t\tthis.update();\r\n\t\tthis.showMode();\r\n\r\n\t\tif(this.isInline) {\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t};\r\n\r\n\tDatepicker.prototype = {\r\n\t\tconstructor: Datepicker,\r\n\r\n\t\t_process_options: function(opts){\r\n\t\t\t// Store raw options for reference\r\n\t\t\tthis._o = $.extend({}, this._o, opts);\r\n\t\t\t// Processed options\r\n\t\t\tvar o = this.o = $.extend({}, this._o);\r\n\r\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\r\n\t\t\t// fallback to 2 letter code eg \"de\"\r\n\t\t\tvar lang = o.language;\r\n\t\t\tif (!dates[lang]) {\r\n\t\t\t\tlang = lang.split('-')[0];\r\n\t\t\t\tif (!dates[lang])\r\n\t\t\t\t\tlang = defaults.language;\r\n\t\t\t}\r\n\t\t\to.language = lang;\r\n\r\n\t\t\tswitch(o.startView){\r\n\t\t\t\tcase 2:\r\n\t\t\t\tcase 'decade':\r\n\t\t\t\t\to.startView = 2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 1:\r\n\t\t\t\tcase 'year':\r\n\t\t\t\t\to.startView = 1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\to.startView = 0;\r\n\t\t\t}\r\n\r\n\t\t\tswitch (o.minViewMode) {\r\n\t\t\t\tcase 1:\r\n\t\t\t\tcase 'months':\r\n\t\t\t\t\to.minViewMode = 1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 2:\r\n\t\t\t\tcase 'years':\r\n\t\t\t\t\to.minViewMode = 2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\to.minViewMode = 0;\r\n\t\t\t}\r\n\r\n\t\t\to.startView = Math.max(o.startView, o.minViewMode);\r\n\r\n\t\t\to.weekStart %= 7;\r\n\t\t\to.weekEnd = ((o.weekStart + 6) % 7);\r\n\r\n\t\t\tvar format = DPGlobal.parseFormat(o.format)\r\n\t\t\tif (o.startDate !== -Infinity) {\r\n\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language);\r\n\t\t\t}\r\n\t\t\tif (o.endDate !== Infinity) {\r\n\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language);\r\n\t\t\t}\r\n\r\n\t\t\to.daysOfWeekDisabled = o.daysOfWeekDisabled||[];\r\n\t\t\tif (!$.isArray(o.daysOfWeekDisabled))\r\n\t\t\t\to.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\\s]*/);\r\n\t\t\to.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function (d) {\r\n\t\t\t\treturn parseInt(d, 10);\r\n\t\t\t});\r\n\t\t},\r\n\t\t_events: [],\r\n\t\t_secondaryEvents: [],\r\n\t\t_applyEvents: function(evs){\r\n\t\t\tfor (var i=0, el, ev; i<evs.length; i++){\r\n\t\t\t\tel = evs[i][0];\r\n\t\t\t\tev = evs[i][1];\r\n\t\t\t\tel.on(ev);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_unapplyEvents: function(evs){\r\n\t\t\tfor (var i=0, el, ev; i<evs.length; i++){\r\n\t\t\t\tel = evs[i][0];\r\n\t\t\t\tev = evs[i][1];\r\n\t\t\t\tel.off(ev);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_buildEvents: function(){\r\n\t\t\tif (this.isInput) { // single input\r\n\t\t\t\tthis._events = [\r\n\t\t\t\t\t[this.element, {\r\n\t\t\t\t\t\tfocus: $.proxy(this.show, this),\r\n\t\t\t\t\t\tkeyup: $.proxy(this.update, this),\r\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\r\n\t\t\t\t\t}]\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t\telse if (this.component && this.hasInput){ // component: input + button\r\n\t\t\t\tthis._events = [\r\n\t\t\t\t\t// For components that are not readonly, allow keyboard nav\r\n\t\t\t\t\t[this.element.find('input'), {\r\n\t\t\t\t\t\tfocus: $.proxy(this.show, this),\r\n\t\t\t\t\t\tkeyup: $.proxy(this.update, this),\r\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\r\n\t\t\t\t\t}],\r\n\t\t\t\t\t[this.component, {\r\n\t\t\t\t\t\tclick: $.proxy(this.show, this)\r\n\t\t\t\t\t}]\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t\telse if (this.element.is('div')) {  // inline datepicker\r\n\t\t\t\tthis.isInline = true;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._events = [\r\n\t\t\t\t\t[this.element, {\r\n\t\t\t\t\t\tclick: $.proxy(this.show, this)\r\n\t\t\t\t\t}]\r\n\t\t\t\t];\r\n\t\t\t}\r\n\r\n\t\t\tthis._secondaryEvents = [\r\n\t\t\t\t[this.picker, {\r\n\t\t\t\t\tclick: $.proxy(this.click, this)\r\n\t\t\t\t}],\r\n\t\t\t\t[$(window), {\r\n\t\t\t\t\tresize: $.proxy(this.place, this)\r\n\t\t\t\t}],\r\n\t\t\t\t[$(document), {\r\n\t\t\t\t\tmousedown: $.proxy(function (e) {\r\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\r\n\t\t\t\t\t\tif (!(\r\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\r\n\t\t\t\t\t\t\tthis.element.find(e.target).size() ||\r\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\r\n\t\t\t\t\t\t\tthis.picker.find(e.target).size()\r\n\t\t\t\t\t\t)) {\r\n\t\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, this)\r\n\t\t\t\t}]\r\n\t\t\t];\r\n\t\t},\r\n\t\t_attachEvents: function(){\r\n\t\t\tthis._detachEvents();\r\n\t\t\tthis._applyEvents(this._events);\r\n\t\t},\r\n\t\t_detachEvents: function(){\r\n\t\t\tthis._unapplyEvents(this._events);\r\n\t\t},\r\n\t\t_attachSecondaryEvents: function(){\r\n\t\t\tthis._detachSecondaryEvents();\r\n\t\t\tthis._applyEvents(this._secondaryEvents);\r\n\t\t},\r\n\t\t_detachSecondaryEvents: function(){\r\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\r\n\t\t},\r\n\t\t_trigger: function(event, altdate){\r\n\t\t\tvar date = altdate || this.date,\r\n\t\t\t\tlocal_date = new Date(date.getTime() + (date.getTimezoneOffset()*60000));\r\n\r\n\t\t\tthis.element.trigger({\r\n\t\t\t\ttype: event,\r\n\t\t\t\tdate: local_date,\r\n\t\t\t\tformat: $.proxy(function(altformat){\r\n\t\t\t\t\tvar format = altformat || this.o.format;\r\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\r\n\t\t\t\t}, this)\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tshow: function(e) {\r\n\t\t\tif (!this.isInline)\r\n\t\t\t\tthis.picker.appendTo('body');\r\n\t\t\tthis.picker.show();\r\n\t\t\tthis.height = this.component ? this.component.outerHeight() : this.element.outerHeight();\r\n\t\t\tthis.place();\r\n\t\t\tthis._attachSecondaryEvents();\r\n\t\t\tif (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\tthis._trigger('show');\r\n\t\t},\r\n\r\n\t\thide: function(e){\r\n\t\t\tif(this.isInline) return;\r\n\t\t\tif (!this.picker.is(':visible')) return;\r\n\t\t\tthis.picker.hide().detach();\r\n\t\t\tthis._detachSecondaryEvents();\r\n\t\t\tthis.viewMode = this.o.startView;\r\n\t\t\tthis.showMode();\r\n\r\n\t\t\tif (\r\n\t\t\t\tthis.o.forceParse &&\r\n\t\t\t\t(\r\n\t\t\t\t\tthis.isInput && this.element.val() ||\r\n\t\t\t\t\tthis.hasInput && this.element.find('input').val()\r\n\t\t\t\t)\r\n\t\t\t)\r\n\t\t\t\tthis.setValue();\r\n\t\t\tthis._trigger('hide');\r\n\t\t},\r\n\r\n\t\tremove: function() {\r\n\t\t\tthis.hide();\r\n\t\t\tthis._detachEvents();\r\n\t\t\tthis._detachSecondaryEvents();\r\n\t\t\tthis.picker.remove();\r\n\t\t\tdelete this.element.data().datepicker;\r\n\t\t\tif (!this.isInput) {\r\n\t\t\t\tdelete this.element.data().date;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetDate: function() {\r\n\t\t\tvar d = this.getUTCDate();\r\n\t\t\treturn new Date(d.getTime() + (d.getTimezoneOffset()*60000));\r\n\t\t},\r\n\r\n\t\tgetUTCDate: function() {\r\n\t\t\treturn this.date;\r\n\t\t},\r\n\r\n\t\tsetDate: function(d) {\r\n\t\t\tthis.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset()*60000)));\r\n\t\t},\r\n\r\n\t\tsetUTCDate: function(d) {\r\n\t\t\tthis.date = d;\r\n\t\t\tthis.setValue();\r\n\t\t},\r\n\r\n\t\tsetValue: function() {\r\n\t\t\tvar formatted = this.getFormattedDate();\r\n\t\t\tif (!this.isInput) {\r\n\t\t\t\tif (this.component){\r\n\t\t\t\t\tthis.element.find('input').val(formatted);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthis.element.val(formatted);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetFormattedDate: function(format) {\r\n\t\t\tif (format === undefined)\r\n\t\t\t\tformat = this.o.format;\r\n\t\t\treturn DPGlobal.formatDate(this.date, format, this.o.language);\r\n\t\t},\r\n\r\n\t\tsetStartDate: function(startDate){\r\n\t\t\tthis._process_options({startDate: startDate});\r\n\t\t\tthis.update();\r\n\t\t\tthis.updateNavArrows();\r\n\t\t},\r\n\r\n\t\tsetEndDate: function(endDate){\r\n\t\t\tthis._process_options({endDate: endDate});\r\n\t\t\tthis.update();\r\n\t\t\tthis.updateNavArrows();\r\n\t\t},\r\n\r\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\r\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\r\n\t\t\tthis.update();\r\n\t\t\tthis.updateNavArrows();\r\n\t\t},\r\n\r\n\t\tplace: function(){\r\n\t\t\t\t\t\tif(this.isInline) return;\r\n\t\t\tvar zIndex = parseInt(this.element.parents().filter(function() {\r\n\t\t\t\t\t\t\treturn $(this).css('z-index') != 'auto';\r\n\t\t\t\t\t\t}).first().css('z-index'))+10;\r\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\r\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(true);\r\n\t\t\tthis.picker.css({\r\n\t\t\t\ttop: offset.top + height,\r\n\t\t\t\tleft: offset.left,\r\n\t\t\t\tzIndex: zIndex\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\t_allow_update: true,\r\n\t\tupdate: function(){\r\n\t\t\tif (!this._allow_update) return;\r\n\r\n\t\t\tvar date, fromArgs = false;\r\n\t\t\tif(arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {\r\n\t\t\t\tdate = arguments[0];\r\n\t\t\t\tfromArgs = true;\r\n\t\t\t} else {\r\n\t\t\t\tdate = this.isInput ? this.element.val() : this.element.data('date') || this.element.find('input').val();\r\n\t\t\t\tdelete this.element.data().date;\r\n\t\t\t}\r\n\r\n\t\t\tthis.date = DPGlobal.parseDate(date, this.o.format, this.o.language);\r\n\r\n\t\t\tif(fromArgs) this.setValue();\r\n\r\n\t\t\tif (this.date < this.o.startDate) {\r\n\t\t\t\tthis.viewDate = new Date(this.o.startDate);\r\n\t\t\t} else if (this.date > this.o.endDate) {\r\n\t\t\t\tthis.viewDate = new Date(this.o.endDate);\r\n\t\t\t} else {\r\n\t\t\t\tthis.viewDate = new Date(this.date);\r\n\t\t\t}\r\n\t\t\tthis.fill();\r\n\t\t},\r\n\r\n\t\tfillDow: function(){\r\n\t\t\tvar dowCnt = this.o.weekStart,\r\n\t\t\thtml = '<tr>';\r\n\t\t\tif(this.o.calendarWeeks){\r\n\t\t\t\tvar cell = '<th class=\"cw\">&nbsp;</th>';\r\n\t\t\t\thtml += cell;\r\n\t\t\t\tthis.picker.find('.datepicker-days thead tr:first-child').prepend(cell);\r\n\t\t\t}\r\n\t\t\twhile (dowCnt < this.o.weekStart + 7) {\r\n\t\t\t\thtml += '<th class=\"dow\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\r\n\t\t\t}\r\n\t\t\thtml += '</tr>';\r\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\r\n\t\t},\r\n\r\n\t\tfillMonths: function(){\r\n\t\t\tvar html = '',\r\n\t\t\ti = 0;\r\n\t\t\twhile (i < 12) {\r\n\t\t\t\thtml += '<span class=\"month\">'+dates[this.o.language].monthsShort[i++]+'</span>';\r\n\t\t\t}\r\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\r\n\t\t},\r\n\r\n\t\tsetRange: function(range){\r\n\t\t\tif (!range || !range.length)\r\n\t\t\t\tdelete this.range;\r\n\t\t\telse\r\n\t\t\t\tthis.range = $.map(range, function(d){ return d.valueOf(); });\r\n\t\t\tthis.fill();\r\n\t\t},\r\n\r\n\t\tgetClassNames: function(date){\r\n\t\t\tvar cls = [],\r\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\r\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\r\n\t\t\t\tcurrentDate = this.date.valueOf(),\r\n\t\t\t\ttoday = new Date();\r\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() == year && date.getUTCMonth() < month)) {\r\n\t\t\t\tcls.push('old');\r\n\t\t\t} else if (date.getUTCFullYear() > year || (date.getUTCFullYear() == year && date.getUTCMonth() > month)) {\r\n\t\t\t\tcls.push('new');\r\n\t\t\t}\r\n\t\t\t// Compare internal UTC date with local today, not UTC today\r\n\t\t\tif (this.o.todayHighlight &&\r\n\t\t\t\tdate.getUTCFullYear() == today.getFullYear() &&\r\n\t\t\t\tdate.getUTCMonth() == today.getMonth() &&\r\n\t\t\t\tdate.getUTCDate() == today.getDate()) {\r\n\t\t\t\tcls.push('today');\r\n\t\t\t}\r\n\t\t\tif (currentDate && date.valueOf() == currentDate) {\r\n\t\t\t\tcls.push('active');\r\n\t\t\t}\r\n\t\t\tif (date.valueOf() < this.o.startDate || date.valueOf() > this.o.endDate ||\r\n\t\t\t\t$.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1) {\r\n\t\t\t\tcls.push('disabled');\r\n\t\t\t}\r\n\t\t\tif (this.range){\r\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\r\n\t\t\t\t\tcls.push('range');\r\n\t\t\t\t}\r\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) != -1){\r\n\t\t\t\t\tcls.push('selected');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn cls;\r\n\t\t},\r\n\r\n\t\tfill: function() {\r\n\t\t\tvar d = new Date(this.viewDate),\r\n\t\t\t\tyear = d.getUTCFullYear(),\r\n\t\t\t\tmonth = d.getUTCMonth(),\r\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\r\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\r\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\r\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\r\n\t\t\t\tcurrentDate = this.date && this.date.valueOf(),\r\n\t\t\t\ttooltip;\r\n\t\t\tthis.picker.find('.datepicker-days thead th.datepicker-switch')\r\n\t\t\t\t\t\t.text(dates[this.o.language].months[month]+' '+year);\r\n\t\t\tthis.picker.find('tfoot th.today')\r\n\t\t\t\t\t\t.text(dates[this.o.language].today)\r\n\t\t\t\t\t\t.toggle(this.o.todayBtn !== false);\r\n\t\t\tthis.picker.find('tfoot th.clear')\r\n\t\t\t\t\t\t.text(dates[this.o.language].clear)\r\n\t\t\t\t\t\t.toggle(this.o.clearBtn !== false);\r\n\t\t\tthis.updateNavArrows();\r\n\t\t\tthis.fillMonths();\r\n\t\t\tvar prevMonth = UTCDate(year, month-1, 28,0,0,0,0),\r\n\t\t\t\tday = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());\r\n\t\t\tprevMonth.setUTCDate(day);\r\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\r\n\t\t\tvar nextMonth = new Date(prevMonth);\r\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\r\n\t\t\tnextMonth = nextMonth.valueOf();\r\n\t\t\tvar html = [];\r\n\t\t\tvar clsName;\r\n\t\t\twhile(prevMonth.valueOf() < nextMonth) {\r\n\t\t\t\tif (prevMonth.getUTCDay() == this.o.weekStart) {\r\n\t\t\t\t\thtml.push('<tr>');\r\n\t\t\t\t\tif(this.o.calendarWeeks){\r\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\r\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\r\n\t\t\t\t\t\tvar\r\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\r\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),\r\n\t\t\t\t\t\t\t// Thursday of this week\r\n\t\t\t\t\t\t\tth = new Date(+ws + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\r\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\r\n\t\t\t\t\t\t\tyth = new Date(+(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),\r\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\r\n\t\t\t\t\t\t\tcalWeek =  (th - yth) / 864e5 / 7 + 1;\r\n\t\t\t\t\t\thtml.push('<td class=\"cw\">'+ calWeek +'</td>');\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tclsName = this.getClassNames(prevMonth);\r\n\t\t\t\tclsName.push('day');\r\n\r\n\t\t\t\tvar before = this.o.beforeShowDay(prevMonth);\r\n\t\t\t\tif (before === undefined)\r\n\t\t\t\t\tbefore = {};\r\n\t\t\t\telse if (typeof(before) === 'boolean')\r\n\t\t\t\t\tbefore = {enabled: before};\r\n\t\t\t\telse if (typeof(before) === 'string')\r\n\t\t\t\t\tbefore = {classes: before};\r\n\t\t\t\tif (before.enabled === false)\r\n\t\t\t\t\tclsName.push('disabled');\r\n\t\t\t\tif (before.classes)\r\n\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\r\n\t\t\t\tif (before.tooltip)\r\n\t\t\t\t\ttooltip = before.tooltip;\r\n\r\n\t\t\t\tclsName = $.unique(clsName);\r\n\t\t\t\thtml.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + '>'+prevMonth.getUTCDate() + '</td>');\r\n\t\t\t\tif (prevMonth.getUTCDay() == this.o.weekEnd) {\r\n\t\t\t\t\thtml.push('</tr>');\r\n\t\t\t\t}\r\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate()+1);\r\n\t\t\t}\r\n\t\t\tthis.picker.find('.datepicker-days tbody').empty().append(html.join(''));\r\n\t\t\tvar currentYear = this.date && this.date.getUTCFullYear();\r\n\r\n\t\t\tvar months = this.picker.find('.datepicker-months')\r\n\t\t\t\t\t\t.find('th:eq(1)')\r\n\t\t\t\t\t\t\t.text(year)\r\n\t\t\t\t\t\t\t.end()\r\n\t\t\t\t\t\t.find('span').removeClass('active');\r\n\t\t\tif (currentYear && currentYear == year) {\r\n\t\t\t\tmonths.eq(this.date.getUTCMonth()).addClass('active');\r\n\t\t\t}\r\n\t\t\tif (year < startYear || year > endYear) {\r\n\t\t\t\tmonths.addClass('disabled');\r\n\t\t\t}\r\n\t\t\tif (year == startYear) {\r\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\r\n\t\t\t}\r\n\t\t\tif (year == endYear) {\r\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\r\n\t\t\t}\r\n\r\n\t\t\thtml = '';\r\n\t\t\tyear = parseInt(year/10, 10) * 10;\r\n\t\t\tvar yearCont = this.picker.find('.datepicker-years')\r\n\t\t\t\t\t\t\t\t.find('th:eq(1)')\r\n\t\t\t\t\t\t\t\t\t.text(year + '-' + (year + 9))\r\n\t\t\t\t\t\t\t\t\t.end()\r\n\t\t\t\t\t\t\t\t.find('td');\r\n\t\t\tyear -= 1;\r\n\t\t\tfor (var i = -1; i < 11; i++) {\r\n\t\t\t\thtml += '<span class=\"year'+(i == -1 ? ' old' : i == 10 ? ' new' : '')+(currentYear == year ? ' active' : '')+(year < startYear || year > endYear ? ' disabled' : '')+'\">'+year+'</span>';\r\n\t\t\t\tyear += 1;\r\n\t\t\t}\r\n\t\t\tyearCont.html(html);\r\n\t\t},\r\n\r\n\t\tupdateNavArrows: function() {\r\n\t\t\tif (!this._allow_update) return;\r\n\r\n\t\t\tvar d = new Date(this.viewDate),\r\n\t\t\t\tyear = d.getUTCFullYear(),\r\n\t\t\t\tmonth = d.getUTCMonth();\r\n\t\t\tswitch (this.viewMode) {\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()) {\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()) {\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 1:\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear()) {\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear()) {\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclick: function(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tvar target = $(e.target).closest('span, td, th');\r\n\t\t\tif (target.length == 1) {\r\n\t\t\t\tswitch(target[0].nodeName.toLowerCase()) {\r\n\t\t\t\t\tcase 'th':\r\n\t\t\t\t\t\tswitch(target[0].className) {\r\n\t\t\t\t\t\t\tcase 'datepicker-switch':\r\n\t\t\t\t\t\t\t\tthis.showMode(1);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'prev':\r\n\t\t\t\t\t\t\tcase 'next':\r\n\t\t\t\t\t\t\t\tvar dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1);\r\n\t\t\t\t\t\t\t\tswitch(this.viewMode){\r\n\t\t\t\t\t\t\t\t\tcase 0:\r\n\t\t\t\t\t\t\t\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\t\t\t\t\tthis.viewDate = this.moveYear(this.viewDate, dir);\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthis.fill();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'today':\r\n\t\t\t\t\t\t\t\tvar date = new Date();\r\n\t\t\t\t\t\t\t\tdate = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n\r\n\t\t\t\t\t\t\t\tthis.showMode(-2);\r\n\t\t\t\t\t\t\t\tvar which = this.o.todayBtn == 'linked' ? null : 'view';\r\n\t\t\t\t\t\t\t\tthis._setDate(date, which);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'clear':\r\n\t\t\t\t\t\t\t\tvar element;\r\n\t\t\t\t\t\t\t\tif (this.isInput)\r\n\t\t\t\t\t\t\t\t\telement = this.element;\r\n\t\t\t\t\t\t\t\telse if (this.component)\r\n\t\t\t\t\t\t\t\t\telement = this.element.find('input');\r\n\t\t\t\t\t\t\t\tif (element)\r\n\t\t\t\t\t\t\t\t\telement.val(\"\").change();\r\n\t\t\t\t\t\t\t\tthis._trigger('changeDate');\r\n\t\t\t\t\t\t\t\tthis.update();\r\n\t\t\t\t\t\t\t\tif (this.o.autoclose)\r\n\t\t\t\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'span':\r\n\t\t\t\t\t\tif (!target.is('.disabled')) {\r\n\t\t\t\t\t\t\tthis.viewDate.setUTCDate(1);\r\n\t\t\t\t\t\t\tif (target.is('.month')) {\r\n\t\t\t\t\t\t\t\tvar day = 1;\r\n\t\t\t\t\t\t\t\tvar month = target.parent().find('span').index(target);\r\n\t\t\t\t\t\t\t\tvar year = this.viewDate.getUTCFullYear();\r\n\t\t\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\r\n\t\t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\r\n\t\t\t\t\t\t\t\tif (this.o.minViewMode === 1) {\r\n\t\t\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day,0,0,0,0));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tvar year = parseInt(target.text(), 10)||0;\r\n\t\t\t\t\t\t\t\tvar day = 1;\r\n\t\t\t\t\t\t\t\tvar month = 0;\r\n\t\t\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\r\n\t\t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\r\n\t\t\t\t\t\t\t\tif (this.o.minViewMode === 2) {\r\n\t\t\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day,0,0,0,0));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.showMode(-1);\r\n\t\t\t\t\t\t\tthis.fill();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'td':\r\n\t\t\t\t\t\tif (target.is('.day') && !target.is('.disabled')){\r\n\t\t\t\t\t\t\tvar day = parseInt(target.text(), 10)||1;\r\n\t\t\t\t\t\t\tvar year = this.viewDate.getUTCFullYear(),\r\n\t\t\t\t\t\t\t\tmonth = this.viewDate.getUTCMonth();\r\n\t\t\t\t\t\t\tif (target.is('.old')) {\r\n\t\t\t\t\t\t\t\tif (month === 0) {\r\n\t\t\t\t\t\t\t\t\tmonth = 11;\r\n\t\t\t\t\t\t\t\t\tyear -= 1;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tmonth -= 1;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if (target.is('.new')) {\r\n\t\t\t\t\t\t\t\tif (month == 11) {\r\n\t\t\t\t\t\t\t\t\tmonth = 0;\r\n\t\t\t\t\t\t\t\t\tyear += 1;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tmonth += 1;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day,0,0,0,0));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_setDate: function(date, which){\r\n\t\t\tif (!which || which == 'date')\r\n\t\t\t\tthis.date = new Date(date);\r\n\t\t\tif (!which || which  == 'view')\r\n\t\t\t\tthis.viewDate = new Date(date);\r\n\t\t\tthis.fill();\r\n\t\t\tthis.setValue();\r\n\t\t\tthis._trigger('changeDate');\r\n\t\t\tvar element;\r\n\t\t\tif (this.isInput) {\r\n\t\t\t\telement = this.element;\r\n\t\t\t} else if (this.component){\r\n\t\t\t\telement = this.element.find('input');\r\n\t\t\t}\r\n\t\t\tif (element) {\r\n\t\t\t\telement.change();\r\n\t\t\t\tif (this.o.autoclose && (!which || which == 'date')) {\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tmoveMonth: function(date, dir){\r\n\t\t\tif (!dir) return date;\r\n\t\t\tvar new_date = new Date(date.valueOf()),\r\n\t\t\t\tday = new_date.getUTCDate(),\r\n\t\t\t\tmonth = new_date.getUTCMonth(),\r\n\t\t\t\tmag = Math.abs(dir),\r\n\t\t\t\tnew_month, test;\r\n\t\t\tdir = dir > 0 ? 1 : -1;\r\n\t\t\tif (mag == 1){\r\n\t\t\t\ttest = dir == -1\r\n\t\t\t\t\t// If going back one month, make sure month is not current month\r\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\r\n\t\t\t\t\t? function(){ return new_date.getUTCMonth() == month; }\r\n\t\t\t\t\t// If going forward one month, make sure month is as expected\r\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\r\n\t\t\t\t\t: function(){ return new_date.getUTCMonth() != new_month; };\r\n\t\t\t\tnew_month = month + dir;\r\n\t\t\t\tnew_date.setUTCMonth(new_month);\r\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\r\n\t\t\t\tif (new_month < 0 || new_month > 11)\r\n\t\t\t\t\tnew_month = (new_month + 12) % 12;\r\n\t\t\t} else {\r\n\t\t\t\t// For magnitudes >1, move one month at a time...\r\n\t\t\t\tfor (var i=0; i<mag; i++)\r\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\r\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\r\n\t\t\t\t// ...then reset the day, keeping it in the new month\r\n\t\t\t\tnew_month = new_date.getUTCMonth();\r\n\t\t\t\tnew_date.setUTCDate(day);\r\n\t\t\t\ttest = function(){ return new_month != new_date.getUTCMonth(); };\r\n\t\t\t}\r\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\r\n\t\t\t// end of month\r\n\t\t\twhile (test()){\r\n\t\t\t\tnew_date.setUTCDate(--day);\r\n\t\t\t\tnew_date.setUTCMonth(new_month);\r\n\t\t\t}\r\n\t\t\treturn new_date;\r\n\t\t},\r\n\r\n\t\tmoveYear: function(date, dir){\r\n\t\t\treturn this.moveMonth(date, dir*12);\r\n\t\t},\r\n\r\n\t\tdateWithinRange: function(date){\r\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\r\n\t\t},\r\n\r\n\t\tkeydown: function(e){\r\n\t\t\tif (this.picker.is(':not(:visible)')){\r\n\t\t\t\tif (e.keyCode == 27) // allow escape to hide and re-show picker\r\n\t\t\t\t\tthis.show();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar dateChanged = false,\r\n\t\t\t\tdir, day, month,\r\n\t\t\t\tnewDate, newViewDate;\r\n\t\t\tswitch(e.keyCode){\r\n\t\t\t\tcase 27: // escape\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 37: // left\r\n\t\t\t\tcase 39: // right\r\n\t\t\t\t\tif (!this.o.keyboardNavigation) break;\r\n\t\t\t\t\tdir = e.keyCode == 37 ? -1 : 1;\r\n\t\t\t\t\tif (e.ctrlKey){\r\n\t\t\t\t\t\tnewDate = this.moveYear(this.date, dir);\r\n\t\t\t\t\t\tnewViewDate = this.moveYear(this.viewDate, dir);\r\n\t\t\t\t\t} else if (e.shiftKey){\r\n\t\t\t\t\t\tnewDate = this.moveMonth(this.date, dir);\r\n\t\t\t\t\t\tnewViewDate = this.moveMonth(this.viewDate, dir);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnewDate = new Date(this.date);\r\n\t\t\t\t\t\tnewDate.setUTCDate(this.date.getUTCDate() + dir);\r\n\t\t\t\t\t\tnewViewDate = new Date(this.viewDate);\r\n\t\t\t\t\t\tnewViewDate.setUTCDate(this.viewDate.getUTCDate() + dir);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.dateWithinRange(newDate)){\r\n\t\t\t\t\t\tthis.date = newDate;\r\n\t\t\t\t\t\tthis.viewDate = newViewDate;\r\n\t\t\t\t\t\tthis.setValue();\r\n\t\t\t\t\t\tthis.update();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tdateChanged = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 38: // up\r\n\t\t\t\tcase 40: // down\r\n\t\t\t\t\tif (!this.o.keyboardNavigation) break;\r\n\t\t\t\t\tdir = e.keyCode == 38 ? -1 : 1;\r\n\t\t\t\t\tif (e.ctrlKey){\r\n\t\t\t\t\t\tnewDate = this.moveYear(this.date, dir);\r\n\t\t\t\t\t\tnewViewDate = this.moveYear(this.viewDate, dir);\r\n\t\t\t\t\t} else if (e.shiftKey){\r\n\t\t\t\t\t\tnewDate = this.moveMonth(this.date, dir);\r\n\t\t\t\t\t\tnewViewDate = this.moveMonth(this.viewDate, dir);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnewDate = new Date(this.date);\r\n\t\t\t\t\t\tnewDate.setUTCDate(this.date.getUTCDate() + dir * 7);\r\n\t\t\t\t\t\tnewViewDate = new Date(this.viewDate);\r\n\t\t\t\t\t\tnewViewDate.setUTCDate(this.viewDate.getUTCDate() + dir * 7);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.dateWithinRange(newDate)){\r\n\t\t\t\t\t\tthis.date = newDate;\r\n\t\t\t\t\t\tthis.viewDate = newViewDate;\r\n\t\t\t\t\t\tthis.setValue();\r\n\t\t\t\t\t\tthis.update();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tdateChanged = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 13: // enter\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 9: // tab\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (dateChanged){\r\n\t\t\t\tthis._trigger('changeDate');\r\n\t\t\t\tvar element;\r\n\t\t\t\tif (this.isInput) {\r\n\t\t\t\t\telement = this.element;\r\n\t\t\t\t} else if (this.component){\r\n\t\t\t\t\telement = this.element.find('input');\r\n\t\t\t\t}\r\n\t\t\t\tif (element) {\r\n\t\t\t\t\telement.change();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tshowMode: function(dir) {\r\n\t\t\tif (dir) {\r\n\t\t\t\tthis.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + dir));\r\n\t\t\t}\r\n\t\t\t/*\r\n\t\t\t\tvitalets: fixing bug of very special conditions:\r\n\t\t\t\tjquery 1.7.1 + webkit + show inline datepicker in bootstrap popover.\r\n\t\t\t\tMethod show() does not set display css correctly and datepicker is not shown.\r\n\t\t\t\tChanged to .css('display', 'block') solve the problem.\r\n\t\t\t\tSee https://github.com/vitalets/x-editable/issues/37\r\n\r\n\t\t\t\tIn jquery 1.7.2+ everything works fine.\r\n\t\t\t*/\r\n\t\t\t//this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();\r\n\t\t\tthis.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).css('display', 'block');\r\n\t\t\tthis.updateNavArrows();\r\n\t\t}\r\n\t};\r\n\r\n\tvar DateRangePicker = function(element, options){\r\n\t\tthis.element = $(element);\r\n\t\tthis.inputs = $.map(options.inputs, function(i){ return i.jquery ? i[0] : i; });\r\n\t\tdelete options.inputs;\r\n\r\n\t\t$(this.inputs)\r\n\t\t\t.datepicker(options)\r\n\t\t\t.bind('changeDate', $.proxy(this.dateUpdated, this));\r\n\r\n\t\tthis.pickers = $.map(this.inputs, function(i){ return $(i).data('datepicker'); });\r\n\t\tthis.updateDates();\r\n\t};\r\n\tDateRangePicker.prototype = {\r\n\t\tupdateDates: function(){\r\n\t\t\tthis.dates = $.map(this.pickers, function(i){ return i.date; });\r\n\t\t\tthis.updateRanges();\r\n\t\t},\r\n\t\tupdateRanges: function(){\r\n\t\t\tvar range = $.map(this.dates, function(d){ return d.valueOf(); });\r\n\t\t\t$.each(this.pickers, function(i, p){\r\n\t\t\t\tp.setRange(range);\r\n\t\t\t});\r\n\t\t},\r\n\t\tdateUpdated: function(e){\r\n\t\t\tvar dp = $(e.target).data('datepicker'),\r\n\t\t\t\tnew_date = dp.getUTCDate(),\r\n\t\t\t\ti = $.inArray(e.target, this.inputs),\r\n\t\t\t\tl = this.inputs.length;\r\n\t\t\tif (i == -1) return;\r\n\r\n\t\t\tif (new_date < this.dates[i]){\r\n\t\t\t\t// Date being moved earlier/left\r\n\t\t\t\twhile (i>=0 && new_date < this.dates[i]){\r\n\t\t\t\t\tthis.pickers[i--].setUTCDate(new_date);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (new_date > this.dates[i]){\r\n\t\t\t\t// Date being moved later/right\r\n\t\t\t\twhile (i<l && new_date > this.dates[i]){\r\n\t\t\t\t\tthis.pickers[i++].setUTCDate(new_date);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.updateDates();\r\n\t\t},\r\n\t\tremove: function(){\r\n\t\t\t$.map(this.pickers, function(p){ p.remove(); });\r\n\t\t\tdelete this.element.data().datepicker;\r\n\t\t}\r\n\t};\r\n\r\n\tfunction opts_from_el(el, prefix){\r\n\t\t// Derive options from element data-attrs\r\n\t\tvar data = $(el).data(),\r\n\t\t\tout = {}, inkey,\r\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])'),\r\n\t\t\tprefix = new RegExp('^' + prefix.toLowerCase());\r\n\t\tfor (var key in data)\r\n\t\t\tif (prefix.test(key)){\r\n\t\t\t\tinkey = key.replace(replace, function(_,a){ return a.toLowerCase(); });\r\n\t\t\t\tout[inkey] = data[key];\r\n\t\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n\tfunction opts_from_locale(lang){\r\n\t\t// Derive options from locale plugins\r\n\t\tvar out = {};\r\n\t\t// Check if \"de-DE\" style date is available, if not language should\r\n\t\t// fallback to 2 letter code eg \"de\"\r\n\t\tif (!dates[lang]) {\r\n\t\t\tlang = lang.split('-')[0]\r\n\t\t\tif (!dates[lang])\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t\tvar d = dates[lang];\r\n\t\t$.each(locale_opts, function(i,k){\r\n\t\t\tif (k in d)\r\n\t\t\t\tout[k] = d[k];\r\n\t\t});\r\n\t\treturn out;\r\n\t}\r\n\r\n\tvar old = $.fn.datepicker;\r\n\tvar datepicker = $.fn.datepicker = function ( option ) {\r\n\t\tvar args = Array.apply(null, arguments);\r\n\t\targs.shift();\r\n\t\tvar internal_return,\r\n\t\t\tthis_return;\r\n\t\tthis.each(function () {\r\n\t\t\tvar $this = $(this),\r\n\t\t\t\tdata = $this.data('datepicker'),\r\n\t\t\t\toptions = typeof option == 'object' && option;\r\n\t\t\tif (!data) {\r\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\r\n\t\t\t\t\t// Preliminary otions\r\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\r\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\r\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\r\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\r\n\t\t\t\tif ($this.is('.input-daterange') || opts.inputs){\r\n\t\t\t\t\tvar ropts = {\r\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\r\n\t\t\t\t\t};\r\n\t\t\t\t\t$this.data('datepicker', (data = new DateRangePicker(this, $.extend(opts, ropts))));\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\t$this.data('datepicker', (data = new Datepicker(this, opts)));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (typeof option == 'string' && typeof data[option] == 'function') {\r\n\t\t\t\tinternal_return = data[option].apply(data, args);\r\n\t\t\t\tif (internal_return !== undefined)\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (internal_return !== undefined)\r\n\t\t\treturn internal_return;\r\n\t\telse\r\n\t\t\treturn this;\r\n\t};\r\n\r\n\tvar defaults = $.fn.datepicker.defaults = {\r\n\t\tautoclose: false,\r\n\t\tbeforeShowDay: $.noop,\r\n\t\tcalendarWeeks: false,\r\n\t\tclearBtn: false,\r\n\t\tdaysOfWeekDisabled: [],\r\n\t\tendDate: Infinity,\r\n\t\tforceParse: true,\r\n\t\tformat: 'mm/dd/yyyy',\r\n\t\tkeyboardNavigation: true,\r\n\t\tlanguage: 'en',\r\n\t\tminViewMode: 0,\r\n\t\trtl: false,\r\n\t\tstartDate: -Infinity,\r\n\t\tstartView: 0,\r\n\t\ttodayBtn: false,\r\n\t\ttodayHighlight: false,\r\n\t\tweekStart: 0\r\n\t};\r\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\r\n\t\t'format',\r\n\t\t'rtl',\r\n\t\t'weekStart'\r\n\t];\r\n\t$.fn.datepicker.Constructor = Datepicker;\r\n\tvar dates = $.fn.datepicker.dates = {\r\n\t\ten: {\r\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"],\r\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"],\r\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"],\r\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n\t\t\ttoday: \"Today\",\r\n\t\t\tclear: \"Clear\"\r\n\t\t}\r\n\t};\r\n\r\n\tvar DPGlobal = {\r\n\t\tmodes: [\r\n\t\t\t{\r\n\t\t\t\tclsName: 'days',\r\n\t\t\t\tnavFnc: 'Month',\r\n\t\t\t\tnavStep: 1\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tclsName: 'months',\r\n\t\t\t\tnavFnc: 'FullYear',\r\n\t\t\t\tnavStep: 1\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tclsName: 'years',\r\n\t\t\t\tnavFnc: 'FullYear',\r\n\t\t\t\tnavStep: 10\r\n\t\t}],\r\n\t\tisLeapYear: function (year) {\r\n\t\t\treturn (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));\r\n\t\t},\r\n\t\tgetDaysInMonth: function (year, month) {\r\n\t\t\treturn [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\r\n\t\t},\r\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\r\n\t\tnonpunctuation: /[^ -\\/:-@\\[\\u3400-\\u9fff-`{-~\\t\\n\\r]+/g,\r\n\t\tparseFormat: function(format){\r\n\t\t\t// IE treats \\0 as a string end in inputs (truncating the value),\r\n\t\t\t// so it's a bad format delimiter, anyway\r\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\r\n\t\t\t\tparts = format.match(this.validParts);\r\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\r\n\t\t\t\tthrow new Error(\"Invalid date format.\");\r\n\t\t\t}\r\n\t\t\treturn {separators: separators, parts: parts};\r\n\t\t},\r\n\t\tparseDate: function(date, format, language) {\r\n\t\t\tif (date instanceof Date) return date;\r\n\t\t\tif (typeof format === 'string')\r\n\t\t\t\tformat = DPGlobal.parseFormat(format);\r\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/.test(date)) {\r\n\t\t\t\tvar part_re = /([\\-+]\\d+)([dmwy])/,\r\n\t\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/g),\r\n\t\t\t\t\tpart, dir;\r\n\t\t\t\tdate = new Date();\r\n\t\t\t\tfor (var i=0; i<parts.length; i++) {\r\n\t\t\t\t\tpart = part_re.exec(parts[i]);\r\n\t\t\t\t\tdir = parseInt(part[1]);\r\n\t\t\t\t\tswitch(part[2]){\r\n\t\t\t\t\t\tcase 'd':\r\n\t\t\t\t\t\t\tdate.setUTCDate(date.getUTCDate() + dir);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'm':\r\n\t\t\t\t\t\t\tdate = Datepicker.prototype.moveMonth.call(Datepicker.prototype, date, dir);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'w':\r\n\t\t\t\t\t\t\tdate.setUTCDate(date.getUTCDate() + dir * 7);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'y':\r\n\t\t\t\t\t\t\tdate = Datepicker.prototype.moveYear.call(Datepicker.prototype, date, dir);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0);\r\n\t\t\t}\r\n\t\t\tvar parts = date && date.match(this.nonpunctuation) || [],\r\n\t\t\t\tdate = new Date(),\r\n\t\t\t\tparsed = {},\r\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\r\n\t\t\t\tsetters_map = {\r\n\t\t\t\t\tyyyy: function(d,v){ return d.setUTCFullYear(v); },\r\n\t\t\t\t\tyy: function(d,v){ return d.setUTCFullYear(2000+v); },\r\n\t\t\t\t\tm: function(d,v){\r\n\t\t\t\t\t\tv -= 1;\r\n\t\t\t\t\t\twhile (v<0) v += 12;\r\n\t\t\t\t\t\tv %= 12;\r\n\t\t\t\t\t\td.setUTCMonth(v);\r\n\t\t\t\t\t\twhile (d.getUTCMonth() != v)\r\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\r\n\t\t\t\t\t\treturn d;\r\n\t\t\t\t\t},\r\n\t\t\t\t\td: function(d,v){ return d.setUTCDate(v); }\r\n\t\t\t\t},\r\n\t\t\t\tval, filtered, part;\r\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\r\n\t\t\tsetters_map['dd'] = setters_map['d'];\r\n\t\t\tdate = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n\t\t\tvar fparts = format.parts.slice();\r\n\t\t\t// Remove noop parts\r\n\t\t\tif (parts.length != fparts.length) {\r\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\r\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\r\n\t\t\t\t}).toArray();\r\n\t\t\t}\r\n\t\t\t// Process remainder\r\n\t\t\tif (parts.length == fparts.length) {\r\n\t\t\t\tfor (var i=0, cnt = fparts.length; i < cnt; i++) {\r\n\t\t\t\t\tval = parseInt(parts[i], 10);\r\n\t\t\t\t\tpart = fparts[i];\r\n\t\t\t\t\tif (isNaN(val)) {\r\n\t\t\t\t\t\tswitch(part) {\r\n\t\t\t\t\t\t\tcase 'MM':\r\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(function(){\r\n\t\t\t\t\t\t\t\t\tvar m = this.slice(0, parts[i].length),\r\n\t\t\t\t\t\t\t\t\t\tp = parts[i].slice(0, m.length);\r\n\t\t\t\t\t\t\t\t\treturn m == p;\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'M':\r\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(function(){\r\n\t\t\t\t\t\t\t\t\tvar m = this.slice(0, parts[i].length),\r\n\t\t\t\t\t\t\t\t\t\tp = parts[i].slice(0, m.length);\r\n\t\t\t\t\t\t\t\t\treturn m == p;\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tparsed[part] = val;\r\n\t\t\t\t}\r\n\t\t\t\tfor (var i=0, s; i<setters_order.length; i++){\r\n\t\t\t\t\ts = setters_order[i];\r\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s]))\r\n\t\t\t\t\t\tsetters_map[s](date, parsed[s]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\tformatDate: function(date, format, language){\r\n\t\t\tif (typeof format === 'string')\r\n\t\t\t\tformat = DPGlobal.parseFormat(format);\r\n\t\t\tvar val = {\r\n\t\t\t\td: date.getUTCDate(),\r\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\r\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\r\n\t\t\t\tm: date.getUTCMonth() + 1,\r\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\r\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\r\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\r\n\t\t\t\tyyyy: date.getUTCFullYear()\r\n\t\t\t};\r\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\r\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\r\n\t\t\tvar date = [],\r\n\t\t\t\tseps = $.extend([], format.separators);\r\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++) {\r\n\t\t\t\tif (seps.length)\r\n\t\t\t\t\tdate.push(seps.shift());\r\n\t\t\t\tdate.push(val[format.parts[i]]);\r\n\t\t\t}\r\n\t\t\treturn date.join('');\r\n\t\t},\r\n\t\theadTemplate: '<thead>'+\r\n\t\t\t\t\t\t\t'<tr>'+\r\n\t\t\t\t\t\t\t\t'<th class=\"prev\"><i class=\"icon-arrow-left\"/></th>'+\r\n\t\t\t\t\t\t\t\t'<th colspan=\"5\" class=\"datepicker-switch\"></th>'+\r\n\t\t\t\t\t\t\t\t'<th class=\"next\"><i class=\"icon-arrow-right\"/></th>'+\r\n\t\t\t\t\t\t\t'</tr>'+\r\n\t\t\t\t\t\t'</thead>',\r\n\t\tcontTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\r\n\t\tfootTemplate: '<tfoot><tr><th colspan=\"7\" class=\"today\"></th></tr><tr><th colspan=\"7\" class=\"clear\"></th></tr></tfoot>'\r\n\t};\r\n\tDPGlobal.template = '<div class=\"datepicker\">'+\r\n\t\t\t\t\t\t\t'<div class=\"datepicker-days\">'+\r\n\t\t\t\t\t\t\t\t'<table class=\" table-condensed\">'+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\r\n\t\t\t\t\t\t\t\t\t'<tbody></tbody>'+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\r\n\t\t\t\t\t\t\t\t'</table>'+\r\n\t\t\t\t\t\t\t'</div>'+\r\n\t\t\t\t\t\t\t'<div class=\"datepicker-months\">'+\r\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\r\n\t\t\t\t\t\t\t\t'</table>'+\r\n\t\t\t\t\t\t\t'</div>'+\r\n\t\t\t\t\t\t\t'<div class=\"datepicker-years\">'+\r\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\r\n\t\t\t\t\t\t\t\t'</table>'+\r\n\t\t\t\t\t\t\t'</div>'+\r\n\t\t\t\t\t\t'</div>';\r\n\r\n\t$.fn.datepicker.DPGlobal = DPGlobal;\r\n\r\n\r\n\t/* DATEPICKER NO CONFLICT\r\n\t* =================== */\r\n\r\n\t$.fn.datepicker.noConflict = function(){\r\n\t\t$.fn.datepicker = old;\r\n\t\treturn this;\r\n\t};\r\n\r\n\r\n\t/* DATEPICKER DATA-API\r\n\t* ================== */\r\n\r\n\t$(document).on(\r\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\r\n\t\t'[data-provide=\"datepicker\"]',\r\n\t\tfunction(e){\r\n\t\t\tvar $this = $(this);\r\n\t\t\tif ($this.data('datepicker')) return;\r\n\t\t\te.preventDefault();\r\n\t\t\t// component click requires us to explicitly show it\r\n\t\t\tdatepicker.call($this, 'show');\r\n\t\t}\r\n\t);\r\n\t$(function(){\r\n\t\t//$('[data-provide=\"datepicker-inline\"]').datepicker();\r\n        //vit: changed to support noConflict()\r\n        datepicker.call($('[data-provide=\"datepicker-inline\"]'));\r\n\t});\r\n\r\n}( window.jQuery ));\r\n\r\n/**\r\nBootstrap-datepicker.  \r\nDescription and examples: https://github.com/eternicode/bootstrap-datepicker.  \r\nFor **i18n** you should include js file from here: https://github.com/eternicode/bootstrap-datepicker/tree/master/js/locales\r\nand set `language` option.  \r\nSince 1.4.0 date has different appearance in **popup** and **inline** modes. \r\n\r\n@class date\r\n@extends abstractinput\r\n@final\r\n@example\r\n<a href=\"#\" id=\"dob\" data-type=\"date\" data-pk=\"1\" data-url=\"/post\" data-title=\"Select date\">15/05/1984</a>\r\n<script>\r\n$(function(){\r\n    $('#dob').editable({\r\n        format: 'yyyy-mm-dd',    \r\n        viewformat: 'dd/mm/yyyy',    \r\n        datepicker: {\r\n                weekStart: 1\r\n           }\r\n        }\r\n    });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    //store bootstrap-datepicker as bdateicker to exclude conflict with jQuery UI one\r\n    $.fn.bdatepicker = $.fn.datepicker.noConflict();\r\n    if(!$.fn.datepicker) { //if there were no other datepickers, keep also original name\r\n        $.fn.datepicker = $.fn.bdatepicker;    \r\n    }    \r\n    \r\n    var Date = function (options) {\r\n        this.init('date', options, Date.defaults);\r\n        this.initPicker(options, Date.defaults);\r\n    };\r\n\r\n    $.fn.editableutils.inherit(Date, $.fn.editabletypes.abstractinput);    \r\n    \r\n    $.extend(Date.prototype, {\r\n        initPicker: function(options, defaults) {\r\n            //'format' is set directly from settings or data-* attributes\r\n\r\n            //by default viewformat equals to format\r\n            if(!this.options.viewformat) {\r\n                this.options.viewformat = this.options.format;\r\n            }\r\n            \r\n            //try parse datepicker config defined as json string in data-datepicker\r\n            options.datepicker = $.fn.editableutils.tryParseJson(options.datepicker, true);\r\n            \r\n            //overriding datepicker config (as by default jQuery extend() is not recursive)\r\n            //since 1.4 datepicker internally uses viewformat instead of format. Format is for submit only\r\n            this.options.datepicker = $.extend({}, defaults.datepicker, options.datepicker, {\r\n                format: this.options.viewformat\r\n            });\r\n            \r\n            //language\r\n            this.options.datepicker.language = this.options.datepicker.language || 'en'; \r\n\r\n            //store DPglobal\r\n            this.dpg = $.fn.bdatepicker.DPGlobal; \r\n\r\n            //store parsed formats\r\n            this.parsedFormat = this.dpg.parseFormat(this.options.format);\r\n            this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat);            \r\n        },\r\n        \r\n        render: function () {\r\n            this.$input.bdatepicker(this.options.datepicker);\r\n            \r\n            //\"clear\" link\r\n            if(this.options.clear) {\r\n                this.$clear = $('<a href=\"#\"></a>').html(this.options.clear).click($.proxy(function(e){\r\n                    e.preventDefault();\r\n                    e.stopPropagation();\r\n                    this.clear();\r\n                }, this));\r\n                \r\n                this.$tpl.parent().append($('<div class=\"editable-clear\">').append(this.$clear));  \r\n            }                \r\n        },\r\n        \r\n        value2html: function(value, element) {\r\n           var text = value ? this.dpg.formatDate(value, this.parsedViewFormat, this.options.datepicker.language) : '';\r\n           Date.superclass.value2html.call(this, text, element); \r\n        },\r\n\r\n        html2value: function(html) {\r\n            return this.parseDate(html, this.parsedViewFormat);\r\n        },   \r\n\r\n        value2str: function(value) {\r\n            return value ? this.dpg.formatDate(value, this.parsedFormat, this.options.datepicker.language) : '';\r\n        }, \r\n\r\n        str2value: function(str) {\r\n            return this.parseDate(str, this.parsedFormat);\r\n        }, \r\n\r\n        value2submit: function(value) {\r\n            return this.value2str(value);\r\n        },                    \r\n\r\n        value2input: function(value) {\r\n            this.$input.bdatepicker('update', value);\r\n        },\r\n\r\n        input2value: function() { \r\n            return this.$input.data('datepicker').date;\r\n        },       \r\n\r\n        activate: function() {\r\n        },\r\n\r\n        clear:  function() {\r\n            this.$input.data('datepicker').date = null;\r\n            this.$input.find('.active').removeClass('active');\r\n            if(!this.options.showbuttons) {\r\n                this.$input.closest('form').submit(); \r\n            }\r\n        },\r\n\r\n        autosubmit: function() {\r\n            this.$input.on('mouseup', '.day', function(e){\r\n                if($(e.currentTarget).is('.old') || $(e.currentTarget).is('.new')) {\r\n                    return;\r\n                }\r\n                var $form = $(this).closest('form');\r\n                setTimeout(function() {\r\n                    $form.submit();\r\n                }, 200);\r\n            });\r\n           //changedate is not suitable as it triggered when showing datepicker. see #149\r\n           /*\r\n           this.$input.on('changeDate', function(e){\r\n               var $form = $(this).closest('form');\r\n               setTimeout(function() {\r\n                   $form.submit();\r\n               }, 200);\r\n           });\r\n           */\r\n       },\r\n       \r\n       /*\r\n        For incorrect date bootstrap-datepicker returns current date that is not suitable\r\n        for datefield.\r\n        This function returns null for incorrect date.  \r\n       */\r\n       parseDate: function(str, format) {\r\n           var date = null, formattedBack;\r\n           if(str) {\r\n               date = this.dpg.parseDate(str, format, this.options.datepicker.language);\r\n               if(typeof str === 'string') {\r\n                   formattedBack = this.dpg.formatDate(date, format, this.options.datepicker.language);\r\n                   if(str !== formattedBack) {\r\n                       date = null;\r\n                   }\r\n               }\r\n           }\r\n           return date;\r\n       }\r\n\r\n    });\r\n\r\n    Date.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n        /**\r\n        @property tpl \r\n        @default <div></div>\r\n        **/         \r\n        tpl:'<div class=\"editable-date well\"></div>',\r\n        /**\r\n        @property inputclass \r\n        @default null\r\n        **/\r\n        inputclass: null,\r\n        /**\r\n        Format used for sending value to server. Also applied when converting date from <code>data-value</code> attribute.<br>\r\n        Possible tokens are: <code>d, dd, m, mm, yy, yyyy</code>  \r\n\r\n        @property format \r\n        @type string\r\n        @default yyyy-mm-dd\r\n        **/\r\n        format:'yyyy-mm-dd',\r\n        /**\r\n        Format used for displaying date. Also applied when converting date from element's text on init.   \r\n        If not specified equals to <code>format</code>\r\n\r\n        @property viewformat \r\n        @type string\r\n        @default null\r\n        **/\r\n        viewformat: null,\r\n        /**\r\n        Configuration of datepicker.\r\n        Full list of options: http://bootstrap-datepicker.readthedocs.org/en/latest/options.html\r\n\r\n        @property datepicker \r\n        @type object\r\n        @default {\r\n            weekStart: 0,\r\n            startView: 0,\r\n            minViewMode: 0,\r\n            autoclose: false\r\n        }\r\n        **/\r\n        datepicker:{\r\n            weekStart: 0,\r\n            startView: 0,\r\n            minViewMode: 0,\r\n            autoclose: false\r\n        },\r\n        /**\r\n        Text shown as clear date button. \r\n        If <code>false</code> clear button will not be rendered.\r\n\r\n        @property clear \r\n        @type boolean|string\r\n        @default 'x clear'\r\n        **/\r\n        clear: '&times; clear'\r\n    });\r\n\r\n    $.fn.editabletypes.date = Date;\r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nBootstrap datefield input - modification for inline mode.\r\nShows normal <input type=\"text\"> and binds popup datepicker.  \r\nAutomatically shown in inline mode.\r\n\r\n@class datefield\r\n@extends date\r\n\r\n@since 1.4.0\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var DateField = function (options) {\r\n        this.init('datefield', options, DateField.defaults);\r\n        this.initPicker(options, DateField.defaults);\r\n    };\r\n\r\n    $.fn.editableutils.inherit(DateField, $.fn.editabletypes.date);    \r\n    \r\n    $.extend(DateField.prototype, {\r\n        render: function () {\r\n            this.$input = this.$tpl.find('input');\r\n            this.setClass();\r\n            this.setAttr('placeholder');\r\n    \r\n            //bootstrap-datepicker is set `bdateicker` to exclude conflict with jQuery UI one. (in date.js)        \r\n            this.$tpl.bdatepicker(this.options.datepicker);\r\n            \r\n            //need to disable original event handlers\r\n            this.$input.off('focus keydown');\r\n            \r\n            //update value of datepicker\r\n            this.$input.keyup($.proxy(function(){\r\n               this.$tpl.removeData('date');\r\n               this.$tpl.bdatepicker('update');\r\n            }, this));\r\n            \r\n        },   \r\n        \r\n       value2input: function(value) {\r\n           this.$input.val(value ? this.dpg.formatDate(value, this.parsedViewFormat, this.options.datepicker.language) : '');\r\n           this.$tpl.bdatepicker('update');\r\n       },\r\n        \r\n       input2value: function() { \r\n           return this.html2value(this.$input.val());\r\n       },              \r\n        \r\n       activate: function() {\r\n           $.fn.editabletypes.text.prototype.activate.call(this);\r\n       },\r\n       \r\n       autosubmit: function() {\r\n         //reset autosubmit to empty  \r\n       }\r\n    });\r\n    \r\n    DateField.defaults = $.extend({}, $.fn.editabletypes.date.defaults, {\r\n        /**\r\n        @property tpl \r\n        **/         \r\n        tpl:'<div class=\"input-append date\"><input type=\"text\"/><span class=\"add-on\"><i class=\"icon-th\"></i></span></div>',\r\n        /**\r\n        @property inputclass \r\n        @default 'input-small'\r\n        **/         \r\n        inputclass: 'input-small',\r\n        \r\n        /* datepicker config */\r\n        datepicker: {\r\n            weekStart: 0,\r\n            startView: 0,\r\n            minViewMode: 0,\r\n            autoclose: true\r\n        }\r\n    });\r\n    \r\n    $.fn.editabletypes.datefield = DateField;\r\n\r\n}(window.jQuery));\r\n/**\r\nBootstrap-datetimepicker.  \r\nBased on [smalot bootstrap-datetimepicker plugin](https://github.com/smalot/bootstrap-datetimepicker). \r\nBefore usage you should manually include dependent js and css:\r\n\r\n    <link href=\"css/datetimepicker.css\" rel=\"stylesheet\" type=\"text/css\"></link> \r\n    <script src=\"js/bootstrap-datetimepicker.js\"></script>\r\n\r\nFor **i18n** you should include js file from here: https://github.com/smalot/bootstrap-datetimepicker/tree/master/js/locales\r\nand set `language` option.  \r\n\r\n@class datetime\r\n@extends abstractinput\r\n@final\r\n@since 1.4.4\r\n@example\r\n<a href=\"#\" id=\"last_seen\" data-type=\"datetime\" data-pk=\"1\" data-url=\"/post\" title=\"Select date & time\">15/03/2013 12:45</a>\r\n<script>\r\n$(function(){\r\n    $('#last_seen').editable({\r\n        format: 'yyyy-mm-dd hh:ii',    \r\n        viewformat: 'dd/mm/yyyy hh:ii',    \r\n        datetimepicker: {\r\n                weekStart: 1\r\n           }\r\n        }\r\n    });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n\r\n    var DateTime = function (options) {\r\n        this.init('datetime', options, DateTime.defaults);\r\n        this.initPicker(options, DateTime.defaults);\r\n    };\r\n\r\n    $.fn.editableutils.inherit(DateTime, $.fn.editabletypes.abstractinput);\r\n\r\n    $.extend(DateTime.prototype, {\r\n        initPicker: function(options, defaults) {\r\n            //'format' is set directly from settings or data-* attributes\r\n\r\n            //by default viewformat equals to format\r\n            if(!this.options.viewformat) {\r\n                this.options.viewformat = this.options.format;\r\n            }\r\n            \r\n            //try parse datetimepicker config defined as json string in data-datetimepicker\r\n            options.datetimepicker = $.fn.editableutils.tryParseJson(options.datetimepicker, true);\r\n\r\n            //overriding datetimepicker config (as by default jQuery extend() is not recursive)\r\n            //since 1.4 datetimepicker internally uses viewformat instead of format. Format is for submit only\r\n            this.options.datetimepicker = $.extend({}, defaults.datetimepicker, options.datetimepicker, {\r\n                format: this.options.viewformat\r\n            });\r\n\r\n            //language\r\n            this.options.datetimepicker.language = this.options.datetimepicker.language || 'en'; \r\n\r\n            //store DPglobal\r\n            this.dpg = $.fn.datetimepicker.DPGlobal; \r\n\r\n            //store parsed formats\r\n            this.parsedFormat = this.dpg.parseFormat(this.options.format, this.options.formatType);\r\n            this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat, this.options.formatType);\r\n        },\r\n\r\n        render: function () {\r\n            this.$input.datetimepicker(this.options.datetimepicker);\r\n\r\n            //adjust container position when viewMode changes\r\n            //see https://github.com/smalot/bootstrap-datetimepicker/pull/80\r\n            this.$input.on('changeMode', function(e) {\r\n                var f = $(this).closest('form').parent();\r\n                //timeout here, otherwise container changes position before form has new size\r\n                setTimeout(function(){\r\n                    f.triggerHandler('resize');\r\n                }, 0);\r\n            });\r\n\r\n            //\"clear\" link\r\n            if(this.options.clear) {\r\n                this.$clear = $('<a href=\"#\"></a>').html(this.options.clear).click($.proxy(function(e){\r\n                    e.preventDefault();\r\n                    e.stopPropagation();\r\n                    this.clear();\r\n                }, this));\r\n\r\n                this.$tpl.parent().append($('<div class=\"editable-clear\">').append(this.$clear));  \r\n            }\r\n        },\r\n\r\n        value2html: function(value, element) {\r\n            //formatDate works with UTCDate!\r\n            var text = value ? this.dpg.formatDate(this.toUTC(value), this.parsedViewFormat, this.options.datetimepicker.language, this.options.formatType) : '';\r\n            if(element) {\r\n                DateTime.superclass.value2html.call(this, text, element);\r\n            } else {\r\n                return text;\r\n            }\r\n        },\r\n\r\n        html2value: function(html) {\r\n            //parseDate return utc date!\r\n            var value = this.parseDate(html, this.parsedViewFormat); \r\n            return value ? this.fromUTC(value) : null;\r\n        },\r\n\r\n        value2str: function(value) {\r\n            //formatDate works with UTCDate!\r\n            return value ? this.dpg.formatDate(this.toUTC(value), this.parsedFormat, this.options.datetimepicker.language, this.options.formatType) : '';\r\n       },\r\n\r\n       str2value: function(str) {\r\n           //parseDate return utc date!\r\n           var value = this.parseDate(str, this.parsedFormat);\r\n           return value ? this.fromUTC(value) : null;\r\n       },\r\n\r\n       value2submit: function(value) {\r\n           return this.value2str(value);\r\n       },\r\n\r\n       value2input: function(value) {\r\n           if(value) {\r\n             this.$input.data('datetimepicker').setDate(value);\r\n           }\r\n       },\r\n\r\n       input2value: function() { \r\n           //date may be cleared, in that case getDate() triggers error\r\n           var dt = this.$input.data('datetimepicker');\r\n           return dt.date ? dt.getDate() : null;\r\n       },\r\n\r\n       activate: function() {\r\n       },\r\n\r\n       clear: function() {\r\n          this.$input.data('datetimepicker').date = null;\r\n          this.$input.find('.active').removeClass('active');\r\n          if(!this.options.showbuttons) {\r\n             this.$input.closest('form').submit(); \r\n          }          \r\n       },\r\n\r\n       autosubmit: function() {\r\n           this.$input.on('mouseup', '.minute', function(e){\r\n               var $form = $(this).closest('form');\r\n               setTimeout(function() {\r\n                   $form.submit();\r\n               }, 200);\r\n           });\r\n       },\r\n\r\n       //convert date from local to utc\r\n       toUTC: function(value) {\r\n         return value ? new Date(value.valueOf() - value.getTimezoneOffset() * 60000) : value;  \r\n       },\r\n\r\n       //convert date from utc to local\r\n       fromUTC: function(value) {\r\n         return value ? new Date(value.valueOf() + value.getTimezoneOffset() * 60000) : value;  \r\n       },\r\n\r\n       /*\r\n        For incorrect date bootstrap-datetimepicker returns current date that is not suitable\r\n        for datetimefield.\r\n        This function returns null for incorrect date.  \r\n       */\r\n       parseDate: function(str, format) {\r\n           var date = null, formattedBack;\r\n           if(str) {\r\n               date = this.dpg.parseDate(str, format, this.options.datetimepicker.language, this.options.formatType);\r\n               if(typeof str === 'string') {\r\n                   formattedBack = this.dpg.formatDate(date, format, this.options.datetimepicker.language, this.options.formatType);\r\n                   if(str !== formattedBack) {\r\n                       date = null;\r\n                   } \r\n               }\r\n           }\r\n           return date;\r\n       }\r\n\r\n    });\r\n\r\n    DateTime.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n        /**\r\n        @property tpl \r\n        @default <div></div>\r\n        **/         \r\n        tpl:'<div class=\"editable-date well\"></div>',\r\n        /**\r\n        @property inputclass \r\n        @default null\r\n        **/\r\n        inputclass: null,\r\n        /**\r\n        Format used for sending value to server. Also applied when converting date from <code>data-value</code> attribute.<br>\r\n        Possible tokens are: <code>d, dd, m, mm, yy, yyyy, h, i</code>  \r\n        \r\n        @property format \r\n        @type string\r\n        @default yyyy-mm-dd hh:ii\r\n        **/         \r\n        format:'yyyy-mm-dd hh:ii',\r\n        formatType:'standard',\r\n        /**\r\n        Format used for displaying date. Also applied when converting date from element's text on init.   \r\n        If not specified equals to <code>format</code>\r\n        \r\n        @property viewformat \r\n        @type string\r\n        @default null\r\n        **/\r\n        viewformat: null,\r\n        /**\r\n        Configuration of datetimepicker.\r\n        Full list of options: https://github.com/smalot/bootstrap-datetimepicker\r\n\r\n        @property datetimepicker \r\n        @type object\r\n        @default { }\r\n        **/\r\n        datetimepicker:{\r\n            todayHighlight: false,\r\n            autoclose: false\r\n        },\r\n        /**\r\n        Text shown as clear date button. \r\n        If <code>false</code> clear button will not be rendered.\r\n\r\n        @property clear \r\n        @type boolean|string\r\n        @default 'x clear'\r\n        **/\r\n        clear: '&times; clear'\r\n    });\r\n\r\n    $.fn.editabletypes.datetime = DateTime;\r\n\r\n}(window.jQuery));\r\n/**\r\nBootstrap datetimefield input - datetime input for inline mode.\r\nShows normal <input type=\"text\"> and binds popup datetimepicker.  \r\nAutomatically shown in inline mode.\r\n\r\n@class datetimefield\r\n@extends datetime\r\n\r\n**/\r\n(function ($) {\r\n    \"use strict\";\r\n    \r\n    var DateTimeField = function (options) {\r\n        this.init('datetimefield', options, DateTimeField.defaults);\r\n        this.initPicker(options, DateTimeField.defaults);\r\n    };\r\n\r\n    $.fn.editableutils.inherit(DateTimeField, $.fn.editabletypes.datetime);\r\n    \r\n    $.extend(DateTimeField.prototype, {\r\n        render: function () {\r\n            this.$input = this.$tpl.find('input');\r\n            this.setClass();\r\n            this.setAttr('placeholder');\r\n            \r\n            this.$tpl.datetimepicker(this.options.datetimepicker);\r\n            \r\n            //need to disable original event handlers\r\n            this.$input.off('focus keydown');\r\n            \r\n            //update value of datepicker\r\n            this.$input.keyup($.proxy(function(){\r\n               this.$tpl.removeData('date');\r\n               this.$tpl.datetimepicker('update');\r\n            }, this));\r\n            \r\n        },   \r\n      \r\n       value2input: function(value) {\r\n           this.$input.val(this.value2html(value));\r\n           this.$tpl.datetimepicker('update');\r\n       },\r\n        \r\n       input2value: function() { \r\n           return this.html2value(this.$input.val());\r\n       },              \r\n        \r\n       activate: function() {\r\n           $.fn.editabletypes.text.prototype.activate.call(this);\r\n       },\r\n       \r\n       autosubmit: function() {\r\n         //reset autosubmit to empty  \r\n       }\r\n    });\r\n    \r\n    DateTimeField.defaults = $.extend({}, $.fn.editabletypes.datetime.defaults, {\r\n        /**\r\n        @property tpl \r\n        **/         \r\n        tpl:'<div class=\"input-append date\"><input type=\"text\"/><span class=\"add-on\"><i class=\"icon-th\"></i></span></div>',\r\n        /**\r\n        @property inputclass \r\n        @default 'input-medium'\r\n        **/         \r\n        inputclass: 'input-medium',\r\n        \r\n        /* datetimepicker config */\r\n        datetimepicker:{\r\n            todayHighlight: false,\r\n            autoclose: true\r\n        }\r\n    });\r\n    \r\n    $.fn.editabletypes.datetimefield = DateTimeField;\r\n\r\n}(window.jQuery));"
  },
  {
    "path": "src/main/webapp/static/js/bootstrap-table-editable.js",
    "content": "/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * extensions: https://github.com/vitalets/x-editable\n */\n\n!function ($) {\n\n    'use strict';\n\n    $.extend($.fn.bootstrapTable.defaults, {\n        editable: true,\n        onEditableInit: function () {\n            return false;\n        },\n        onEditableSave: function (field, row, oldValue, $el) {\n            return false;\n        }\n    });\n\n    $.extend($.fn.bootstrapTable.Constructor.EVENTS, {\n        'editable-init.bs.table': 'onEditableInit',\n        'editable-save.bs.table': 'onEditableSave'\n    });\n\n    var BootstrapTable = $.fn.bootstrapTable.Constructor,\n        _initTable = BootstrapTable.prototype.initTable,\n        _initBody = BootstrapTable.prototype.initBody;\n\n    BootstrapTable.prototype.initTable = function () {\n        var that = this;\n        _initTable.apply(this, Array.prototype.slice.apply(arguments));\n\n        if (!this.options.editable) {\n            return;\n        }\n\n        $.each(this.options.columns, function (i, column) {\n            if (!column.editable) {\n                return;\n            }\n\n            var _formatter = column.formatter;\n            column.formatter = function (value, row, index) {\n                var result = _formatter ? _formatter(value, row, index) : value;\n\n                return ['<a href=\"javascript:void(0)\"',\n                    ' data-name=\"' + column.field + '\"',\n                    ' data-pk=\"' + row[that.options.idField] + '\"',\n                    ' data-value=\"' + result + '\"',\n                    '>' + '</a>'\n                ].join('');\n            };\n        });\n    };\n\n    BootstrapTable.prototype.initBody = function () {\n        var that = this;\n        _initBody.apply(this, Array.prototype.slice.apply(arguments));\n\n        if (!this.options.editable) {\n            return;\n        }\n\n        $.each(this.options.columns, function (i, column) {\n            if (!column.editable) {\n                return;\n            }\n\n            that.$body.find('a[data-name=\"' + column.field + '\"]').editable(column.editable)\n                .off('save').on('save', function (e, params) {\n                    var data = that.getData(),\n                        index = $(this).parents('tr[data-index]').data('index'),\n                        row = data[index],\n                        oldValue = row[column.field];\n\n                    row[column.field] = params.submitValue;\n                    that.trigger('editable-save', column.field, row, oldValue, $(this));\n                });\n        });\n        this.trigger('editable-init');\n    };\n\n}(jQuery);\n"
  },
  {
    "path": "src/main/webapp/static/js/bootstrap-table-export.js",
    "content": "/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * extensions: https://github.com/kayalshri/tableExport.jquery.plugin\n */\n\n(function ($) {\n    'use strict';\n\n    var TYPE_NAME = {\n        json: 'JSON',\n        xml: 'XML',\n        png: 'PNG',\n        csv: 'CSV',\n        txt: 'TXT',\n        sql: 'SQL',\n        doc: 'MS-Word',\n        excel: 'Ms-Excel',\n        powerpoint: 'Ms-Powerpoint',\n        pdf: 'PDF'\n    };\n\n    $.extend($.fn.bootstrapTable.defaults, {\n        showExport: false,\n        // 'json', 'xml', 'png', 'csv', 'txt', 'sql', 'doc', 'excel', 'powerpoint', 'pdf'\n        exportTypes: ['json', 'xml', 'csv', 'txt', 'sql', 'excel'],\n        exportOptions: {}\n    });\n\n    var BootstrapTable = $.fn.bootstrapTable.Constructor,\n        _initToolbar = BootstrapTable.prototype.initToolbar;\n\n    BootstrapTable.prototype.initToolbar = function () {\n        this.showToolbar = true;\n\n        _initToolbar.apply(this, Array.prototype.slice.apply(arguments));\n\n        if (this.options.showExport) {\n            var that = this,\n                $btnGroup = this.$toolbar.find('>.btn-group'),\n                $export = $btnGroup.find('div.export');\n\n            if (!$export.length) {\n                $export = $([\n                    '<div class=\"export btn-group\">',\n                        '<button class=\"btn btn-default dropdown-toggle\" ' +\n                            'data-toggle=\"dropdown\" type=\"button\">',\n                            '<i class=\"glyphicon glyphicon-export icon-share\"></i> ',\n                            '<span class=\"caret\"></span>',\n                        '</button>',\n                        '<ul class=\"dropdown-menu\" role=\"menu\">',\n                        '</ul>',\n                    '</div>'].join('')).appendTo($btnGroup);\n\n                var $menu = $export.find('.dropdown-menu'),\n                    exportTypes = this.options.exportTypes;\n\n                if (typeof this.options.exportTypes === 'string') {\n                    var types = this.options.exportTypes.slice(1, -1).replace(/ /g, '').split(',');\n\n                    exportTypes = [];\n                    $.each(types, function (i, value) {\n                        exportTypes.push(value.slice(1, -1));\n                    });\n                }\n                $.each(exportTypes, function (i, type) {\n                    if (TYPE_NAME.hasOwnProperty(type)) {\n                        $menu.append(['<li data-type=\"' + type + '\">',\n                                '<a href=\"javascript:void(0)\">',\n                                    TYPE_NAME[type],\n                                '</a>',\n                            '</li>'].join(''));\n                    }\n                });\n\n                $menu.find('li').click(function () {\n                    that.$el.tableExport($.extend({}, that.options.exportOptions, {\n                        type: $(this).data('type'),\n                        escape: false\n                    }));\n                });\n            }\n        }\n    };\n})(jQuery);\n"
  },
  {
    "path": "src/main/webapp/static/js/bootstrap-table-zh-CN.js",
    "content": "/**\n * Bootstrap Table Chinese translation\n * Author: Zhixin Wen<wenzhixin2010@gmail.com>\n */\n(function ($) {\n    'use strict';\n\n    $.fn.bootstrapTable.locales['zh-CN'] = {\n        formatLoadingMessage: function () {\n            return '正在努力地加载数据中，请稍候……';\n        },\n        formatRecordsPerPage: function (pageNumber) {\n            return '每页显示 ' + pageNumber + ' 条记录';\n        },\n        formatShowingRows: function (pageFrom, pageTo, totalRows) {\n            return '显示第 ' + pageFrom + ' 到第 ' + pageTo + ' 条记录，总共 ' + totalRows + ' 条记录';\n        },\n        formatSearch: function () {\n            return '搜索';\n        },\n        formatNoMatches: function () {\n            return '没有找到匹配的记录';\n        },\n        formatPaginationSwitch: function () {\n            return '隐藏/显示分页';\n        },\n        formatRefresh: function () {\n            return '刷新';\n        },\n        formatToggle: function () {\n            return '切换';\n        },\n        formatColumns: function () {\n            return '列';\n        }\n    };\n\n    $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales['zh-CN']);\n\n})(jQuery);"
  },
  {
    "path": "src/main/webapp/static/js/bootstrap-table.js",
    "content": "/**\n * @author zhixin wen <wenzhixin2010@gmail.com>\n * version: 1.7.0\n * https://github.com/wenzhixin/bootstrap-table/\n */\n\n!function ($) {\n    'use strict';\n\n    // TOOLS DEFINITION\n    // ======================\n\n    var cellHeight = 37; // update css if changed\n    var cachedWidth = null;\n\n    // it only does '%s', and return '' when arguments are undefined\n    var sprintf = function (str) {\n        var args = arguments,\n            flag = true,\n            i = 1;\n\n        str = str.replace(/%s/g, function () {\n            var arg = args[i++];\n\n            if (typeof arg === 'undefined') {\n                flag = false;\n                return '';\n            }\n            return arg;\n        });\n        return flag ? str : '';\n    };\n\n    var getPropertyFromOther = function (list, from, to, value) {\n        var result = '';\n        $.each(list, function (i, item) {\n            if (item[from] === value) {\n                result = item[to];\n                return false;\n            }\n            return true;\n        });\n        return result;\n    };\n\n    var getFieldIndex = function (columns, field) {\n        var index = -1;\n\n        $.each(columns, function (i, column) {\n            if (column.field === field) {\n                index = i;\n                return false;\n            }\n            return true;\n        });\n        return index;\n    };\n    var getScrollBarWidth = function () {\n        if (cachedWidth === null) {\n            var inner = $('<p/>').addClass('fixed-table-scroll-inner'),\n                outer = $('<div/>').addClass('fixed-table-scroll-outer'),\n                w1, w2;\n\n            outer.append(inner);\n            $('body').append(outer);\n\n            w1 = inner[0].offsetWidth;\n            outer.css('overflow', 'scroll');\n            w2 = inner[0].offsetWidth;\n\n            if (w1 === w2) {\n                w2 = outer[0].clientWidth;\n            }\n\n            outer.remove();\n            cachedWidth = w1 - w2;\n        }\n        return cachedWidth;\n    };\n\n    var calculateObjectValue = function (self, name, args, defaultValue) {\n        if (typeof name === 'string') {\n            // support obj.func1.func2\n            var names = name.split('.');\n\n            if (names.length > 1) {\n                name = window;\n                $.each(names, function (i, f) {\n                    name = name[f];\n                });\n            } else {\n                name = window[name];\n            }\n        }\n        if (typeof name === 'object') {\n            return name;\n        }\n        if (typeof name === 'function') {\n            return name.apply(self, args);\n        }\n        return defaultValue;\n    };\n\n    var escapeHTML = function (text) {\n        if (typeof text === 'string') {\n            return text\n                .replace(/&/g, \"&amp;\")\n                .replace(/</g, \"&lt;\")\n                .replace(/>/g, \"&gt;\")\n                .replace(/\"/g, \"&quot;\")\n                .replace(/'/g, \"&#039;\");\n        }\n        return text;\n    };\n\n    var getRealHeight = function ($el) {\n        var height = 0;\n        $el.children().each(function () {\n            if (height < $(this).outerHeight(true)) {\n                height = $(this).outerHeight(true);\n            }\n        });\n        return height;\n    };\n\n    // BOOTSTRAP TABLE CLASS DEFINITION\n    // ======================\n\n    var BootstrapTable = function (el, options) {\n        this.options = options;\n        this.$el = $(el);\n        this.$el_ = this.$el.clone();\n        this.timeoutId_ = 0;\n        this.timeoutFooter_ = 0;\n\n        this.init();\n    };\n\n    BootstrapTable.DEFAULTS = {\n        classes: 'table table-hover',\n        height: undefined,\n        undefinedText: '-',\n        sortName: undefined,\n        sortOrder: 'asc',\n        striped: false,\n        columns: [],\n        data: [],\n        method: 'get',\n        url: undefined,\n        ajax: undefined,\n        cache: true,\n        contentType: 'application/json',\n        dataType: 'json',\n        ajaxOptions: {},\n        queryParams: function (params) {\n            return params;\n        },\n        queryParamsType: 'limit', // undefined\n        responseHandler: function (res) {\n            return res;\n        },\n        pagination: false,\n        sidePagination: 'client', // client or server\n        totalRows: 0, // server side need to set\n        pageNumber: 1,\n        pageSize: 10,\n        pageList: [10, 25, 50, 100],\n        paginationHAlign: 'right', //right, left\n        paginationVAlign: 'bottom', //bottom, top, both\n        paginationDetailHAlign: 'left', //right, left\n        paginationFirstText: '&laquo;',\n        paginationPreText: '&lsaquo;',\n        paginationNextText: '&rsaquo;',\n        paginationLastText: '&raquo;',\n        search: false,\n        searchAlign: 'right',\n        selectItemName: 'btSelectItem',\n        showHeader: true,\n        showFooter: false,\n        showColumns: false,\n        showPaginationSwitch: false,\n        showRefresh: false,\n        showToggle: false,\n        buttonsAlign: 'right',\n        smartDisplay: true,\n        minimumCountColumns: 1,\n        idField: undefined,\n        uniqueId: undefined,\n        cardView: false,\n        trimOnSearch: true,\n        clickToSelect: false,\n        singleSelect: false,\n        toolbar: undefined,\n        toolbarAlign: 'left',\n        checkboxHeader: true,\n        sortable: true,\n        maintainSelected: false,\n        searchTimeOut: 500,\n        searchText: '',\n        iconSize: undefined,\n        iconsPrefix: 'glyphicon', // glyphicon of fa (font awesome)\n        icons: {\n            paginationSwitchDown: 'glyphicon-collapse-down icon-chevron-down',\n            paginationSwitchUp: 'glyphicon-collapse-up icon-chevron-up',\n            refresh: 'glyphicon-refresh icon-refresh',\n            toggle: 'glyphicon-list-alt icon-list-alt',\n            columns: 'glyphicon-th icon-th'\n        },\n\n        rowStyle: function (row, index) {\n            return {};\n        },\n\n        rowAttributes: function (row, index) {\n            return {};\n        },\n\n        onAll: function (name, args) {\n            return false;\n        },\n        onClickRow: function (item, $element) {\n            return false;\n        },\n        onDblClickRow: function (item, $element) {\n            return false;\n        },\n        onSort: function (name, order) {\n            return false;\n        },\n        onCheck: function (row) {\n            return false;\n        },\n        onUncheck: function (row) {\n            return false;\n        },\n        onCheckAll: function () {\n            return false;\n        },\n        onUncheckAll: function () {\n            return false;\n        },\n        onLoadSuccess: function (data) {\n            return false;\n        },\n        onLoadError: function (status) {\n            return false;\n        },\n        onColumnSwitch: function (field, checked) {\n            return false;\n        },\n        onPageChange: function (number, size) {\n            return false;\n        },\n        onSearch: function (text) {\n            return false;\n        },\n        onToggle: function (cardView) {\n            return false;\n        },\n        onPreBody: function (data) {\n            return false;\n        },\n        onPostBody: function () {\n            return false;\n        },\n        onPostHeader: function () {\n            return false;\n        }\n    };\n\n    BootstrapTable.LOCALES = [];\n\n    BootstrapTable.LOCALES['en-US'] = {\n        formatLoadingMessage: function () {\n            return 'Loading, please wait...';\n        },\n        formatRecordsPerPage: function (pageNumber) {\n            return sprintf('%s records per page', pageNumber);\n        },\n        formatShowingRows: function (pageFrom, pageTo, totalRows) {\n            return sprintf('Showing %s to %s of %s rows', pageFrom, pageTo, totalRows);\n        },\n        formatSearch: function () {\n            return 'Search';\n        },\n        formatNoMatches: function () {\n            return 'No matching records found';\n        },\n        formatPaginationSwitch: function () {\n            return 'Hide/Show pagination';\n        },\n        formatRefresh: function () {\n            return 'Refresh';\n        },\n        formatToggle: function () {\n            return 'Toggle';\n        },\n        formatColumns: function () {\n            return 'Columns';\n        },\n        formatAllRows: function () {\n            return 'All';\n        }\n    };\n\n    $.extend(BootstrapTable.DEFAULTS, BootstrapTable.LOCALES['en-US']);\n\n    BootstrapTable.COLUMN_DEFAULTS = {\n        radio: false,\n        checkbox: false,\n        checkboxEnabled: true,\n        field: undefined,\n        title: undefined,\n        'class': undefined,\n        align: undefined, // left, right, center\n        halign: undefined, // left, right, center\n        falign: undefined, // left, right, center\n        valign: undefined, // top, middle, bottom\n        width: undefined,\n        sortable: false,\n        order: 'asc', // asc, desc\n        visible: true,\n        switchable: true,\n        clickToSelect: true,\n        formatter: undefined,\n        footerFormatter: undefined,\n        events: undefined,\n        sorter: undefined,\n        sortName: undefined,\n        cellStyle: undefined,\n        searchable: true,\n        cardVisible: true\n    };\n\n    BootstrapTable.EVENTS = {\n        'all.bs.table': 'onAll',\n        'click-row.bs.table': 'onClickRow',\n        'dbl-click-row.bs.table': 'onDblClickRow',\n        'sort.bs.table': 'onSort',\n        'check.bs.table': 'onCheck',\n        'uncheck.bs.table': 'onUncheck',\n        'check-all.bs.table': 'onCheckAll',\n        'uncheck-all.bs.table': 'onUncheckAll',\n        'load-success.bs.table': 'onLoadSuccess',\n        'load-error.bs.table': 'onLoadError',\n        'column-switch.bs.table': 'onColumnSwitch',\n        'page-change.bs.table': 'onPageChange',\n        'search.bs.table': 'onSearch',\n        'toggle.bs.table': 'onToggle',\n        'pre-body.bs.table': 'onPreBody',\n        'post-body.bs.table': 'onPostBody',\n        'post-header.bs.table': 'onPostHeader'\n    };\n\n    BootstrapTable.prototype.init = function () {\n        this.initContainer();\n        this.initTable();\n        this.initHeader();\n        this.initData();\n        this.initFooter();\n        this.initToolbar();\n        this.initPagination();\n        this.initBody();\n        this.initServer();\n    };\n\n    BootstrapTable.prototype.initContainer = function () {\n        this.$container = $([\n            '<div class=\"bootstrap-table\">',\n            '<div class=\"fixed-table-toolbar\"></div>',\n            this.options.paginationVAlign === 'top' || this.options.paginationVAlign === 'both' ?\n                '<div class=\"fixed-table-pagination\" style=\"clear: both;\"></div>' :\n                '',\n            '<div class=\"fixed-table-container\">',\n            '<div class=\"fixed-table-header\"><table></table></div>',\n            '<div class=\"fixed-table-body\">',\n            '<div class=\"fixed-table-loading\">',\n            this.options.formatLoadingMessage(),\n            '</div>',\n            '</div>',\n            '<div class=\"fixed-table-footer\"><table><tr></tr></table></div>',\n            this.options.paginationVAlign === 'bottom' || this.options.paginationVAlign === 'both' ?\n                '<div class=\"fixed-table-pagination\"></div>' :\n                '',\n            '</div>',\n            '</div>'].join(''));\n\n        this.$container.insertAfter(this.$el);\n        this.$container.find('.fixed-table-body').append(this.$el);\n        this.$container.after('<div class=\"clearfix\"></div>');\n        this.$loading = this.$container.find('.fixed-table-loading');\n\n        this.$el.addClass(this.options.classes);\n        if (this.options.striped) {\n            this.$el.addClass('table-striped');\n        }\n        if ($.inArray('table-no-bordered', this.options.classes.split(' ')) !== -1) {\n            this.$container.find('.fixed-table-container').addClass('table-no-bordered');\n        }\n    };\n\n    BootstrapTable.prototype.initTable = function () {\n        var that = this,\n            columns = [],\n            data = [];\n\n        this.$header = this.$el.find('thead');\n        if (!this.$header.length) {\n            this.$header = $('<thead></thead>').appendTo(this.$el);\n        }\n        if (!this.$header.find('tr').length) {\n            this.$header.append('<tr></tr>');\n        }\n        this.$header.find('th').each(function () {\n            var column = $.extend({}, {\n                title: $(this).html(),\n                'class': $(this).attr('class')\n            }, $(this).data());\n\n            columns.push(column);\n        });\n        this.options.columns = $.extend(true, [], columns, this.options.columns);\n        $.each(this.options.columns, function (i, column) {\n            that.options.columns[i] = $.extend({}, BootstrapTable.COLUMN_DEFAULTS,\n                {field: i}, column); // when field is undefined, use index instead\n        });\n\n        // if options.data is setting, do not process tbody data\n        if (this.options.data.length) {\n            return;\n        }\n\n        this.$el.find('tbody tr').each(function () {\n            var row = {};\n\n            // save tr's id and class\n            row._id = $(this).attr('id');\n            row._class = $(this).attr('class');\n\n            $(this).find('td').each(function (i) {\n                var field = that.options.columns[i].field;\n\n                row[field] = $(this).html();\n                // save td's id and class\n                row['_' + field + '_id'] = $(this).attr('id');\n                row['_' + field + '_class'] = $(this).attr('class');\n                row['_' + field + '_data'] = $(this).data();\n            });\n            data.push(row);\n        });\n        this.options.data = data;\n    };\n\n    BootstrapTable.prototype.initHeader = function () {\n        var that = this,\n            visibleColumns = [],\n            html = [],\n            timeoutId = 0;\n\n        this.header = {\n            fields: [],\n            styles: [],\n            classes: [],\n            formatters: [],\n            events: [],\n            sorters: [],\n            sortNames: [],\n            cellStyles: [],\n            clickToSelects: [],\n            searchables: []\n        };\n\n        $.each(this.options.columns, function (i, column) {\n            var text = '',\n                halign = '', // header align style\n                align = '', // body align style\n                style = '',\n                class_ = sprintf(' class=\"%s\"', column['class']),\n                order = that.options.sortOrder || column.order,\n                searchable = true,\n                unitWidth = 'px',\n                width = column.width;\n\n            if (!column.visible) {\n                // Fix #229. Default Sort order is wrong if data-visible=\"false\" is set on the field referenced by data-sort-name.\n                if (column.field === that.options.sortName) {\n                    that.header.fields.push(column.field);\n                }\n                return;\n            }\n\n            if (that.options.cardView && (!column.cardVisible)) {\n                return;\n            }\n\n            if (column.width !== undefined && (!that.options.cardView)) {\n                if (typeof column.width === 'string') {\n                    if (column.width.indexOf('%') !== -1) {\n                        unitWidth = '%';\n                    }\n                }\n            }\n            if (column.width && typeof column.width === 'string') {\n                width = column.width.replace('%', '').replace('px', '');\n            }\n\n            halign = sprintf('text-align: %s; ', column.halign ? column.halign : column.align);\n            align = sprintf('text-align: %s; ', column.align);\n            style = sprintf('vertical-align: %s; ', column.valign);\n            style += sprintf('width: %s%s; ', column.checkbox || column.radio ? 36 : width, unitWidth);\n\n            visibleColumns.push(column);\n            that.header.fields.push(column.field);\n            that.header.styles.push(align + style);\n            that.header.classes.push(class_);\n            that.header.formatters.push(column.formatter);\n            that.header.events.push(column.events);\n            that.header.sorters.push(column.sorter);\n            that.header.sortNames.push(column.sortName);\n            that.header.cellStyles.push(column.cellStyle);\n            that.header.clickToSelects.push(column.clickToSelect);\n            that.header.searchables.push(column.searchable);\n\n            html.push('<th',\n                column.checkbox || column.radio ?\n                    sprintf(' class=\"bs-checkbox %s\"', column['class'] || '') :\n                    class_,\n                sprintf(' style=\"%s\"', halign + style),\n                '>');\n\n            html.push(sprintf('<div class=\"th-inner %s\">', that.options.sortable && column.sortable ?\n                'sortable' : ''));\n\n            text = column.title;\n            if (that.options.sortName === column.field && that.options.sortable && column.sortable) {\n                text += that.getCaretHtml();\n            }\n\n            if (column.checkbox) {\n                if (!that.options.singleSelect && that.options.checkboxHeader) {\n                    text = '<input name=\"btSelectAll\" type=\"checkbox\" />';\n                }\n                that.header.stateField = column.field;\n            }\n            if (column.radio) {\n                text = '';\n                that.header.stateField = column.field;\n                that.options.singleSelect = true;\n            }\n\n            html.push(text);\n            html.push('</div>');\n            html.push('<div class=\"fht-cell\"></div>');\n            html.push('</div>');\n            html.push('</th>');\n        });\n\n        this.$header.find('tr').html(html.join(''));\n        this.$header.find('th').each(function (i) {\n            $(this).data(visibleColumns[i]);\n        });\n        this.$container.off('click', '.th-inner').on('click', '.th-inner', function (event) {\n            if (that.options.sortable && $(this).parent().data().sortable) {\n                that.onSort(event);\n            }\n        });\n\n        if (!this.options.showHeader || this.options.cardView) {\n            this.$header.hide();\n            this.$container.find('.fixed-table-header').hide();\n            this.$loading.css('top', 0);\n        } else {\n            this.$header.show();\n            this.$container.find('.fixed-table-header').show();\n            this.$loading.css('top', cellHeight + 'px');\n        }\n\n        this.$selectAll = this.$header.find('[name=\"btSelectAll\"]');\n        this.$container.off('click', '[name=\"btSelectAll\"]')\n            .on('click', '[name=\"btSelectAll\"]', function () {\n                var checked = $(this).prop('checked');\n                that[checked ? 'checkAll' : 'uncheckAll']();\n            });\n    };\n\n    BootstrapTable.prototype.initFooter = function () {\n        this.$footer = this.$container.find('.fixed-table-footer');\n        if (!this.options.showFooter || this.options.cardView) {\n            this.$footer.hide();\n        } else {\n            this.$footer.show();\n        }\n    };\n\n    /**\n     * @param data\n     * @param type: append / prepend\n     */\n    BootstrapTable.prototype.initData = function (data, type) {\n        if (type === 'append') {\n            this.data = this.data.concat(data);\n        } else if (type === 'prepend') {\n            this.data = [].concat(data).concat(this.data);\n        } else {\n            this.data = data || this.options.data;\n        }\n        this.options.data = this.data;\n\n        if (this.options.sidePagination === 'server') {\n            return;\n        }\n        this.initSort();\n    };\n\n    BootstrapTable.prototype.initSort = function () {\n        var that = this,\n            name = this.options.sortName,\n            order = this.options.sortOrder === 'desc' ? -1 : 1,\n            index = $.inArray(this.options.sortName, this.header.fields);\n\n        if (index !== -1) {\n            this.data.sort(function (a, b) {\n                if (that.header.sortNames[index]) {\n                    name = that.header.sortNames[index];\n                }\n                var aa = a[name],\n                    bb = b[name],\n                    value = calculateObjectValue(that.header, that.header.sorters[index], [aa, bb]);\n\n                if (value !== undefined) {\n                    return order * value;\n                }\n\n                // Fix #161: undefined or null string sort bug.\n                if (aa === undefined || aa === null) {\n                    aa = '';\n                }\n                if (bb === undefined || bb === null) {\n                    bb = '';\n                }\n\n                // IF both values are numeric, do a numeric comparison\n                if ($.isNumeric(aa) && $.isNumeric(bb)) {\n                    // Convert numerical values form string to float.\n                    aa = parseFloat(aa);\n                    bb = parseFloat(bb);\n                    if (aa < bb) {\n                        return order * -1;\n                    }\n                    return order;\n                }\n\n                if (aa === bb) {\n                    return 0;\n                }\n\n                // If value is not a string, convert to string\n                if (typeof aa !== 'string') {\n                    aa = aa.toString();\n                }\n\n                if (aa.localeCompare(bb) === -1) {\n                    return order * -1;\n                }\n\n                return order;\n            });\n        }\n    };\n\n    BootstrapTable.prototype.onSort = function (event) {\n        var $this = $(event.currentTarget).parent(),\n            $this_ = this.$header.find('th').eq($this.index());\n\n        this.$header.add(this.$header_).find('span.order').remove();\n\n        if (this.options.sortName === $this.data('field')) {\n            this.options.sortOrder = this.options.sortOrder === 'asc' ? 'desc' : 'asc';\n        } else {\n            this.options.sortName = $this.data('field');\n            this.options.sortOrder = $this.data('order') === 'asc' ? 'desc' : 'asc';\n        }\n        this.trigger('sort', this.options.sortName, this.options.sortOrder);\n\n        $this.add($this_).data('order', this.options.sortOrder)\n            .find('.th-inner').append(this.getCaretHtml());\n\n        if (this.options.sidePagination === 'server') {\n            this.initServer();\n            return;\n        }\n\n        this.initSort();\n        this.initBody();\n    };\n\n    BootstrapTable.prototype.initToolbar = function () {\n        var that = this,\n            html = [],\n            timeoutId = 0,\n            $keepOpen,\n            $search,\n            switchableCount = 0;\n\n        this.$toolbar = this.$container.find('.fixed-table-toolbar').html('');\n\n        if (typeof this.options.toolbar === 'string') {\n            $(sprintf('<div class=\"bars pull-%s\"></div>', this.options.toolbarAlign))\n                .appendTo(this.$toolbar)\n                .append($(this.options.toolbar));\n        }\n\n        // showColumns, showToggle, showRefresh\n        html = [sprintf('<div class=\"columns columns-%s btn-group pull-%s\">',\n            this.options.buttonsAlign, this.options.buttonsAlign)];\n\n        if (typeof this.options.icons === 'string') {\n            this.options.icons = calculateObjectValue(null, this.options.icons);\n        }\n\n        if (this.options.showPaginationSwitch) {\n            html.push(sprintf('<button class=\"btn btn-default\" type=\"button\" name=\"paginationSwitch\" title=\"%s\">',\n                this.options.formatPaginationSwitch()),\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.paginationSwitchDown),\n                '</button>');\n        }\n\n        if (this.options.showRefresh) {\n            html.push(sprintf('<button class=\"btn btn-default' + (this.options.iconSize === undefined ? '' : ' btn-' + this.options.iconSize) + '\" type=\"button\" name=\"refresh\" title=\"%s\">',\n                this.options.formatRefresh()),\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.refresh),\n                '</button>');\n        }\n\n        if (this.options.showToggle) {\n            html.push(sprintf('<button class=\"btn btn-default' + (this.options.iconSize === undefined ? '' : ' btn-' + this.options.iconSize) + '\" type=\"button\" name=\"toggle\" title=\"%s\">',\n                this.options.formatToggle()),\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.toggle),\n                '</button>');\n        }\n\n        if (this.options.showColumns) {\n            html.push(sprintf('<div class=\"keep-open btn-group\" title=\"%s\">',\n                this.options.formatColumns()),\n                '<button type=\"button\" class=\"btn btn-default' + (this.options.iconSize == undefined ? '' : ' btn-' + this.options.iconSize) + ' dropdown-toggle\" data-toggle=\"dropdown\">',\n                sprintf('<i class=\"%s %s\"></i>', this.options.iconsPrefix, this.options.icons.columns),\n                ' <span class=\"caret\"></span>',\n                '</button>',\n                '<ul class=\"dropdown-menu\" role=\"menu\">');\n\n            $.each(this.options.columns, function (i, column) {\n                if (column.radio || column.checkbox) {\n                    return;\n                }\n\n                if (that.options.cardView && (!column.cardVisible)) {\n                    return;\n                }\n\n                var checked = column.visible ? ' checked=\"checked\"' : '';\n\n                if (column.switchable) {\n                    html.push(sprintf('<li>' +\n                        '<label><input type=\"checkbox\" data-field=\"%s\" value=\"%s\"%s> %s</label>' +\n                        '</li>', column.field, i, checked, column.title));\n                    switchableCount++;\n                }\n            });\n            html.push('</ul>',\n                '</div>');\n        }\n\n        html.push('</div>');\n\n        // Fix #188: this.showToolbar is for extentions\n        if (this.showToolbar || html.length > 2) {\n            this.$toolbar.append(html.join(''));\n        }\n\n        if (this.options.showPaginationSwitch) {\n            this.$toolbar.find('button[name=\"paginationSwitch\"]')\n                .off('click').on('click', $.proxy(this.togglePagination, this));\n        }\n\n        if (this.options.showRefresh) {\n            this.$toolbar.find('button[name=\"refresh\"]')\n                .off('click').on('click', $.proxy(this.refresh, this));\n        }\n\n        if (this.options.showToggle) {\n            this.$toolbar.find('button[name=\"toggle\"]')\n                .off('click').on('click', function () {\n                    that.toggleView();\n                });\n        }\n\n        if (this.options.showColumns) {\n            $keepOpen = this.$toolbar.find('.keep-open');\n\n            if (switchableCount <= this.options.minimumCountColumns) {\n                $keepOpen.find('input').prop('disabled', true);\n            }\n\n            $keepOpen.find('li').off('click').on('click', function (event) {\n                event.stopImmediatePropagation();\n            });\n            $keepOpen.find('input').off('click').on('click', function () {\n                var $this = $(this);\n\n                that.toggleColumn(getFieldIndex(that.options.columns, $(this).data('field')), $this.prop('checked'), false);\n                that.trigger('column-switch', $(this).data('field'), $this.prop('checked'));\n            });\n        }\n\n        if (this.options.search) {\n            html = [];\n            html.push(\n                '<div class=\"pull-' + this.options.searchAlign + ' search\">',\n                sprintf('<input class=\"form-control' + (this.options.iconSize === undefined ? '' : ' input-' + this.options.iconSize) + '\" type=\"text\" placeholder=\"%s\">',\n                    this.options.formatSearch()),\n                '</div>');\n\n            this.$toolbar.append(html.join(''));\n            $search = this.$toolbar.find('.search input');\n            $search.off('keyup drop').on('keyup drop', function (event) {\n                clearTimeout(timeoutId); // doesn't matter if it's 0\n                timeoutId = setTimeout(function () {\n                    that.onSearch(event);\n                }, that.options.searchTimeOut);\n            });\n\n            if (this.options.searchText !== '') {\n                $search.val(this.options.searchText);\n                clearTimeout(timeoutId); // doesn't matter if it's 0\n                timeoutId = setTimeout(function () {\n                    $search.trigger('keyup');\n                }, that.options.searchTimeOut);\n            }\n        }\n    };\n\n    BootstrapTable.prototype.onSearch = function (event) {\n        var text = $.trim($(event.currentTarget).val());\n\n        // trim search input\n        if (this.options.trimOnSearch && $(event.currentTarget).val() !== text) {\n            $(event.currentTarget).val(text);\n        }\n\n        if (text === this.searchText) {\n            return;\n        }\n        this.searchText = text;\n\n        this.options.pageNumber = 1;\n        this.initSearch();\n        this.updatePagination();\n        this.trigger('search', text);\n    };\n\n    BootstrapTable.prototype.initSearch = function () {\n        var that = this;\n\n        if (this.options.sidePagination !== 'server') {\n            var s = this.searchText && this.searchText.toLowerCase();\n            var f = $.isEmptyObject(this.filterColumns) ? null : this.filterColumns;\n\n            // Check filter\n            this.data = f ? $.grep(this.options.data, function (item, i) {\n                for (var key in f) {\n                    if (item[key] !== f[key]) {\n                        return false;\n                    }\n                }\n                return true;\n            }) : this.options.data;\n\n            this.data = s ? $.grep(this.data, function (item, i) {\n                for (var key in item) {\n                    key = $.isNumeric(key) ? parseInt(key, 10) : key;\n                    var value = item[key];\n\n                    // Fix #142: search use formated data\n                    value = calculateObjectValue(that.header,\n                        that.header.formatters[$.inArray(key, that.header.fields)],\n                        [value, item, i], value);\n\n                    var index = $.inArray(key, that.header.fields);\n                    if (index !== -1 && that.header.searchables[index] &&\n                        (typeof value === 'string' ||\n                            typeof value === 'number') &&\n                        (value + '').toLowerCase().indexOf(s) !== -1) {\n                        return true;\n                    }\n                }\n                return false;\n            }) : this.data;\n        }\n    };\n\n    BootstrapTable.prototype.initPagination = function () {\n        this.$pagination = this.$container.find('.fixed-table-pagination');\n\n        if (!this.options.pagination) {\n            this.$pagination.hide();\n            return;\n        } else {\n            this.$pagination.show();\n        }\n\n        var that = this,\n            html = [],\n            $allSelected = false,\n            i, from, to,\n            $pageList,\n            $first, $pre,\n            $next, $last,\n            $number,\n            data = this.getData();\n\n        if (this.options.sidePagination !== 'server') {\n            this.options.totalRows = data.length;\n        }\n\n        this.totalPages = 0;\n        if (this.options.totalRows) {\n            if (this.options.pageSize === this.options.formatAllRows()) {\n                this.options.pageSize = this.options.totalRows;\n                $allSelected = true;\n            } else if (this.options.pageSize === this.options.totalRows) {\n                // Fix #667 Table with pagination, multiple pages and a search that matches to one page throws exception\n                var pageLst = typeof this.options.pageList === 'string' ?\n                    this.options.pageList.replace('[', '').replace(']', '').replace(/ /g, '').toLowerCase().split(',') :\n                    this.options.pageList;\n                if (pageLst.indexOf(this.options.formatAllRows().toLowerCase()) > -1) {\n                    $allSelected = true;\n                }\n            }\n\n            this.totalPages = ~~((this.options.totalRows - 1) / this.options.pageSize) + 1;\n\n            this.options.totalPages = this.totalPages;\n        }\n        if (this.totalPages > 0 && this.options.pageNumber > this.totalPages) {\n            this.options.pageNumber = this.totalPages;\n        }\n\n        this.pageFrom = (this.options.pageNumber - 1) * this.options.pageSize + 1;\n        this.pageTo = this.options.pageNumber * this.options.pageSize;\n        if (this.pageTo > this.options.totalRows) {\n            this.pageTo = this.options.totalRows;\n        }\n\n        html.push(\n            '<div class=\"pull-' + this.options.paginationDetailHAlign + ' pagination-detail\">',\n            '<span class=\"pagination-info\">',\n            this.options.formatShowingRows(this.pageFrom, this.pageTo, this.options.totalRows),\n            '</span>');\n\n        html.push('<span class=\"page-list\">');\n\n        var pageNumber = [\n                sprintf('<span class=\"btn-group %s\">', this.options.paginationVAlign === 'top' || this.options.paginationVAlign === 'both' ?\n                    'dropdown' : 'dropup'),\n                '<button type=\"button\" class=\"btn btn-default ' + (this.options.iconSize === undefined ? '' : ' btn-' + this.options.iconSize) + ' dropdown-toggle\" data-toggle=\"dropdown\">',\n                '<span class=\"page-size\">',\n                $allSelected ? this.options.formatAllRows() : this.options.pageSize,\n                '</span>',\n                ' <span class=\"caret\"></span>',\n                '</button>',\n                '<ul class=\"dropdown-menu\" role=\"menu\">'],\n            pageList = this.options.pageList;\n\n        if (typeof this.options.pageList === 'string') {\n            var list = this.options.pageList.replace('[', '').replace(']', '').replace(/ /g, '').split(',');\n\n            pageList = [];\n            $.each(list, function (i, value) {\n                pageList.push(value.toUpperCase() === that.options.formatAllRows().toUpperCase() ?\n                    that.options.formatAllRows() : +value);\n            });\n        }\n\n        $.each(pageList, function (i, page) {\n            if (!that.options.smartDisplay || i === 0 || pageList[i - 1] <= that.options.totalRows) {\n                var active;\n                if ($allSelected) {\n                    active = page === that.options.formatAllRows() ? ' class=\"active\"' : '';\n                } else {\n                    active = page === that.options.pageSize ? ' class=\"active\"' : '';\n                }\n                pageNumber.push(sprintf('<li%s><a href=\"javascript:void(0)\">%s</a></li>', active, page));\n            }\n        });\n        pageNumber.push('</ul></span>');\n\n        html.push(this.options.formatRecordsPerPage(pageNumber.join('')));\n        html.push('</span>');\n\n        // Fixed #611 vertical-align between pagination block and pagination-detail block. Remove class pagination.\n        html.push('</div>',\n            '<div class=\"pull-' + this.options.paginationHAlign + '\">',\n            '<ul class=\"pagination' + (this.options.iconSize === undefined ? '' : ' pagination-' + this.options.iconSize) + '\">',\n            '<li class=\"page-first\"><a href=\"javascript:void(0)\">' + this.options.paginationFirstText + '</a></li>',\n            '<li class=\"page-pre\"><a href=\"javascript:void(0)\">' + this.options.paginationPreText + '</a></li>');\n\n        if (this.totalPages < 5) {\n            from = 1;\n            to = this.totalPages;\n        } else {\n            from = this.options.pageNumber - 2;\n            to = from + 4;\n            if (from < 1) {\n                from = 1;\n                to = 5;\n            }\n            if (to > this.totalPages) {\n                to = this.totalPages;\n                from = to - 4;\n            }\n        }\n        for (i = from; i <= to; i++) {\n            html.push('<li class=\"page-number' + (i === this.options.pageNumber ? ' active' : '') + '\">',\n                '<a href=\"javascript:void(0)\">', i, '</a>',\n                '</li>');\n        }\n\n        html.push(\n            '<li class=\"page-next\"><a href=\"javascript:void(0)\">' + this.options.paginationNextText + '</a></li>',\n            '<li class=\"page-last\"><a href=\"javascript:void(0)\">' + this.options.paginationLastText + '</a></li>',\n            '</ul>',\n            '</div>');\n\n        this.$pagination.html(html.join(''));\n\n        $pageList = this.$pagination.find('.page-list a');\n        $first = this.$pagination.find('.page-first');\n        $pre = this.$pagination.find('.page-pre');\n        $next = this.$pagination.find('.page-next');\n        $last = this.$pagination.find('.page-last');\n        $number = this.$pagination.find('.page-number');\n\n        if (this.options.pageNumber <= 1) {\n            $first.addClass('disabled');\n            $pre.addClass('disabled');\n        }\n        if (this.options.pageNumber >= this.totalPages) {\n            $next.addClass('disabled');\n            $last.addClass('disabled');\n        }\n        if (this.options.smartDisplay) {\n            if (this.totalPages <= 1) {\n                this.$pagination.find('div.pagination').hide();\n            }\n            if (pageList.length < 2 || this.options.totalRows <= pageList[0]) {\n                this.$pagination.find('span.page-list').hide();\n            }\n\n            // when data is empty, hide the pagination\n            this.$pagination[this.getData().length ? 'show' : 'hide']();\n        }\n        if ($allSelected) {\n            this.options.pageSize = this.options.formatAllRows();\n        }\n        $pageList.off('click').on('click', $.proxy(this.onPageListChange, this));\n        $first.off('click').on('click', $.proxy(this.onPageFirst, this));\n        $pre.off('click').on('click', $.proxy(this.onPagePre, this));\n        $next.off('click').on('click', $.proxy(this.onPageNext, this));\n        $last.off('click').on('click', $.proxy(this.onPageLast, this));\n        $number.off('click').on('click', $.proxy(this.onPageNumber, this));\n    };\n\n    BootstrapTable.prototype.updatePagination = function (event) {\n        // Fix #171: IE disabled button can be clicked bug.\n        if (event && $(event.currentTarget).hasClass('disabled')) {\n            return;\n        }\n\n        if (!this.options.maintainSelected) {\n            this.resetRows();\n        }\n\n        this.initPagination();\n        if (this.options.sidePagination === 'server') {\n            this.initServer();\n        } else {\n            this.initBody();\n        }\n\n        this.trigger('page-change', this.options.pageNumber, this.options.pageSize);\n    };\n\n    BootstrapTable.prototype.onPageListChange = function (event) {\n        var $this = $(event.currentTarget);\n\n        $this.parent().addClass('active').siblings().removeClass('active');\n        this.options.pageSize = $this.text().toUpperCase() === this.options.formatAllRows().toUpperCase() ?\n            this.options.formatAllRows() : +$this.text();\n        this.$toolbar.find('.page-size').text(this.options.pageSize);\n\n        this.updatePagination(event);\n    };\n\n    BootstrapTable.prototype.onPageFirst = function (event) {\n        this.options.pageNumber = 1;\n        this.updatePagination(event);\n    };\n\n    BootstrapTable.prototype.onPagePre = function (event) {\n        this.options.pageNumber--;\n        this.updatePagination(event);\n    };\n\n    BootstrapTable.prototype.onPageNext = function (event) {\n        this.options.pageNumber++;\n        this.updatePagination(event);\n    };\n\n    BootstrapTable.prototype.onPageLast = function (event) {\n        this.options.pageNumber = this.totalPages;\n        this.updatePagination(event);\n    };\n\n    BootstrapTable.prototype.onPageNumber = function (event) {\n        if (this.options.pageNumber === +$(event.currentTarget).text()) {\n            return;\n        }\n        this.options.pageNumber = +$(event.currentTarget).text();\n        this.updatePagination(event);\n    };\n\n    BootstrapTable.prototype.initBody = function (fixedScroll) {\n        var that = this,\n            html = [],\n            data = this.getData();\n\n        this.trigger('pre-body', data);\n\n        this.$body = this.$el.find('tbody');\n        if (!this.$body.length) {\n            this.$body = $('<tbody></tbody>').appendTo(this.$el);\n        }\n\n        //Fix #389 Bootstrap-table-flatJSON is not working\n\n        if (!this.options.pagination || this.options.sidePagination === 'server') {\n            this.pageFrom = 1;\n            this.pageTo = data.length;\n        }\n\n        for (var i = this.pageFrom - 1; i < this.pageTo; i++) {\n            var key,\n                item = data[i],\n                style = {},\n                csses = [],\n                attributes = {},\n                htmlAttributes = [];\n\n            style = calculateObjectValue(this.options, this.options.rowStyle, [item, i], style);\n\n            if (style && style.css) {\n                for (key in style.css) {\n                    csses.push(key + ': ' + style.css[key]);\n                }\n            }\n\n            attributes = calculateObjectValue(this.options,\n                this.options.rowAttributes, [item, i], attributes);\n\n            if (attributes) {\n                for (key in attributes) {\n                    htmlAttributes.push(sprintf('%s=\"%s\"', key, escapeHTML(attributes[key])));\n                }\n            }\n\n            html.push('<tr',\n                sprintf(' %s', htmlAttributes.join(' ')),\n                sprintf(' id=\"%s\"', $.isArray(item) ? undefined : item._id),\n                sprintf(' class=\"%s\"', style.classes || ($.isArray(item) ? undefined : item._class)),\n                sprintf(' data-index=\"%s\"', i),\n                sprintf(' data-unique-id=\"%s\"', item[this.options.uniqueId]),\n                '>'\n            );\n\n            if (this.options.cardView) {\n                html.push(sprintf('<td colspan=\"%s\">', this.header.fields.length));\n            }\n\n            $.each(this.header.fields, function (j, field) {\n                var text = '',\n                    value = item[field],\n                    type = '',\n                    cellStyle = {},\n                    id_ = '',\n                    class_ = that.header.classes[j],\n                    data_ = '',\n                    column = that.options.columns[getFieldIndex(that.options.columns, field)];\n\n                style = sprintf('style=\"%s\"', csses.concat(that.header.styles[j]).join('; '));\n\n                value = calculateObjectValue(that.header,\n                    that.header.formatters[j], [value, item, i], value);\n\n                // handle td's id and class\n                if (item['_' + field + '_id']) {\n                    id_ = sprintf(' id=\"%s\"', item['_' + field + '_id']);\n                }\n                if (item['_' + field + '_class']) {\n                    class_ = sprintf(' class=\"%s\"', item['_' + field + '_class']);\n                }\n                cellStyle = calculateObjectValue(that.header,\n                    that.header.cellStyles[j], [value, item, i], cellStyle);\n                if (cellStyle.classes) {\n                    class_ = sprintf(' class=\"%s\"', cellStyle.classes);\n                }\n                if (cellStyle.css) {\n                    var csses_ = [];\n                    for (var key in cellStyle.css) {\n                        csses_.push(key + ': ' + cellStyle.css[key]);\n                    }\n                    style = sprintf('style=\"%s\"', csses_.concat(that.header.styles[j]).join('; '));\n                }\n\n                if (item['_' + field + '_data'] && !$.isEmptyObject(item['_' + field + '_data'])) {\n                    $.each(item['_' + field + '_data'], function (k, v) {\n                        // ignore data-index\n                        if (k === 'index') {\n                            return;\n                        }\n                        data_ += sprintf(' data-%s=\"%s\"', k, v);\n                    });\n                }\n\n                if (column.checkbox || column.radio) {\n                    type = column.checkbox ? 'checkbox' : type;\n                    type = column.radio ? 'radio' : type;\n\n                    text = [that.options.cardView ?\n                        '<div class=\"card-view\">' : '<td class=\"bs-checkbox\">',\n                        '<input' +\n                            sprintf(' data-index=\"%s\"', i) +\n                            sprintf(' name=\"%s\"', that.options.selectItemName) +\n                            sprintf(' type=\"%s\"', type) +\n                            sprintf(' value=\"%s\"', item[that.options.idField]) +\n                            sprintf(' checked=\"%s\"', value === true ||\n                                (value && value.checked) ? 'checked' : undefined) +\n                            sprintf(' disabled=\"%s\"', !column.checkboxEnabled ||\n                                (value && value.disabled) ? 'disabled' : undefined) +\n                            ' />',\n                        that.options.cardView ? '</div>' : '</td>'].join('');\n                        \n                    item[that.header.stateField] = value === true || (value && value.checked);\n                } else {\n                    value = typeof value === 'undefined' || value === null ?\n                        that.options.undefinedText : value;\n\n                    text = that.options.cardView ?\n                        ['<div class=\"card-view\">',\n                            that.options.showHeader ? sprintf('<span class=\"title\" %s>%s</span>', style,\n                                getPropertyFromOther(that.options.columns, 'field', 'title', field)) : '',\n                            sprintf('<span class=\"value\">%s</span>', value),\n                            '</div>'].join('') :\n                        [sprintf('<td%s %s %s %s>', id_, class_, style, data_),\n                            value,\n                            '</td>'].join('');\n\n                    // Hide empty data on Card view when smartDisplay is set to true.\n                    if (that.options.cardView && that.options.smartDisplay && value === '') {\n                        text = '';\n                    }\n                }\n\n                html.push(text);\n            });\n\n            if (this.options.cardView) {\n                html.push('</td>');\n            }\n\n            html.push('</tr>');\n        }\n\n        // show no records\n        if (!html.length) {\n            html.push('<tr class=\"no-records-found\">',\n                sprintf('<td colspan=\"%s\">%s</td>', this.header.fields.length, this.options.formatNoMatches()),\n                '</tr>');\n        }\n\n        this.$body.html(html.join(''));\n\n        if (!fixedScroll) {\n            this.scrollTo(0);\n        }\n\n        // click to select by column\n        this.$body.find('> tr > td').off('click').on('click', function () {\n            var $tr = $(this).parent();\n            that.trigger('click-row', that.data[$tr.data('index')], $tr);\n            // if click to select - then trigger the checkbox/radio click\n            if (that.options.clickToSelect) {\n                if (that.header.clickToSelects[$tr.children().index($(this))]) {\n                    $tr.find(sprintf('[name=\"%s\"]',\n                        that.options.selectItemName))[0].click(); // #144: .trigger('click') bug\n                }\n            }\n        });\n        this.$body.find('tr').off('dblclick').on('dblclick', function () {\n            that.trigger('dbl-click-row', that.data[$(this).data('index')], $(this));\n        });\n\n        this.$selectItem = this.$body.find(sprintf('[name=\"%s\"]', this.options.selectItemName));\n        this.$selectItem.off('click').on('click', function (event) {\n            event.stopImmediatePropagation();\n\n            var checked = $(this).prop('checked'),\n                row = that.data[$(this).data('index')];\n\n            row[that.header.stateField] = checked;\n            that.trigger(checked ? 'check' : 'uncheck', row);\n\n            if (that.options.singleSelect) {\n                that.$selectItem.not(this).each(function () {\n                    that.data[$(this).data('index')][that.header.stateField] = false;\n                });\n                that.$selectItem.filter(':checked').not(this).prop('checked', false);\n            }\n\n            that.updateSelected();\n        });\n\n        $.each(this.header.events, function (i, events) {\n            if (!events) {\n                return;\n            }\n            // fix bug, if events is defined with namespace\n            if (typeof events === 'string') {\n                events = calculateObjectValue(null, events);\n            }\n            for (var key in events) {\n                that.$body.find('tr').each(function () {\n                    var $tr = $(this),\n                        $td = $tr.find(that.options.cardView ? '.card-view' : 'td').eq(i),\n                        index = key.indexOf(' '),\n                        name = key.substring(0, index),\n                        el = key.substring(index + 1),\n                        func = events[key];\n\n                    $td.find(el).off(name).on(name, function (e) {\n                        var index = $tr.data('index'),\n                            row = that.data[index],\n                            value = row[that.header.fields[i]];\n\n                        func.apply(this, [e, value, row, index]);\n                    });\n                });\n            }\n        });\n\n        this.updateSelected();\n        this.resetView();\n\n        this.trigger('post-body');\n    };\n\n    BootstrapTable.prototype.initServer = function (silent, query) {\n        var that = this,\n            data = {},\n            params = {\n                pageSize: this.options.pageSize === this.options.formatAllRows() ?\n                    this.options.totalRows : this.options.pageSize,\n                pageNumber: this.options.pageNumber,\n                searchText: this.searchText,\n                sortName: this.options.sortName,\n                sortOrder: this.options.sortOrder\n            },\n            request;\n\n        if (!this.options.url && !this.options.ajax) {\n            return;\n        }\n\n        if (this.options.queryParamsType === 'limit') {\n            params = {\n                search: params.searchText,\n                sort: params.sortName,\n                order: params.sortOrder\n            };\n            if (this.options.pagination) {\n                params.limit = this.options.pageSize === this.options.formatAllRows() ?\n                    this.options.totalRows : this.options.pageSize;\n                params.offset = this.options.pageSize === this.options.formatAllRows() ?\n                    0 : this.options.pageSize * (this.options.pageNumber - 1);\n            }\n        }\n\n        if (!($.isEmptyObject(this.filterColumnsPartial))) {\n            params['filter'] = JSON.stringify(this.filterColumnsPartial, null);\n        }\n\n        data = calculateObjectValue(this.options, this.options.queryParams, [params], data);\n\n        $.extend(data, query || {});\n\n        // false to stop request\n        if (data === false) {\n            return;\n        }\n\n        if (!silent) {\n            this.$loading.show();\n        }\n        request = $.extend({}, calculateObjectValue(null, this.options.ajaxOptions), {\n            type: this.options.method,\n            url: this.options.url,\n            data: this.options.contentType === 'application/json' && this.options.method === 'post' ?\n                JSON.stringify(data) : data,\n            cache: this.options.cache,\n            contentType: this.options.contentType,\n            dataType: this.options.dataType,\n            success: function (res) {\n                res = calculateObjectValue(that.options, that.options.responseHandler, [res], res);\n\n                that.load(res);\n                that.trigger('load-success', res);\n            },\n            error: function (res) {\n                that.trigger('load-error', res.status);\n            },\n            complete: function () {\n                if (!silent) {\n                    that.$loading.hide();\n                }\n            }\n        });\n\n        if (this.options.ajax) {\n            calculateObjectValue(this, this.options.ajax, [request], null);\n        } else {\n            $.ajax(request);\n        }\n    };\n\n    BootstrapTable.prototype.getCaretHtml = function () {\n        return ['<span class=\"order' + (this.options.sortOrder === 'desc' ? '' : ' dropup') + '\">',\n            '<span class=\"caret\" style=\"margin: 10px 5px;\"></span>',\n            '</span>'].join('');\n    };\n\n    BootstrapTable.prototype.updateSelected = function () {\n        var checkAll = this.$selectItem.filter(':enabled').length ===\n            this.$selectItem.filter(':enabled').filter(':checked').length;\n\n        this.$selectAll.add(this.$selectAll_).prop('checked', checkAll);\n\n        this.$selectItem.each(function () {\n            $(this).parents('tr')[$(this).prop('checked') ? 'addClass' : 'removeClass']('selected');\n        });\n    };\n\n    BootstrapTable.prototype.updateRows = function () {\n        var that = this;\n\n        this.$selectItem.each(function () {\n            that.data[$(this).data('index')][that.header.stateField] = $(this).prop('checked');\n        });\n    };\n\n    BootstrapTable.prototype.resetRows = function () {\n        var that = this;\n\n        $.each(this.data, function (i, row) {\n            that.$selectAll.prop('checked', false);\n            that.$selectItem.prop('checked', false);\n            row[that.header.stateField] = false;\n        });\n    };\n\n    BootstrapTable.prototype.trigger = function (name) {\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        name += '.bs.table';\n        this.options[BootstrapTable.EVENTS[name]].apply(this.options, args);\n        this.$el.trigger($.Event(name), args);\n\n        this.options.onAll(name, args);\n        this.$el.trigger($.Event('all.bs.table'), [name, args]);\n    };\n\n    BootstrapTable.prototype.resetHeader = function () {\n        // fix #61: the hidden table reset header bug.\n        // fix bug: get $el.css('width') error sometime (height = 500)\n        clearTimeout(this.timeoutId_);\n        this.timeoutId_ = setTimeout($.proxy(this.fitHeader, this), this.$el.is(':hidden') ? 100 : 0);\n    };\n\n    BootstrapTable.prototype.fitHeader = function () {\n        var that = this,\n            $fixedHeader,\n            $fixedBody,\n            fixedBody,\n            scrollWidth;\n\n        if (that.$el.is(':hidden')) {\n            that.timeoutFooter_ = setTimeout($.proxy(that.fitHeader, that), 100);\n            return;\n        }\n        $fixedHeader = this.$container.find('.fixed-table-header');\n        $fixedBody = this.$container.find('.fixed-table-body');\n        fixedBody = $fixedBody.get(0);\n\n        scrollWidth = fixedBody.scrollWidth > fixedBody.clientWidth &&\n            fixedBody.scrollHeight > fixedBody.clientHeight + this.$header.height() ?\n            getScrollBarWidth() : 0;\n\n        this.$el.css('margin-top', -this.$header.height());\n        this.$header_ = this.$header.clone(true, true);\n        this.$selectAll_ = this.$header_.find('[name=\"btSelectAll\"]');\n        $fixedHeader.css({\n            'margin-right': scrollWidth\n        }).find('table').css('width', this.$el.css('width'))\n            .html('').attr('class', this.$el.attr('class'))\n            .append(this.$header_);\n\n        // fix bug: $.data() is not working as expected after $.append()\n        this.$header.find('th').each(function (i) {\n            that.$header_.find('th').eq(i).data($(this).data());\n        });\n\n        this.$body.find('tr:first-child:not(.no-records-found) > *').each(function (i) {\n            that.$header_.find('div.fht-cell').eq(i).width($(this).innerWidth());\n        });\n        // horizontal scroll event\n        // TODO: it's probably better improving the layout than binding to scroll event\n        $fixedBody.off('scroll').on('scroll', function () {\n            $fixedHeader.scrollLeft($(this).scrollLeft());\n        });\n        that.trigger('post-header');\n    };\n\n    BootstrapTable.prototype.resetFooter = function () {\n        var that = this,\n            data = that.getData(),\n            html = [];\n\n        if (!this.options.showFooter || this.options.cardView) { //do nothing\n            return;\n        }\n\n        $.each(this.options.columns, function (i, column) {\n            var falign = '', // footer align style\n                style = '',\n                class_ = sprintf(' class=\"%s\"', column['class']);\n\n            if (!column.visible) {\n                return;\n            }\n\n            if (that.options.cardView && (!column.cardVisible)) {\n                return;\n            }\n\n            falign = sprintf('text-align: %s; ', column.falign ? column.falign : column.align);\n            style = sprintf('vertical-align: %s; ', column.valign);\n\n            html.push('<td', class_, sprintf(' style=\"%s\"', falign + style), '>');\n\n\n            html.push(calculateObjectValue(column, column.footerFormatter, [data], '&nbsp;') || '&nbsp;');\n            html.push('</td>');\n        });\n\n        this.$footer.find('tr').html(html.join(''));\n        clearTimeout(this.timeoutFooter_);\n        this.timeoutFooter_ = setTimeout($.proxy(this.fitFooter, this),\n            this.$el.is(':hidden') ? 100 : 0);\n    };\n\n    BootstrapTable.prototype.fitFooter = function () {\n        var that = this,\n            $fixedBody,\n            $footerTd,\n            elWidth,\n            scrollWidth;\n\n        clearTimeout(this.timeoutFooter_);\n        if (this.$el.is(':hidden')) {\n            this.timeoutFooter_ = setTimeout($.proxy(this.fitFooter, this), 100);\n            return;\n        }\n\n        $fixedBody = this.$container.find('.fixed-table-body');\n        elWidth = this.$el.css('width');\n        scrollWidth = elWidth > $fixedBody.width() ? getScrollBarWidth() : 0;\n\n        this.$footer.css({\n            'margin-right': scrollWidth\n        }).find('table').css('width', elWidth)\n            .attr('class', this.$el.attr('class'));\n\n        $footerTd = this.$footer.find('td');\n\n        $fixedBody.find('tbody tr:first-child:not(.no-records-found) > td').each(function (i) {\n            $footerTd.eq(i).outerWidth($(this).outerWidth());\n        });\n    };\n\n    BootstrapTable.prototype.toggleColumn = function (index, checked, needUpdate) {\n        if (index === -1) {\n            return;\n        }\n        this.options.columns[index].visible = checked;\n        this.initHeader();\n        this.initSearch();\n        this.initPagination();\n        this.initBody();\n\n        if (this.options.showColumns) {\n            var $items = this.$toolbar.find('.keep-open input').prop('disabled', false);\n\n            if (needUpdate) {\n                $items.filter(sprintf('[value=\"%s\"]', index)).prop('checked', checked);\n            }\n\n            if ($items.filter(':checked').length <= this.options.minimumCountColumns) {\n                $items.filter(':checked').prop('disabled', true);\n            }\n        }\n    };\n\n    BootstrapTable.prototype.toggleRow = function (index, isIdField, visible) {\n        if (index === -1) {\n            return;\n        }\n\n        $(this.$body[0]).children().filter(sprintf(isIdField ? '[data-unique-id=\"%s\"]' : '[data-index=\"%s\"]', index))\n            [visible ? 'show' : 'hide']();\n    };\n\n    // PUBLIC FUNCTION DEFINITION\n    // =======================\n\n    BootstrapTable.prototype.resetView = function (params) {\n        var that = this,\n            padding = 0,\n            $tableContainer = that.$container.find('.fixed-table-container');\n\n        if (params && params.height) {\n            this.options.height = params.height;\n        }\n\n        this.$selectAll.prop('checked', this.$selectItem.length > 0 &&\n            this.$selectItem.length === this.$selectItem.filter(':checked').length);\n\n        if (this.options.height) {\n            var toolbarHeight = getRealHeight(this.$toolbar),\n                paginationHeight = getRealHeight(this.$pagination),\n                height = this.options.height - toolbarHeight - paginationHeight;\n\n            $tableContainer.css('height', height + 'px');\n        }\n\n        if (this.options.cardView) {\n            // remove the element css\n            that.$el.css('margin-top', '0');\n            $tableContainer.css('padding-bottom', '0');\n            return;\n        }\n\n        if (this.options.showHeader && this.options.height) {\n            this.$container.find('.fixed-table-header').show();\n            this.resetHeader();\n            padding += cellHeight;\n        } else {\n            this.$container.find('.fixed-table-header').hide();\n            this.trigger('post-header');\n        }\n\n        if (this.options.showFooter) {\n            this.resetFooter();\n            if (this.options.height) {\n                padding += cellHeight;\n            }\n        }\n\n        $tableContainer.css('padding-bottom', padding + 'px');\n    };\n\n    BootstrapTable.prototype.getData = function (useCurrentPage) {\n        return (this.searchText\n            || !$.isEmptyObject(this.filterColumns)\n            || !$.isEmptyObject(this.filterColumnsPartial)) ?\n            (useCurrentPage ? this.data.slice(this.pageFrom -1, this.pageTo)\n                : this.data) :\n            (useCurrentPage ? this.options.data.slice(this.pageFrom - 1, this.pageTo)\n                : this.options.data);\n    };\n\n    BootstrapTable.prototype.load = function (data) {\n        var fixedScroll = false;\n\n        // #431: support pagination\n        if (this.options.sidePagination === 'server') {\n            this.options.totalRows = data.total;\n            fixedScroll = data.fixedScroll;\n            data = data.rows;\n        } else if (!$.isArray(data)) { // support fixedScroll\n            fixedScroll = data.fixedScroll;\n            data = data.data;\n        }\n\n        this.initData(data);\n        this.initSearch();\n        this.initPagination();\n        this.initBody(fixedScroll);\n    };\n\n    BootstrapTable.prototype.append = function (data) {\n        this.initData(data, 'append');\n        this.initSearch();\n        this.initPagination();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.prepend = function (data) {\n        this.initData(data, 'prepend');\n        this.initSearch();\n        this.initPagination();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.remove = function (params) {\n        var len = this.options.data.length,\n            i, row;\n\n        if (!params.hasOwnProperty('field') || !params.hasOwnProperty('values')) {\n            return;\n        }\n\n        for (i = len - 1; i >= 0; i--) {\n            row = this.options.data[i];\n\n            if (!row.hasOwnProperty(params.field)) {\n                continue;\n            }\n            if ($.inArray(row[params.field], params.values) !== -1) {\n                this.options.data.splice(i, 1);\n            }\n        }\n\n        if (len === this.options.data.length) {\n            return;\n        }\n\n        this.initSearch();\n        this.initPagination();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.insertRow = function (params) {\n        if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) {\n            return;\n        }\n        this.data.splice(params.index, 0, params.row);\n        this.initSearch();\n        this.initPagination();\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.updateRow = function (params) {\n        if (!params.hasOwnProperty('index') || !params.hasOwnProperty('row')) {\n            return;\n        }\n        $.extend(this.data[params.index], params.row);\n        this.initBody(true);\n    };\n\n    BootstrapTable.prototype.showRow = function (params) {\n        if (!params.hasOwnProperty('index')) {\n            return;\n        }\n\n        this.toggleRow(params.index, params.isIdField === undefined ? false : true, true);\n    };\n\n    BootstrapTable.prototype.hideRow = function (params) {\n        if (!params.hasOwnProperty('index')) {\n            return;\n        }\n\n        this.toggleRow(params.index, params.isIdField === undefined ? false : true, false);\n    };\n\n    BootstrapTable.prototype.getRowsHidden = function (show) {\n        var rows = $(this.$body[0]).children().filter(':hidden'),\n            i = 0;\n        if (show) {\n            for (; i < rows.length; i++) {\n                $(rows[i]).show();\n            }\n        }\n        return rows;\n    }\n\n    BootstrapTable.prototype.mergeCells = function (options) {\n        var row = options.index,\n            col = $.inArray(options.field, this.header.fields),\n            rowspan = options.rowspan || 1,\n            colspan = options.colspan || 1,\n            i, j,\n            $tr = this.$body.find('tr'),\n            $td = $tr.eq(row).find('td').eq(col);\n\n        if (row < 0 || col < 0 || row >= this.data.length) {\n            return;\n        }\n\n        for (i = row; i < row + rowspan; i++) {\n            for (j = col; j < col + colspan; j++) {\n                $tr.eq(i).find('td').eq(j).hide();\n            }\n        }\n\n        $td.attr('rowspan', rowspan).attr('colspan', colspan).show();\n    };\n\n    BootstrapTable.prototype.getOptions = function () {\n        return this.options;\n    };\n\n    BootstrapTable.prototype.getSelections = function () {\n        var that = this;\n\n        return $.grep(this.data, function (row) {\n            return row[that.header.stateField];\n        });\n    };\n\n    BootstrapTable.prototype.checkAll = function () {\n        this.checkAll_(true);\n    };\n\n    BootstrapTable.prototype.uncheckAll = function () {\n        this.checkAll_(false);\n    };\n\n    BootstrapTable.prototype.checkAll_ = function (checked) {\n        var rows;\n        if (!checked) {\n            rows = this.getSelections();\n        }\n        this.$selectItem.filter(':enabled').prop('checked', checked);\n        this.updateRows();\n        this.updateSelected();\n        if (checked) {\n            rows = this.getSelections();\n        }\n        this.trigger(checked ? 'check-all' : 'uncheck-all', rows);\n    };\n\n    BootstrapTable.prototype.check = function (index) {\n        this.check_(true, index);\n    };\n\n    BootstrapTable.prototype.uncheck = function (index) {\n        this.check_(false, index);\n    };\n\n    BootstrapTable.prototype.check_ = function (checked, index) {\n        this.$selectItem.filter(sprintf('[data-index=\"%s\"]', index)).prop('checked', checked);\n        this.data[index][this.header.stateField] = checked;\n        this.updateSelected();\n        this.trigger(checked ? 'check' : 'uncheck', this.data[index]);\n    };\n\n    BootstrapTable.prototype.checkBy = function (obj) {\n        this.checkBy_(true, obj);\n    };\n\n    BootstrapTable.prototype.uncheckBy = function (obj) {\n        this.checkBy_(false, obj);\n    };\n\n    BootstrapTable.prototype.checkBy_ = function (checked, obj) {\n        if (!obj.hasOwnProperty('field') || !obj.hasOwnProperty('values')) {\n            return;\n        }\n\n        var that = this;\n        $.each(this.options.data, function (index, row) {\n            if (!row.hasOwnProperty(obj.field)) {\n                return false;\n            }\n            if ($.inArray(row[obj.field], obj.values) !== -1) {\n                that.$selectItem.filter(sprintf('[data-index=\"%s\"]', index)).prop('checked', checked);\n                row[that.header.stateField] = checked;\n                that.trigger(checked ? 'check' : 'uncheck', row);\n            }\n        });\n        this.updateSelected();\n    };\n\n    BootstrapTable.prototype.destroy = function () {\n        this.$el.insertBefore(this.$container);\n        $(this.options.toolbar).insertBefore(this.$el);\n        this.$container.next().remove();\n        this.$container.remove();\n        this.$el.html(this.$el_.html())\n            .css('margin-top', '0')\n            .attr('class', this.$el_.attr('class') || ''); // reset the class\n    };\n\n    BootstrapTable.prototype.showLoading = function () {\n        this.$loading.show();\n    };\n\n    BootstrapTable.prototype.hideLoading = function () {\n        this.$loading.hide();\n    };\n\n    BootstrapTable.prototype.togglePagination = function () {\n        this.options.pagination = !this.options.pagination;\n        var button = this.$toolbar.find('button[name=\"paginationSwitch\"] i');\n        if (this.options.pagination) {\n            button.attr(\"class\", this.options.iconsPrefix + \" \" + this.options.icons.paginationSwitchDown);\n        } else {\n            button.attr(\"class\", this.options.iconsPrefix + \" \" + this.options.icons.paginationSwitchUp);\n        }\n        this.updatePagination();\n    };\n\n    BootstrapTable.prototype.refresh = function (params) {\n        if (params && params.url) {\n            this.options.url = params.url;\n            this.options.pageNumber = 1;\n        }\n        this.initServer(params && params.silent, params && params.query);\n    };\n\n    BootstrapTable.prototype.resetWidth = function () {\n        if (this.options.showHeader && this.options.height) {\n            this.fitHeader();\n        }\n        if (this.options.showFooter) {\n            this.fitFooter();\n        }\n    };\n\n    BootstrapTable.prototype.showColumn = function (field) {\n        this.toggleColumn(getFieldIndex(this.options.columns, field), true, true);\n    };\n\n    BootstrapTable.prototype.hideColumn = function (field) {\n        this.toggleColumn(getFieldIndex(this.options.columns, field), false, true);\n    };\n\n    BootstrapTable.prototype.filterBy = function (columns) {\n        this.filterColumns = $.isEmptyObject(columns) ? {} : columns;\n        this.options.pageNumber = 1;\n        this.initSearch();\n        this.updatePagination();\n    };\n\n    BootstrapTable.prototype.scrollTo = function (value) {\n        var $tbody = this.$container.find('.fixed-table-body');\n        if (typeof value === 'string') {\n            value = value === 'bottom' ? $tbody[0].scrollHeight : 0;\n        }\n        if (typeof value === 'number') {\n            $tbody.scrollTop(value);\n        }\n\n        if (typeof value === undefined) {\n            return $tbody.scrollTop();\n        }\n    };\n\n    BootstrapTable.prototype.getScrollPosition = function () {\n        return this.scrollTo();\n    }\n\n    BootstrapTable.prototype.selectPage = function (page) {\n        if (page > 0 && page <= this.options.totalPages) {\n            this.options.pageNumber = page;\n            this.updatePagination();\n        }\n    };\n\n    BootstrapTable.prototype.prevPage = function () {\n        if (this.options.pageNumber > 1) {\n            this.options.pageNumber--;\n            this.updatePagination();\n        }\n    };\n\n    BootstrapTable.prototype.nextPage = function () {\n        if (this.options.pageNumber < this.options.totalPages) {\n            this.options.pageNumber++;\n            this.updatePagination();\n        }\n    };\n\n    BootstrapTable.prototype.toggleView = function () {\n        this.options.cardView = !this.options.cardView;\n        this.initHeader();\n        // Fixed remove toolbar when click cardView button.\n        //that.initToolbar();\n        this.initBody();\n        this.trigger('toggle', this.options.cardView);\n    };\n\n    // BOOTSTRAP TABLE PLUGIN DEFINITION\n    // =======================\n\n    var allowedMethods = [\n        'getOptions',\n        'getSelections', 'getData',\n        'load', 'append', 'prepend', 'remove',\n        'insertRow', 'updateRow',\n        'showRow', 'hideRow', 'getRowsHidden',\n        'mergeCells',\n        'checkAll', 'uncheckAll',\n        'check', 'uncheck',\n        'checkBy', 'uncheckBy',\n        'refresh',\n        'resetView',\n        'resetWidth',\n        'destroy',\n        'showLoading', 'hideLoading',\n        'showColumn', 'hideColumn',\n        'filterBy',\n        'scrollTo',\n        'getScrollPosition',\n        'selectPage', 'prevPage', 'nextPage',\n        'togglePagination',\n        'toggleView'\n    ];\n\n    $.fn.bootstrapTable = function (option, _relatedTarget) {\n        var value;\n\n        this.each(function () {\n            var $this = $(this),\n                data = $this.data('bootstrap.table'),\n                options = $.extend({}, BootstrapTable.DEFAULTS, $this.data(),\n                    typeof option === 'object' && option);\n\n            if (typeof option === 'string') {\n                if ($.inArray(option, allowedMethods) < 0) {\n                    throw new Error(\"Unknown method: \" + option);\n                }\n\n                if (!data) {\n                    return;\n                }\n\n                value = data[option](_relatedTarget);\n\n                if (option === 'destroy') {\n                    $this.removeData('bootstrap.table');\n                }\n            }\n\n            if (!data) {\n                $this.data('bootstrap.table', (data = new BootstrapTable(this, options)));\n            }\n        });\n\n        return typeof value === 'undefined' ? this : value;\n    };\n\n    $.fn.bootstrapTable.Constructor = BootstrapTable;\n    $.fn.bootstrapTable.defaults = BootstrapTable.DEFAULTS;\n    $.fn.bootstrapTable.columnDefaults = BootstrapTable.COLUMN_DEFAULTS;\n    $.fn.bootstrapTable.locales = BootstrapTable.LOCALES;\n    $.fn.bootstrapTable.methods = allowedMethods;\n\n    // BOOTSTRAP TABLE INIT\n    // =======================\n\n    $(function () {\n        $('[data-toggle=\"table\"]').bootstrapTable();\n    });\n\n}(jQuery);\n"
  },
  {
    "path": "src/main/webapp/static/js/bt-validate.js",
    "content": "/* =========================================================\n * bootstrap-validation.js \n * Original Idea: http:/www.newkou.org (Copyright 2012 Stefan Petre)\n * Updated by 不会飞的羊 (https://github.com/FateSheep/Validation-for-Bootstrap)\n * =========================================================\n *\n * Licensed under the  (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================= \n * 2013-4-12 ，由云海飞舞 （yunhaifeiwu修改，为了区别原作品，该组件更名为\n * bt-validate\n *\n * ========================================================= */\n!function($) {\n    var obj;\n    $.fn.validation = function(options) {\n        return this.each(function() {\n            globalOptions = $.extend({}, $.fn.validation.defaults, options);\n            obj=this;\n            reg(obj);\n            validationForm(obj);\n        });\n    };\n    \n    $.fn.validation.defaults = {\n        validRules : [\n            {name: 'required', validate: function(value) {return ($.trim(value) == '');}, defaultMsg: '请输入内容。'},\n            {name: 'number', validate: function(value) {return (!/^[0-9]\\d*$/.test(value));}, defaultMsg: '请输入数字。'},\n            {name: 'mail', validate: function(value) {return (!/^[a-zA-Z0-9]{1}([\\._a-zA-Z0-9-]+)(\\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+){1,3}$/.test(value));}, defaultMsg: '请输入邮箱地址。'},\n            {name: 'char', validate: function(value) {return (!/^[a-z\\_\\-A-Z]*$/.test(value));}, defaultMsg: '请输入英文字符。'},\n            {name: 'chinese', validate: function(value) {return (!/^[\\u4e00-\\u9fff]$/.test(value));}, defaultMsg: '请输入汉字。'}\n        ]\n    };\n\n    \n    \n    var formState = false, fieldState = false, wFocus = false, globalOptions = {};\n\n    var validateField = function(field, valid) { // 验证字段\n        var el = $(field), error = false, errorMsg = '',\n        crule=(el.attr('btvd-el')==undefined)?null:el.attr('btvd-el').split(' '),\n        msg = (el.attr('btvd-err')==undefined)?null:el.attr('btvd-err').split(' ');\n        if(crule){\n            if( ! eval(crule[0]).test(el.val()) ) {\n                error = true;\n                errorMsg =msg;\n            }\n            \n        } else {\n            for (i = 0; (i < valid.length) ; i++) {\n                var x = true, flag = valid[i];\n                if (flag.substr(0, 1) == '!') {\n                    x = false;\n                    flag = flag.substr(1, flag.length - 1);\n                }\n\n\n\n                var rules = globalOptions.validRules;\n                for (j = 0; j < rules.length; j++) {\n                    var rule = rules[j];\n                    if (flag == rule.name) {\n                        if (rule.validate.call(field, el.val()) == x) {\n                            error = true;\n                            errorMsg = (msg == null)?rule.defaultMsg:msg;\n                            break;\n                        }\n                    }\n                }\n\n                if (error) {break;}\n            }\n        }\n            \n\n        var controls = el.parent().find('a');\n        var len=controls.length;\n        \n        if (error) {\n             var cls= (el.attr('btvd-class')==undefined)?null:el.attr('btvd-class').split(' ');;\n             if ( len<=0) {                \n                el.after('  <a  style=\" visibility:hidden;\" data-placement=\"bottom\"  data-content=\"'+errorMsg+ '\"  data-toggle=\"popover\" href=\"#\" >aa</a> ');\n             };\n             el.next().popover(\"show\");  \n             var pop=el.parent().find(\".popover\"),pos=pop.offset();\n             pos.top=pos.top-el.next().height();\n             pop.offset(pos);             \n             \n             if ( cls  ) pop.addClass(\"btvdclass\");\n          \n        } else {\n            controls.popover(\"hide\"); \n\n        }\n        return !error;\n    };\n\n    var reg=function(obj){\n        $('input, textarea').each(function() {\n            var el = $(this), valid = (el.attr('btvd-type')==undefined)?null:el.attr('btvd-type').split(' ');\n            valid1 = (el.attr('btvd-el')==undefined)?null:el.attr('btvd-el').split(' ');\n            if (valid != null && valid.length > 0   || valid1 != null && valid1.length > 0 ) {                       \n\n                el.blur(function() { // 失去焦点时\n                    validateField(this, valid);\n                });\n            }\n        });\n    }\n\n    var validationForm = function(obj) { // 表单验证方法\n        $(obj).submit(function() { // 提交时验证\n            if (formState) { // 重复提交则返回\n                return false;\n            }\n            formState = true;\n            var validationError = false;\n            $('input, textarea', this).each(function () {\n                var el = $(this), valid = (el.attr('btvd-type')==undefined)?null:el.attr('btvd-type').split(' ');\n                if (valid != null && valid.length > 0) {\n                    if (!validateField(this, valid)) {\n                        if (wFocus == false) {\n                            scrollTo(0, el[0].offsetTop - 50);\n                            wFocus = true;\n                        }\n\n                        validationError = true;\n                    }\n                }\n            });\n\n            wFocus = false;\n            fieldState = true;\n\n            if (validationError) {\n                formState = false; \n                return false;\n            }\n\n            return true;\n        });\n\n\n    };\n\n}(window.jQuery);"
  },
  {
    "path": "src/main/webapp/static/js/dateFormat.js",
    "content": "/**\r\n  * format date\r\n  */\r\nDate.prototype.format = function(format) {\r\n\tvar o = {\r\n\t\t\"M+\" : this.getMonth() + 1, // month\r\n\t\t\"d+\" : this.getDate(), // day\r\n\t\t\"h+\" : this.getHours(), // hour\r\n\t\t\"m+\" : this.getMinutes(), // minute\r\n\t\t\"s+\" : this.getSeconds(), // second\r\n\t\t\"q+\" : Math.floor((this.getMonth() + 3) / 3), // quarter\r\n\t\t\"S\" : this.getMilliseconds()\r\n\t// millisecond\r\n\t};\r\n\tif (/(y+)/.test(format))\r\n\t\tformat = format.replace(RegExp.$1, (this.getFullYear() + \"\")\r\n\t\t\t\t.substr(4 - RegExp.$1.length));\r\n\tfor ( var k in o)\r\n\t\tif (new RegExp(\"(\" + k + \")\").test(format))\r\n\t\t\tformat = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]\r\n\t\t\t\t\t: (\"00\" + o[k]).substr((\"\" + o[k]).length));\r\n\treturn format;\r\n};\r\n\r\nfunction formatDatebox(value) {\r\n\tif (value == null || value == '') {\r\n\t\treturn '';\r\n\t}\r\n\r\n\tvar dt;\r\n\tif (value instanceof Date) {\r\n\t\tdt = value;\r\n\t} else {\r\n\t\tdt = new Date(value);\r\n\r\n\t}\r\n\treturn dt.format(\"yyyy-MM-dd hh:ss\"); //定义输出日期的格式\r\n}\r\n\r\nfunction formatGender(value){\r\n\tif(value==\"male\")\r\n\t\treturn \"<i class='fa fa-male blue'></i>\";\r\n\telse\r\n\t\treturn \"<i class='fa fa-female green'></i>\";\r\n}\r\n"
  },
  {
    "path": "src/main/webapp/static/js/flavr.js",
    "content": "eval(function(p,a,c,k,e,r){e=function(c){return(c<62?'':e(parseInt(c/62)))+((c=c%62)>35?String.fromCharCode(c+29):c.toString(36))};if('0'.replace(0,e)==0){while(c--)r[e(c)]=k[c];k=[function(e){return r[e]||e}];e=function(){return'([5-8M-Z]|[12]\\\\w)'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}(';(7($){\\'use strict\\';$.V=7(){M w=1e;M x=7(f){8 1r f===\\'7\\'};M y=7(f){8 1r f===\\'7\\'?f:O};M z=7(v){8 v===O};M A=7(v){8!z(v)};M B=7(v){8 1r v===\\'1V\\'};M C=7(v){8 1r v===\\'string\\'};M D=7(v){8 v!=O&&1r v===\\'object\\'};M E=7(o){8 0===o.length?1f:N};M F=7(s){8 s[0].toUpperCase()+s.substring(1)};5(E(16)){w.1l=7(){M a=16;M b=a[0],1g=O,1s=y(a[1]),1c=y(a[2]);5(C(a[1])){1g=a[1];1s=y(a[2]),1c=y(a[3])}M c=1H $.V({18:\\'1l\\',W:1g,P:b,17:1s,Z:1c});8 c};w.13=7(){M a=16;M b=a[0],1W=O,1g=O,1s=y(a[1]),1c=y(a[2]);5(C(a[1])){1W=a[1];1s=y(a[2]);1c=y(a[3])}5(C(a[2])){1g=a[2];1s=y(a[3]);1c=y(a[4])}M c=1H $.V({P:1W,W:1g,18:\\'13\\',13:{1X:b},17:1s,Z:1c});8 c};w.X=7(){M a=16;M b=O,1g=O,2k=a[0],1I=y(a[1]),1c=y(a[2]);5(C(a[1])){b=a[1];1I=y(a[2]);1c=y(a[3])}5(C(a[2])){1g=a[2];1I=y(a[3]);1c=y(a[4])}M c=1H $.V({P:b,W:1g,18:\\'X\\',X:{P:2k},1m:1I,Z:1c});8 c};8 w}M G,1n={};M H=16[1];M I=16[2];M J,$P,$W,$1x,$1t,$1u,$13,$X,1o;w.6={};w.1h={11:1f,1v:\\'center\\',18:\\'2l\\',13:{1X:O,S:O},X:{P:O,S:O},P:O,W:O,1J:O,1K:\\'images/icons/\\',1p:{OK:{1d:\\'OK\\',1i:\\'1C\\',S:O,12:O}},2n:\\'inline\\',1L:1f,1Y:N,1Z:3000,1M:1f,1D:O,20:N,2o:N,1q:1f,2p:\\'flipInX\\',2q:\\'1y\\',2r:7(){},2s:7(){},1w:7(){},1z:7(){},1N:7(){},17:O,1m:O,Z:O};M K={1d:O,1i:\\'1C\\',S:O,12:O};5(C(16[0])){1n.P=16[0];H=16[1];5(C(16[1])){1n.W=16[1];H=16[2]}}Q 5(D(16[0]))1n=16[0];w.6=$.1E({},w.1h,1n);5(w.6.1K.substr(-1)!=\\'/\\')w.6.1K+=\\'/\\';M L=7(){M g=$(\\'<U 19=\"V-21 1L\"></U>\\');M h=$(\\'<U 19=\"V-1M\"></U>\\');M i=$(\\'<U 19=\"V-fixer\"></U>\\');M j=$(\\'<U 19=\"V-1u\"></U>\\');M k=$(\\'<U 19=\"V-P\"></U>\\');M l=$(\\'<U 19=\"V-1J\"></U>\\');M m=$(\\'<img />\\');M n=$(\\'<h1 19=\"V-W\"></h1>\\');M o=$(\\'<U 19=\"V-1x\"></U>\\');M p=$(\\'<X 19=\"V-X\"></X>\\');M q=$(\\'<U 19=\"X-row\"></U>\\');M r=$(\\'<input 19=\"V-13\" />\\');M s=$(\\'<U 19=\"V-1t\"></U>\\');M t=$(\\'<a href=\"#\" 19=\"V-button\"></a>\\');5(!$.support.leadingWhitespace){G=\\'1O\\';g.S(\\'1O\\')}5(2u(\\'/*@cc_on !@*/N\\')&&(2v.documentMode===9)){G=\\'22\\';g.S(\\'22\\')}g.14(h).14(i.14(j));j.14(k.14(n).14(o)).14(s.S(w.6.2n));5(A(w.6.1v))g.S(w.6.1v);5(A(w.6.W))n.11(w.6.W);5(A(w.6.P))o.11(w.6.P);5(A(w.6.1J)){m.1F(\\'src\\',w.6.1K+w.6.1J);k.23(l.14(m))}5(N==w.6.11){o.11($(\\'<U></U>\\').1d(w.6.P).11());n.11($(\\'<U></U>\\').1d(w.6.W).11())}5(N==w.6.1L){g.1j(\\'1L\\');h.1G()}5(1f==w.6.2o)h.on(\\'2w\\',7(){w.T()});5(A(w.6.1D)){h.fadeTo(0,parseFloat(w.6.1D));5(\\'1O\\'==G)h.S(\\'1D-\\'+(w.6.1D.toFixed(1)*100))}5(N==w.6.1M){h.1G();5(\\'22\\'==G||\\'1O\\'==G)g.S(\\'ie-1M-N\\')}5(1f==w.6.20){$(2v).keydown(7(e){e=e||24.event;5(e.keyCode==27){M a=$(\\'25\\').26(\\'.V-21\\').last();M b=a.28(\\'V\\').29;5(1f==b.6.20&&a.hasClass(\\'1k\\'))b.T()}})}5(1f==w.6.1Y)2x(7(){w.T()},w.6.1Z);5(\\'1l\\'==w.6.18){w.1h.1p={1l:{1d:\\'2y\\',1i:\\'2a\\',S:O,12:7(){5(x(w.6.17)){M a=w.6.17.R(w,J);5(N!==a)w.T()}Q w.T();8 N}},2b:{1d:\\'2c\\',1i:\\'1C\\',S:O,12:7(){5(x(w.6.Z)){M a=w.6.Z.R(w,J);5(N!==a)w.T()}Q w.T();8 N}}};w.6=$.1E({},w.1h,1n)}5(\\'13\\'==w.6.18){$.1A(w.6.13,7(a,b){5(\\'1X\\'==a)r.val(b);Q 5(\\'S\\'==a)r.S(b);Q r.1F(a,b)});o.14(p.14(q.14(r)));p.on(\\'1Q\\',7(){5(x(w.6.17)){M a=w.6.17.R(w,J,r);5(N!==a)w.T()}Q w.T();8 N});w.1h.1p={1l:{1d:\\'2y\\',1i:\\'2a\\',S:O,12:7(){5(x(w.6.17)){M a=w.6.17.R(w,J,r);5(N!==a)w.T()}Q w.T();8 N}},2b:{1d:\\'2c\\',1i:\\'1C\\',S:O,12:7(){5(x(w.6.Z)){M a=w.6.Z.R(w,J,r);5(N!==a)w.T()}Q w.T();8 N}}};$13=r;w.6=$.1E({},w.1h,1n)}5(\\'X\\'==w.6.18){$.1A(w.6.X,7(a,b){5(\\'P\\'==a)p.11(b);Q 5(\\'S\\'==a)p.S(b);Q p.1F(a.1R(),b)});o.14(p);p.on(\\'1Q\\',7(e){5(x(w.6.1m)){M a=w.6.1m.R(w,J,p);5(N==a)8 N}});w.1h.1p={1Q:{1d:\\'Submit\\',1i:\\'2a\\',S:O,12:7(){p.1Q();8 N}},2b:{1d:\\'2c\\',1i:\\'1C\\',S:O,12:7(){5(x(w.6.Z)){M a=w.6.Z.R(w,J,p);5(N!==a)w.T()}Q w.T();8 N}}};$X=p;w.6=$.1E({},w.1h,1n)}5(w.6.1p!==N)$.1A(w.6.1p,7(c,d){M f={},Y=t.clone();5(D(1e)){M f=$.1E({},K,1e);$.1A(f,7(a,b){5(\\'1d\\'==a){5(z(b))Y.11(F(c));Q Y.11(b)}Q 5(\\'S\\'==a)Y.S(b);Q 5(\\'1i\\'==a)Y.S(b.1R());Q 5(\\'23\\'==a)Y.23(b);Q 5(\\'14\\'==a)Y.14(b);Q 5(\\'12\\'!==a)Y.1F(a.1R(),b)})}Q 5(x(1e)){Y.11(F(c));f.12=1e}Y.1F(\\'2z\\',\\'Y-\\'+c);Y.on(\\'2w\\',7(e){e.preventDefault();5(x(f.12)){M a=O;5(w.6.18==\\'2l\\')a=f.12.R(w,J,Y);Q 5(w.6.18==\\'1l\\')a=f.12.R(w,J,Y);Q 5(w.6.18==\\'13\\')a=f.12.R(w,J,$13,Y);Q 5(w.6.18==\\'X\\')a=f.12.R(w,J,$X,Y);5(N!==a)w.T()}Q 5(N!==f.12)w.T()}).appendTo(s)});g.28(\\'V\\',{29:w});$(\\'25\\').14(g);J=g;$P=k;$W=n;$1x=o;$1t=s;$1u=j;M u=w.6.2s.R(w,J);5(u!==N)w.2A()};w.2A=7(){5(\\'1k\\'==1o)8 w;5(z(w))8 O;M b=w.6.1q,2d=w.6.2p,1w=w.6.1w;1o=\\'1k\\';5(b){A(2d)&&w.15(2d);J.S(\\'1k\\').1S(7(){1w.R(w,J)})}Q{J.S(\\'1k\\').1S(0);1w.R(w,J)}2u(7(p,a,c,k,e,d){e=7(c){8 c};5(!\\'\\'.2B(/^/,String)){2C(c--){d[c]=k[c]||c}k=[7(e){8 d[e]}];e=7(){8\\'\\\\\\\\w+\\'};c=1};2C(c--){5(k[c]){p=p.2B(1H RegExp(\\'\\\\\\\\b\\'+e(c)+\\'\\\\\\\\b\\',\\'g\\'),k[c])}}8 p});8 w};w.2e=7(){5(\\'2f\\'==1o)8 w;M a=w.6.1N,2e=a.R(w,J),1q=w.6.1q;5(2e!==N){1o=\\'2f\\';5(1q)J.1y(2D,7(){$(1e).1j(\\'1k\\')});Q J.1y(0).1j(\\'1k\\')}8 w};w.T=7(){5(\\'2E\\'==1o)8 w;M a=w.6.1q,2g=w.6.2q,1z=w.6.1z,T=w.6.1z.R(w,J);5(T!==N){5(\\'2f\\'==1o){J.1G();w=O}1o=\\'2E\\';5(a){5(A(2g)){w.15(2g);J.1y(2D,7(){$(1e).1j(\\'1k\\').1G();w=O})}}Q{J.1j(\\'1k\\').1G();w=O}}8 w};w.2F=7(){$(\\'25\\').26(\\'.V-21\\').1A(7(){M a=$(1e).28(\\'V\\').29;a.T()});8 w};w.closeAll=7(){w.2F()};w.15=7(a,b){M c=\\'webkitAnimationEnd oanimationend msAnimationEnd animationend\\';$1u.S(a+\\' 1q\\');$1u.bind(c,7(){$1u.1j(a+\\' 1q\\');5(x(b))b.R(w,J);$1u.unbind(c)});8 w};w.2G=7(a){w.15(\\'2G\\',a);8 w};w.2H=7(a){w.15(\\'2H\\',a);8 w};w.2I=7(a){w.15(\\'2I\\',a);8 w};w.2J=7(a){w.15(\\'2J\\',a);8 w};w.2K=7(a){w.15(\\'2K\\',a);8 w};w.2L=7(a){w.15(\\'2L\\',a);8 w};w.2M=7(a){w.15(\\'2M\\',a);8 w};w.2N=7(a){w.15(\\'2N\\',a);8 w};w.getDefaults=7(){8 w.1h};w.getSettings=7(){8 w.6};w.1a=7(a,b){5(1r a===\\'1V\\')8 $P.2h();a=2O(a,10);5(b==N){$P.2h(a)}Q{$P.15({1a:a},2P,7(){5(x(b))b.R(w,J)})}8 w};w.1b=7(a,b){5(1r a===\\'1V\\')8 $P.1B()+$1t.1B();a=2O(a,10)-$1t.1B();5(b==N){$P.1B(a+$1t.1B())}Q{$P.15({1b:a},2P,7(){5(x(b))b.R(w,J)})}8 w};w.resize=7(a,b,c){J.1j(\\'1T\\');5(c==N)w.1a(a,N).1b(b,N);Q{w.1a(a).1b(b);5(x(c))c.R(w,J)}};w.revert=7(a){J.1j(\\'1T\\');5(N==a)$P.1U({1b:\\'\\',1a:\\'\\'});Q{M b=$P.1b(),2Q=$P.1a(),2R=$P.1U(\\'1b\\',\\'2S\\').1B(),2T=$P.1U(\\'1a\\',\\'2S\\').2h();$P.1b(b).1a(2Q);$P.15({\\'1a\\':2T},7(){$P.15({\\'1b\\':2R},7(){$P.1U({\\'1a\\':\\'\\',\\'1b\\':\\'\\'});5(x(a))a.R(w,J)})})}8 w};w.1T=7(a){M b=$(24).1a(),2i=$(24).1b();J.S(\\'1T\\');5(N==a)w.1a(b,N).1b(2i,N);Q{w.1a(b).1b(2i);5(x(a))a.R(w,J)}8 w};w.1v=7(a){5(B(a))8 w.6.1v;a=a.1R();J.1j(w.6.1v).S(a);w.6.1v=a;8 w};w.P=7(a,b){5(B(a))8 w.6.P;5(a==w.6.P)8 w;5(N==b)$1x.11(a);Q{$1x.1y(2j,7(){$1x.11(a).1S(2j)})}w.6.P=a;8 w};w.W=7(a,b){5(B(a))8 w.6.W;5(a==w.6.W)8 w;5(N==b)$W.11(a);Q{$W.1y(2j,7(){$W.11(a).1S()})}w.6.W=a};w.1p=7(){M b={};$.1A(w.6.1p,7(a){b[a]=$1t.26(\\'a[2z=Y-\\'+a+\\']\\')});8 b};w.1Y=7(b,c){5(B(b))b=w.6.1Z;2x(7(){5(x(c)){M a=c.R(w,J);5(a!==N)w.T()}Q w.T()},b)};w.1w=7(a){5(x(a))w.6.1w=a;8 w};w.1z=7(a){5(x(a))w.6.1z=a;8 w};w.1N=7(a){5(x(a))w.6.1N=a;8 w};w.17=7(a){M b=w.6.18;5(B(a)){5(x(w.6.17)){5(\\'1l\\'==b)w.6.17.R(w,J);5(\\'13\\'==b)w.6.17.R(w,J,$13)}8 w}5(x(a))w.6.17=a;8 w};w.1m=7(a){5(B(a)){5(x(w.6.1m))w.6.1m.R(w,J,$X);8 w}5(x(a))w.6.1m=a;8 w};w.Z=7(a){M b=w.6.18;5(B(a)){5(x(w.6.Z)){5(\\'1l\\'==b)w.6.Z.R(w,J);5(\\'13\\'==b)w.6.Z.R(w,J,$13);5(\\'X\\'==b)w.6.Z.R(w,J,$X)}8 w}5(x(a))w.6.Z=a;8 w};w.6.2r.R(w);L();5(x(H))H.R(w,J);8 1e}}(jQuery));',[],180,'|||||if|settings|function|return||||||||||||||||||||||||||||||||||||||||var|false|null|content|else|call|addClass|close|div|flavr|title|form|btn|onCancel||html|action|prompt|append|animate|arguments|onConfirm|dialog|class|width|height|_onCancel|text|this|true|_title|defaults|style|removeClass|shown|confirm|onSubmit|options|display|buttons|animated|typeof|_onConfirm|toolbar|outer|position|onShow|message|fadeOut|onClose|each|outerHeight|default|opacity|extend|attr|remove|new|_onSubmit|icon|iconPath|modal|overlay|onHide|msie8||submit|toLowerCase|fadeIn|fullscreen|css|undefined|_content|value|autoclose|timeout|closeEsc|container|msie9|prepend|window|body|find||data|instance|danger|cancel|Cancel|entrance|hide|hidden|closing|outerWidth|fheight|200|_htmlcontent|alert||buttonDisplay|closeOverlay|animateEntrance|animateClosing|onLoad|onBuild||eval|document|click|setTimeout|Confirm|rel|show|replace|while|400|closed|exit|bounce|shake|pulse|rubberBand|wobble|swing|flash|tada|parseInt|300|curWidth|autoHeight|auto|autoWidth'.split('|'),0,{}))"
  },
  {
    "path": "src/main/webapp/static/js/jquery.datetimepicker.js",
    "content": "/**\n * @preserve jQuery DateTimePicker plugin v2.1.9\n * @homepage http://xdsoft.net/jqplugins/datetimepicker/\n * (c) 2014, Chupurnov Valeriy.\n */\n(function($) {\n    //'use strict'\n    var default_options = {\n        i18n: {\n            ru: { // Russian\n                months: [\n                    'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'\n                ],\n                dayOfWeek: [\n                    \"Вск\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"\n                ]\n            },\n            en: { // English\n                months: [\n                    \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\n                ],\n                dayOfWeek: [\n                    \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"\n                ]\n            },\n            de: { // German\n                months: [\n                    'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'\n                ],\n                dayOfWeek: [\n                    \"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"\n                ]\n            },\n            nl: { // Dutch\n                months: [\n                    \"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"\n                ],\n                dayOfWeek: [\n                    \"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"\n                ]\n            },\n            tr: { // Turkish\n                months: [\n                    \"Ocak\", \"Şubat\", \"Mart\", \"Nisan\", \"Mayıs\", \"Haziran\", \"Temmuz\", \"Ağustos\", \"Eylül\", \"Ekim\", \"Kasım\", \"Aralık\"\n                ],\n                dayOfWeek: [\n                    \"Paz\", \"Pts\", \"Sal\", \"Çar\", \"Per\", \"Cum\", \"Cts\"\n                ]\n            },\n            fr: { //French\n                months: [\n                    \"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"\n                ],\n                dayOfWeek: [\n                    \"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"\n                ]\n            },\n            es: { // Spanish\n                months: [\n                    \"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"\n                ],\n                dayOfWeek: [\n                    \"Dom\", \"Lun\", \"Mar\", \"Mié\", \"Jue\", \"Vie\", \"Sáb\"\n                ]\n            },\n            th: { // Thai\n                months: [\n                    'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'\n                ],\n                dayOfWeek: [\n                    'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'\n                ]\n            },\n            pl: { // Polish\n                months: [\n                    \"styczeń\", \"luty\", \"marzec\", \"kwiecień\", \"maj\", \"czerwiec\", \"lipiec\", \"sierpień\", \"wrzesień\", \"październik\", \"listopad\", \"grudzień\"\n                ],\n                dayOfWeek: [\n                    \"nd\", \"pn\", \"wt\", \"śr\", \"cz\", \"pt\", \"sb\"\n                ]\n            },\n            pt: { // Portuguese\n                months: [\n                    \"Janeiro\", \"Fevereiro\", \"Março\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"\n                ],\n                dayOfWeek: [\n                    \"Dom\", \"Seg\", \"Ter\", \"Qua\", \"Qui\", \"Sex\", \"Sab\"\n                ]\n            },\n            ch: { // Simplified Chinese\n                months: [\n                    \"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n                ],\n                dayOfWeek: [\n                    \"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"\n                ]\n            },\n            se: { // Swedish\n                months: [\n                    \"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"\n                ],\n                dayOfWeek: [\n                    \"Sön\", \"Mån\", \"Tis\", \"Ons\", \"Tor\", \"Fre\", \"Lör\"\n                ]\n            },\n            kr: { // Korean\n                months: [\n                    \"1월\", \"2월\", \"3월\", \"4월\", \"5월\", \"6월\", \"7월\", \"8월\", \"9월\", \"10월\", \"11월\", \"12월\"\n                ],\n                dayOfWeek: [\n                    \"일\", \"월\", \"화\", \"수\", \"목\", \"금\", \"토\"\n                ]\n            },\n            it: { // Italian\n                months: [\n                    \"Gennaio\", \"Febbraio\", \"Marzo\", \"Aprile\", \"Maggio\", \"Giugno\", \"Luglio\", \"Agosto\", \"Settembre\", \"Ottobre\", \"Novembre\", \"Dicembre\"\n                ],\n                dayOfWeek: [\n                    \"Dom\", \"Lun\", \"Mar\", \"Mer\", \"Gio\", \"Ven\", \"Sab\"\n                ]\n            }\n        },\n        value: '',\n        lang: 'en',\n        format: 'Y/m/d H:i',\n        formatTime: 'H:i',\n        formatDate: 'Y/m/d',\n        step: 60,\n        closeOnDateSelect: 0,\n        closeOnWithoutClick: true,\n        timepicker: false,\n        datepicker: true,\n        minDate: false,\n        maxDate: false,\n        minTime: false,\n        maxTime: false,\n        allowTimes: [],\n        opened: false,\n        inline: false,\n        onSelectDate: function() {},\n        onSelectTime: function() {},\n        onChangeMonth: function() {},\n        onChangeDateTime: function() {},\n        onShow: function() {},\n        onClose: function() {},\n        onGenerate: function() {},\n        withoutCopyright: true,\n        inverseButton: false,\n        hours12: false,\n        next: 'xdsoft_next',\n        prev: 'xdsoft_prev',\n        dayOfWeekStart: 0,\n        timeHeightInTimePicker: 25,\n        timepickerScrollbar: true,\n        todayButton: true, // 2.1.0\n        defaultSelect: true, // 2.1.0\n        scrollMonth: true,\n        scrollTime: true,\n        scrollInput: true,\n        mask: false,\n        validateOnBlur: true,\n        allowBlank: false,\n        yearStart: 1950,\n        yearEnd: 2050,\n        style: '',\n        id: '',\n        roundTime: 'round', // ceil, floor\n        className: '',\n        weekends: [],\n        yearOffset: 0\n    };\n    // fix for ie8\n    if (!Array.prototype.indexOf) {\n        Array.prototype.indexOf = function(obj, start) {\n            for (var i = (start || 0), j = this.length; i < j; i++) {\n                if (this[i] === obj) {\n                    return i;\n                }\n            }\n            return -1;\n        }\n    };\n    $.fn.xdsoftScroller = function(_percent) {\n        return this.each(function() {\n            var timeboxparent = $(this);\n            if (!$(this).hasClass('xdsoft_scroller_box')) {\n                var pointerEventToXY = function(e) {\n                    var out = {\n                        x: 0,\n                        y: 0\n                    };\n                    if (e.type == 'touchstart' || e.type == 'touchmove' || e.type == 'touchend' || e.type == 'touchcancel') {\n                        var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];\n                        out.x = touch.pageX;\n                        out.y = touch.pageY;\n                    } else if (e.type == 'mousedown' || e.type == 'mouseup' || e.type == 'mousemove' || e.type == 'mouseover' || e.type == 'mouseout' || e.type == 'mouseenter' || e.type == 'mouseleave') {\n                        out.x = e.pageX;\n                        out.y = e.pageY;\n                    }\n                    return out;\n                },\n                    move = 0,\n                    timebox = timeboxparent.children().eq(0),\n                    parentHeight = timeboxparent[0].clientHeight,\n                    height = timebox[0].offsetHeight,\n                    scrollbar = $('<div class=\"xdsoft_scrollbar\"></div>'),\n                    scroller = $('<div class=\"xdsoft_scroller\"></div>'),\n                    maximumOffset = 100,\n                    start = false;\n\n                scrollbar.append(scroller);\n\n                timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);\n                scroller.on('mousedown.xdsoft_scroller', function(event) {\n                    if (!parentHeight)\n                        timeboxparent.trigger('resize_scroll.xdsoft_scroller', [_percent]);\n                    var pageY = event.pageY,\n                        top = parseInt(scroller.css('margin-top')),\n                        h1 = scrollbar[0].offsetHeight;\n                    $(document.body).addClass('xdsoft_noselect');\n                    $([document.body, window]).on('mouseup.xdsoft_scroller', function arguments_callee() {\n                        $([document.body, window]).off('mouseup.xdsoft_scroller', arguments_callee)\n                            .off('mousemove.xdsoft_scroller', move)\n                            .removeClass('xdsoft_noselect');\n                    });\n                    $(document.body).on('mousemove.xdsoft_scroller', move = function(event) {\n                        var offset = event.pageY - pageY + top;\n                        if (offset < 0)\n                            offset = 0;\n                        if (offset + scroller[0].offsetHeight > h1)\n                            offset = h1 - scroller[0].offsetHeight;\n                        timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);\n                    });\n                });\n\n                timeboxparent\n                    .on('scroll_element.xdsoft_scroller', function(event, percent) {\n                        if (!parentHeight)\n                            timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent, true]);\n                        percent = percent > 1 ? 1 : (percent < 0 || isNaN(percent)) ? 0 : percent;\n                        scroller.css('margin-top', maximumOffset * percent);\n                        timebox.css('marginTop', -parseInt((height - parentHeight) * percent))\n                    })\n                    .on('resize_scroll.xdsoft_scroller', function(event, _percent, noTriggerScroll) {\n                        parentHeight = timeboxparent[0].clientHeight;\n                        height = timebox[0].offsetHeight;\n                        var percent = parentHeight / height,\n                            sh = percent * scrollbar[0].offsetHeight;\n                        if (percent > 1)\n                            scroller.hide();\n                        else {\n                            scroller.show();\n                            scroller.css('height', parseInt(sh > 10 ? sh : 10));\n                            maximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;\n                            if (noTriggerScroll !== true)\n                                timeboxparent.trigger('scroll_element.xdsoft_scroller', [_percent ? _percent : Math.abs(parseInt(timebox.css('marginTop'))) / (height - parentHeight)]);\n                        }\n                    });\n                timeboxparent.mousewheel && timeboxparent.mousewheel(function(event, delta, deltaX, deltaY) {\n                    var top = Math.abs(parseInt(timebox.css('marginTop')));\n                    timeboxparent.trigger('scroll_element.xdsoft_scroller', [(top - delta * 20) / (height - parentHeight)]);\n                    event.stopPropagation();\n                    return false;\n                });\n                timeboxparent.on('touchstart', function(event) {\n                    start = pointerEventToXY(event);\n                });\n                timeboxparent.on('touchmove', function(event) {\n                    if (start) {\n                        var coord = pointerEventToXY(event),\n                            top = Math.abs(parseInt(timebox.css('marginTop')));\n                        timeboxparent.trigger('scroll_element.xdsoft_scroller', [(top - (coord.y - start.y)) / (height - parentHeight)]);\n                        event.stopPropagation();\n                        event.preventDefault();\n                    };\n                });\n                timeboxparent.on('touchend touchcancel', function(event) {\n                    start = false;\n                });\n            }\n            timeboxparent.trigger('resize_scroll.xdsoft_scroller', [_percent]);\n        });\n    };\n    $.fn.datetimepicker = function(opt) {\n        var KEY0 = 48,\n            KEY9 = 57,\n            _KEY0 = 96,\n            _KEY9 = 105,\n            CTRLKEY = 17,\n            DEL = 46,\n            ENTER = 13,\n            ESC = 27,\n            BACKSPACE = 8,\n            ARROWLEFT = 37,\n            ARROWUP = 38,\n            ARROWRIGHT = 39,\n            ARROWDOWN = 40,\n            TAB = 9,\n            F5 = 116,\n            AKEY = 65,\n            CKEY = 67,\n            VKEY = 86,\n            ZKEY = 90,\n            YKEY = 89,\n            ctrlDown = false,\n            options = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend({}, default_options),\n            createDateTimePicker = function(input) {\n                var datetimepicker = $('<div ' + (options.id ? 'id=\"' + options.id + '\"' : '') + ' ' + (options.style ? 'style=\"' + options.style + '\"' : '') + ' class=\"xdsoft_datetimepicker xdsoft_noselect ' + options.className + '\"></div>'),\n                    xdsoft_copyright = $('<div class=\"xdsoft_copyright\"><a target=\"_blank\" href=\"http://xdsoft.net/jqplugins/datetimepicker/\">xdsoft.net</a></div>'),\n                    datepicker = $('<div class=\"xdsoft_datepicker active\"></div>'),\n                    mounth_picker = $('<div class=\"xdsoft_mounthpicker\"><button type=\"button\" class=\"xdsoft_prev\"></button><button type=\"button\" class=\"xdsoft_today_button\"></button><div class=\"xdsoft_label xdsoft_month\"><span></span></div><div class=\"xdsoft_label xdsoft_year\"><span></span></div><button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n                    calendar = $('<div class=\"xdsoft_calendar\"></div>'),\n                    timepicker = $('<div class=\"xdsoft_timepicker active\"><button type=\"button\" class=\"xdsoft_prev\"></button><div class=\"xdsoft_time_box\"></div><button type=\"button\" class=\"xdsoft_next\"></button></div>'),\n                    timeboxparent = timepicker.find('.xdsoft_time_box').eq(0),\n                    timebox = $('<div class=\"xdsoft_time_variant\"></div>'),\n                    scrollbar = $('<div class=\"xdsoft_scrollbar\"></div>'),\n                    scroller = $('<div class=\"xdsoft_scroller\"></div>'),\n                    monthselect = $('<div class=\"xdsoft_select xdsoft_monthselect\"><div></div></div>'),\n                    yearselect = $('<div class=\"xdsoft_select xdsoft_yearselect\"><div></div></div>');\n\n                //constructor lego\n                mounth_picker\n                    .find('.xdsoft_month span')\n                    .after(monthselect);\n                mounth_picker\n                    .find('.xdsoft_year span')\n                    .after(yearselect);\n\n                mounth_picker\n                    .find('.xdsoft_month,.xdsoft_year')\n                    .on('mousedown.xdsoft', function(event) {\n                        mounth_picker\n                            .find('.xdsoft_select')\n                            .hide();\n                        var select = $(this).find('.xdsoft_select').eq(0),\n                            val = 0,\n                            top = 0;\n\n                        if (_xdsoft_datetime.currentTime)\n                            val = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();\n\n                        select.show();\n                        for (var items = select.find('div.xdsoft_option'), i = 0; i < items.length; i++) {\n                            if (items.eq(i).data('value') == val) {\n                                break;\n                            } else top += items[0].offsetHeight;\n                        }\n\n                        select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));\n                        event.stopPropagation();\n                        return false;\n                    });\n\n                mounth_picker\n                    .find('.xdsoft_select')\n                    .xdsoftScroller()\n                    .on('mousedown.xdsoft', function(event) {\n                        event.stopPropagation();\n                        event.preventDefault();\n                    })\n                    .on('mousedown.xdsoft', '.xdsoft_option', function(event) {\n                        if (_xdsoft_datetime && _xdsoft_datetime.currentTime)\n                            _xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));\n                        $(this).parent().parent().hide();\n                        datetimepicker.trigger('xchange.xdsoft');\n                        options.onChangeMonth && options.onChangeMonth.call && options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n                    });\n\n\n                // set options\n                datetimepicker.setOptions = function(_options) {\n                    options = $.extend(true, {}, options, _options);\n                    if ((options.open || options.opened) && (!options.inline)) {\n                        input.trigger('open.xdsoft');\n                    }\n\n                    if (options.inline) {\n                        datetimepicker.addClass('xdsoft_inline');\n                        input.after(datetimepicker).hide();\n                        datetimepicker.trigger('afterOpen.xdsoft');\n                    }\n\n                    if (options.inverseButton) {\n                        options.next = 'xdsoft_prev';\n                        options.prev = 'xdsoft_next';\n                    }\n\n                    if (options.datepicker)\n                        datepicker.addClass('active');\n                    else\n                        datepicker.removeClass('active');\n\n                    if (options.timepicker)\n                        timepicker.addClass('active');\n                    else\n                        timepicker.removeClass('active');\n\n                    if (options.value) {\n                        input && input.val && input.val(options.value);\n                        _xdsoft_datetime.setCurrentTime(options.value);\n                    }\n\n                    if (isNaN(options.dayOfWeekStart) || parseInt(options.dayOfWeekStart) < 0 || parseInt(options.dayOfWeekStart) > 6)\n                        options.dayOfWeekStart = 0;\n                    else\n                        options.dayOfWeekStart = parseInt(options.dayOfWeekStart);\n\n                    if (!options.timepickerScrollbar)\n                        scrollbar.hide();\n\n                    var tmpDate = [],\n                        timeOffset;\n                    if (options.minDate && (tmpDate = /^-(.*)$/.exec(options.minDate)) && (tmpDate = Date.parseDate(tmpDate[1], options.formatDate))) {\n                        timeOffset = tmpDate.getTime() + -1 * (tmpDate.getTimezoneOffset()) * 60000;\n                        options.minDate = new Date((_xdsoft_datetime.now()).getTime() - timeOffset).dateFormat(options.formatDate);\n                    }\n                    if (options.maxDate && (tmpDate = /^\\+(.*)$/.exec(options.maxDate)) && (tmpDate = Date.parseDate(tmpDate[1], options.formatDate))) {\n                        timeOffset = tmpDate.getTime() + -1 * (tmpDate.getTimezoneOffset()) * 60000;\n                        options.maxDate = new Date((_xdsoft_datetime.now()).getTime() + timeOffset).dateFormat(options.formatDate);\n                    }\n\n                    mounth_picker\n                        .find('.xdsoft_today_button')\n                        .css('visibility', !options.todayButton ? 'hidden' : 'visible');\n\n                    if (options.mask) {\n                        var e,\n                            getCaretPos = function(input) {\n                                try {\n                                    if (document.selection && document.selection.createRange) {\n                                        var range = document.selection.createRange();\n                                        return range.getBookmark().charCodeAt(2) - 2;\n                                    } else\n                                    if (input.setSelectionRange)\n                                        return input.selectionStart;\n                                } catch (e) {\n                                    return 0;\n                                }\n                            },\n                            setCaretPos = function(node, pos) {\n                                var node = (typeof node == \"string\" || node instanceof String) ? document.getElementById(node) : node;\n                                if (!node) {\n                                    return false;\n                                } else if (node.createTextRange) {\n                                    var textRange = node.createTextRange();\n                                    textRange.collapse(true);\n                                    textRange.moveEnd(pos);\n                                    textRange.moveStart(pos);\n                                    textRange.select();\n                                    return true;\n                                } else if (node.setSelectionRange) {\n                                    node.setSelectionRange(pos, pos);\n                                    return true;\n                                }\n                                return false;\n                            },\n                            isValidValue = function(mask, value) {\n                                var reg = mask\n                                    .replace(/([\\[\\]\\/\\{\\}\\(\\)\\-\\.\\+]{1})/g, '\\\\$1')\n                                    .replace(/_/g, '{digit+}')\n                                    .replace(/([0-9]{1})/g, '{digit$1}')\n                                    .replace(/\\{digit([0-9]{1})\\}/g, '[0-$1_]{1}')\n                                    .replace(/\\{digit[\\+]\\}/g, '[0-9_]{1}');\n                                return RegExp(reg).test(value);\n                            };\n                        input.off('keydown.xdsoft');\n                        switch (true) {\n                            case (options.mask === true):\n                                //options.mask = (new Date()).dateFormat( options.format );\n                                //options.mask = options.mask.replace(/[0-9]/g,'_');\n                                options.mask = options.format\n                                    .replace(/Y/g, '9999')\n                                    .replace(/F/g, '9999')\n                                    .replace(/m/g, '19')\n                                    .replace(/d/g, '39')\n                                    .replace(/H/g, '29')\n                                    .replace(/i/g, '59')\n                                    .replace(/s/g, '59');\n                            case ($.type(options.mask) == 'string'):\n                                if (!isValidValue(options.mask, input.val()))\n                                    input.val(options.mask.replace(/[0-9]/g, '_'));\n\n                                input.on('keydown.xdsoft', function(event) {\n                                    var val = this.value,\n                                        key = event.which;\n                                    switch (true) {\n                                        case ((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key == BACKSPACE || key == DEL):\n                                            var pos = getCaretPos(this),\n                                                digit = (key != BACKSPACE && key != DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';\n                                            if ((key == BACKSPACE || key == DEL) && pos) {\n                                                pos--;\n                                                digit = '_';\n                                            }\n                                            while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0)\n                                                pos += (key == BACKSPACE || key == DEL) ? -1 : 1;\n\n                                            val = val.substr(0, pos) + digit + val.substr(pos + 1);\n                                            if ($.trim(val) == '')\n                                                val = options.mask.replace(/[0-9]/g, '_');\n                                            else\n                                            if (pos == options.mask.length)\n                                                break;\n\n                                            pos += (key == BACKSPACE || key == DEL) ? 0 : 1;\n                                            while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0)\n                                                pos += (key == BACKSPACE || key == DEL) ? -1 : 1;\n                                            if (isValidValue(options.mask, val)) {\n                                                this.value = val;\n                                                setCaretPos(this, pos);\n                                            } else if ($.trim(val) == '')\n                                                this.value = options.mask.replace(/[0-9]/g, '_');\n                                            else {\n                                                input.trigger('error_input.xdsoft');\n                                            }\n                                            break;\n                                        case ( !! ~([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key)) && ctrlDown):\n                                        case !!~([ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key)):\n                                            return true;\n                                    }\n                                    event.preventDefault();\n                                    return false;\n                                });\n                                break;\n                        }\n                    }\n                    if (options.validateOnBlur) {\n                        input\n                            .off('blur.xdsoft')\n                            .on('blur.xdsoft', function() {\n                                if (options.allowBlank && !$.trim($(this).val()).length) {\n                                    $(this).val(null);\n                                    datetimepicker.data('xdsoft_datetime').empty();\n                                } else if (!Date.parseDate($(this).val(), options.format)) {\n                                    $(this).val((_xdsoft_datetime.now()).dateFormat(options.format));\n                                    datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n                                } else {\n                                    datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());\n                                }\n                                datetimepicker.trigger('changedatetime.xdsoft');\n                            });\n                    }\n                    options.dayOfWeekStartPrev = (options.dayOfWeekStart == 0) ? 6 : options.dayOfWeekStart - 1;\n                    datetimepicker\n                        .trigger('xchange.xdsoft');\n                };\n\n                datetimepicker\n                    .data('options', options)\n                    .on('mousedown.xdsoft', function(event) {\n                        event.stopPropagation();\n                        event.preventDefault();\n                        yearselect.hide();\n                        monthselect.hide();\n                        return false;\n                    });\n\n                var scroll_element = timepicker.find('.xdsoft_time_box');\n                scroll_element.append(timebox);\n                scroll_element.xdsoftScroller();\n                datetimepicker.on('afterOpen.xdsoft', function() {\n                    scroll_element.xdsoftScroller();\n                });\n\n                datetimepicker\n                    .append(datepicker)\n                    .append(timepicker);\n\n                if (options.withoutCopyright !== true)\n                    datetimepicker\n                        .append(xdsoft_copyright);\n\n                datepicker\n                    .append(mounth_picker)\n                    .append(calendar);\n\n                $('body').append(datetimepicker);\n\n                var _xdsoft_datetime = new function() {\n                        var _this = this;\n                        _this.now = function() {\n                            var d = new Date();\n                            if (options.yearOffset)\n                                d.setFullYear(d.getFullYear() + options.yearOffset);\n                            return d;\n                        };\n\n                        _this.currentTime = this.now();\n                        _this.isValidDate = function(d) {\n                            if (Object.prototype.toString.call(d) !== \"[object Date]\")\n                                return false;\n                            return !isNaN(d.getTime());\n                        };\n\n                        _this.setCurrentTime = function(dTime) {\n                            _this.currentTime = (typeof dTime == 'string') ? _this.strtodatetime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();\n                            datetimepicker.trigger('xchange.xdsoft');\n                        };\n\n                        _this.empty = function() {\n                            _this.currentTime = null;\n                        };\n\n                        _this.getCurrentTime = function(dTime) {\n                            return _this.currentTime;\n                        };\n\n                        _this.nextMonth = function() {\n                            var month = _this.currentTime.getMonth() + 1;\n                            if (month == 12) {\n                                _this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);\n                                month = 0;\n                            }\n                            _this.currentTime.setDate(\n                                Math.min(\n                                    Date.daysInMonth[month],\n                                    _this.currentTime.getDate()\n                                )\n                            )\n                            _this.currentTime.setMonth(month);\n                            options.onChangeMonth && options.onChangeMonth.call && options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n                            datetimepicker.trigger('xchange.xdsoft');\n                            return month;\n                        };\n\n                        _this.prevMonth = function() {\n                            var month = _this.currentTime.getMonth() - 1;\n                            if (month == -1) {\n                                _this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);\n                                month = 11;\n                            }\n                            _this.currentTime.setDate(\n                                Math.min(\n                                    Date.daysInMonth[month],\n                                    _this.currentTime.getDate()\n                                )\n                            )\n                            _this.currentTime.setMonth(month);\n                            options.onChangeMonth && options.onChangeMonth.call && options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n                            datetimepicker.trigger('xchange.xdsoft');\n                            return month;\n                        };\n\n                        _this.strtodatetime = function(sDateTime) {\n                            var currentTime = sDateTime ? Date.parseDate(sDateTime, options.format) : _this.now();\n                            if (!_this.isValidDate(currentTime))\n                                currentTime = _this.now();\n                            return currentTime;\n                        };\n\n                        _this.strtodate = function(sDate) {\n                            var currentTime = sDate ? Date.parseDate(sDate, options.formatDate) : _this.now();\n                            if (!_this.isValidDate(currentTime))\n                                currentTime = _this.now();\n                            return currentTime;\n                        };\n\n                        _this.strtotime = function(sTime) {\n                            var currentTime = sTime ? Date.parseDate(sTime, options.formatTime) : _this.now();\n                            if (!_this.isValidDate(currentTime))\n                                currentTime = _this.now();\n                            return currentTime;\n                        };\n\n                        _this.str = function() {\n                            return _this.currentTime.dateFormat(options.format);\n                        };\n                    };\n                mounth_picker\n                    .find('.xdsoft_today_button')\n                    .on('mousedown.xdsoft', function() {\n                        datetimepicker.data('changed', true);\n                        _xdsoft_datetime.setCurrentTime(0);\n                        datetimepicker.trigger('afterOpen.xdsoft');\n                    }).on('dblclick.xdsoft', function() {\n                        input.val(_xdsoft_datetime.str());\n                        datetimepicker.trigger('close.xdsoft');\n                    });\n                mounth_picker\n                    .find('.xdsoft_prev,.xdsoft_next')\n                    .on('mousedown.xdsoft', function() {\n                        var $this = $(this),\n                            timer = 0,\n                            stop = false;\n\n                        (function arguments_callee1(v) {\n                            var month = _xdsoft_datetime.currentTime.getMonth();\n                            if ($this.hasClass(options.next)) {\n                                _xdsoft_datetime.nextMonth();\n                            } else if ($this.hasClass(options.prev)) {\n                                _xdsoft_datetime.prevMonth();\n                            }!stop && (timer = setTimeout(arguments_callee1, v ? v : 100));\n                        })(500);\n\n                        $([document.body, window]).on('mouseup.xdsoft', function arguments_callee2() {\n                            clearTimeout(timer);\n                            stop = true;\n                            $([document.body, window]).off('mouseup.xdsoft', arguments_callee2);\n                        });\n                    });\n\n                timepicker\n                    .find('.xdsoft_prev,.xdsoft_next')\n                    .on('mousedown.xdsoft', function() {\n                        var $this = $(this),\n                            timer = 0,\n                            stop = false,\n                            period = 110;\n                        (function arguments_callee4(v) {\n                            var pheight = timeboxparent[0].clientHeight,\n                                height = timebox[0].offsetHeight,\n                                top = Math.abs(parseInt(timebox.css('marginTop')));\n                            if ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {\n                                timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px')\n                            } else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {\n                                timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px')\n                            }\n                            timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop')) / (height - pheight))]);\n                            period = (period > 10) ? 10 : period - 10;\n                            !stop && (timer = setTimeout(arguments_callee4, v ? v : period));\n                        })(500);\n                        $([document.body, window]).on('mouseup.xdsoft', function arguments_callee5() {\n                            clearTimeout(timer);\n                            stop = true;\n                            $([document.body, window])\n                                .off('mouseup.xdsoft', arguments_callee5);\n                        });\n                    });\n\n                // base handler - generating a calendar and timepicker\n                datetimepicker\n                    .on('xchange.xdsoft', function(event) {\n                        var table = '',\n                            start = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),\n                            i = 0,\n                            today = _xdsoft_datetime.now();\n                        while (start.getDay() != options.dayOfWeekStart)\n                            start.setDate(start.getDate() - 1);\n\n                        //generate calendar\n                        table += '<table><thead><tr>';\n\n                        // days\n                        for (var j = 0; j < 7; j++) {\n                            table += '<th>' + options.i18n[options.lang].dayOfWeek[(j + options.dayOfWeekStart) > 6 ? 0 : j + options.dayOfWeekStart] + '</th>';\n                        }\n\n                        table += '</tr></thead>';\n                        table += '<tbody><tr>';\n                        var maxDate = false,\n                            minDate = false;\n                        if (options.maxDate !== false) {\n                            maxDate = _xdsoft_datetime.strtodate(options.maxDate);\n                            maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);\n                        }\n                        if (options.minDate !== false) {\n                            minDate = _xdsoft_datetime.strtodate(options.minDate);\n                            minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());\n                        }\n                        var d, y, m, classes = [];\n                        while (i < _xdsoft_datetime.currentTime.getDaysInMonth() || start.getDay() != options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() == start.getMonth()) {\n                            classes = [];\n                            i++;\n\n                            d = start.getDate();\n                            y = start.getFullYear();\n                            m = start.getMonth();\n\n                            classes.push('xdsoft_date');\n\n                            if ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate)) {\n                                classes.push('xdsoft_disabled');\n                            }\n\n                            if (_xdsoft_datetime.currentTime.getMonth() != m) classes.push('xdsoft_other_month');\n\n                            if ((options.defaultSelect || datetimepicker.data('changed')) && _xdsoft_datetime.currentTime.dateFormat('d.m.Y') == start.dateFormat('d.m.Y')) {\n                                classes.push('xdsoft_current');\n                            }\n\n                            if (today.dateFormat('d.m.Y') == start.dateFormat('d.m.Y')) {\n                                classes.push('xdsoft_today');\n                            }\n\n                            if (start.getDay() == 0 || start.getDay() == 6 || ~options.weekends.indexOf(start.dateFormat('d.m.Y'))) {\n                                classes.push('xdsoft_weekend');\n                            }\n\n                            table += '<td data-date=\"' + d + '\" data-month=\"' + m + '\" data-year=\"' + y + '\"' + ' class=\"xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '\">' +\n                                '<div>' + d + '</div>' +\n                                '</td>';\n\n                            if (start.getDay() == options.dayOfWeekStartPrev) {\n                                table += '</tr>';\n                            }\n\n                            start.setDate(d + 1);\n                        }\n                        table += '</tbody></table>';\n\n                        calendar.html(table);\n\n                        mounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[options.lang].months[_xdsoft_datetime.currentTime.getMonth()]);\n                        mounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());\n\n                        // generate timebox\n                        var time = '',\n                            h = '',\n                            m = '',\n                            line_time = function line_time(h, m) {\n                                var now = _xdsoft_datetime.now();\n                                now.setHours(h);\n                                h = parseInt(now.getHours());\n                                now.setMinutes(m);\n                                m = parseInt(now.getMinutes());\n\n                                classes = [];\n                                if ((options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime()))\n                                    classes.push('xdsoft_disabled');\n                                if ((options.defaultSelect || datetimepicker.data('changed')) && parseInt(_xdsoft_datetime.currentTime.getHours()) == parseInt(h) && (options.step > 59 || Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step == parseInt(m)))\n                                    classes.push('xdsoft_current');\n                                if (parseInt(today.getHours()) == parseInt(h) && parseInt(today.getMinutes()) == parseInt(m))\n                                    classes.push('xdsoft_today');\n                                time += '<div class=\"xdsoft_time ' + classes.join(' ') + '\" data-hour=\"' + h + '\" data-minute=\"' + m + '\">' + now.dateFormat(options.formatTime) + '</div>';\n                            };\n\n                        if (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {\n                            for (var i = 0, j = 0; i < (options.hours12 ? 12 : 24); i++) {\n                                for (j = 0; j < 60; j += options.step) {\n                                    h = (i < 10 ? '0' : '') + i;\n                                    m = (j < 10 ? '0' : '') + j;\n                                    line_time(h, m);\n                                }\n                            }\n                        } else {\n                            for (var i = 0; i < options.allowTimes.length; i++) {\n                                h = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();\n                                m = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();\n                                line_time(h, m);\n                            }\n                        }\n\n                        timebox.html(time);\n\n                        var opt = '',\n                            i = 0;\n\n                        for (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i++) {\n                            opt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() == i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + i + '</div>';\n                        }\n                        yearselect.children().eq(0)\n                            .html(opt);\n\n                        for (i = 0, opt = ''; i <= 11; i++) {\n                            opt += '<div class=\"xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() == i ? 'xdsoft_current' : '') + '\" data-value=\"' + i + '\">' + options.i18n[options.lang].months[i] + '</div>';\n                        }\n                        monthselect.children().eq(0).html(opt);\n                        $(this).trigger('generate.xdsoft');\n                        event.stopPropagation();\n                    })\n                    .on('afterOpen.xdsoft', function() {\n                        if (options.timepicker && timebox.find('.xdsoft_current').length) {\n                            var pheight = timeboxparent[0].clientHeight,\n                                height = timebox[0].offsetHeight,\n                                top = timebox.find('.xdsoft_current').index() * options.timeHeightInTimePicker + 1;\n                            if ((height - pheight) < top)\n                                top = height - pheight;\n                            timebox.css('marginTop', '-' + parseInt(top) + 'px');\n                            timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top) / (height - pheight)]);\n                        }\n                    });\n                var timerclick = 0;\n                calendar\n                    .on('click.xdsoft', 'td', function() {\n                        timerclick++;\n                        var $this = $(this),\n                            currentTime = _xdsoft_datetime.currentTime;\n                        if ($this.hasClass('xdsoft_disabled'))\n                            return false;\n\n                        currentTime.setFullYear($this.data('year'));\n                        currentTime.setMonth($this.data('month'));\n                        currentTime.setDate($this.data('date'));\n                        datetimepicker.trigger('select.xdsoft', [currentTime]);\n\n                        input.val(_xdsoft_datetime.str());\n                        if ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === 0 && !options.timepicker))) && !options.inline) {\n                            datetimepicker.trigger('close.xdsoft');\n                        }\n\n                        if (options.onSelectDate && options.onSelectDate.call) {\n                            options.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n                        }\n\n                        datetimepicker.data('changed', true);\n                        datetimepicker.trigger('xchange.xdsoft');\n                        datetimepicker.trigger('changedatetime.xdsoft');\n                        setTimeout(function() {\n                            timerclick = 0;\n                        }, 200);\n                    });\n\n                timebox\n                    .on('click.xdsoft', 'div', function() {\n                        var $this = $(this),\n                            currentTime = _xdsoft_datetime.currentTime;\n                        if ($this.hasClass('xdsoft_disabled'))\n                            return false;\n                        currentTime.setHours($this.data('hour'));\n                        currentTime.setMinutes($this.data('minute'));\n                        datetimepicker.trigger('select.xdsoft', [currentTime]);\n\n                        datetimepicker.data('input').val(_xdsoft_datetime.str());\n\n                        !options.inline && datetimepicker.trigger('close.xdsoft');\n\n                        if (options.onSelectTime && options.onSelectTime.call) {\n                            options.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n                        }\n                        datetimepicker.data('changed', true);\n                        datetimepicker.trigger('xchange.xdsoft');\n                        datetimepicker.trigger('changedatetime.xdsoft');\n                    });\n\n                datetimepicker.mousewheel && datepicker.mousewheel(function(event, delta, deltaX, deltaY) {\n                    if (!options.scrollMonth)\n                        return true;\n                    if (delta < 0)\n                        _xdsoft_datetime.nextMonth();\n                    else\n                        _xdsoft_datetime.prevMonth();\n                    return false;\n                });\n\n                datetimepicker.mousewheel && timeboxparent.unmousewheel().mousewheel(function(event, delta, deltaX, deltaY) {\n                    if (!options.scrollTime)\n                        return true;\n                    var pheight = timeboxparent[0].clientHeight,\n                        height = timebox[0].offsetHeight,\n                        top = Math.abs(parseInt(timebox.css('marginTop'))),\n                        fl = true;\n                    if (delta < 0 && (height - pheight) - options.timeHeightInTimePicker >= top) {\n                        timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');\n                        fl = false;\n                    } else if (delta > 0 && top - options.timeHeightInTimePicker >= 0) {\n                        timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');\n                        fl = false;\n                    }\n                    timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop')) / (height - pheight))]);\n                    event.stopPropagation();\n                    return fl;\n                });\n\n                datetimepicker\n                    .on('changedatetime.xdsoft', function() {\n                        if (options.onChangeDateTime && options.onChangeDateTime.call)\n                            options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n                    })\n                    .on('generate.xdsoft', function() {\n                        if (options.onGenerate && options.onGenerate.call)\n                            options.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n                    });\n\n                var current_time_index = 0;\n                input.mousewheel && input.mousewheel(function(event, delta, deltaX, deltaY) {\n                    if (!options.scrollInput)\n                        return true;\n                    if (!options.datepicker && options.timepicker) {\n                        current_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;\n                        if (current_time_index + delta >= 0 && current_time_index + delta < timebox.children().length)\n                            current_time_index += delta;\n                        timebox.children().eq(current_time_index).length && timebox.children().eq(current_time_index).trigger('mousedown');\n                        return false;\n                    } else if (options.datepicker && !options.timepicker) {\n                        datepicker.trigger(event, [delta, deltaX, deltaY]);\n                        input.val && input.val(_xdsoft_datetime.str());\n                        datetimepicker.trigger('changedatetime.xdsoft');\n                        return false;\n                    }\n                });\n                var setPos = function() {\n                    var offset = datetimepicker.data('input').offset(),\n                        top = offset.top + datetimepicker.data('input')[0].offsetHeight - 1,\n                        left = offset.left;\n                    if (top + datetimepicker[0].offsetHeight > $(window).height() + $(window).scrollTop())\n                        top = offset.top - datetimepicker[0].offsetHeight + 1;\n                    if (left + datetimepicker[0].offsetWidth > $(window).width())\n                        left = offset.left - datetimepicker[0].offsetWidth + datetimepicker.data('input')[0].offsetWidth;\n                    datetimepicker.css({\n                        left: left,\n                        top: top\n                    });\n                };\n                datetimepicker\n                    .on('open.xdsoft', function() {\n                        var onShow = true;\n                        if (options.onShow && options.onShow.call) {\n                            onShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n                        }\n                        if (onShow !== false) {\n                            datetimepicker.show();\n                            datetimepicker.trigger('afterOpen.xdsoft');\n                            setPos();\n                            $(window)\n                                .off('resize.xdsoft', setPos)\n                                .on('resize.xdsoft', setPos);\n\n                            if (options.closeOnWithoutClick) {\n                                $([document.body, window]).on('mousedown.xdsoft', function arguments_callee6() {\n                                    datetimepicker.trigger('close.xdsoft');\n                                    $([document.body, window]).off('mousedown.xdsoft', arguments_callee6);\n                                });\n                            }\n                        }\n                    })\n                    .on('close.xdsoft', function(event) {\n                        var onClose = true;\n                        if (options.onClose && options.onClose.call) {\n                            onClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));\n                        }\n                        if (onClose !== false && !options.opened && !options.inline) {\n                            datetimepicker.hide();\n                        }\n                        event.stopPropagation();\n                    })\n                    .data('input', input);\n\n                var timer = 0,\n                    timer1 = 0;\n\n                datetimepicker.data('xdsoft_datetime', _xdsoft_datetime);\n                datetimepicker.setOptions(options);\n\n                var ct = options.value ? options.value : (input && input.val && input.val()) ? input.val() : '';\n                if (ct && _xdsoft_datetime.isValidDate(ct = Date.parseDate(ct, options.format))) {\n                    datetimepicker.data('changed', true);\n                } else\n                    ct = '';\n\n                _xdsoft_datetime.setCurrentTime(ct ? ct : 0);\n\n                datetimepicker.trigger('afterOpen.xdsoft');\n\n                input\n                    .data('xdsoft_datetimepicker', datetimepicker)\n                    .on('open.xdsoft focusin.xdsoft mousedown.xdsoft', function(event) {\n                        if (input.is(':disabled') || input.is(':hidden') || !input.is(':visible'))\n                            return;\n                        clearTimeout(timer);\n                        timer = setTimeout(function() {\n                            if (input.is(':disabled') || input.is(':hidden') || !input.is(':visible'))\n                                return;\n                            _xdsoft_datetime.setCurrentTime((input && input.val && input.val()) ? input.val() : 0);\n                            datetimepicker.trigger('open.xdsoft');\n                        }, 100);\n                    })\n                    .on('keydown.xdsoft', function(event) {\n                        var val = this.value,\n                            key = event.which;\n                        switch (true) {\n                            case !!~([ENTER].indexOf(key)):\n                                var elementSelector = $(\"input:visible,textarea:visible\");\n                                datetimepicker.trigger('close.xdsoft');\n                                elementSelector.eq(elementSelector.index(this) + 1).focus();\n                                return false;\n                            case !!~[TAB].indexOf(key):\n                                datetimepicker.trigger('close.xdsoft');\n                                return true;\n                        }\n                    });\n            },\n            destroyDateTimePicker = function(input) {\n                var datetimepicker = input.data('xdsoft_datetimepicker');\n                if (datetimepicker) {\n                    datetimepicker.data('xdsoft_datetime', null);\n                    datetimepicker.remove();\n                    input\n                        .data('xdsoft_datetimepicker', null)\n                        .off('open.xdsoft focusin.xdsoft focusout.xdsoft mousedown.xdsoft blur.xdsoft keydown.xdsoft');\n                    $(window).off('resize.xdsoft');\n                    $([window, document.body]).off('mousedown.xdsoft');\n                    input.unmousewheel && input.unmousewheel();\n                }\n            };\n        $(document)\n            .off('keydown.xdsoftctrl keyup.xdsoftctrl')\n            .on('keydown.xdsoftctrl', function(e) {\n                if (e.keyCode == CTRLKEY)\n                    ctrlDown = true;\n            })\n            .on('keyup.xdsoftctrl', function(e) {\n                if (e.keyCode == CTRLKEY)\n                    ctrlDown = false;\n            });\n        return this.each(function() {\n            var datetimepicker;\n            if (datetimepicker = $(this).data('xdsoft_datetimepicker')) {\n                if ($.type(opt) === 'string') {\n                    switch (opt) {\n                        case 'show':\n                            $(this).select().focus();\n                            datetimepicker.trigger('open.xdsoft');\n                            break;\n                        case 'hide':\n                            datetimepicker.trigger('close.xdsoft');\n                            break;\n                        case 'destroy':\n                            destroyDateTimePicker($(this));\n                            break;\n                        case 'reset':\n                            this.value = this.defaultValue;\n                            if (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(Date.parseDate(this.value, options.format)))\n                                datetimepicker.data('changed', false);\n                            datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);\n                            break;\n                    }\n                } else {\n                    datetimepicker\n                        .setOptions(opt);\n                }\n                return 0;\n            } else\n                ($.type(opt) !== 'string') && createDateTimePicker($(this));\n        });\n    };\n})(jQuery);\n\n//http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/\n/*\n * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>\n *\n * This program is free software; you can redistribute it and/or modify it\n * under the terms of the GNU Lesser General Public License as published by the\n * Free Software Foundation, version 2.1.\n *\n * This program is distributed in the hope that it will be useful, but WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more\n * details.\n */\nDate.parseFunctions = {\n    count: 0\n};\nDate.parseRegexes = [];\nDate.formatFunctions = {\n    count: 0\n};\nDate.prototype.dateFormat = function(format) {\n    if (Date.formatFunctions[format] == null) {\n        Date.createNewFormat(format)\n    }\n    var func = Date.formatFunctions[format];\n    return this[func]()\n};\nDate.createNewFormat = function(format) {\n    var funcName = \"format\" + Date.formatFunctions.count++;\n    Date.formatFunctions[format] = funcName;\n    var code = \"Date.prototype.\" + funcName + \" = function() {return \";\n    var special = false;\n    var ch = '';\n    for (var i = 0; i < format.length; ++i) {\n        ch = format.charAt(i);\n        if (!special && ch == \"\\\\\") {\n            special = true\n        } else if (special) {\n            special = false;\n            code += \"'\" + String.escape(ch) + \"' + \"\n        } else {\n            code += Date.getFormatCode(ch)\n        }\n    }\n    eval(code.substring(0, code.length - 3) + \";}\")\n};\nDate.getFormatCode = function(character) {\n    switch (character) {\n        case \"d\":\n            return \"String.leftPad(this.getDate(), 2, '0') + \";\n        case \"D\":\n            return \"Date.dayNames[this.getDay()].substring(0, 3) + \";\n        case \"j\":\n            return \"this.getDate() + \";\n        case \"l\":\n            return \"Date.dayNames[this.getDay()] + \";\n        case \"S\":\n            return \"this.getSuffix() + \";\n        case \"w\":\n            return \"this.getDay() + \";\n        case \"z\":\n            return \"this.getDayOfYear() + \";\n        case \"W\":\n            return \"this.getWeekOfYear() + \";\n        case \"F\":\n            return \"Date.monthNames[this.getMonth()] + \";\n        case \"m\":\n            return \"String.leftPad(this.getMonth() + 1, 2, '0') + \";\n        case \"M\":\n            return \"Date.monthNames[this.getMonth()].substring(0, 3) + \";\n        case \"n\":\n            return \"(this.getMonth() + 1) + \";\n        case \"t\":\n            return \"this.getDaysInMonth() + \";\n        case \"L\":\n            return \"(this.isLeapYear() ? 1 : 0) + \";\n        case \"Y\":\n            return \"this.getFullYear() + \";\n        case \"y\":\n            return \"('' + this.getFullYear()).substring(2, 4) + \";\n        case \"a\":\n            return \"(this.getHours() < 12 ? 'am' : 'pm') + \";\n        case \"A\":\n            return \"(this.getHours() < 12 ? 'AM' : 'PM') + \";\n        case \"g\":\n            return \"((this.getHours() %12) ? this.getHours() % 12 : 12) + \";\n        case \"G\":\n            return \"this.getHours() + \";\n        case \"h\":\n            return \"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + \";\n        case \"H\":\n            return \"String.leftPad(this.getHours(), 2, '0') + \";\n        case \"i\":\n            return \"String.leftPad(this.getMinutes(), 2, '0') + \";\n        case \"s\":\n            return \"String.leftPad(this.getSeconds(), 2, '0') + \";\n        case \"O\":\n            return \"this.getGMTOffset() + \";\n        case \"T\":\n            return \"this.getTimezone() + \";\n        case \"Z\":\n            return \"(this.getTimezoneOffset() * -60) + \";\n        default:\n            return \"'\" + String.escape(character) + \"' + \"\n    }\n};\nDate.parseDate = function(input, format) {\n    if (Date.parseFunctions[format] == null) {\n        Date.createParser(format)\n    }\n    var func = Date.parseFunctions[format];\n    return Date[func](input)\n};\nDate.createParser = function(format) {\n    var funcName = \"parse\" + Date.parseFunctions.count++;\n    var regexNum = Date.parseRegexes.length;\n    var currentGroup = 1;\n    Date.parseFunctions[format] = funcName;\n    var code = \"Date.\" + funcName + \" = function(input) {\\n\" + \"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1;\\n\" + \"var d = new Date();\\n\" + \"y = d.getFullYear();\\n\" + \"m = d.getMonth();\\n\" + \"d = d.getDate();\\n\" + \"var results = input.match(Date.parseRegexes[\" + regexNum + \"]);\\n\" + \"if (results && results.length > 0) {\";\n    var regex = \"\";\n    var special = false;\n    var ch = '';\n    for (var i = 0; i < format.length; ++i) {\n        ch = format.charAt(i);\n        if (!special && ch == \"\\\\\") {\n            special = true\n        } else if (special) {\n            special = false;\n            regex += String.escape(ch)\n        } else {\n            obj = Date.formatCodeToRegex(ch, currentGroup);\n            currentGroup += obj.g;\n            regex += obj.s;\n            if (obj.g && obj.c) {\n                code += obj.c\n            }\n        }\n    }\n    code += \"if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\\n\" + \"{return new Date(y, m, d, h, i, s);}\\n\" + \"else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\\n\" + \"{return new Date(y, m, d, h, i);}\\n\" + \"else if (y > 0 && m >= 0 && d > 0 && h >= 0)\\n\" + \"{return new Date(y, m, d, h);}\\n\" + \"else if (y > 0 && m >= 0 && d > 0)\\n\" + \"{return new Date(y, m, d);}\\n\" + \"else if (y > 0 && m >= 0)\\n\" + \"{return new Date(y, m);}\\n\" + \"else if (y > 0)\\n\" + \"{return new Date(y);}\\n\" + \"}return null;}\";\n    Date.parseRegexes[regexNum] = new RegExp(\"^\" + regex + \"$\");\n    eval(code)\n};\nDate.formatCodeToRegex = function(character, currentGroup) {\n    switch (character) {\n        case \"D\":\n            return {\n                g: 0,\n                c: null,\n                s: \"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\"\n            };\n        case \"j\":\n        case \"d\":\n            return {\n                g: 1,\n                c: \"d = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n                s: \"(\\\\d{1,2})\"\n            };\n        case \"l\":\n            return {\n                g: 0,\n                c: null,\n                s: \"(?:\" + Date.dayNames.join(\"|\") + \")\"\n            };\n        case \"S\":\n            return {\n                g: 0,\n                c: null,\n                s: \"(?:st|nd|rd|th)\"\n            };\n        case \"w\":\n            return {\n                g: 0,\n                c: null,\n                s: \"\\\\d\"\n            };\n        case \"z\":\n            return {\n                g: 0,\n                c: null,\n                s: \"(?:\\\\d{1,3})\"\n            };\n        case \"W\":\n            return {\n                g: 0,\n                c: null,\n                s: \"(?:\\\\d{2})\"\n            };\n        case \"F\":\n            return {\n                g: 1,\n                c: \"m = parseInt(Date.monthNumbers[results[\" + currentGroup + \"].substring(0, 3)], 10);\\n\",\n                s: \"(\" + Date.monthNames.join(\"|\") + \")\"\n            };\n        case \"M\":\n            return {\n                g: 1,\n                c: \"m = parseInt(Date.monthNumbers[results[\" + currentGroup + \"]], 10);\\n\",\n                s: \"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\"\n            };\n        case \"n\":\n        case \"m\":\n            return {\n                g: 1,\n                c: \"m = parseInt(results[\" + currentGroup + \"], 10) - 1;\\n\",\n                s: \"(\\\\d{1,2})\"\n            };\n        case \"t\":\n            return {\n                g: 0,\n                c: null,\n                s: \"\\\\d{1,2}\"\n            };\n        case \"L\":\n            return {\n                g: 0,\n                c: null,\n                s: \"(?:1|0)\"\n            };\n        case \"Y\":\n            return {\n                g: 1,\n                c: \"y = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n                s: \"(\\\\d{4})\"\n            };\n        case \"y\":\n            return {\n                g: 1,\n                c: \"var ty = parseInt(results[\" + currentGroup + \"], 10);\\n\" + \"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\\n\",\n                s: \"(\\\\d{1,2})\"\n            };\n        case \"a\":\n            return {\n                g: 1,\n                c: \"if (results[\" + currentGroup + \"] == 'am') {\\n\" + \"if (h == 12) { h = 0; }\\n\" + \"} else { if (h < 12) { h += 12; }}\",\n                s: \"(am|pm)\"\n            };\n        case \"A\":\n            return {\n                g: 1,\n                c: \"if (results[\" + currentGroup + \"] == 'AM') {\\n\" + \"if (h == 12) { h = 0; }\\n\" + \"} else { if (h < 12) { h += 12; }}\",\n                s: \"(AM|PM)\"\n            };\n        case \"g\":\n        case \"G\":\n        case \"h\":\n        case \"H\":\n            return {\n                g: 1,\n                c: \"h = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n                s: \"(\\\\d{1,2})\"\n            };\n        case \"i\":\n            return {\n                g: 1,\n                c: \"i = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n                s: \"(\\\\d{2})\"\n            };\n        case \"s\":\n            return {\n                g: 1,\n                c: \"s = parseInt(results[\" + currentGroup + \"], 10);\\n\",\n                s: \"(\\\\d{2})\"\n            };\n        case \"O\":\n            return {\n                g: 0,\n                c: null,\n                s: \"[+-]\\\\d{4}\"\n            };\n        case \"T\":\n            return {\n                g: 0,\n                c: null,\n                s: \"[A-Z]{3}\"\n            };\n        case \"Z\":\n            return {\n                g: 0,\n                c: null,\n                s: \"[+-]\\\\d{1,5}\"\n            };\n        default:\n            return {\n                g: 0,\n                c: null,\n                s: String.escape(character)\n            }\n    }\n};\nDate.prototype.getTimezone = function() {\n    return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/, \"$1\").replace(/^.*?\\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\\)$/, \"$1$2$3\")\n};\nDate.prototype.getGMTOffset = function() {\n    return (this.getTimezoneOffset() > 0 ? \"-\" : \"+\") + String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset()) / 60), 2, \"0\") + String.leftPad(Math.abs(this.getTimezoneOffset()) % 60, 2, \"0\")\n};\nDate.prototype.getDayOfYear = function() {\n    var num = 0;\n    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;\n    for (var i = 0; i < this.getMonth(); ++i) {\n        num += Date.daysInMonth[i]\n    }\n    return num + this.getDate() - 1\n};\nDate.prototype.getWeekOfYear = function() {\n    var now = this.getDayOfYear() + (4 - this.getDay());\n    var jan1 = new Date(this.getFullYear(), 0, 1);\n    var then = (7 - jan1.getDay() + 4);\n    document.write(then);\n    return String.leftPad(((now - then) / 7) + 1, 2, \"0\")\n};\nDate.prototype.isLeapYear = function() {\n    var year = this.getFullYear();\n    return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)))\n};\nDate.prototype.getFirstDayOfMonth = function() {\n    var day = (this.getDay() - (this.getDate() - 1)) % 7;\n    return (day < 0) ? (day + 7) : day\n};\nDate.prototype.getLastDayOfMonth = function() {\n    var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;\n    return (day < 0) ? (day + 7) : day\n};\nDate.prototype.getDaysInMonth = function() {\n    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;\n    return Date.daysInMonth[this.getMonth()]\n};\nDate.prototype.getSuffix = function() {\n    switch (this.getDate()) {\n        case 1:\n        case 21:\n        case 31:\n            return \"st\";\n        case 2:\n        case 22:\n            return \"nd\";\n        case 3:\n        case 23:\n            return \"rd\";\n        default:\n            return \"th\"\n    }\n};\nString.escape = function(string) {\n    return string.replace(/('|\\\\)/g, \"\\\\$1\")\n};\nString.leftPad = function(val, size, ch) {\n    var result = new String(val);\n    if (ch == null) {\n        ch = \" \"\n    }\n    while (result.length < size) {\n        result = ch + result\n    }\n    return result\n};\nDate.daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nDate.monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nDate.dayNames = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\nDate.y2kYear = 50;\nDate.monthNumbers = {\n    Jan: 0,\n    Feb: 1,\n    Mar: 2,\n    Apr: 3,\n    May: 4,\n    Jun: 5,\n    Jul: 6,\n    Aug: 7,\n    Sep: 8,\n    Oct: 9,\n    Nov: 10,\n    Dec: 11\n};\nDate.patterns = {\n    ISO8601LongPattern: \"Y-m-d H:i:s\",\n    ISO8601ShortPattern: \"Y-m-d\",\n    ShortDatePattern: \"n/j/Y\",\n    LongDatePattern: \"l, F d, Y\",\n    FullDateTimePattern: \"l, F d, Y g:i:s A\",\n    MonthDayPattern: \"F d\",\n    ShortTimePattern: \"g:i A\",\n    LongTimePattern: \"g:i:s A\",\n    SortableDateTimePattern: \"Y-m-d\\\\TH:i:s\",\n    UniversalSortableDateTimePattern: \"Y-m-d H:i:sO\",\n    YearMonthPattern: \"F, Y\"\n};\n\n//https://github.com/brandonaaron/jquery-mousewheel/blob/master/jquery.mousewheel.js\n/*\n * Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net)\n *\n * Licensed under the MIT License (LICENSE.txt).\n *\n * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.\n * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.\n * Thanks to: Seamus Leahy for adding deltaX and deltaY\n *\n * Version: 3.1.3\n *\n * Requires: 1.2.2+\n */\n(function(factory) {\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory)\n    } else if (typeof exports === 'object') {\n        module.exports = factory\n    } else {\n        factory(jQuery)\n    }\n}(function($) {\n    var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'];\n    var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'];\n    var lowestDelta, lowestDeltaXY;\n    if ($.event.fixHooks) {\n        for (var i = toFix.length; i;) {\n            $.event.fixHooks[toFix[--i]] = $.event.mouseHooks\n        }\n    }\n    $.event.special.mousewheel = {\n        setup: function() {\n            if (this.addEventListener) {\n                for (var i = toBind.length; i;) {\n                    this.addEventListener(toBind[--i], handler, false)\n                }\n            } else {\n                this.onmousewheel = handler\n            }\n        },\n        teardown: function() {\n            if (this.removeEventListener) {\n                for (var i = toBind.length; i;) {\n                    this.removeEventListener(toBind[--i], handler, false)\n                }\n            } else {\n                this.onmousewheel = null\n            }\n        }\n    };\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind(\"mousewheel\", fn) : this.trigger(\"mousewheel\")\n        },\n        unmousewheel: function(fn) {\n            return this.unbind(\"mousewheel\", fn)\n        }\n    });\n\n    function handler(event) {\n        var orgEvent = event || window.event,\n            args = [].slice.call(arguments, 1),\n            delta = 0,\n            deltaX = 0,\n            deltaY = 0,\n            absDelta = 0,\n            absDeltaXY = 0,\n            fn;\n        event = $.event.fix(orgEvent);\n        event.type = \"mousewheel\";\n        if (orgEvent.wheelDelta) {\n            delta = orgEvent.wheelDelta\n        }\n        if (orgEvent.detail) {\n            delta = orgEvent.detail * -1\n        }\n        if (orgEvent.deltaY) {\n            deltaY = orgEvent.deltaY * -1;\n            delta = deltaY\n        }\n        if (orgEvent.deltaX) {\n            deltaX = orgEvent.deltaX;\n            delta = deltaX * -1\n        }\n        if (orgEvent.wheelDeltaY !== undefined) {\n            deltaY = orgEvent.wheelDeltaY\n        }\n        if (orgEvent.wheelDeltaX !== undefined) {\n            deltaX = orgEvent.wheelDeltaX * -1\n        }\n        absDelta = Math.abs(delta);\n        if (!lowestDelta || absDelta < lowestDelta) {\n            lowestDelta = absDelta\n        }\n        absDeltaXY = Math.max(Math.abs(deltaY), Math.abs(deltaX));\n        if (!lowestDeltaXY || absDeltaXY < lowestDeltaXY) {\n            lowestDeltaXY = absDeltaXY\n        }\n        fn = delta > 0 ? 'floor' : 'ceil';\n        delta = Math[fn](delta / lowestDelta);\n        deltaX = Math[fn](deltaX / lowestDeltaXY);\n        deltaY = Math[fn](deltaY / lowestDeltaXY);\n        args.unshift(event, delta, deltaX, deltaY);\n        return ($.event.dispatch || $.event.handle).apply(this, args)\n    }\n}));"
  },
  {
    "path": "src/main/webapp/static/js/jquery.nicescroll.js",
    "content": "/* jquery.nicescroll\n-- version 3.5.0 BETA5\n-- copyright 2011-12-13 InuYaksa*2013\n-- licensed under the MIT\n--\n-- http://areaaperta.com/nicescroll\n-- https://github.com/inuyaksa/jquery.nicescroll\n--\n*/\n\n(function(jQuery){\n\n  // globals\n  var domfocus = false;\n  var mousefocus = false;\n  var zoomactive = false;\n  var tabindexcounter = 5000;\n  var ascrailcounter = 2000;\n  var globalmaxzindex = 0;\n  \n  var $ = jQuery;  // sandbox\n \n  // http://stackoverflow.com/questions/2161159/get-script-path\n  function getScriptPath() {\n    var scripts=document.getElementsByTagName('script');\n    var path=scripts[scripts.length-1].src.split('?')[0];\n    return (path.split('/').length>0) ? path.split('/').slice(0,-1).join('/')+'/' : '';\n  }\n  var scriptpath = getScriptPath();\n  \n  var vendors = ['ms','moz','webkit','o'];\n  \n  var setAnimationFrame = window.requestAnimationFrame||false;\n  var clearAnimationFrame = window.cancelAnimationFrame||false;\n\n  if (!setAnimationFrame) {\n    for(var vx in vendors) {\n      var v = vendors[vx];\n      if (!setAnimationFrame) setAnimationFrame = window[v+'RequestAnimationFrame'];\n      if (!clearAnimationFrame) clearAnimationFrame = window[v+'CancelAnimationFrame']||window[v+'CancelRequestAnimationFrame'];\n    }\n  }\n  \n  var clsMutationObserver = window.MutationObserver || window.WebKitMutationObserver || false;\n  \n  var _globaloptions = {\n      zindex:\"auto\",\n      cursoropacitymin:0,\n      cursoropacitymax:1,\n      cursorcolor:\"#424242\",\n      cursorwidth:\"5px\",\n      cursorborder:\"1px solid #ddd\",\n      cursorborderradius:\"5px\",\n      scrollspeed:60,\n      mousescrollstep:8*3,\n      touchbehavior:false,\n      hwacceleration:true,\n      usetransition:true,\n      boxzoom:false,\n      dblclickzoom:true,\n      gesturezoom:true,\n      grabcursorenabled:true,\n      autohidemode:true,\n      background:\"\",\n      iframeautoresize:true,\n      cursorminheight:32,\n      preservenativescrolling:true,\n      railoffset:false,\n      bouncescroll:true,\n      spacebarenabled:true,\n      railpadding:{top:0,right:0,left:0,bottom:0},\n      disableoutline:true,\n      horizrailenabled:true,\n      railalign:\"right\",\n      railvalign:\"bottom\",\n      enabletranslate3d:true,\n      enablemousewheel:true,\n      enablekeyboard:true,\n      smoothscroll:true,\n      sensitiverail:true,\n      enablemouselockapi:true,\n//      cursormaxheight:false,\n      cursorfixedheight:false,      \n      directionlockdeadzone:6,\n      hidecursordelay:400,\n      nativeparentscrolling:true,\n      enablescrollonselection:true,\n      overflowx:true,\n      overflowy:true,\n      cursordragspeed:0.3,\n      rtlmode:false,\n      cursordragontouch:false,\n      oneaxismousemode:\"auto\"\n  }\n  \n  var browserdetected = false;\n  \n  var getBrowserDetection = function() {\n  \n    if (browserdetected) return browserdetected;\n  \n    var domtest = document.createElement('DIV');\n\n    var d = {};\n    \n\t\td.haspointerlock = \"pointerLockElement\" in document || \"mozPointerLockElement\" in document || \"webkitPointerLockElement\" in document;\n\t\t\n    d.isopera = (\"opera\" in window);\n    d.isopera12 = (d.isopera&&(\"getUserMedia\" in navigator));\n    d.isoperamini = (Object.prototype.toString.call(window.operamini) === \"[object OperaMini]\");\n    \n    d.isie = ((\"all\" in document) && (\"attachEvent\" in domtest) && !d.isopera);\n    d.isieold = (d.isie && !(\"msInterpolationMode\" in domtest.style));  // IE6 and older\n    d.isie7 = d.isie&&!d.isieold&&(!(\"documentMode\" in document)||(document.documentMode==7));\n    d.isie8 = d.isie&&(\"documentMode\" in document)&&(document.documentMode==8);\n    d.isie9 = d.isie&&(\"performance\" in window)&&(document.documentMode>=9);\n    d.isie10 = d.isie&&(\"performance\" in window)&&(document.documentMode>=10);\n    \n    d.isie9mobile = /iemobile.9/i.test(navigator.userAgent);  //wp 7.1 mango\n    if (d.isie9mobile) d.isie9 = false;\n    d.isie7mobile = (!d.isie9mobile&&d.isie7) && /iemobile/i.test(navigator.userAgent);  //wp 7.0\n    \n    d.ismozilla = (\"MozAppearance\" in domtest.style);\n\t\t\n    d.iswebkit = (\"WebkitAppearance\" in domtest.style);\n    \n    d.ischrome = (\"chrome\" in window);\n\t\td.ischrome22 = (d.ischrome&&d.haspointerlock);\n    d.ischrome26 = (d.ischrome&&(\"transition\" in domtest.style));  // issue with transform detection (maintain prefix)\n    \n    d.cantouch = (\"ontouchstart\" in document.documentElement)||(\"ontouchstart\" in window);  // detection for Chrome Touch Emulation\n    d.hasmstouch = (window.navigator.msPointerEnabled||false);  // IE10+ pointer events\n\t\t\n    d.ismac = /^mac$/i.test(navigator.platform);\n    \n    d.isios = (d.cantouch && /iphone|ipad|ipod/i.test(navigator.platform));\n    d.isios4 = ((d.isios)&&!(\"seal\" in Object));\n    \n    d.isandroid = (/android/i.test(navigator.userAgent));\n    \n    d.trstyle = false;\n    d.hastransform = false;\n    d.hastranslate3d = false;\n    d.transitionstyle = false;\n    d.hastransition = false;\n    d.transitionend = false;\n    \n    var check = ['transform','msTransform','webkitTransform','MozTransform','OTransform'];\n    for(var a=0;a<check.length;a++){\n      if (typeof domtest.style[check[a]] != \"undefined\") {\n        d.trstyle = check[a];\n        break;\n      }\n    }\n    d.hastransform = (d.trstyle != false);\n    if (d.hastransform) {\n      domtest.style[d.trstyle] = \"translate3d(1px,2px,3px)\";\n      d.hastranslate3d = /translate3d/.test(domtest.style[d.trstyle]);\n    }\n    \n    d.transitionstyle = false;\n    d.prefixstyle = '';\n    d.transitionend = false;\n    var check = ['transition','webkitTransition','MozTransition','OTransition','OTransition','msTransition','KhtmlTransition'];\n    var prefix = ['','-webkit-','-moz-','-o-','-o','-ms-','-khtml-'];\n    var evs = ['transitionend','webkitTransitionEnd','transitionend','otransitionend','oTransitionEnd','msTransitionEnd','KhtmlTransitionEnd'];\n    for(var a=0;a<check.length;a++) {\n      if (check[a] in domtest.style) {\n        d.transitionstyle = check[a];\n        d.prefixstyle = prefix[a];\n        d.transitionend = evs[a];\n        break;\n      }\n    }\n    if (d.ischrome26) {  // use always prefix\n      d.prefixstyle = prefix[1];\n    }\n    \n    d.hastransition = (d.transitionstyle);\n    \n    function detectCursorGrab() {      \n      var lst = ['-moz-grab','-webkit-grab','grab'];\n      if ((d.ischrome&&!d.ischrome22)||d.isie) lst=[];  // force setting for IE returns false positive and chrome cursor bug\n      for(var a=0;a<lst.length;a++) {\n        var p = lst[a];\n        domtest.style['cursor']=p;\n        if (domtest.style['cursor']==p) return p;\n      }\n      return 'url(http://www.google.com/intl/en_ALL/mapfiles/openhand.cur),n-resize';  // thank you google for custom cursor!\n    }\n    d.cursorgrabvalue = detectCursorGrab();\n\n    d.hasmousecapture = (\"setCapture\" in domtest);\n    \n    d.hasMutationObserver = (clsMutationObserver !== false);\n    \n    domtest = null;  //memory released\n\n    browserdetected = d;\n    \n    return d;  \n  }\n  \n  var NiceScrollClass = function(myopt,me) {\n\n    var self = this;\n\n    this.version = '3.5.0 BETA5';\n    this.name = 'nicescroll';\n    \n    this.me = me;\n    \n    this.opt = {\n      doc:$(\"body\"),\n      win:false\n    };\n    \n    $.extend(this.opt,_globaloptions);\n    \n// Options for internal use\n    this.opt.snapbackspeed = 80;\n    \n    if (myopt||false) {\n      for(var a in self.opt) {\n        if (typeof myopt[a] != \"undefined\") self.opt[a] = myopt[a];\n      }\n    }\n    \n    this.doc = self.opt.doc;\n    this.iddoc = (this.doc&&this.doc[0])?this.doc[0].id||'':'';    \n    this.ispage = /BODY|HTML/.test((self.opt.win)?self.opt.win[0].nodeName:this.doc[0].nodeName);\n    this.haswrapper = (self.opt.win!==false);\n    this.win = self.opt.win||(this.ispage?$(window):this.doc);\n    this.docscroll = (this.ispage&&!this.haswrapper)?$(window):this.win;\n    this.body = $(\"body\");\n    this.viewport = false;\n    \n    this.isfixed = false;\n    \n    this.iframe = false;\n    this.isiframe = ((this.doc[0].nodeName == 'IFRAME') && (this.win[0].nodeName == 'IFRAME'));\n    \n    this.istextarea = (this.win[0].nodeName == 'TEXTAREA');\n    \n    this.forcescreen = false; //force to use screen position on events\n\n    this.canshowonmouseevent = (self.opt.autohidemode!=\"scroll\");\n    \n// Events jump table    \n    this.onmousedown = false;\n    this.onmouseup = false;\n    this.onmousemove = false;\n    this.onmousewheel = false;\n    this.onkeypress = false;\n    this.ongesturezoom = false;\n    this.onclick = false;\n    \n// Nicescroll custom events\n    this.onscrollstart = false;\n    this.onscrollend = false;\n    this.onscrollcancel = false;    \n    \n    this.onzoomin = false;\n    this.onzoomout = false;\n    \n// Let's start!  \n    this.view = false;\n    this.page = false;\n    \n    this.scroll = {x:0,y:0};\n    this.scrollratio = {x:0,y:0};    \n    this.cursorheight = 20;\n    this.scrollvaluemax = 0;\n    \n    this.checkrtlmode = false;\n    \n    this.scrollrunning = false;\n    \n    this.scrollmom = false;\n    \n    this.observer = false;\n    this.observerremover = false;  // observer on parent for remove detection\n    \n    do {\n      this.id = \"ascrail\"+(ascrailcounter++);\n    } while (document.getElementById(this.id));\n    \n    this.rail = false;\n    this.cursor = false;\n    this.cursorfreezed = false;  \n    this.selectiondrag = false;\n    \n    this.zoom = false;\n    this.zoomactive = false;\n    \n    this.hasfocus = false;\n    this.hasmousefocus = false;\n    \n    this.visibility = true;\n    this.locked = false;\n    this.hidden = false; // rails always hidden\n    this.cursoractive = true; // user can interact with cursors\n    \n    this.overflowx = self.opt.overflowx;\n    this.overflowy = self.opt.overflowy;\n    \n    this.nativescrollingarea = false;\n    this.checkarea = 0;\n    \n    this.events = [];  // event list for unbind\n    \n    this.saved = {};\n    \n    this.delaylist = {};\n    this.synclist = {};\n    \n    this.lastdeltax = 0;\n    this.lastdeltay = 0;\n    \n    this.detected = getBrowserDetection(); \n    \n    var cap = $.extend({},this.detected);\n \n    this.canhwscroll = (cap.hastransform&&self.opt.hwacceleration);\n    this.ishwscroll = (this.canhwscroll&&self.haswrapper);\n    \n    this.istouchcapable = false;  // desktop devices with touch screen support\n    \n//## Check Chrome desktop with touch support\n    if (cap.cantouch&&cap.ischrome&&!cap.isios&&!cap.isandroid) {\n      this.istouchcapable = true;\n      cap.cantouch = false;  // parse normal desktop events\n    }    \n\n//## Firefox 18 nightly build (desktop) false positive (or desktop with touch support)\n    if (cap.cantouch&&cap.ismozilla&&!cap.isios&&!cap.isandroid) {\n      this.istouchcapable = true;\n      cap.cantouch = false;  // parse normal desktop events\n    }    \n    \n//## disable MouseLock API on user request\n\n    if (!self.opt.enablemouselockapi) {\n      cap.hasmousecapture = false;\n      cap.haspointerlock = false;\n    }\n    \n    this.delayed = function(name,fn,tm,lazy) {\n      var dd = self.delaylist[name];\n      var nw = (new Date()).getTime();\n      if (!lazy&&dd&&dd.tt) return false;\n      if (dd&&dd.tt) clearTimeout(dd.tt);\n      if (dd&&dd.last+tm>nw&&!dd.tt) {      \n        self.delaylist[name] = {\n          last:nw+tm,\n          tt:setTimeout(function(){self.delaylist[name].tt=0;fn.call();},tm)\n        }\n      }\n      else if (!dd||!dd.tt) {\n        self.delaylist[name] = {\n          last:nw,\n          tt:0\n        }\n        setTimeout(function(){fn.call();},0);\n      }\n    };\n    \n    this.debounced = function(name,fn,tm) {\n      var dd = self.delaylist[name];\n      var nw = (new Date()).getTime();      \n      self.delaylist[name] = fn;\n      if (!dd) {        \n        setTimeout(function(){var fn=self.delaylist[name];self.delaylist[name]=false;fn.call();},tm);\n      }\n    }\n    \n    this.synched = function(name,fn) {\n    \n      function requestSync() {\n        if (self.onsync) return;\n        setAnimationFrame(function(){\n          self.onsync = false;\n          for(name in self.synclist){\n            var fn = self.synclist[name];\n            if (fn) fn.call(self);\n            self.synclist[name] = false;\n          }\n        });\n        self.onsync = true;\n      };    \n    \n      self.synclist[name] = fn;\n      requestSync();\n      return name;\n    };\n    \n    this.unsynched = function(name) {\n      if (self.synclist[name]) self.synclist[name] = false;\n    }\n    \n    this.css = function(el,pars) {  // save & set\n      for(var n in pars) {\n        self.saved.css.push([el,n,el.css(n)]);\n        el.css(n,pars[n]);\n      }\n    };\n    \n    this.scrollTop = function(val) {\n      return (typeof val == \"undefined\") ? self.getScrollTop() : self.setScrollTop(val);\n    };\n\n    this.scrollLeft = function(val) {\n      return (typeof val == \"undefined\") ? self.getScrollLeft() : self.setScrollLeft(val);\n    };\n    \n// derived by by Dan Pupius www.pupius.net\n    BezierClass = function(st,ed,spd,p1,p2,p3,p4) {\n      this.st = st;\n      this.ed = ed;\n      this.spd = spd;\n      \n      this.p1 = p1||0;\n      this.p2 = p2||1;\n      this.p3 = p3||0;\n      this.p4 = p4||1;\n      \n      this.ts = (new Date()).getTime();\n      this.df = this.ed-this.st;\n    };\n    BezierClass.prototype = {\n      B2:function(t){ return 3*t*t*(1-t) },\n      B3:function(t){ return 3*t*(1-t)*(1-t) },\n      B4:function(t){ return (1-t)*(1-t)*(1-t) },\n      getNow:function(){\n        var nw = (new Date()).getTime();\n        var pc = 1-((nw-this.ts)/this.spd);\n        var bz = this.B2(pc) + this.B3(pc) + this.B4(pc);\n        return (pc<0) ? this.ed : this.st+Math.round(this.df*bz);\n      },\n      update:function(ed,spd){\n        this.st = this.getNow();\n        this.ed = ed;\n        this.spd = spd;\n        this.ts = (new Date()).getTime();\n        this.df = this.ed-this.st;\n        return this;\n      }\n    };\n    \n    if (this.ishwscroll) {  \n    // hw accelerated scroll\n      this.doc.translate = {x:0,y:0,tx:\"0px\",ty:\"0px\"};\n      \n      //this one can help to enable hw accel on ios6 http://indiegamr.com/ios6-html-hardware-acceleration-changes-and-how-to-fix-them/\n      if (cap.hastranslate3d&&cap.isios) this.doc.css(\"-webkit-backface-visibility\",\"hidden\");  // prevent flickering http://stackoverflow.com/questions/3461441/      \n      \n      //derived from http://stackoverflow.com/questions/11236090/\n      function getMatrixValues() {\n        var tr = self.doc.css(cap.trstyle);\n        if (tr&&(tr.substr(0,6)==\"matrix\")) {\n          return tr.replace(/^.*\\((.*)\\)$/g, \"$1\").replace(/px/g,'').split(/, +/);\n        }\n        return false;\n      }\n      \n      this.getScrollTop = function(last) {\n        if (!last) {\n          var mtx = getMatrixValues();\n          if (mtx) return (mtx.length==16) ? -mtx[13] : -mtx[5];  //matrix3d 16 on IE10\n          if (self.timerscroll&&self.timerscroll.bz) return self.timerscroll.bz.getNow();\n        }\n        return self.doc.translate.y;\n      };\n\n      this.getScrollLeft = function(last) {\n        if (!last) {\n          var mtx = getMatrixValues();          \n          if (mtx) return (mtx.length==16) ? -mtx[12] : -mtx[4];  //matrix3d 16 on IE10\n          if (self.timerscroll&&self.timerscroll.bh) return self.timerscroll.bh.getNow();\n        }\n        return self.doc.translate.x;\n      };\n      \n      if (document.createEvent) {\n        this.notifyScrollEvent = function(el) {\n          var e = document.createEvent(\"UIEvents\");\n          e.initUIEvent(\"scroll\", false, true, window, 1);\n          el.dispatchEvent(e);\n        };\n      }\n      else if (document.fireEvent) {\n        this.notifyScrollEvent = function(el) {\n          var e = document.createEventObject();\n          el.fireEvent(\"onscroll\");\n          e.cancelBubble = true; \n        };\n      }\n      else {\n        this.notifyScrollEvent = function(el,add) {}; //NOPE\n      }\n      \n      if (cap.hastranslate3d&&self.opt.enabletranslate3d) {\n        this.setScrollTop = function(val,silent) {\n          self.doc.translate.y = val;\n          self.doc.translate.ty = (val*-1)+\"px\";\n          self.doc.css(cap.trstyle,\"translate3d(\"+self.doc.translate.tx+\",\"+self.doc.translate.ty+\",0px)\");          \n          if (!silent) self.notifyScrollEvent(self.win[0]);\n        };\n        this.setScrollLeft = function(val,silent) {          \n          self.doc.translate.x = val;\n          self.doc.translate.tx = (val*-1)+\"px\";\n          self.doc.css(cap.trstyle,\"translate3d(\"+self.doc.translate.tx+\",\"+self.doc.translate.ty+\",0px)\");          \n          if (!silent) self.notifyScrollEvent(self.win[0]);\n        };\n      } else {\n        this.setScrollTop = function(val,silent) {\n          self.doc.translate.y = val;\n          self.doc.translate.ty = (val*-1)+\"px\";\n          self.doc.css(cap.trstyle,\"translate(\"+self.doc.translate.tx+\",\"+self.doc.translate.ty+\")\");\n          if (!silent) self.notifyScrollEvent(self.win[0]);          \n        };\n        this.setScrollLeft = function(val,silent) {        \n          self.doc.translate.x = val;\n          self.doc.translate.tx = (val*-1)+\"px\";\n          self.doc.css(cap.trstyle,\"translate(\"+self.doc.translate.tx+\",\"+self.doc.translate.ty+\")\");\n          if (!silent) self.notifyScrollEvent(self.win[0]);\n        };\n      }\n    } else {\n    // native scroll\n      this.getScrollTop = function() {\n        return self.docscroll.scrollTop();\n      };\n      this.setScrollTop = function(val) {        \n        return self.docscroll.scrollTop(val);\n      };\n      this.getScrollLeft = function() {\n        return self.docscroll.scrollLeft();\n      };\n      this.setScrollLeft = function(val) {\n        return self.docscroll.scrollLeft(val);\n      };\n    }\n    \n    this.getTarget = function(e) {\n      if (!e) return false;\n      if (e.target) return e.target;\n      if (e.srcElement) return e.srcElement;\n      return false;\n    };\n    \n    this.hasParent = function(e,id) {\n      if (!e) return false;\n      var el = e.target||e.srcElement||e||false;\n      while (el && el.id != id) {\n        el = el.parentNode||false;\n      }\n      return (el!==false);\n    };\n    \n    function getZIndex() {\n      var dom = self.win;\n      if (\"zIndex\" in dom) return dom.zIndex();  // use jQuery UI method when available\n      while (dom.length>0) {        \n        if (dom[0].nodeType==9) return false;\n        var zi = dom.css('zIndex');        \n        if (!isNaN(zi)&&zi!=0) return parseInt(zi);\n        dom = dom.parent();\n      }\n      return false;\n    };\n    \n//inspired by http://forum.jquery.com/topic/width-includes-border-width-when-set-to-thin-medium-thick-in-ie\n    var _convertBorderWidth = {\"thin\":1,\"medium\":3,\"thick\":5};\n    function getWidthToPixel(dom,prop,chkheight) {\n      var wd = dom.css(prop);\n      var px = parseFloat(wd);\n      if (isNaN(px)) {\n        px = _convertBorderWidth[wd]||0;\n        var brd = (px==3) ? ((chkheight)?(self.win.outerHeight() - self.win.innerHeight()):(self.win.outerWidth() - self.win.innerWidth())) : 1; //DON'T TRUST CSS\n        if (self.isie8&&px) px+=1;\n        return (brd) ? px : 0; \n      }\n      return px;\n    };\n    \n    this.getOffset = function() {\n      if (self.isfixed) return {top:parseFloat(self.win.css('top')),left:parseFloat(self.win.css('left'))};\n      if (!self.viewport) return self.win.offset();\n      var ww = self.win.offset();\n      var vp = self.viewport.offset();\n      return {top:ww.top-vp.top+self.viewport.scrollTop(),left:ww.left-vp.left+self.viewport.scrollLeft()};\n    };\n    \n    this.updateScrollBar = function(len) {\n      if (self.ishwscroll) {\n        self.rail.css({height:self.win.innerHeight()});\n        if (self.railh) self.railh.css({width:self.win.innerWidth()});\n      } else {\n        var wpos = self.getOffset();\n        var pos = {top:wpos.top,left:wpos.left};\n        pos.top+= getWidthToPixel(self.win,'border-top-width',true);\n        var brd = (self.win.outerWidth() - self.win.innerWidth())/2;\n        pos.left+= (self.rail.align) ? self.win.outerWidth() - getWidthToPixel(self.win,'border-right-width') - self.rail.width : getWidthToPixel(self.win,'border-left-width');\n        \n        var off = self.opt.railoffset;\n        if (off) {\n          if (off.top) pos.top+=off.top;\n          if (self.rail.align&&off.left) pos.left+=off.left;\n        }\n        \n\t\t\t\tif (!self.locked) self.rail.css({top:pos.top,left:pos.left,height:(len)?len.h:self.win.innerHeight()});\n\t\t\t\t\n\t\t\t\tif (self.zoom) {\t\t\t\t  \n\t\t\t\t  self.zoom.css({top:pos.top+1,left:(self.rail.align==1) ? pos.left-20 : pos.left+self.rail.width+4});\n\t\t\t  }\n\t\t\t\t\n\t\t\t\tif (self.railh&&!self.locked) {\n\t\t\t\t\tvar pos = {top:wpos.top,left:wpos.left};\n\t\t\t\t\tvar y = (self.railh.align) ? pos.top + getWidthToPixel(self.win,'border-top-width',true) + self.win.innerHeight() - self.railh.height : pos.top + getWidthToPixel(self.win,'border-top-width',true);\n\t\t\t\t\tvar x = pos.left + getWidthToPixel(self.win,'border-left-width');\n\t\t\t\t\tself.railh.css({top:y,left:x,width:self.railh.width});\n\t\t\t\t}\n\t\t\n\t\t\t\t\n      }\n    };\n    \n    this.doRailClick = function(e,dbl,hr) {\n\n      var fn,pg,cur,pos;\n      \n//      if (self.rail.drag&&self.rail.drag.pt!=1) return;\n      if (self.locked) return;\n//      if (self.rail.drag) return;\n\n//      self.cancelScroll();       \n      \n      self.cancelEvent(e);\n      \n      if (dbl) {\n        fn = (hr) ? self.doScrollLeft : self.doScrollTop;\n        cur = (hr) ? ((e.pageX - self.railh.offset().left - (self.cursorwidth/2)) * self.scrollratio.x) : ((e.pageY - self.rail.offset().top - (self.cursorheight/2)) * self.scrollratio.y);\n        fn(cur);\n      } else {\n//        console.log(e.pageY);\n        fn = (hr) ? self.doScrollLeftBy : self.doScrollBy;\n        cur = (hr) ? self.scroll.x : self.scroll.y;\n        pos = (hr) ? e.pageX - self.railh.offset().left : e.pageY - self.rail.offset().top;\n        pg = (hr) ? self.view.w : self.view.h;        \n        (cur>=pos) ? fn(pg) : fn(-pg);\n      }\n    \n    }\n    \n    self.hasanimationframe = (setAnimationFrame);\n    self.hascancelanimationframe = (clearAnimationFrame);\n    \n    if (!self.hasanimationframe) {\n      setAnimationFrame=function(fn){return setTimeout(fn,15-Math.floor((+new Date)/1000)%16)}; // 1000/60)};\n      clearAnimationFrame=clearInterval;\n    } \n    else if (!self.hascancelanimationframe) clearAnimationFrame=function(){self.cancelAnimationFrame=true};\n    \n    this.init = function() {\n\n      self.saved.css = [];\n      \n      if (cap.isie7mobile) return true; // SORRY, DO NOT WORK!\n      if (cap.isoperamini) return true; // SORRY, DO NOT WORK!\n      \n      if (cap.hasmstouch) self.css((self.ispage)?$(\"html\"):self.win,{'-ms-touch-action':'none'});\n      \n      self.zindex = \"auto\";\n      if (!self.ispage&&self.opt.zindex==\"auto\") {\n        self.zindex = getZIndex()||\"auto\";\n      } else {\n        self.zindex = self.opt.zindex;\n      }\n      \n      if (!self.ispage&&self.zindex!=\"auto\") {\n        if (self.zindex>globalmaxzindex) globalmaxzindex=self.zindex;\n      }\n      \n      if (self.isie&&self.zindex==0&&self.opt.zindex==\"auto\") {  // fix IE auto == 0\n        self.zindex=\"auto\";\n      }\n      \n/*      \n      self.ispage = true;\n      self.haswrapper = true;\n//      self.win = $(window);\n      self.docscroll = $(\"body\");\n//      self.doc = $(\"body\");\n*/\n      \n      if (!self.ispage || (!cap.cantouch && !cap.isieold && !cap.isie9mobile)) {\n      \n        var cont = self.docscroll;\n        if (self.ispage) cont = (self.haswrapper)?self.win:self.doc;\n        \n        if (!cap.isie9mobile) self.css(cont,{'overflow-y':'hidden'});      \n        \n        if (self.ispage&&cap.isie7) {\n          if (self.doc[0].nodeName=='BODY') self.css($(\"html\"),{'overflow-y':'hidden'});  //IE7 double scrollbar issue\n          else if (self.doc[0].nodeName=='HTML') self.css($(\"body\"),{'overflow-y':'hidden'});  //IE7 double scrollbar issue\n        }\n        \n        if (cap.isios&&!self.ispage&&!self.haswrapper) self.css($(\"body\"),{\"-webkit-overflow-scrolling\":\"touch\"});  //force hw acceleration\n        \n        var cursor = $(document.createElement('div'));\n        cursor.css({\n          position:\"relative\",top:0,\"float\":\"right\",width:self.opt.cursorwidth,height:\"0px\",\n          'background-color':self.opt.cursorcolor,\n          border:self.opt.cursorborder,\n          'background-clip':'padding-box',\n          '-webkit-border-radius':self.opt.cursorborderradius,\n          '-moz-border-radius':self.opt.cursorborderradius,\n          'border-radius':self.opt.cursorborderradius\n        });   \n        \n        cursor.hborder = parseFloat(cursor.outerHeight() - cursor.innerHeight());        \n        self.cursor = cursor;        \n        \n        var rail = $(document.createElement('div'));\n        rail.attr('id',self.id);\n        rail.addClass('nicescroll-rails');\n        \n        var v,a,kp = [\"left\",\"right\"];  //\"top\",\"bottom\"\n        for(var n in kp) {\n          a=kp[n];\n          v = self.opt.railpadding[a];\n          (v) ? rail.css(\"padding-\"+a,v+\"px\") : self.opt.railpadding[a] = 0;\n        }\n        \n        rail.append(cursor);\n        \n        rail.width = Math.max(parseFloat(self.opt.cursorwidth),cursor.outerWidth()) + self.opt.railpadding['left'] + self.opt.railpadding['right'];\n        rail.css({width:rail.width+\"px\",'zIndex':self.zindex,\"background\":self.opt.background,cursor:\"default\"});        \n        \n        rail.visibility = true;\n        rail.scrollable = true;\n        \n        rail.align = (self.opt.railalign==\"left\") ? 0 : 1;\n        \n        self.rail = rail;\n        \n        self.rail.drag = false;\n        \n        var zoom = false;\n        if (self.opt.boxzoom&&!self.ispage&&!cap.isieold) {\n          zoom = document.createElement('div');          \n          self.bind(zoom,\"click\",self.doZoom);\n          self.zoom = $(zoom);\n          self.zoom.css({\"cursor\":\"pointer\",'z-index':self.zindex,'backgroundImage':'url('+scriptpath+'zoomico.png)','height':18,'width':18,'backgroundPosition':'0px 0px'});\n          if (self.opt.dblclickzoom) self.bind(self.win,\"dblclick\",self.doZoom);\n          if (cap.cantouch&&self.opt.gesturezoom) {\n            self.ongesturezoom = function(e) {\n              if (e.scale>1.5) self.doZoomIn(e);\n              if (e.scale<0.8) self.doZoomOut(e);\n              return self.cancelEvent(e);\n            };\n            self.bind(self.win,\"gestureend\",self.ongesturezoom);             \n          }\n        }\n        \n// init HORIZ\n\n        self.railh = false;\n\n        if (self.opt.horizrailenabled) {\n\n          self.css(cont,{'overflow-x':'hidden'});\n\n          var cursor = $(document.createElement('div'));\n          cursor.css({\n            position:\"relative\",top:0,height:self.opt.cursorwidth,width:\"0px\",\n            'background-color':self.opt.cursorcolor,\n            border:self.opt.cursorborder,\n            'background-clip':'padding-box',\n            '-webkit-border-radius':self.opt.cursorborderradius,\n            '-moz-border-radius':self.opt.cursorborderradius,\n            'border-radius':self.opt.cursorborderradius\n          });   \n          \n          cursor.wborder = parseFloat(cursor.outerWidth() - cursor.innerWidth());\n          self.cursorh = cursor;\n          \n          var railh = $(document.createElement('div'));\n          railh.attr('id',self.id+'-hr');\n          railh.addClass('nicescroll-rails');\n          railh.height = Math.max(parseFloat(self.opt.cursorwidth),cursor.outerHeight());\n          railh.css({height:railh.height+\"px\",'zIndex':self.zindex,\"background\":self.opt.background});\n          \n          railh.append(cursor);\n          \n          railh.visibility = true;\n          railh.scrollable = true;\n          \n          railh.align = (self.opt.railvalign==\"top\") ? 0 : 1;\n          \n          self.railh = railh;\n          \n          self.railh.drag = false;\n          \n        }\n        \n//        \n        \n        if (self.ispage) {\n          rail.css({position:\"fixed\",top:\"0px\",height:\"100%\"});\n          (rail.align) ? rail.css({right:\"0px\"}) : rail.css({left:\"0px\"});\n          self.body.append(rail);\n          if (self.railh) {\n            railh.css({position:\"fixed\",left:\"0px\",width:\"100%\"});\n            (railh.align) ? railh.css({bottom:\"0px\"}) : railh.css({top:\"0px\"});\n            self.body.append(railh);\n          }\n        } else {          \n          if (self.ishwscroll) {\n            if (self.win.css('position')=='static') self.css(self.win,{'position':'relative'});\n            var bd = (self.win[0].nodeName == 'HTML') ? self.body : self.win;\n            if (self.zoom) {\n              self.zoom.css({position:\"absolute\",top:1,right:0,\"margin-right\":rail.width+4});\n              bd.append(self.zoom);\n            }\n            rail.css({position:\"absolute\",top:0});\n            (rail.align) ? rail.css({right:0}) : rail.css({left:0});\n            bd.append(rail);\n            if (railh) {\n              railh.css({position:\"absolute\",left:0,bottom:0});\n              (railh.align) ? railh.css({bottom:0}) : railh.css({top:0});\n              bd.append(railh);\n            }\n          } else {\n            self.isfixed = (self.win.css(\"position\")==\"fixed\");\n            var rlpos = (self.isfixed) ? \"fixed\" : \"absolute\";\n            \n            if (!self.isfixed) self.viewport = self.getViewport(self.win[0]);\n            if (self.viewport) {\n              self.body = self.viewport;              \n              if ((/relative|absolute/.test(self.viewport.css(\"position\")))==false) self.css(self.viewport,{\"position\":\"relative\"});\n            }            \n            \n            rail.css({position:rlpos});\n            if (self.zoom) self.zoom.css({position:rlpos});\n            self.updateScrollBar();\n            self.body.append(rail);\n            if (self.zoom) self.body.append(self.zoom);\n            if (self.railh) {\n              railh.css({position:rlpos});\n              self.body.append(railh);           \n            }\n          }\n          \n          if (cap.isios) self.css(self.win,{'-webkit-tap-highlight-color':'rgba(0,0,0,0)','-webkit-touch-callout':'none'});  // prevent grey layer on click\n          \n\t\t\t\t\tif (cap.isie&&self.opt.disableoutline) self.win.attr(\"hideFocus\",\"true\");  // IE, prevent dotted rectangle on focused div\n\t\t\t\t\tif (cap.iswebkit&&self.opt.disableoutline) self.win.css({\"outline\":\"none\"});\n//          if (cap.isopera&&self.opt.disableoutline) self.win.css({\"outline\":\"0\"});  // Opera to test [TODO]\n          \n        }\n        \n        if (self.opt.autohidemode===false) {\n          self.autohidedom = false;\n          self.rail.css({opacity:self.opt.cursoropacitymax});          \n          if (self.railh) self.railh.css({opacity:self.opt.cursoropacitymax});\n        }\n        else if (self.opt.autohidemode===true) {\n          self.autohidedom = $().add(self.rail);          \n          if (cap.isie8) self.autohidedom=self.autohidedom.add(self.cursor);\n          if (self.railh) self.autohidedom=self.autohidedom.add(self.railh);\n          if (self.railh&&cap.isie8) self.autohidedom=self.autohidedom.add(self.cursorh);\n        }\n        else if (self.opt.autohidemode==\"scroll\") {\n          self.autohidedom = $().add(self.rail);\n          if (self.railh) self.autohidedom=self.autohidedom.add(self.railh);\n        }\n        else if (self.opt.autohidemode==\"cursor\") {\n          self.autohidedom = $().add(self.cursor);\n          if (self.railh) self.autohidedom=self.autohidedom.add(self.cursorh);\n        }\n        else if (self.opt.autohidemode==\"hidden\") {\n          self.autohidedom = false;\n          self.hide();\n          self.locked = false;\n        }\n        \n        if (cap.isie9mobile) {\n\n          self.scrollmom = new ScrollMomentumClass2D(self);        \n\n          /*\n          var trace = function(msg) {\n            var db = $(\"#debug\");\n            if (isNaN(msg)&&(typeof msg != \"string\")) {\n              var x = [];\n              for(var a in msg) {\n                x.push(a+\":\"+msg[a]);\n              }\n              msg =\"{\"+x.join(\",\")+\"}\";\n            }\n            if (db.children().length>0) {\n              db.children().eq(0).before(\"<div>\"+msg+\"</div>\");\n            } else {\n              db.append(\"<div>\"+msg+\"</div>\");\n            }\n          }\n          window.onerror = function(msg,url,ln) {\n            trace(\"ERR: \"+msg+\" at \"+ln);\n          }\n*/          \n  \n          self.onmangotouch = function(e) {\n            var py = self.getScrollTop();\n            var px = self.getScrollLeft();\n            \n            if ((py == self.scrollmom.lastscrolly)&&(px == self.scrollmom.lastscrollx)) return true;\n//            $(\"#debug\").html('DRAG:'+py);\n\n            var dfy = py-self.mangotouch.sy;\n            var dfx = px-self.mangotouch.sx;            \n            var df = Math.round(Math.sqrt(Math.pow(dfx,2)+Math.pow(dfy,2)));            \n            if (df==0) return;\n            \n            var dry = (dfy<0)?-1:1;\n            var drx = (dfx<0)?-1:1;\n            \n            var tm = +new Date();\n            if (self.mangotouch.lazy) clearTimeout(self.mangotouch.lazy);\n            \n            if (((tm-self.mangotouch.tm)>80)||(self.mangotouch.dry!=dry)||(self.mangotouch.drx!=drx)) {\n//              trace('RESET+'+(tm-self.mangotouch.tm));\n              self.scrollmom.stop();\n              self.scrollmom.reset(px,py);\n              self.mangotouch.sy = py;\n              self.mangotouch.ly = py;\n              self.mangotouch.sx = px;\n              self.mangotouch.lx = px;\n              self.mangotouch.dry = dry;\n              self.mangotouch.drx = drx;\n              self.mangotouch.tm = tm;\n            } else {\n              \n              self.scrollmom.stop();\n              self.scrollmom.update(self.mangotouch.sx-dfx,self.mangotouch.sy-dfy);\n              var gap = tm - self.mangotouch.tm;              \n              self.mangotouch.tm = tm;\n              \n//              trace('MOVE:'+df+\" - \"+gap);\n              \n              var ds = Math.max(Math.abs(self.mangotouch.ly-py),Math.abs(self.mangotouch.lx-px));\n              self.mangotouch.ly = py;\n              self.mangotouch.lx = px;\n              \n              if (ds>2) {\n                self.mangotouch.lazy = setTimeout(function(){\n//                  trace('END:'+ds+'+'+gap);                  \n                  self.mangotouch.lazy = false;\n                  self.mangotouch.dry = 0;\n                  self.mangotouch.drx = 0;\n                  self.mangotouch.tm = 0;                  \n                  self.scrollmom.doMomentum(30);\n                },100);\n              }\n            }\n          }\n          \n          var top = self.getScrollTop();\n          var lef = self.getScrollLeft();\n          self.mangotouch = {sy:top,ly:top,dry:0,sx:lef,lx:lef,drx:0,lazy:false,tm:0};\n          \n          self.bind(self.docscroll,\"scroll\",self.onmangotouch);\n        \n        } else {\n        \n          if (cap.cantouch||self.istouchcapable||self.opt.touchbehavior||cap.hasmstouch) {\n          \n            self.scrollmom = new ScrollMomentumClass2D(self);\n          \n            self.ontouchstart = function(e) {\n              if (e.pointerType&&e.pointerType!=2) return false;\n              \n              if (!self.locked) {\n              \n                if (cap.hasmstouch) {\n                  var tg = (e.target) ? e.target : false;\n                  while (tg) {\n                    var nc = $(tg).getNiceScroll();\n                    if ((nc.length>0)&&(nc[0].me == self.me)) break;\n                    if (nc.length>0) return false;\n                    if ((tg.nodeName=='DIV')&&(tg.id==self.id)) break;\n                    tg = (tg.parentNode) ? tg.parentNode : false;\n                  }\n                }\n              \n                self.cancelScroll();\n                \n                var tg = self.getTarget(e);\n                \n                if (tg) {\n                  var skp = (/INPUT/i.test(tg.nodeName))&&(/range/i.test(tg.type));\n                  if (skp) return self.stopPropagation(e);\n                }\n                \n                if (!(\"clientX\" in e) && (\"changedTouches\" in e)) {\n                  e.clientX = e.changedTouches[0].clientX;\n                  e.clientY = e.changedTouches[0].clientY;\n                }\n                \n                if (self.forcescreen) {\n                  var le = e;\n                  var e = {\"original\":(e.original)?e.original:e};\n                  e.clientX = le.screenX;\n                  e.clientY = le.screenY;    \n                }\n                \n                self.rail.drag = {x:e.clientX,y:e.clientY,sx:self.scroll.x,sy:self.scroll.y,st:self.getScrollTop(),sl:self.getScrollLeft(),pt:2,dl:false};\n                \n                if (self.ispage||!self.opt.directionlockdeadzone) {\n                  self.rail.drag.dl = \"f\";\n                } else {\n                \n                  var view = {\n                    w:$(window).width(),\n                    h:$(window).height()\n                  };\n                  \n                  var page = {\n                    w:Math.max(document.body.scrollWidth,document.documentElement.scrollWidth),\n                    h:Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)\n                  }\n                  \n                  var maxh = Math.max(0,page.h - view.h);\n                  var maxw = Math.max(0,page.w - view.w);                \n                \n                  if (!self.rail.scrollable&&self.railh.scrollable) self.rail.drag.ck = (maxh>0) ? \"v\" : false;\n                  else if (self.rail.scrollable&&!self.railh.scrollable) self.rail.drag.ck = (maxw>0) ? \"h\" : false;\n                  else self.rail.drag.ck = false;\n                  if (!self.rail.drag.ck) self.rail.drag.dl = \"f\";\n                }\n                \n                if (self.opt.touchbehavior&&self.isiframe&&cap.isie) {\n                  var wp = self.win.position();\n                  self.rail.drag.x+=wp.left;\n                  self.rail.drag.y+=wp.top;\n                }\n                \n                self.hasmoving = false;\n                self.lastmouseup = false;\n                self.scrollmom.reset(e.clientX,e.clientY);\n                if (!cap.cantouch&&!this.istouchcapable&&!cap.hasmstouch) {\n                  \n                  var ip = (tg)?/INPUT|SELECT|TEXTAREA/i.test(tg.nodeName):false;\n                  if (!ip) {\n                    if (!self.ispage&&cap.hasmousecapture) tg.setCapture();                   \n//                  return self.cancelEvent(e);\n                    return (self.opt.touchbehavior) ? self.cancelEvent(e) : self.stopPropagation(e);\n                  }\n                  if (/SUBMIT|CANCEL|BUTTON/i.test($(tg).attr('type'))) {\n                    pc = {\"tg\":tg,\"click\":false};\n                    self.preventclick = pc;\n                  }\n                  \n                }\n              }\n              \n            };\n            \n            self.ontouchend = function(e) {\n              if (e.pointerType&&e.pointerType!=2) return false;\n              if (self.rail.drag&&(self.rail.drag.pt==2)) {\n                self.scrollmom.doMomentum();\n                self.rail.drag = false;\n                if (self.hasmoving) {\n                  self.hasmoving = false;\n                  self.lastmouseup = true;\n                  self.hideCursor();\n                  if (cap.hasmousecapture) document.releaseCapture();\n                  if (!cap.cantouch) return self.cancelEvent(e);\n                }                            \n              }                        \n              \n            };\n            \n            var moveneedoffset = (self.opt.touchbehavior&&self.isiframe&&!cap.hasmousecapture);\n            \n            self.ontouchmove = function(e,byiframe) {\n              \n              if (e.pointerType&&e.pointerType!=2) return false;\n    \n              if (self.rail.drag&&(self.rail.drag.pt==2)) {\n                if (cap.cantouch&&(typeof e.original == \"undefined\")) return true;  // prevent ios \"ghost\" events by clickable elements\n              \n                self.hasmoving = true;\n\n                if (self.preventclick&&!self.preventclick.click) {\n                  self.preventclick.click = self.preventclick.tg.onclick||false;                \n                  self.preventclick.tg.onclick = self.onpreventclick;\n                }\n\n                var ev = $.extend({\"original\":e},e);\n                e = ev;\n                \n                if ((\"changedTouches\" in e)) {\n                  e.clientX = e.changedTouches[0].clientX;\n                  e.clientY = e.changedTouches[0].clientY;\n                }                \n                \n                if (self.forcescreen) {\n                  var le = e;\n                  var e = {\"original\":(e.original)?e.original:e};\n                  e.clientX = le.screenX;\n                  e.clientY = le.screenY;      \n                }\n                \n                var ofx = ofy = 0;\n                \n                if (moveneedoffset&&!byiframe) {\n                  var wp = self.win.position();\n                  ofx=-wp.left;\n                  ofy=-wp.top;\n                }                \n                \n                var fy = e.clientY + ofy;\n                var my = (fy-self.rail.drag.y);\n                var fx = e.clientX + ofx;\n                var mx = (fx-self.rail.drag.x);\n                \n                var ny = self.rail.drag.st-my;\n                \n                if (self.ishwscroll&&self.opt.bouncescroll) {\n                  if (ny<0) {\n                    ny = Math.round(ny/2);\n//                    fy = 0;\n                  }\n                  else if (ny>self.page.maxh) {\n                    ny = self.page.maxh+Math.round((ny-self.page.maxh)/2);\n//                    fy = 0;\n                  }\n                } else {\n                  if (ny<0) {ny=0;fy=0}\n                  if (ny>self.page.maxh) {ny=self.page.maxh;fy=0}\n                }\n                  \n                if (self.railh&&self.railh.scrollable) {\n                  var nx = self.rail.drag.sl-mx;\n                  \n                  if (self.ishwscroll&&self.opt.bouncescroll) {                  \n                    if (nx<0) {\n                      nx = Math.round(nx/2);\n//                      fx = 0;\n                    }\n                    else if (nx>self.page.maxw) {\n                      nx = self.page.maxw+Math.round((nx-self.page.maxw)/2);\n//                      fx = 0;\n                    }\n                  } else {\n                    if (nx<0) {nx=0;fx=0}\n                    if (nx>self.page.maxw) {nx=self.page.maxw;fx=0}\n                  }\n                \n                }\n                \n                var grabbed = false;\n                if (self.rail.drag.dl) {\n                  grabbed = true;\n                  if (self.rail.drag.dl==\"v\") nx = self.rail.drag.sl;\n                  else if (self.rail.drag.dl==\"h\") ny = self.rail.drag.st;                  \n                } else {\n                  var ay = Math.abs(my);\n                  var ax = Math.abs(mx);\n                  var dz = self.opt.directionlockdeadzone;\n                  if (self.rail.drag.ck==\"v\") {    \n                    if (ay>dz&&(ax<=(ay*0.3))) {\n                      self.rail.drag = false;                      \n                      return true;\n                    }\n                    else if (ax>dz) {\n                      self.rail.drag.dl=\"f\";                      \n                      $(\"body\").scrollTop($(\"body\").scrollTop());  // stop iOS native scrolling (when active javascript has blocked)\n                    }\n                  }\n                  else if (self.rail.drag.ck==\"h\") {\n                    if (ax>dz&&(ay<=(ax*0.3))) {\n                      self.rail.drag = false;                      \n                      return true;\n                    }\n                    else if (ay>dz) {                      \n                      self.rail.drag.dl=\"f\";\n                      $(\"body\").scrollLeft($(\"body\").scrollLeft());  // stop iOS native scrolling (when active javascript has blocked)\n                    }\n                  }  \n                }\n                \n                self.synched(\"touchmove\",function(){\n                  if (self.rail.drag&&(self.rail.drag.pt==2)) {\n                    if (self.prepareTransition) self.prepareTransition(0);\n                    if (self.rail.scrollable) self.setScrollTop(ny);\n                    self.scrollmom.update(fx,fy);\n                    if (self.railh&&self.railh.scrollable) {\n                      self.setScrollLeft(nx);\n                      self.showCursor(ny,nx);\n                    } else {\n                      self.showCursor(ny);\n                    }\n                    if (cap.isie10) document.selection.clear();\n                  }\n                });\n                \n                if (cap.ischrome&&self.istouchcapable) grabbed=false;  //chrome touch emulation doesn't like!\n                if (grabbed) return self.cancelEvent(e);\n              }\n              \n            };\n          \n          }\n          \n          self.onmousedown = function(e,hronly) {    \n            if (self.rail.drag&&self.rail.drag.pt!=1) return;\n            if (self.locked) return self.cancelEvent(e);            \n            self.cancelScroll();              \n            self.rail.drag = {x:e.clientX,y:e.clientY,sx:self.scroll.x,sy:self.scroll.y,pt:1,hr:(!!hronly)};\n            var tg = self.getTarget(e);\n            if (!self.ispage&&cap.hasmousecapture) tg.setCapture();\n            if (self.isiframe&&!cap.hasmousecapture) {\n              self.saved[\"csspointerevents\"] = self.doc.css(\"pointer-events\");\n              self.css(self.doc,{\"pointer-events\":\"none\"});\n            }\n            return self.cancelEvent(e);\n          };\n          \n          self.onmouseup = function(e) {\n            if (self.rail.drag) {\n              if (cap.hasmousecapture) document.releaseCapture();\n              if (self.isiframe&&!cap.hasmousecapture) self.doc.css(\"pointer-events\",self.saved[\"csspointerevents\"]);\n              if(self.rail.drag.pt!=1)return;\n              self.rail.drag = false;\n              //if (!self.rail.active) self.hideCursor();\n              return self.cancelEvent(e);\n            }\n          };        \n          \n          self.onmousemove = function(e) {\n            if (self.rail.drag) {\n              if(self.rail.drag.pt!=1)return;\n              \n              if (cap.ischrome&&e.which==0) return self.onmouseup(e);\n              \n              self.cursorfreezed = true;\n                  \n              if (self.rail.drag.hr) {\n                self.scroll.x = self.rail.drag.sx + (e.clientX-self.rail.drag.x);\n                if (self.scroll.x<0) self.scroll.x=0;\n                var mw = self.scrollvaluemaxw;\n                if (self.scroll.x>mw) self.scroll.x=mw;\n              } else {                \n                self.scroll.y = self.rail.drag.sy + (e.clientY-self.rail.drag.y);\n                if (self.scroll.y<0) self.scroll.y=0;\n                var my = self.scrollvaluemax;\n                if (self.scroll.y>my) self.scroll.y=my;\n              }\n              \n              self.synched('mousemove',function(){\n                if (self.rail.drag&&(self.rail.drag.pt==1)) {\n                  self.showCursor();\n                  if (self.rail.drag.hr) self.doScrollLeft(Math.round(self.scroll.x*self.scrollratio.x),self.opt.cursordragspeed);\n                  else self.doScrollTop(Math.round(self.scroll.y*self.scrollratio.y),self.opt.cursordragspeed);\n                }\n              });\n              \n              return self.cancelEvent(e);\n            } \n/*              \n            else {\n              self.checkarea = true;\n            }\n*/              \n          };          \n         \n          if (cap.cantouch||self.opt.touchbehavior) {\n          \n            self.onpreventclick = function(e) {\n              if (self.preventclick) {\n                self.preventclick.tg.onclick = self.preventclick.click;\n                self.preventclick = false;            \n                return self.cancelEvent(e);\n              }\n            }\n          \n//            self.onmousedown = self.ontouchstart;            \n//            self.onmouseup = self.ontouchend;\n//            self.onmousemove = self.ontouchmove;\n\n            self.bind(self.win,\"mousedown\",self.ontouchstart);  // control content dragging\n\n            self.onclick = (cap.isios) ? false : function(e) { \n              if (self.lastmouseup) {\n                self.lastmouseup = false;\n                return self.cancelEvent(e);\n              } else {\n                return true;\n              }\n            }; \n            \n            if (self.opt.grabcursorenabled&&cap.cursorgrabvalue) {\n              self.css((self.ispage)?self.doc:self.win,{'cursor':cap.cursorgrabvalue});            \n              self.css(self.rail,{'cursor':cap.cursorgrabvalue});\n            }\n            \n          } else {\n\n            function checkSelectionScroll(e) {\n              if (!self.selectiondrag) return;\n              \n              if (e) {\n                var ww = self.win.outerHeight();\n                var df = (e.pageY - self.selectiondrag.top);\n                if (df>0&&df<ww) df=0;\n                if (df>=ww) df-=ww;\n                self.selectiondrag.df = df;                \n              }\n              if (self.selectiondrag.df==0) return;\n              \n              var rt = -Math.floor(self.selectiondrag.df/6)*2;              \n//              self.doScrollTop(self.getScrollTop(true)+rt);\n              self.doScrollBy(rt);\n              \n              self.debounced(\"doselectionscroll\",function(){checkSelectionScroll()},50);\n            }\n            \n            if (\"getSelection\" in document) {  // A grade - Major browsers\n              self.hasTextSelected = function() {  \n                return (document.getSelection().rangeCount>0);\n              }\n            } \n            else if (\"selection\" in document) {  //IE9-\n              self.hasTextSelected = function() {\n                return (document.selection.type != \"None\");\n              }\n            } \n            else {\n              self.hasTextSelected = function() {  // no support\n                return false;\n              }\n            }            \n            \n            self.onselectionstart = function(e) {\n              if (self.ispage) return;\n              self.selectiondrag = self.win.offset();\n            }\n            self.onselectionend = function(e) {\n              self.selectiondrag = false;\n            }\n            self.onselectiondrag = function(e) {              \n              if (!self.selectiondrag) return;\n              if (self.hasTextSelected()) self.debounced(\"selectionscroll\",function(){checkSelectionScroll(e)},250);\n            }\n            \n            \n          }\n          \n          if (cap.hasmstouch) {\n            self.css(self.rail,{'-ms-touch-action':'none'});\n            self.css(self.cursor,{'-ms-touch-action':'none'});\n            \n            self.bind(self.win,\"MSPointerDown\",self.ontouchstart);\n            self.bind(document,\"MSPointerUp\",self.ontouchend);\n            self.bind(document,\"MSPointerMove\",self.ontouchmove);\n            self.bind(self.cursor,\"MSGestureHold\",function(e){e.preventDefault()});\n            self.bind(self.cursor,\"contextmenu\",function(e){e.preventDefault()});\n          }\n\n          if (this.istouchcapable) {  //desktop with screen touch enabled\n            self.bind(self.win,\"touchstart\",self.ontouchstart);\n            self.bind(document,\"touchend\",self.ontouchend);\n            self.bind(document,\"touchcancel\",self.ontouchend);\n            self.bind(document,\"touchmove\",self.ontouchmove);            \n          }\n          \n          self.bind(self.cursor,\"mousedown\",self.onmousedown);\n          self.bind(self.cursor,\"mouseup\",self.onmouseup);\n\n          if (self.railh) {\n            self.bind(self.cursorh,\"mousedown\",function(e){self.onmousedown(e,true)});\n            self.bind(self.cursorh,\"mouseup\",function(e){\n              if (self.rail.drag&&self.rail.drag.pt==2) return;\n              self.rail.drag = false;\n              self.hasmoving = false;\n              self.hideCursor();\n              if (cap.hasmousecapture) document.releaseCapture();\n              return self.cancelEvent(e);\n            });\n          }\n\t\t\n          if (self.opt.cursordragontouch||!cap.cantouch&&!self.opt.touchbehavior) {\n\n            self.rail.css({\"cursor\":\"default\"});\n            self.railh&&self.railh.css({\"cursor\":\"default\"});          \n          \n            self.jqbind(self.rail,\"mouseenter\",function() {\n              if (self.canshowonmouseevent) self.showCursor();\n              self.rail.active = true;\n            });\n            self.jqbind(self.rail,\"mouseleave\",function() { \n              self.rail.active = false;\n              if (!self.rail.drag) self.hideCursor();\n            });\n            \n            if (self.opt.sensitiverail) {\n              self.bind(self.rail,\"click\",function(e){self.doRailClick(e,false,false)});\n              self.bind(self.rail,\"dblclick\",function(e){self.doRailClick(e,true,false)});\n              self.bind(self.cursor,\"click\",function(e){self.cancelEvent(e)});\n              self.bind(self.cursor,\"dblclick\",function(e){self.cancelEvent(e)});\n            }\n\n            if (self.railh) {\n              self.jqbind(self.railh,\"mouseenter\",function() {\n                if (self.canshowonmouseevent) self.showCursor();\n                self.rail.active = true;\n              });          \n              self.jqbind(self.railh,\"mouseleave\",function() { \n                self.rail.active = false;\n                if (!self.rail.drag) self.hideCursor();\n              });\n              \n              if (self.opt.sensitiverail) {\n                self.bind(self.railh, \"click\", function(e){self.doRailClick(e,false,true)});\n                self.bind(self.railh, \"dblclick\", function(e){self.doRailClick(e, true, true) });\n                self.bind(self.cursorh, \"click\", function (e) { self.cancelEvent(e) });\n                self.bind(self.cursorh, \"dblclick\", function (e) { self.cancelEvent(e) });\n              }\n              \n            }\n          \n          }\n    \n          if (!cap.cantouch&&!self.opt.touchbehavior) {\n\n            self.bind((cap.hasmousecapture)?self.win:document,\"mouseup\",self.onmouseup);            \n            self.bind(document,\"mousemove\",self.onmousemove);\n            if (self.onclick) self.bind(document,\"click\",self.onclick);\n            \n            if (!self.ispage&&self.opt.enablescrollonselection) {\n              self.bind(self.win[0],\"mousedown\",self.onselectionstart);\n              self.bind(document,\"mouseup\",self.onselectionend);\n              self.bind(self.cursor,\"mouseup\",self.onselectionend);\n              if (self.cursorh) self.bind(self.cursorh,\"mouseup\",self.onselectionend);\n              self.bind(document,\"mousemove\",self.onselectiondrag);\n            }\n\n\t\t\t\t\t\tif (self.zoom) {\n\t\t\t\t\t\t\tself.jqbind(self.zoom,\"mouseenter\",function() {\n\t\t\t\t\t\t\t\tif (self.canshowonmouseevent) self.showCursor();\n\t\t\t\t\t\t\t\tself.rail.active = true;\n\t\t\t\t\t\t\t});          \n\t\t\t\t\t\t\tself.jqbind(self.zoom,\"mouseleave\",function() { \n\t\t\t\t\t\t\t\tself.rail.active = false;\n\t\t\t\t\t\t\t\tif (!self.rail.drag) self.hideCursor();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n          } else {\n            \n            self.bind((cap.hasmousecapture)?self.win:document,\"mouseup\",self.ontouchend);\n            self.bind(document,\"mousemove\",self.ontouchmove);\n            if (self.onclick) self.bind(document,\"click\",self.onclick);\n            \n            if (self.opt.cursordragontouch) {\n              self.bind(self.cursor,\"mousedown\",self.onmousedown);\n              self.bind(self.cursor,\"mousemove\",self.onmousemove);\n              self.cursorh&&self.bind(self.cursorh,\"mousedown\",self.onmousedown);\n              self.cursorh&&self.bind(self.cursorh,\"mousemove\",self.onmousemove);\n            }\n          \n          }\n\t\t\t\t\t\t\n\t\t\t\t\tif (self.opt.enablemousewheel) {\n\t\t\t\t\t\tif (!self.isiframe) self.bind((cap.isie&&self.ispage) ? document : self.win /*self.docscroll*/ ,\"mousewheel\",self.onmousewheel);\n\t\t\t\t\t\tself.bind(self.rail,\"mousewheel\",self.onmousewheel);\n\t\t\t\t\t\tif (self.railh) self.bind(self.railh,\"mousewheel\",self.onmousewheelhr);\n\t\t\t\t\t}\t\t\t\t\t\t\n\t\t\t\t\t\t\n          if (!self.ispage&&!cap.cantouch&&!(/HTML|BODY/.test(self.win[0].nodeName))) {\n            if (!self.win.attr(\"tabindex\")) self.win.attr({\"tabindex\":tabindexcounter++});\n            \n            self.jqbind(self.win,\"focus\",function(e) {\n              domfocus = (self.getTarget(e)).id||true;\n              self.hasfocus = true;\n              if (self.canshowonmouseevent) self.noticeCursor();\n            });\n            self.jqbind(self.win,\"blur\",function(e) {\n              domfocus = false;\n              self.hasfocus = false;\n            });\n            \n            self.jqbind(self.win,\"mouseenter\",function(e) {\n              mousefocus = (self.getTarget(e)).id||true;\n              self.hasmousefocus = true;\n              if (self.canshowonmouseevent) self.noticeCursor();\n            });\n            self.jqbind(self.win,\"mouseleave\",function() {\n              mousefocus = false;\n              self.hasmousefocus = false;\n            });\n            \n          };\n          \n        }  // !ie9mobile\n        \n        //Thanks to http://www.quirksmode.org !!\n        self.onkeypress = function(e) {\n          if (self.locked&&self.page.maxh==0) return true;\n          \n          e = (e) ? e : window.e;\n          var tg = self.getTarget(e);\n          if (tg&&/INPUT|TEXTAREA|SELECT|OPTION/.test(tg.nodeName)) {\n            var tp = tg.getAttribute('type')||tg.type||false;            \n            if ((!tp)||!(/submit|button|cancel/i.tp)) return true;\n          }\n          \n          if (self.hasfocus||(self.hasmousefocus&&!domfocus)||(self.ispage&&!domfocus&&!mousefocus)) {\n            var key = e.keyCode;\n            \n            if (self.locked&&key!=27) return self.cancelEvent(e);\n\n            var ctrl = e.ctrlKey||false;\n            var shift = e.shiftKey || false;\n            \n            var ret = false;\n            switch (key) {\n              case 38:\n              case 63233: //safari\n                self.doScrollBy(24*3);\n                ret = true;\n                break;\n              case 40:\n              case 63235: //safari\n                self.doScrollBy(-24*3);\n                ret = true;\n                break;\n              case 37:\n              case 63232: //safari\n                if (self.railh) {\n                  (ctrl) ? self.doScrollLeft(0) : self.doScrollLeftBy(24*3);\n                  ret = true;\n                }\n                break;\n              case 39:\n              case 63234: //safari\n                if (self.railh) {\n                  (ctrl) ? self.doScrollLeft(self.page.maxw) : self.doScrollLeftBy(-24*3);\n                  ret = true;\n                }\n                break;\n              case 33:\n              case 63276: // safari\n                self.doScrollBy(self.view.h);\n                ret = true;\n                break;\n              case 34:\n              case 63277: // safari\n                self.doScrollBy(-self.view.h);\n                ret = true;\n                break;\n              case 36:\n              case 63273: // safari                \n                (self.railh&&ctrl) ? self.doScrollPos(0,0) : self.doScrollTo(0);\n                ret = true;\n                break;\n              case 35:\n              case 63275: // safari\n                (self.railh&&ctrl) ? self.doScrollPos(self.page.maxw,self.page.maxh) : self.doScrollTo(self.page.maxh);\n                ret = true;\n                break;\n              case 32:\n                if (self.opt.spacebarenabled) {\n                  (shift) ? self.doScrollBy(self.view.h) : self.doScrollBy(-self.view.h);\n                  ret = true;\n                }\n                break;\n              case 27: // ESC\n                if (self.zoomactive) {\n                  self.doZoom();\n                  ret = true;\n                }\n                break;\n            }\n            if (ret) return self.cancelEvent(e);\n          }\n        };\n        \n        if (self.opt.enablekeyboard) self.bind(document,(cap.isopera&&!cap.isopera12)?\"keypress\":\"keydown\",self.onkeypress);\n        \n        self.bind(window,'resize',self.lazyResize);\n        self.bind(window,'orientationchange',self.lazyResize);\n        \n        self.bind(window,\"load\",self.lazyResize);\n\t\t\n        if (cap.ischrome&&!self.ispage&&!self.haswrapper) { //chrome void scrollbar bug - it persists in version 26\n          var tmp=self.win.attr(\"style\");\n\t\t\t\t\tvar ww = parseFloat(self.win.css(\"width\"))+1;\n          self.win.css('width',ww);\n          self.synched(\"chromefix\",function(){self.win.attr(\"style\",tmp)});\n        }\n        \n        \n// Trying a cross-browser implementation - good luck!\n\n        self.onAttributeChange = function(e) {\n          self.lazyResize(250);\n        }\n        \n        if (!self.ispage&&!self.haswrapper) {\n          // redesigned MutationObserver for Chrome18+/Firefox14+/iOS6+ with support for: remove div, add/remove content\n          if (clsMutationObserver !== false) {\n            self.observer = new clsMutationObserver(function(mutations) {            \n              mutations.forEach(self.onAttributeChange);\n            });\n            self.observer.observe(self.win[0],{childList: true, characterData: false, attributes: true, subtree: false});\n            \n            self.observerremover = new clsMutationObserver(function(mutations) {\n               mutations.forEach(function(mo){\n                 if (mo.removedNodes.length>0) {\n                   for (var dd in mo.removedNodes) {\n                     if (mo.removedNodes[dd]==self.win[0]) return self.remove();\n                   }\n                 }\n               });\n            });\n            self.observerremover.observe(self.win[0].parentNode,{childList: true, characterData: false, attributes: false, subtree: false});\n            \n          } else {        \n            self.bind(self.win,(cap.isie&&!cap.isie9)?\"propertychange\":\"DOMAttrModified\",self.onAttributeChange);            \n            if (cap.isie9) self.win[0].attachEvent(\"onpropertychange\",self.onAttributeChange); //IE9 DOMAttrModified bug\n            self.bind(self.win,\"DOMNodeRemoved\",function(e){\n              if (e.target==self.win[0]) self.remove();\n            });\n          }\n        }\n        \n//\n\n        if (!self.ispage&&self.opt.boxzoom) self.bind(window,\"resize\",self.resizeZoom);\n        if (self.istextarea) self.bind(self.win,\"mouseup\",self.lazyResize);\n        \n        self.checkrtlmode = true;\n        self.lazyResize(30);\n        \n      }\n      \n      if (this.doc[0].nodeName == 'IFRAME') {\n        function oniframeload(e) {\n          self.iframexd = false;\n          try {\n            var doc = 'contentDocument' in this ? this.contentDocument : this.contentWindow.document;\n            var a = doc.domain;            \n          } catch(e){self.iframexd = true;doc=false};\n          \n          if (self.iframexd) {\n            if (\"console\" in window) console.log('NiceScroll error: policy restriced iframe');\n            return true;  //cross-domain - I can't manage this        \n          }\n          \n          self.forcescreen = true;\n          \n          if (self.isiframe) {            \n            self.iframe = {\n              \"doc\":$(doc),\n              \"html\":self.doc.contents().find('html')[0],\n              \"body\":self.doc.contents().find('body')[0]\n            };\n            self.getContentSize = function(){\n              return {\n                w:Math.max(self.iframe.html.scrollWidth,self.iframe.body.scrollWidth),\n                h:Math.max(self.iframe.html.scrollHeight,self.iframe.body.scrollHeight)\n              }\n            }            \n            self.docscroll = $(self.iframe.body);//$(this.contentWindow);\n          }\n          \n          if (!cap.isios&&self.opt.iframeautoresize&&!self.isiframe) {\n            self.win.scrollTop(0); // reset position\n            self.doc.height(\"\");  //reset height to fix browser bug\n            var hh=Math.max(doc.getElementsByTagName('html')[0].scrollHeight,doc.body.scrollHeight);\n            self.doc.height(hh);          \n          }\n          self.lazyResize(30);\n          \n          if (cap.isie7) self.css($(self.iframe.html),{'overflow-y':'hidden'});\n          //self.css($(doc.body),{'overflow-y':'hidden'});\n          self.css($(self.iframe.body),{'overflow-y':'hidden'});\n          \n          if (cap.isios&&self.haswrapper) {\n            self.css($(doc.body),{'-webkit-transform':'translate3d(0,0,0)'});  // avoid iFrame content clipping - thanks to http://blog.derraab.com/2012/04/02/avoid-iframe-content-clipping-with-css-transform-on-ios/\n            \n            console.log(1);\n            \n          }\n          \n          if ('contentWindow' in this) {\n            self.bind(this.contentWindow,\"scroll\",self.onscroll);  //IE8 & minor\n          } else {          \n            self.bind(doc,\"scroll\",self.onscroll);\n          }                    \n          \n          if (self.opt.enablemousewheel) {\n            self.bind(doc,\"mousewheel\",self.onmousewheel);\n          }\n          \n          if (self.opt.enablekeyboard) self.bind(doc,(cap.isopera)?\"keypress\":\"keydown\",self.onkeypress);\n          \n          if (cap.cantouch||self.opt.touchbehavior) {\n            self.bind(doc,\"mousedown\",self.ontouchstart);\n            self.bind(doc,\"mousemove\",function(e){self.ontouchmove(e,true)});\n            if (self.opt.grabcursorenabled&&cap.cursorgrabvalue) self.css($(doc.body),{'cursor':cap.cursorgrabvalue});\n          }\n          \n          self.bind(doc,\"mouseup\",self.ontouchend);\n          \n          if (self.zoom) {\n            if (self.opt.dblclickzoom) self.bind(doc,'dblclick',self.doZoom);\n            if (self.ongesturezoom) self.bind(doc,\"gestureend\",self.ongesturezoom);             \n          }\n        };\n        \n        if (this.doc[0].readyState&&this.doc[0].readyState==\"complete\"){\n          setTimeout(function(){oniframeload.call(self.doc[0],false)},500);\n        }\n        self.bind(this.doc,\"load\",oniframeload);\n        \n      }\n      \n    };\n    \n    this.showCursor = function(py,px) {\n      if (self.cursortimeout) {\n        clearTimeout(self.cursortimeout);\n        self.cursortimeout = 0;\n      }\n      if (!self.rail) return;\n      if (self.autohidedom) {\n        self.autohidedom.stop().css({opacity:self.opt.cursoropacitymax});\n        self.cursoractive = true;\n      }\n      \n      if (!self.rail.drag||self.rail.drag.pt!=1) {      \n        if ((typeof py != \"undefined\")&&(py!==false)) {\n          self.scroll.y = Math.round(py * 1/self.scrollratio.y);\n        }\n        if (typeof px != \"undefined\") {\n          self.scroll.x = Math.round(px * 1/self.scrollratio.x);\n        }\n      }\n      \n      self.cursor.css({height:self.cursorheight,top:self.scroll.y}); \n      if (self.cursorh) {\n        (!self.rail.align&&self.rail.visibility) ? self.cursorh.css({width:self.cursorwidth,left:self.scroll.x+self.rail.width}) : self.cursorh.css({width:self.cursorwidth,left:self.scroll.x});\n        self.cursoractive = true;\n      }\n      \n      if (self.zoom) self.zoom.stop().css({opacity:self.opt.cursoropacitymax});      \n    };\n    \n    this.hideCursor = function(tm) {\n      if (self.cursortimeout) return;\n      if (!self.rail) return;\n      if (!self.autohidedom) return;\n      self.cursortimeout = setTimeout(function() {\n         if (!self.rail.active||!self.showonmouseevent) {\n           self.autohidedom.stop().animate({opacity:self.opt.cursoropacitymin});\n           if (self.zoom) self.zoom.stop().animate({opacity:self.opt.cursoropacitymin});\n           self.cursoractive = false;\n         }\n         self.cursortimeout = 0;\n      },tm||self.opt.hidecursordelay);\n    };\n    \n    this.noticeCursor = function(tm,py,px) {\n      self.showCursor(py,px);\n      if (!self.rail.active) self.hideCursor(tm);\n    };\n        \n    this.getContentSize = \n      (self.ispage) ?\n        function(){\n          return {\n            w:Math.max(document.body.scrollWidth,document.documentElement.scrollWidth),\n            h:Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)\n          }\n        }\n      : (self.haswrapper) ?\n        function(){\n          return {\n            w:self.doc.outerWidth()+parseInt(self.win.css('paddingLeft'))+parseInt(self.win.css('paddingRight')),\n            h:self.doc.outerHeight()+parseInt(self.win.css('paddingTop'))+parseInt(self.win.css('paddingBottom'))\n          }\n        }\n      : function() {        \n        return {\n          w:self.docscroll[0].scrollWidth,\n          h:self.docscroll[0].scrollHeight\n        }\n      };\n  \n    this.onResize = function(e,page) {\n    \n\t  if (!self.win) return false;\n\t\n      if (!self.haswrapper&&!self.ispage) {\n        if (self.win.css('display')=='none') {\n          if (self.visibility) self.hideRail().hideRailHr();\n          return false;\n        } else {          \n          if (!self.hidden&&!self.visibility) self.showRail().showRailHr();\n        }        \n      }\n    \n      var premaxh = self.page.maxh;\n      var premaxw = self.page.maxw;\n\n      var preview = {h:self.view.h,w:self.view.w};   \n      \n      self.view = {\n        w:(self.ispage) ? self.win.width() : parseInt(self.win[0].clientWidth),\n        h:(self.ispage) ? self.win.height() : parseInt(self.win[0].clientHeight)\n      };\n      \n      self.page = (page) ? page : self.getContentSize();\n      \n      self.page.maxh = Math.max(0,self.page.h - self.view.h);\n      self.page.maxw = Math.max(0,self.page.w - self.view.w);\n      \n      if ((self.page.maxh==premaxh)&&(self.page.maxw==premaxw)&&(self.view.w==preview.w)) {\n        // test position        \n        if (!self.ispage) {\n          var pos = self.win.offset();\n          if (self.lastposition) {\n            var lst = self.lastposition;\n            if ((lst.top==pos.top)&&(lst.left==pos.left)) return self; //nothing to do            \n          }\n          self.lastposition = pos;\n        } else {\n          return self; //nothing to do\n        }\n      }\n      \n      if (self.page.maxh==0) {\n        self.hideRail();        \n        self.scrollvaluemax = 0;\n        self.scroll.y = 0;\n        self.scrollratio.y = 0;\n        self.cursorheight = 0;\n        self.setScrollTop(0);\n        self.rail.scrollable = false;\n      } else {       \n        self.rail.scrollable = true;\n      }\n      \n      if (self.page.maxw==0) {\n        self.hideRailHr();\n        self.scrollvaluemaxw = 0;\n        self.scroll.x = 0;\n        self.scrollratio.x = 0;\n        self.cursorwidth = 0;\n        self.setScrollLeft(0);\n        self.railh.scrollable = false;\n      } else {        \n        self.railh.scrollable = true;\n      }\n  \n      self.locked = (self.page.maxh==0)&&(self.page.maxw==0);\n      if (self.locked) {\n\t\t\t\tif (!self.ispage) self.updateScrollBar(self.view);\n\t\t\t  return false;\n\t\t  }\n\n      if (!self.hidden&&!self.visibility) {\n        self.showRail().showRailHr();\n      }      \n      else if (!self.hidden&&!self.railh.visibility) self.showRailHr();\n      \n      if (self.istextarea&&self.win.css('resize')&&self.win.css('resize')!='none') self.view.h-=20;      \n\n      self.cursorheight = Math.min(self.view.h,Math.round(self.view.h * (self.view.h / self.page.h)));\n      self.cursorheight = (self.opt.cursorfixedheight) ? self.opt.cursorfixedheight : Math.max(self.opt.cursorminheight,self.cursorheight);\n\n      self.cursorwidth = Math.min(self.view.w,Math.round(self.view.w * (self.view.w / self.page.w)));\n      self.cursorwidth = (self.opt.cursorfixedheight) ? self.opt.cursorfixedheight : Math.max(self.opt.cursorminheight,self.cursorwidth);\n      \n      self.scrollvaluemax = self.view.h-self.cursorheight-self.cursor.hborder;\n      \n      if (self.railh) {\n        self.railh.width = (self.page.maxh>0) ? (self.view.w-self.rail.width) : self.view.w;\n        self.scrollvaluemaxw = self.railh.width-self.cursorwidth-self.cursorh.wborder;\n      }\n      \n      if (self.checkrtlmode&&self.railh) {\n        self.checkrtlmode = false;\n        if (self.opt.rtlmode&&self.scroll.x==0) self.setScrollLeft(self.page.maxw);\n      }\n      \n      if (!self.ispage) self.updateScrollBar(self.view);\n      \n      self.scrollratio = {\n        x:(self.page.maxw/self.scrollvaluemaxw),\n        y:(self.page.maxh/self.scrollvaluemax)\n      };\n     \n      var sy = self.getScrollTop();\n      if (sy>self.page.maxh) {\n        self.doScrollTop(self.page.maxh);\n      } else {     \n        self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y));\n        self.scroll.x = Math.round(self.getScrollLeft() * (1/self.scrollratio.x));\n        if (self.cursoractive) self.noticeCursor();     \n      }      \n      \n      if (self.scroll.y&&(self.getScrollTop()==0)) self.doScrollTo(Math.floor(self.scroll.y*self.scrollratio.y));\n      \n      return self;\n    };\n    \n    this.resize = self.onResize;\n    \n    this.lazyResize = function(tm) {   // event debounce\n      tm = (isNaN(tm)) ? 30 : tm;\n      self.delayed('resize',self.resize,tm);\n      return self;\n    }\n   \n// modified by MDN https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/wheel\n    function _modernWheelEvent(dom,name,fn,bubble) {      \n      self._bind(dom,name,function(e){\n        var  e = (e) ? e : window.event;\n        var event = {\n          original: e,\n          target: e.target || e.srcElement,\n          type: \"wheel\",\n          deltaMode: e.type == \"MozMousePixelScroll\" ? 0 : 1,\n          deltaX: 0,\n          deltaZ: 0,\n          preventDefault: function() {\n            e.preventDefault ? e.preventDefault() : e.returnValue = false;\n            return false;\n          },\n          stopImmediatePropagation: function() {\n            (e.stopImmediatePropagation) ? e.stopImmediatePropagation() : e.cancelBubble = true;\n          }\n        };\n            \n        if (name==\"mousewheel\") {\n          event.deltaY = - 1/40 * e.wheelDelta;\n          e.wheelDeltaX && (event.deltaX = - 1/40 * e.wheelDeltaX);\n        } else {\n          event.deltaY = e.detail;\n        }\n\n        return fn.call(dom,event);      \n      },bubble);\n    };     \n   \n    this._bind = function(el,name,fn,bubble) {  // primitive bind\n      self.events.push({e:el,n:name,f:fn,b:bubble,q:false});\n      if (el.addEventListener) {\n        el.addEventListener(name,fn,bubble||false);\n      }\n      else if (el.attachEvent) {\n        el.attachEvent(\"on\"+name,fn);\n      }\n      else {\n        el[\"on\"+name] = fn;        \n      }        \n    };\n   \n    this.jqbind = function(dom,name,fn) {  // use jquery bind for non-native events (mouseenter/mouseleave)\n      self.events.push({e:dom,n:name,f:fn,q:true});\n      $(dom).bind(name,fn);\n    }\n   \n    this.bind = function(dom,name,fn,bubble) {  // touch-oriented & fixing jquery bind\n      var el = (\"jquery\" in dom) ? dom[0] : dom;\n      \n      if (name=='mousewheel') {\n        if (\"onwheel\" in self.win) {            \n          self._bind(el,\"wheel\",fn,bubble||false);\n        } else {            \n          var wname = (typeof document.onmousewheel != \"undefined\") ? \"mousewheel\" : \"DOMMouseScroll\";  // older IE/Firefox\n          _modernWheelEvent(el,wname,fn,bubble||false);\n          if (wname==\"DOMMouseScroll\") _modernWheelEvent(el,\"MozMousePixelScroll\",fn,bubble||false);  // Firefox legacy\n        }\n      } \n      else if (el.addEventListener) {\n        if (cap.cantouch && /mouseup|mousedown|mousemove/.test(name)) {  // touch device support\n          var tt=(name=='mousedown')?'touchstart':(name=='mouseup')?'touchend':'touchmove';\n          self._bind(el,tt,function(e){\n            if (e.touches) {\n              if (e.touches.length<2) {var ev=(e.touches.length)?e.touches[0]:e;ev.original=e;fn.call(this,ev);}\n            } \n            else if (e.changedTouches) {var ev=e.changedTouches[0];ev.original=e;fn.call(this,ev);}  //blackberry\n          },bubble||false);\n        }\n        self._bind(el,name,fn,bubble||false);\n        if (cap.cantouch && name==\"mouseup\") self._bind(el,\"touchcancel\",fn,bubble||false);\n      }\n      else {\n        self._bind(el,name,function(e) {\n          e = e||window.event||false;\n          if (e) {\n            if (e.srcElement) e.target=e.srcElement;\n          }\n          if (!(\"pageY\" in e)) {\n            e.pageX = e.clientX + document.documentElement.scrollLeft;\n            e.pageY = e.clientY + document.documentElement.scrollTop; \n          }\n          return ((fn.call(el,e)===false)||bubble===false) ? self.cancelEvent(e) : true;\n        });\n      } \n    };\n    \n    this._unbind = function(el,name,fn,bub) {  // primitive unbind\n      if (el.removeEventListener) {\n        el.removeEventListener(name,fn,bub);\n      }\n      else if (el.detachEvent) {\n        el.detachEvent('on'+name,fn);\n      } else {\n        el['on'+name] = false;\n      }\n    };\n    \n    this.unbindAll = function() {\n      for(var a=0;a<self.events.length;a++) {\n        var r = self.events[a];        \n        (r.q) ? r.e.unbind(r.n,r.f) : self._unbind(r.e,r.n,r.f,r.b);\n      }\n    };\n    \n    // Thanks to http://www.switchonthecode.com !!\n    this.cancelEvent = function(e) {\n      var e = (e.original) ? e.original : (e) ? e : window.event||false;\n      if (!e) return false;      \n      if(e.preventDefault) e.preventDefault();\n      if(e.stopPropagation) e.stopPropagation();\n      if(e.preventManipulation) e.preventManipulation();  //IE10\n      e.cancelBubble = true;\n      e.cancel = true;\n      e.returnValue = false;\n      return false;\n    };\n\n    this.stopPropagation = function(e) {\n      var e = (e.original) ? e.original : (e) ? e : window.event||false;\n      if (!e) return false;\n      if (e.stopPropagation) return e.stopPropagation();\n      if (e.cancelBubble) e.cancelBubble=true;\n      return false;\n    }\n    \n    this.showRail = function() {\n      if ((self.page.maxh!=0)&&(self.ispage||self.win.css('display')!='none')) {\n        self.visibility = true;\n        self.rail.visibility = true;\n        self.rail.css('display','block');\n      }\n      return self;\n    };\n\n    this.showRailHr = function() {\n      if (!self.railh) return self;\n      if ((self.page.maxw!=0)&&(self.ispage||self.win.css('display')!='none')) {\n        self.railh.visibility = true;\n        self.railh.css('display','block');\n      }\n      return self;\n    };\n    \n    this.hideRail = function() {\n      self.visibility = false;\n      self.rail.visibility = false;\n      self.rail.css('display','none');\n      return self;\n    };\n\n    this.hideRailHr = function() {\n      if (!self.railh) return self;\n      self.railh.visibility = false;\n      self.railh.css('display','none');\n      return self;\n    };\n    \n    this.show = function() {\n      self.hidden = false;\n      self.locked = false;\n      return self.showRail().showRailHr();\n    };\n\n    this.hide = function() {\n      self.hidden = true;\n      self.locked = true;\n      return self.hideRail().hideRailHr();\n    };\n    \n    this.toggle = function() {\n      return (self.hidden) ? self.show() : self.hide();\n    };\n    \n    this.remove = function() {\n      self.stop();\n      if (self.cursortimeout) clearTimeout(self.cursortimeout);\n      self.doZoomOut();\n      self.unbindAll();     \n\n      if (cap.isie9) self.win[0].detachEvent(\"onpropertychange\",self.onAttributeChange); //IE9 DOMAttrModified bug\n      \n      if (self.observer !== false) self.observer.disconnect();\n      if (self.observerremover !== false) self.observerremover.disconnect();      \n      \n      self.events = null;\n      \n      if (self.cursor) {\n        self.cursor.remove();\n      }\n      if (self.cursorh) {\n        self.cursorh.remove();\n      }\n      if (self.rail) {\n        self.rail.remove();\n      }\n      if (self.railh) {\n        self.railh.remove();\n      }\n      if (self.zoom) {\n        self.zoom.remove();\n      }\n      for(var a=0;a<self.saved.css.length;a++) {\n        var d=self.saved.css[a];\n        d[0].css(d[1],(typeof d[2]==\"undefined\") ? '' : d[2]);\n      }\n      self.saved = false;      \n      self.me.data('__nicescroll',''); //erase all traces\n      \n      // memory leak fixed by GianlucaGuarini - thanks a lot!\n      // remove the current nicescroll from the $.nicescroll array & normalize array\n      var lst = $.nicescroll;\n      lst.each(function(i){\n        if (!this) return;\n        if(this.id === self.id) {\n          delete lst[i];          \n          for(var b=++i;b<lst.length;b++,i++) lst[i]=lst[b];\n          lst.length--;\n          if (lst.length) delete lst[lst.length];\n        }\n      });      \n      \n      for (var i in self) {\n        self[i] = null;\n        delete self[i];\n      }\n      \n      self = null;\n      \n    };\n    \n    this.scrollstart = function(fn) {\n      this.onscrollstart = fn;\n      return self;\n    }\n    this.scrollend = function(fn) {\n      this.onscrollend = fn;\n      return self;\n    }\n    this.scrollcancel = function(fn) {\n      this.onscrollcancel = fn;\n      return self;\n    }\n    \n    this.zoomin = function(fn) {\n      this.onzoomin = fn;\n      return self;\n    }\n    this.zoomout = function(fn) {\n      this.onzoomout = fn;\n      return self;\n    }\n    \n    this.isScrollable = function(e) {      \n      var dom = (e.target) ? e.target : e;\n      if (dom.nodeName == 'OPTION') return true;\n      while (dom&&(dom.nodeType==1)&&!(/BODY|HTML/.test(dom.nodeName))) {\n        var dd = $(dom);\n        var ov = dd.css('overflowY')||dd.css('overflowX')||dd.css('overflow')||'';\n        if (/scroll|auto/.test(ov)) return (dom.clientHeight!=dom.scrollHeight);\n        dom = (dom.parentNode) ? dom.parentNode : false;        \n      }\n      return false;\n    };\n\n    this.getViewport = function(me) {      \n      var dom = (me&&me.parentNode) ? me.parentNode : false;\n      while (dom&&(dom.nodeType==1)&&!(/BODY|HTML/.test(dom.nodeName))) {\n        var dd = $(dom);\n        var ov = dd.css('overflowY')||dd.css('overflowX')||dd.css('overflow')||'';\n        if ((/scroll|auto/.test(ov))&&(dom.clientHeight!=dom.scrollHeight)) return dd;\n        if (dd.getNiceScroll().length>0) return dd;\n        dom = (dom.parentNode) ? dom.parentNode : false;\n      }\n      return false;\n    };\n    \n    function execScrollWheel(e,hr,chkscroll) {\n      var px,py;\n      var rt = 1;\n      \n      if (e.deltaMode==0) {  // PIXEL\n        px = -Math.floor(e.deltaX*(self.opt.mousescrollstep/(18*3)));\n        py = -Math.floor(e.deltaY*(self.opt.mousescrollstep/(18*3)));\n      }\n      else if (e.deltaMode==1) {  // LINE\n        px = -Math.floor(e.deltaX*self.opt.mousescrollstep);\n        py = -Math.floor(e.deltaY*self.opt.mousescrollstep);\n      }\n      \n      if (hr&&self.opt.oneaxismousemode&&(px==0)&&py) {  // classic vertical-only mousewheel + browser with x/y support \n        px = py;\n        py = 0;\n      }\n\n      if (px) {\n        if (self.scrollmom) {self.scrollmom.stop()}\n        self.lastdeltax+=px;\n        self.debounced(\"mousewheelx\",function(){var dt=self.lastdeltax;self.lastdeltax=0;if(!self.rail.drag){self.doScrollLeftBy(dt)}},120);\n      }\n      if (py) {\n        if (self.opt.nativeparentscrolling&&chkscroll&&!self.ispage&&!self.zoomactive) {\n          if (py<0) {\n            if (self.getScrollTop()>=self.page.maxh) return true;\n          } else {\n            if (self.getScrollTop()<=0) return true;\n          }\n        }\n        if (self.scrollmom) {self.scrollmom.stop()}\n        self.lastdeltay+=py;\n        self.debounced(\"mousewheely\",function(){var dt=self.lastdeltay;self.lastdeltay=0;if(!self.rail.drag){self.doScrollBy(dt)}},120);\n      }\n      \n      e.stopImmediatePropagation();\n      return e.preventDefault();\n//      return self.cancelEvent(e);\n    };\n    \n    this.onmousewheel = function(e) {          \n      if (self.locked) {\n        self.debounced(\"checkunlock\",self.resize,250);\n        return true;\n      }\n      if (self.rail.drag) return self.cancelEvent(e);\n      \n      if (self.opt.oneaxismousemode==\"auto\"&&e.deltaX!=0) self.opt.oneaxismousemode = false;  // check two-axis mouse support (not very elegant)\n      \n      if (self.opt.oneaxismousemode&&e.deltaX==0) {\n        if (!self.rail.scrollable) {\n          if (self.railh&&self.railh.scrollable) {\n            return self.onmousewheelhr(e);\n          } else {          \n            return true;\n          }\n        }\n      }\n      \n      var nw = +(new Date());\n      var chk = false;\n      if (self.opt.preservenativescrolling&&((self.checkarea+600)<nw)) {\n//        self.checkarea = false;\n        self.nativescrollingarea = self.isScrollable(e);\n        chk = true;\n      }\n      self.checkarea = nw;\n      if (self.nativescrollingarea) return true; // this isn't my business\n//      if (self.locked) return self.cancelEvent(e);\n      var ret = execScrollWheel(e,false,chk);\n      if (ret) self.checkarea = 0;\n      return ret;\n    };\n\n    this.onmousewheelhr = function(e) {\n      if (self.locked||!self.railh.scrollable) return true;\n      if (self.rail.drag) return self.cancelEvent(e);\n      \n      var nw = +(new Date());\n      var chk = false;\n      if (self.opt.preservenativescrolling&&((self.checkarea+600)<nw)) {\n//        self.checkarea = false;\n        self.nativescrollingarea = self.isScrollable(e); \n        chk = true;\n      }\n      self.checkarea = nw;\n      if (self.nativescrollingarea) return true; // this isn't my business\n      if (self.locked) return self.cancelEvent(e);\n\n      return execScrollWheel(e,true,chk);\n    };\n    \n    this.stop = function() {\n      self.cancelScroll();\n      if (self.scrollmon) self.scrollmon.stop();\n      self.cursorfreezed = false;\n      self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y));      \n      self.noticeCursor();\n      return self;\n    };\n    \n    this.getTransitionSpeed = function(dif) {\n      var sp = Math.round(self.opt.scrollspeed*10);\n      var ex = Math.min(sp,Math.round((dif / 20) * self.opt.scrollspeed));\n      return (ex>20) ? ex : 0;\n    }\n    \n    if (!self.opt.smoothscroll) {\n      this.doScrollLeft = function(x,spd) {  //direct\n        var y = self.getScrollTop();\n        self.doScrollPos(x,y,spd);\n      }      \n      this.doScrollTop = function(y,spd) {   //direct\n        var x = self.getScrollLeft();\n        self.doScrollPos(x,y,spd);\n      }\n      this.doScrollPos = function(x,y,spd) {  //direct\n        var nx = (x>self.page.maxw) ? self.page.maxw : x;\n        if (nx<0) nx=0;\n        var ny = (y>self.page.maxh) ? self.page.maxh : y;\n        if (ny<0) ny=0;\n        self.synched('scroll',function(){\n          self.setScrollTop(ny);\n          self.setScrollLeft(nx);\n        });\n      }\n      this.cancelScroll = function() {}; // direct\n    } \n    else if (self.ishwscroll&&cap.hastransition&&self.opt.usetransition) {\n      this.prepareTransition = function(dif,istime) {\n        var ex = (istime) ? ((dif>20)?dif:0) : self.getTransitionSpeed(dif);        \n        var trans = (ex) ? cap.prefixstyle+'transform '+ex+'ms ease-out' : '';\n        if (!self.lasttransitionstyle||self.lasttransitionstyle!=trans) {\n          self.lasttransitionstyle = trans;\n          self.doc.css(cap.transitionstyle,trans);\n        }\n        return ex;\n      };\n      \n      this.doScrollLeft = function(x,spd) {  //trans\n        var y = (self.scrollrunning) ? self.newscrolly : self.getScrollTop();\n        self.doScrollPos(x,y,spd);\n      }      \n      \n      this.doScrollTop = function(y,spd) {   //trans\n        var x = (self.scrollrunning) ? self.newscrollx : self.getScrollLeft();\n        self.doScrollPos(x,y,spd);\n      }\n      \n      this.doScrollPos = function(x,y,spd) {  //trans\n   \n        var py = self.getScrollTop();\n        var px = self.getScrollLeft();        \n      \n        if (((self.newscrolly-py)*(y-py)<0)||((self.newscrollx-px)*(x-px)<0)) self.cancelScroll();  //inverted movement detection      \n        \n        if (self.opt.bouncescroll==false) {\n          if (y<0) y=0;\n          else if (y>self.page.maxh) y=self.page.maxh;\n          if (x<0) x=0;\n          else if (x>self.page.maxw) x=self.page.maxw;\n        }\n        \n        if (self.scrollrunning&&x==self.newscrollx&&y==self.newscrolly) return false;\n        \n        self.newscrolly = y;\n        self.newscrollx = x;\n        \n        self.newscrollspeed = spd||false;\n        \n        if (self.timer) return false;\n        \n        self.timer = setTimeout(function(){\n        \n          var top = self.getScrollTop();\n          var lft = self.getScrollLeft();\n          \n          var dst = {};\n          dst.x = x-lft;\n          dst.y = y-top;\n          dst.px = lft;\n          dst.py = top;\n          \n          var dd = Math.round(Math.sqrt(Math.pow(dst.x,2)+Math.pow(dst.y,2)));          \n          \n//          var df = (self.newscrollspeed) ? self.newscrollspeed : dd;\n          \n          var ms = (self.newscrollspeed && self.newscrollspeed>1) ? self.newscrollspeed : self.getTransitionSpeed(dd);\n          if (self.newscrollspeed&&self.newscrollspeed<=1) ms*=self.newscrollspeed;\n          \n          self.prepareTransition(ms,true);\n          \n          if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm);    \n          \n          if (ms>0) {\n          \n            if (!self.scrollrunning&&self.onscrollstart) {\n              var info = {\"type\":\"scrollstart\",\"current\":{\"x\":lft,\"y\":top},\"request\":{\"x\":x,\"y\":y},\"end\":{\"x\":self.newscrollx,\"y\":self.newscrolly},\"speed\":ms};\n              self.onscrollstart.call(self,info);\n            }\n            \n            if (cap.transitionend) {\n              if (!self.scrollendtrapped) {\n                self.scrollendtrapped = true;\n                self.bind(self.doc,cap.transitionend,self.onScrollEnd,false); //I have got to do something usefull!!\n              }\n            } else {              \n              if (self.scrollendtrapped) clearTimeout(self.scrollendtrapped);\n              self.scrollendtrapped = setTimeout(self.onScrollEnd,ms);  // simulate transitionend event\n            }\n            \n            var py = top;\n            var px = lft;\n            self.timerscroll = {\n              bz: new BezierClass(py,self.newscrolly,ms,0,0,0.58,1),\n              bh: new BezierClass(px,self.newscrollx,ms,0,0,0.58,1)\n            };            \n            if (!self.cursorfreezed) self.timerscroll.tm=setInterval(function(){self.showCursor(self.getScrollTop(),self.getScrollLeft())},60);\n            \n          }\n          \n          self.synched(\"doScroll-set\",function(){\n            self.timer = 0;\n            if (self.scrollendtrapped) self.scrollrunning = true;\n            self.setScrollTop(self.newscrolly);\n            self.setScrollLeft(self.newscrollx);\n            if (!self.scrollendtrapped) self.onScrollEnd();\n          });\n          \n          \n        },50);\n        \n      };\n      \n      this.cancelScroll = function() {\n        if (!self.scrollendtrapped) return true;        \n        var py = self.getScrollTop();\n        var px = self.getScrollLeft();\n        self.scrollrunning = false;\n        if (!cap.transitionend) clearTimeout(cap.transitionend);\n        self.scrollendtrapped = false;\n        self._unbind(self.doc,cap.transitionend,self.onScrollEnd);        \n        self.prepareTransition(0);\n        self.setScrollTop(py); // fire event onscroll\n        if (self.railh) self.setScrollLeft(px);\n        if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm);\n        self.timerscroll = false;\n        \n        self.cursorfreezed = false;\n\n        //self.noticeCursor(false,py,px);\n        self.showCursor(py,px);\n        return self;\n      };\n      this.onScrollEnd = function() {                \n        if (self.scrollendtrapped) self._unbind(self.doc,cap.transitionend,self.onScrollEnd);\n        self.scrollendtrapped = false;        \n        self.prepareTransition(0);\n        if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm);\n        self.timerscroll = false;        \n        var py = self.getScrollTop();\n        var px = self.getScrollLeft();\n        self.setScrollTop(py);  // fire event onscroll        \n        if (self.railh) self.setScrollLeft(px);  // fire event onscroll left\n        \n        self.noticeCursor(false,py,px);     \n        \n        self.cursorfreezed = false;\n        \n        if (py<0) py=0\n        else if (py>self.page.maxh) py=self.page.maxh;\n        if (px<0) px=0\n        else if (px>self.page.maxw) px=self.page.maxw;\n        if((py!=self.newscrolly)||(px!=self.newscrollx)) return self.doScrollPos(px,py,self.opt.snapbackspeed);\n        \n        if (self.onscrollend&&self.scrollrunning) {\n          var info = {\"type\":\"scrollend\",\"current\":{\"x\":px,\"y\":py},\"end\":{\"x\":self.newscrollx,\"y\":self.newscrolly}};\n          self.onscrollend.call(self,info);\n        } \n        self.scrollrunning = false;\n        \n      };\n\n    } else {\n\n      this.doScrollLeft = function(x,spd) {  //no-trans\n        var y = (self.scrollrunning) ? self.newscrolly : self.getScrollTop();\n        self.doScrollPos(x,y,spd);\n      }\n\n      this.doScrollTop = function(y,spd) {  //no-trans\n        var x = (self.scrollrunning) ? self.newscrollx : self.getScrollLeft();\n        self.doScrollPos(x,y,spd);\n      }\n\n      this.doScrollPos = function(x,y,spd) {  //no-trans\n        var y = ((typeof y == \"undefined\")||(y===false)) ? self.getScrollTop(true) : y;\n      \n        if  ((self.timer)&&(self.newscrolly==y)&&(self.newscrollx==x)) return true;\n      \n        if (self.timer) clearAnimationFrame(self.timer);\n        self.timer = 0;      \n\n        var py = self.getScrollTop();\n        var px = self.getScrollLeft();\n        \n        if (((self.newscrolly-py)*(y-py)<0)||((self.newscrollx-px)*(x-px)<0)) self.cancelScroll();  //inverted movement detection\n        \n        self.newscrolly = y;\n        self.newscrollx = x;\n        \n        if (!self.bouncescroll||!self.rail.visibility) {\n          if (self.newscrolly<0) {\n            self.newscrolly = 0;\n          }\n          else if (self.newscrolly>self.page.maxh) {\n            self.newscrolly = self.page.maxh;\n          }\n        }\n        if (!self.bouncescroll||!self.railh.visibility) {\n          if (self.newscrollx<0) {\n            self.newscrollx = 0;\n          }\n          else if (self.newscrollx>self.page.maxw) {\n            self.newscrollx = self.page.maxw;\n          }\n        }\n\n        self.dst = {};\n        self.dst.x = x-px;\n        self.dst.y = y-py;\n        self.dst.px = px;\n        self.dst.py = py;\n        \n        var dst = Math.round(Math.sqrt(Math.pow(self.dst.x,2)+Math.pow(self.dst.y,2)));\n        \n        self.dst.ax = self.dst.x / dst;\n        self.dst.ay = self.dst.y / dst;\n        \n        var pa = 0;\n        var pe = dst;\n        \n        if (self.dst.x==0) {\n          pa = py;\n          pe = y;\n          self.dst.ay = 1;\n          self.dst.py = 0;\n        } else if (self.dst.y==0) {\n          pa = px;\n          pe = x;\n          self.dst.ax = 1;\n          self.dst.px = 0;\n        }\n\n        var ms = self.getTransitionSpeed(dst);\n        if (spd&&spd<=1) ms*=spd;\n        if (ms>0) {\n          self.bzscroll = (self.bzscroll) ? self.bzscroll.update(pe,ms) : new BezierClass(pa,pe,ms,0,1,0,1);\n        } else {\n          self.bzscroll = false;\n        }\n        \n        if (self.timer) return;\n        \n        if ((py==self.page.maxh&&y>=self.page.maxh)||(px==self.page.maxw&&x>=self.page.maxw)) self.checkContentSize();\n        \n        var sync = 1;\n        \n        function scrolling() {          \n          if (self.cancelAnimationFrame) return true;\n          \n          self.scrollrunning = true;\n          \n          sync = 1-sync;\n          if (sync) return (self.timer = setAnimationFrame(scrolling)||1);\n\n          var done = 0;\n          \n          var sc = sy = self.getScrollTop();\n          if (self.dst.ay) {            \n            sc = (self.bzscroll) ? self.dst.py + (self.bzscroll.getNow()*self.dst.ay) : self.newscrolly;\n            var dr=sc-sy;          \n            if ((dr<0&&sc<self.newscrolly)||(dr>0&&sc>self.newscrolly)) sc = self.newscrolly;\n            self.setScrollTop(sc);\n            if (sc == self.newscrolly) done=1;\n          } else {\n            done=1;\n          }\n          \n          var scx = sx = self.getScrollLeft();\n          if (self.dst.ax) {            \n            scx = (self.bzscroll) ? self.dst.px + (self.bzscroll.getNow()*self.dst.ax) : self.newscrollx;            \n            var dr=scx-sx;\n            if ((dr<0&&scx<self.newscrollx)||(dr>0&&scx>self.newscrollx)) scx = self.newscrollx;\n            self.setScrollLeft(scx);\n            if (scx == self.newscrollx) done+=1;\n          } else {\n            done+=1;\n          }\n          \n          if (done==2) {\n            self.timer = 0;\n            self.cursorfreezed = false;\n            self.bzscroll = false;\n            self.scrollrunning = false;\n            if (sc<0) sc=0;\n            else if (sc>self.page.maxh) sc=self.page.maxh;\n            if (scx<0) scx=0;\n            else if (scx>self.page.maxw) scx=self.page.maxw;\n            if ((scx!=self.newscrollx)||(sc!=self.newscrolly)) self.doScrollPos(scx,sc);\n            else {\n              if (self.onscrollend) {\n                var info = {\"type\":\"scrollend\",\"current\":{\"x\":sx,\"y\":sy},\"end\":{\"x\":self.newscrollx,\"y\":self.newscrolly}};\n                self.onscrollend.call(self,info);\n              }             \n            } \n          } else {\n            self.timer = setAnimationFrame(scrolling)||1;\n          }\n        };\n        self.cancelAnimationFrame=false;\n        self.timer = 1;\n\n        if (self.onscrollstart&&!self.scrollrunning) {\n          var info = {\"type\":\"scrollstart\",\"current\":{\"x\":px,\"y\":py},\"request\":{\"x\":x,\"y\":y},\"end\":{\"x\":self.newscrollx,\"y\":self.newscrolly},\"speed\":ms};\n          self.onscrollstart.call(self,info);\n        }        \n\n        scrolling();\n        \n        if ((py==self.page.maxh&&y>=py)||(px==self.page.maxw&&x>=px)) self.checkContentSize();\n        \n        self.noticeCursor();\n      };\n  \n      this.cancelScroll = function() {        \n        if (self.timer) clearAnimationFrame(self.timer);\n        self.timer = 0;\n        self.bzscroll = false;\n        self.scrollrunning = false;\n        return self;\n      };\n      \n    }\n    \n    this.doScrollBy = function(stp,relative) {\n      var ny = 0;\n      if (relative) {\n        ny = Math.floor((self.scroll.y-stp)*self.scrollratio.y)\n      } else {        \n        var sy = (self.timer) ? self.newscrolly : self.getScrollTop(true);\n        ny = sy-stp;\n      }\n      if (self.bouncescroll) {\n        var haf = Math.round(self.view.h/2);\n        if (ny<-haf) ny=-haf\n        else if (ny>(self.page.maxh+haf)) ny = (self.page.maxh+haf);\n      }\n      self.cursorfreezed = false;      \n\n      py = self.getScrollTop(true);\n      if (ny<0&&py<=0) return self.noticeCursor();      \n      else if (ny>self.page.maxh&&py>=self.page.maxh) {\n        self.checkContentSize();\n        return self.noticeCursor();\n      }\n      \n      self.doScrollTop(ny);\n    };\n\n    this.doScrollLeftBy = function(stp,relative) {\n      var nx = 0;\n      if (relative) {\n        nx = Math.floor((self.scroll.x-stp)*self.scrollratio.x)\n      } else {\n        var sx = (self.timer) ? self.newscrollx : self.getScrollLeft(true);\n        nx = sx-stp;\n      }\n      if (self.bouncescroll) {\n        var haf = Math.round(self.view.w/2);\n        if (nx<-haf) nx=-haf\n        else if (nx>(self.page.maxw+haf)) nx = (self.page.maxw+haf);\n      }\n      self.cursorfreezed = false;    \n\n      px = self.getScrollLeft(true);\n      if (nx<0&&px<=0) return self.noticeCursor();      \n      else if (nx>self.page.maxw&&px>=self.page.maxw) return self.noticeCursor();\n      \n      self.doScrollLeft(nx);\n    };\n    \n    this.doScrollTo = function(pos,relative) {\n      var ny = (relative) ? Math.round(pos*self.scrollratio.y) : pos;\n      if (ny<0) ny=0\n      else if (ny>self.page.maxh) ny = self.page.maxh;\n      self.cursorfreezed = false;\n      self.doScrollTop(pos);\n    };\n    \n    this.checkContentSize = function() {      \n      var pg = self.getContentSize();\n      if ((pg.h!=self.page.h)||(pg.w!=self.page.w)) self.resize(false,pg);\n    };\n    \n    self.onscroll = function(e) {    \n      if (self.rail.drag) return;\n      if (!self.cursorfreezed) {\n        self.synched('scroll',function(){\n          self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y));\n          if (self.railh) self.scroll.x = Math.round(self.getScrollLeft() * (1/self.scrollratio.x));\n          self.noticeCursor();\n        });\n      }\n    };\n    self.bind(self.docscroll,\"scroll\",self.onscroll);\n    \n    this.doZoomIn = function(e) {\n      if (self.zoomactive) return;\n      self.zoomactive = true;\n      \n      self.zoomrestore = {\n        style:{}\n      };\n      var lst = ['position','top','left','zIndex','backgroundColor','marginTop','marginBottom','marginLeft','marginRight'];\n      var win = self.win[0].style;\n      for(var a in lst) {\n        var pp = lst[a];\n        self.zoomrestore.style[pp] = (typeof win[pp] != \"undefined\") ? win[pp] : '';        \n      }\n      \n      self.zoomrestore.style.width = self.win.css('width');\n      self.zoomrestore.style.height = self.win.css('height');\n      \n      self.zoomrestore.padding = {\n        w:self.win.outerWidth()-self.win.width(),\n        h:self.win.outerHeight()-self.win.height()\n      };\n      \n      if (cap.isios4) {\n        self.zoomrestore.scrollTop = $(window).scrollTop();\n        $(window).scrollTop(0);\n      }\n      \n      self.win.css({\n        \"position\":(cap.isios4)?\"absolute\":\"fixed\",\n        \"top\":0,\n        \"left\":0,\n        \"z-index\":globalmaxzindex+100,\n        \"margin\":\"0px\"\n      });\n      var bkg = self.win.css(\"backgroundColor\");      \n      if (bkg==\"\"||/transparent|rgba\\(0, 0, 0, 0\\)|rgba\\(0,0,0,0\\)/.test(bkg)) self.win.css(\"backgroundColor\",\"#fff\");\n      self.rail.css({\"z-index\":globalmaxzindex+101});\n      self.zoom.css({\"z-index\":globalmaxzindex+102});      \n      self.zoom.css('backgroundPosition','0px -18px');\n      self.resizeZoom();\n      \n      if (self.onzoomin) self.onzoomin.call(self);\n      \n      return self.cancelEvent(e);\n    };\n\n    this.doZoomOut = function(e) {\n      if (!self.zoomactive) return;\n      self.zoomactive = false;\n      \n      self.win.css(\"margin\",\"\");\n      self.win.css(self.zoomrestore.style);\n      \n      if (cap.isios4) {\n        $(window).scrollTop(self.zoomrestore.scrollTop);\n      }\n      \n      self.rail.css({\"z-index\":self.zindex});\n      self.zoom.css({\"z-index\":self.zindex});\n      self.zoomrestore = false;\n      self.zoom.css('backgroundPosition','0px 0px');\n      self.onResize();\n      \n      if (self.onzoomout) self.onzoomout.call(self);\n      \n      return self.cancelEvent(e);\n    };\n    \n    this.doZoom = function(e) {\n      return (self.zoomactive) ? self.doZoomOut(e) : self.doZoomIn(e);\n    };\n    \n    this.resizeZoom = function() {\n      if (!self.zoomactive) return;\n\n      var py = self.getScrollTop(); //preserve scrolling position\n      self.win.css({\n        width:$(window).width()-self.zoomrestore.padding.w+\"px\",\n        height:$(window).height()-self.zoomrestore.padding.h+\"px\"\n      });\n      self.onResize();\n      \n      self.setScrollTop(Math.min(self.page.maxh,py));\n    };\n   \n    this.init();\n    \n    $.nicescroll.push(this);\n\n  };\n  \n// Inspired by the work of Kin Blas\n// http://webpro.host.adobe.com/people/jblas/momentum/includes/jquery.momentum.0.7.js  \n  \n  \n  var ScrollMomentumClass2D = function(nc) {\n    var self = this;\n    this.nc = nc;\n    \n    this.lastx = 0;\n    this.lasty = 0;\n    this.speedx = 0;\n    this.speedy = 0;\n    this.lasttime = 0;\n    this.steptime = 0;\n    this.snapx = false;\n    this.snapy = false;\n    this.demulx = 0;\n    this.demuly = 0;\n    \n    this.lastscrollx = -1;\n    this.lastscrolly = -1;\n    \n    this.chkx = 0;\n    this.chky = 0;\n    \n    this.timer = 0;\n    \n    this.time = function() {\n      return +new Date();//beautifull hack\n    };\n    \n    this.reset = function(px,py) {\n      self.stop();\n      var now = self.time();\n      self.steptime = 0;\n      self.lasttime = now;\n      self.speedx = 0;\n      self.speedy = 0;\n      self.lastx = px;\n      self.lasty = py;\n      self.lastscrollx = -1;\n      self.lastscrolly = -1;\n    };\n    \n    this.update = function(px,py) {\n      var now = self.time();\n      self.steptime = now - self.lasttime;\n      self.lasttime = now;      \n      var dy = py - self.lasty;\n      var dx = px - self.lastx;\n      var sy = self.nc.getScrollTop();\n      var sx = self.nc.getScrollLeft();\n      var newy = sy + dy;\n      var newx = sx + dx;\n      self.snapx = (newx<0)||(newx>self.nc.page.maxw);\n      self.snapy = (newy<0)||(newy>self.nc.page.maxh);\n      self.speedx = dx;\n      self.speedy = dy;\n      self.lastx = px;\n      self.lasty = py;\n    };\n    \n    this.stop = function() {\n      self.nc.unsynched(\"domomentum2d\");\n      if (self.timer) clearTimeout(self.timer);\n      self.timer = 0;\n      self.lastscrollx = -1;\n      self.lastscrolly = -1;\n    };\n    \n    this.doSnapy = function(nx,ny) {\n      var snap = false;\n      \n      if (ny<0) {\n        ny=0;\n        snap=true;        \n      } \n      else if (ny>self.nc.page.maxh) {\n        ny=self.nc.page.maxh;\n        snap=true;\n      }\n\n      if (nx<0) {\n        nx=0;\n        snap=true;        \n      } \n      else if (nx>self.nc.page.maxw) {\n        nx=self.nc.page.maxw;\n        snap=true;\n      }\n      \n      if (snap) self.nc.doScrollPos(nx,ny,self.nc.opt.snapbackspeed);\n    };\n    \n    this.doMomentum = function(gp) {\n      var t = self.time();\n      var l = (gp) ? t+gp : self.lasttime;\n\n      var sl = self.nc.getScrollLeft();\n      var st = self.nc.getScrollTop();\n      \n      var pageh = self.nc.page.maxh;\n      var pagew = self.nc.page.maxw;\n      \n      self.speedx = (pagew>0) ? Math.min(60,self.speedx) : 0;\n      self.speedy = (pageh>0) ? Math.min(60,self.speedy) : 0;\n      \n      var chk = l && (t - l) <= 60;\n      \n      if ((st<0)||(st>pageh)||(sl<0)||(sl>pagew)) chk = false;\n      \n      var sy = (self.speedy && chk) ? self.speedy : false;\n      var sx = (self.speedx && chk) ? self.speedx : false;\n      \n      if (sy||sx) {\n        var tm = Math.max(16,self.steptime); //timeout granularity\n        \n        if (tm>50) {  // do smooth\n          var xm = tm/50;\n          self.speedx*=xm;\n          self.speedy*=xm;\n          tm = 50;\n        }\n        \n        self.demulxy = 0;\n\n        self.lastscrollx = self.nc.getScrollLeft();\n        self.chkx = self.lastscrollx;\n        self.lastscrolly = self.nc.getScrollTop();\n        self.chky = self.lastscrolly;\n        \n        var nx = self.lastscrollx;\n        var ny = self.lastscrolly;\n        \n        var onscroll = function(){\n          var df = ((self.time()-t)>600) ? 0.04 : 0.02;\n        \n          if (self.speedx) {\n            nx = Math.floor(self.lastscrollx - (self.speedx*(1-self.demulxy)));\n            self.lastscrollx = nx;\n            if ((nx<0)||(nx>pagew)) df=0.10;\n          }\n\n          if (self.speedy) {\n            ny = Math.floor(self.lastscrolly - (self.speedy*(1-self.demulxy)));\n            self.lastscrolly = ny;\n            if ((ny<0)||(ny>pageh)) df=0.10;\n          }\n          \n          self.demulxy = Math.min(1,self.demulxy+df);\n          \n          self.nc.synched(\"domomentum2d\",function(){\n\n            if (self.speedx) {\n              var scx = self.nc.getScrollLeft();\n              if (scx!=self.chkx) self.stop();\n              self.chkx=nx;\n              self.nc.setScrollLeft(nx);\n            }\n          \n            if (self.speedy) {\n              var scy = self.nc.getScrollTop();\n              if (scy!=self.chky) self.stop();          \n              self.chky=ny;\n              self.nc.setScrollTop(ny);\n            }\n            \n            if(!self.timer) {\n              self.nc.hideCursor();\n              self.doSnapy(nx,ny);\n            }\n            \n          });\n          \n          if (self.demulxy<1) {            \n            self.timer = setTimeout(onscroll,tm);\n          } else {\n            self.stop();\n            self.nc.hideCursor();\n            self.doSnapy(nx,ny);\n          }\n        };\n        \n        onscroll();\n        \n      } else {\n        self.doSnapy(self.nc.getScrollLeft(),self.nc.getScrollTop());\n      }      \n      \n    }\n    \n  };\n\n  \n// override jQuery scrollTop\n \n  var _scrollTop = jQuery.fn.scrollTop; // preserve original function\n   \n  jQuery.cssHooks[\"pageYOffset\"] = {\n    get: function(elem,computed,extra) {      \n      var nice = $.data(elem,'__nicescroll')||false;\n      return (nice&&nice.ishwscroll) ? nice.getScrollTop() : _scrollTop.call(elem);\n    },\n    set: function(elem,value) {\n      var nice = $.data(elem,'__nicescroll')||false;    \n      (nice&&nice.ishwscroll) ? nice.setScrollTop(parseInt(value)) : _scrollTop.call(elem,value);\n      return this;\n    }\n  };\n  \n/*  \n  $.fx.step[\"scrollTop\"] = function(fx){    \n    $.cssHooks[\"scrollTop\"].set( fx.elem, fx.now + fx.unit );\n  };\n*/  \n  \n  jQuery.fn.scrollTop = function(value) {    \n    if (typeof value == \"undefined\") {\n      var nice = (this[0]) ? $.data(this[0],'__nicescroll')||false : false;\n      return (nice&&nice.ishwscroll) ? nice.getScrollTop() : _scrollTop.call(this);\n    } else {      \n      return this.each(function() {\n        var nice = $.data(this,'__nicescroll')||false;\n        (nice&&nice.ishwscroll) ? nice.setScrollTop(parseInt(value)) : _scrollTop.call($(this),value);\n      });\n    }\n  }\n\n// override jQuery scrollLeft\n \n  var _scrollLeft = jQuery.fn.scrollLeft; // preserve original function\n   \n  $.cssHooks.pageXOffset = {\n    get: function(elem,computed,extra) {\n      var nice = $.data(elem,'__nicescroll')||false;\n      return (nice&&nice.ishwscroll) ? nice.getScrollLeft() : _scrollLeft.call(elem);\n    },\n    set: function(elem,value) {\n      var nice = $.data(elem,'__nicescroll')||false;    \n      (nice&&nice.ishwscroll) ? nice.setScrollLeft(parseInt(value)) : _scrollLeft.call(elem,value);\n      return this;\n    }\n  };\n  \n/*  \n  $.fx.step[\"scrollLeft\"] = function(fx){\n    $.cssHooks[\"scrollLeft\"].set( fx.elem, fx.now + fx.unit );\n  };  \n*/  \n \n  jQuery.fn.scrollLeft = function(value) {    \n    if (typeof value == \"undefined\") {\n      var nice = (this[0]) ? $.data(this[0],'__nicescroll')||false : false;\n      return (nice&&nice.ishwscroll) ? nice.getScrollLeft() : _scrollLeft.call(this);\n    } else {\n      return this.each(function() {     \n        var nice = $.data(this,'__nicescroll')||false;\n        (nice&&nice.ishwscroll) ? nice.setScrollLeft(parseInt(value)) : _scrollLeft.call($(this),value);\n      });\n    }\n  }\n  \n  var NiceScrollArray = function(doms) {\n    var self = this;\n    this.length = 0;\n    this.name = \"nicescrollarray\";\n  \n    this.each = function(fn) {\n      for(var a=0,i=0;a<self.length;a++) fn.call(self[a],i++);\n      return self;\n    };\n    \n    this.push = function(nice) {\n      self[self.length]=nice;\n      self.length++;\n    };\n    \n    this.eq = function(idx) {\n      return self[idx];\n    };\n    \n    if (doms) {\n      for(a=0;a<doms.length;a++) {\n        var nice = $.data(doms[a],'__nicescroll')||false;\n        if (nice) {\n          this[this.length]=nice;\n          this.length++;\n        }\n      };\n    }\n    \n    return this;\n  };\n  \n  function mplex(el,lst,fn) {\n    for(var a=0;a<lst.length;a++) fn(el,lst[a]);\n  };  \n  mplex(\n    NiceScrollArray.prototype,\n    ['show','hide','toggle','onResize','resize','remove','stop','doScrollPos'],\n    function(e,n) {\n      e[n] = function(){\n        var args = arguments;\n        return this.each(function(){          \n          this[n].apply(this,args);\n        });\n      };\n    }\n  );  \n  \n  jQuery.fn.getNiceScroll = function(index) {\n    if (typeof index == \"undefined\") {\n      return new NiceScrollArray(this);\n    } else {      \n      var nice = this[index]&&$.data(this[index],'__nicescroll')||false;\n      return nice;\n    }\n  };\n  \n  jQuery.extend(jQuery.expr[':'], {\n    nicescroll: function(a) {\n      return ($.data(a,'__nicescroll'))?true:false;\n    }\n  });  \n  \n  $.fn.niceScroll = function(wrapper,opt) {        \n    if (typeof opt==\"undefined\") {\n      if ((typeof wrapper==\"object\")&&!(\"jquery\" in wrapper)) {\n        opt = wrapper;\n        wrapper = false;        \n      }\n    }\n    var ret = new NiceScrollArray();\n    if (typeof opt==\"undefined\") opt = {};\n    \n    if (wrapper||false) {      \n      opt.doc = $(wrapper);\n      opt.win = $(this);\n    }    \n    var docundef = !(\"doc\" in opt);   \n    if (!docundef&&!(\"win\" in opt)) opt.win = $(this);    \n    \n    this.each(function() {\n      var nice = $(this).data('__nicescroll')||false;\n      if (!nice) {\n        opt.doc = (docundef) ? $(this) : opt.doc;\n        nice = new NiceScrollClass(opt,$(this));        \n        $(this).data('__nicescroll',nice);\n      }\n      ret.push(nice);\n    });\n    return (ret.length==1) ? ret[0] : ret;\n  };\n  \n  window.NiceScroll = {\n    getjQuery:function(){return jQuery}\n  };\n  \n  if (!$.nicescroll) {\n   $.nicescroll = new NiceScrollArray();\n   $.nicescroll.options = _globaloptions;\n  }\n  \n})( jQuery );\n  "
  },
  {
    "path": "src/main/webapp/static/js/json.js",
    "content": "/*\r\n    json2.js\r\n    2014-02-04\r\n\r\n    Public Domain.\r\n\r\n    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\r\n\r\n    See http://www.JSON.org/js.html\r\n\r\n\r\n    This code should be minified before deployment.\r\n    See http://javascript.crockford.com/jsmin.html\r\n\r\n    USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\r\n    NOT CONTROL.\r\n\r\n\r\n    This file creates a global JSON object containing two methods: stringify\r\n    and parse.\r\n\r\n        JSON.stringify(value, replacer, space)\r\n            value       any JavaScript value, usually an object or array.\r\n\r\n            replacer    an optional parameter that determines how object\r\n                        values are stringified for objects. It can be a\r\n                        function or an array of strings.\r\n\r\n            space       an optional parameter that specifies the indentation\r\n                        of nested structures. If it is omitted, the text will\r\n                        be packed without extra whitespace. If it is a number,\r\n                        it will specify the number of spaces to indent at each\r\n                        level. If it is a string (such as '\\t' or '&nbsp;'),\r\n                        it contains the characters used to indent at each level.\r\n\r\n            This method produces a JSON text from a JavaScript value.\r\n\r\n            When an object value is found, if the object contains a toJSON\r\n            method, its toJSON method will be called and the result will be\r\n            stringified. A toJSON method does not serialize: it returns the\r\n            value represented by the name/value pair that should be serialized,\r\n            or undefined if nothing should be serialized. The toJSON method\r\n            will be passed the key associated with the value, and this will be\r\n            bound to the value\r\n\r\n            For example, this would serialize Dates as ISO strings.\r\n\r\n                Date.prototype.toJSON = function (key) {\r\n                    function f(n) {\r\n                        // Format integers to have at least two digits.\r\n                        return n < 10 ? '0' + n : n;\r\n                    }\r\n\r\n                    return this.getUTCFullYear()   + '-' +\r\n                         f(this.getUTCMonth() + 1) + '-' +\r\n                         f(this.getUTCDate())      + 'T' +\r\n                         f(this.getUTCHours())     + ':' +\r\n                         f(this.getUTCMinutes())   + ':' +\r\n                         f(this.getUTCSeconds())   + 'Z';\r\n                };\r\n\r\n            You can provide an optional replacer method. It will be passed the\r\n            key and value of each member, with this bound to the containing\r\n            object. The value that is returned from your method will be\r\n            serialized. If your method returns undefined, then the member will\r\n            be excluded from the serialization.\r\n\r\n            If the replacer parameter is an array of strings, then it will be\r\n            used to select the members to be serialized. It filters the results\r\n            such that only members with keys listed in the replacer array are\r\n            stringified.\r\n\r\n            Values that do not have JSON representations, such as undefined or\r\n            functions, will not be serialized. Such values in objects will be\r\n            dropped; in arrays they will be replaced with null. You can use\r\n            a replacer function to replace those with JSON values.\r\n            JSON.stringify(undefined) returns undefined.\r\n\r\n            The optional space parameter produces a stringification of the\r\n            value that is filled with line breaks and indentation to make it\r\n            easier to read.\r\n\r\n            If the space parameter is a non-empty string, then that string will\r\n            be used for indentation. If the space parameter is a number, then\r\n            the indentation will be that many spaces.\r\n\r\n            Example:\r\n\r\n            text = JSON.stringify(['e', {pluribus: 'unum'}]);\r\n            // text is '[\"e\",{\"pluribus\":\"unum\"}]'\r\n\r\n\r\n            text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\\t');\r\n            // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\r\n\r\n            text = JSON.stringify([new Date()], function (key, value) {\r\n                return this[key] instanceof Date ?\r\n                    'Date(' + this[key] + ')' : value;\r\n            });\r\n            // text is '[\"Date(---current time---)\"]'\r\n\r\n\r\n        JSON.parse(text, reviver)\r\n            This method parses a JSON text to produce an object or array.\r\n            It can throw a SyntaxError exception.\r\n\r\n            The optional reviver parameter is a function that can filter and\r\n            transform the results. It receives each of the keys and values,\r\n            and its return value is used instead of the original value.\r\n            If it returns what it received, then the structure is not modified.\r\n            If it returns undefined then the member is deleted.\r\n\r\n            Example:\r\n\r\n            // Parse the text. Values that look like ISO date strings will\r\n            // be converted to Date objects.\r\n\r\n            myData = JSON.parse(text, function (key, value) {\r\n                var a;\r\n                if (typeof value === 'string') {\r\n                    a =\r\n/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\r\n                    if (a) {\r\n                        return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\r\n                            +a[5], +a[6]));\r\n                    }\r\n                }\r\n                return value;\r\n            });\r\n\r\n            myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\r\n                var d;\r\n                if (typeof value === 'string' &&\r\n                        value.slice(0, 5) === 'Date(' &&\r\n                        value.slice(-1) === ')') {\r\n                    d = new Date(value.slice(5, -1));\r\n                    if (d) {\r\n                        return d;\r\n                    }\r\n                }\r\n                return value;\r\n            });\r\n\r\n\r\n    This is a reference implementation. You are free to copy, modify, or\r\n    redistribute.\r\n*/\r\n\r\n/*jslint evil: true, regexp: true */\r\n\r\n/*members \"\", \"\\b\", \"\\t\", \"\\n\", \"\\f\", \"\\r\", \"\\\"\", JSON, \"\\\\\", apply,\r\n    call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\r\n    getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\r\n    lastIndex, length, parse, prototype, push, replace, slice, stringify,\r\n    test, toJSON, toString, valueOf\r\n*/\r\n\r\n\r\n// Create a JSON object only if one does not already exist. We create the\r\n// methods in a closure to avoid creating global variables.\r\n\r\nif (typeof JSON !== 'object') {\r\n    JSON = {};\r\n}\r\n\r\n(function () {\r\n    'use strict';\r\n\r\n    function f(n) {\r\n        // Format integers to have at least two digits.\r\n        return n < 10 ? '0' + n : n;\r\n    }\r\n\r\n    if (typeof Date.prototype.toJSON !== 'function') {\r\n\r\n        Date.prototype.toJSON = function () {\r\n\r\n            return isFinite(this.valueOf())\r\n                ? this.getUTCFullYear()     + '-' +\r\n                    f(this.getUTCMonth() + 1) + '-' +\r\n                    f(this.getUTCDate())      + 'T' +\r\n                    f(this.getUTCHours())     + ':' +\r\n                    f(this.getUTCMinutes())   + ':' +\r\n                    f(this.getUTCSeconds())   + 'Z'\r\n                : null;\r\n        };\r\n\r\n        String.prototype.toJSON      =\r\n            Number.prototype.toJSON  =\r\n            Boolean.prototype.toJSON = function () {\r\n                return this.valueOf();\r\n            };\r\n    }\r\n\r\n    var cx,\r\n        escapable,\r\n        gap,\r\n        indent,\r\n        meta,\r\n        rep;\r\n\r\n\r\n    function quote(string) {\r\n\r\n// If the string contains no control characters, no quote characters, and no\r\n// backslash characters, then we can safely slap some quotes around it.\r\n// Otherwise we must also replace the offending characters with safe escape\r\n// sequences.\r\n\r\n        escapable.lastIndex = 0;\r\n        return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\r\n            var c = meta[a];\r\n            return typeof c === 'string'\r\n                ? c\r\n                : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\r\n        }) + '\"' : '\"' + string + '\"';\r\n    }\r\n\r\n\r\n    function str(key, holder) {\r\n\r\n// Produce a string from holder[key].\r\n\r\n        var i,          // The loop counter.\r\n            k,          // The member key.\r\n            v,          // The member value.\r\n            length,\r\n            mind = gap,\r\n            partial,\r\n            value = holder[key];\r\n\r\n// If the value has a toJSON method, call it to obtain a replacement value.\r\n\r\n        if (value && typeof value === 'object' &&\r\n                typeof value.toJSON === 'function') {\r\n            value = value.toJSON(key);\r\n        }\r\n\r\n// If we were called with a replacer function, then call the replacer to\r\n// obtain a replacement value.\r\n\r\n        if (typeof rep === 'function') {\r\n            value = rep.call(holder, key, value);\r\n        }\r\n\r\n// What happens next depends on the value's type.\r\n\r\n        switch (typeof value) {\r\n        case 'string':\r\n            return quote(value);\r\n\r\n        case 'number':\r\n\r\n// JSON numbers must be finite. Encode non-finite numbers as null.\r\n\r\n            return isFinite(value) ? String(value) : 'null';\r\n\r\n        case 'boolean':\r\n        case 'null':\r\n\r\n// If the value is a boolean or null, convert it to a string. Note:\r\n// typeof null does not produce 'null'. The case is included here in\r\n// the remote chance that this gets fixed someday.\r\n\r\n            return String(value);\r\n\r\n// If the type is 'object', we might be dealing with an object or an array or\r\n// null.\r\n\r\n        case 'object':\r\n\r\n// Due to a specification blunder in ECMAScript, typeof null is 'object',\r\n// so watch out for that case.\r\n\r\n            if (!value) {\r\n                return 'null';\r\n            }\r\n\r\n// Make an array to hold the partial results of stringifying this object value.\r\n\r\n            gap += indent;\r\n            partial = [];\r\n\r\n// Is the value an array?\r\n\r\n            if (Object.prototype.toString.apply(value) === '[object Array]') {\r\n\r\n// The value is an array. Stringify every element. Use null as a placeholder\r\n// for non-JSON values.\r\n\r\n                length = value.length;\r\n                for (i = 0; i < length; i += 1) {\r\n                    partial[i] = str(i, value) || 'null';\r\n                }\r\n\r\n// Join all of the elements together, separated with commas, and wrap them in\r\n// brackets.\r\n\r\n                v = partial.length === 0\r\n                    ? '[]'\r\n                    : gap\r\n                    ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']'\r\n                    : '[' + partial.join(',') + ']';\r\n                gap = mind;\r\n                return v;\r\n            }\r\n\r\n// If the replacer is an array, use it to select the members to be stringified.\r\n\r\n            if (rep && typeof rep === 'object') {\r\n                length = rep.length;\r\n                for (i = 0; i < length; i += 1) {\r\n                    if (typeof rep[i] === 'string') {\r\n                        k = rep[i];\r\n                        v = str(k, value);\r\n                        if (v) {\r\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n\r\n// Otherwise, iterate through all of the keys in the object.\r\n\r\n                for (k in value) {\r\n                    if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n                        v = str(k, value);\r\n                        if (v) {\r\n                            partial.push(quote(k) + (gap ? ': ' : ':') + v);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n// Join all of the member texts together, separated with commas,\r\n// and wrap them in braces.\r\n\r\n            v = partial.length === 0\r\n                ? '{}'\r\n                : gap\r\n                ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}'\r\n                : '{' + partial.join(',') + '}';\r\n            gap = mind;\r\n            return v;\r\n        }\r\n    }\r\n\r\n// If the JSON object does not yet have a stringify method, give it one.\r\n\r\n    if (typeof JSON.stringify !== 'function') {\r\n        escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\r\n        meta = {    // table of character substitutions\r\n            '\\b': '\\\\b',\r\n            '\\t': '\\\\t',\r\n            '\\n': '\\\\n',\r\n            '\\f': '\\\\f',\r\n            '\\r': '\\\\r',\r\n            '\"' : '\\\\\"',\r\n            '\\\\': '\\\\\\\\'\r\n        };\r\n        JSON.stringify = function (value, replacer, space) {\r\n\r\n// The stringify method takes a value and an optional replacer, and an optional\r\n// space parameter, and returns a JSON text. The replacer can be a function\r\n// that can replace values, or an array of strings that will select the keys.\r\n// A default replacer method can be provided. Use of the space parameter can\r\n// produce text that is more easily readable.\r\n\r\n            var i;\r\n            gap = '';\r\n            indent = '';\r\n\r\n// If the space parameter is a number, make an indent string containing that\r\n// many spaces.\r\n\r\n            if (typeof space === 'number') {\r\n                for (i = 0; i < space; i += 1) {\r\n                    indent += ' ';\r\n                }\r\n\r\n// If the space parameter is a string, it will be used as the indent string.\r\n\r\n            } else if (typeof space === 'string') {\r\n                indent = space;\r\n            }\r\n\r\n// If there is a replacer, it must be a function or an array.\r\n// Otherwise, throw an error.\r\n\r\n            rep = replacer;\r\n            if (replacer && typeof replacer !== 'function' &&\r\n                    (typeof replacer !== 'object' ||\r\n                    typeof replacer.length !== 'number')) {\r\n                throw new Error('JSON.stringify');\r\n            }\r\n\r\n// Make a fake root object containing our value under the key of ''.\r\n// Return the result of stringifying the value.\r\n\r\n            return str('', {'': value});\r\n        };\r\n    }\r\n\r\n\r\n// If the JSON object does not yet have a parse method, give it one.\r\n\r\n    if (typeof JSON.parse !== 'function') {\r\n        cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\r\n        JSON.parse = function (text, reviver) {\r\n\r\n// The parse method takes a text and an optional reviver function, and returns\r\n// a JavaScript value if the text is a valid JSON text.\r\n\r\n            var j;\r\n\r\n            function walk(holder, key) {\r\n\r\n// The walk method is used to recursively walk the resulting structure so\r\n// that modifications can be made.\r\n\r\n                var k, v, value = holder[key];\r\n                if (value && typeof value === 'object') {\r\n                    for (k in value) {\r\n                        if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n                            v = walk(value, k);\r\n                            if (v !== undefined) {\r\n                                value[k] = v;\r\n                            } else {\r\n                                delete value[k];\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                return reviver.call(holder, key, value);\r\n            }\r\n\r\n\r\n// Parsing happens in four stages. In the first stage, we replace certain\r\n// Unicode characters with escape sequences. JavaScript handles many characters\r\n// incorrectly, either silently deleting them, or treating them as line endings.\r\n\r\n            text = String(text);\r\n            cx.lastIndex = 0;\r\n            if (cx.test(text)) {\r\n                text = text.replace(cx, function (a) {\r\n                    return '\\\\u' +\r\n                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\r\n                });\r\n            }\r\n\r\n// In the second stage, we run the text against regular expressions that look\r\n// for non-JSON patterns. We are especially concerned with '()' and 'new'\r\n// because they can cause invocation, and '=' because it can cause mutation.\r\n// But just to be safe, we want to reject all unexpected forms.\r\n\r\n// We split the second stage into 4 regexp operations in order to work around\r\n// crippling inefficiencies in IE's and Safari's regexp engines. First we\r\n// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we\r\n// replace all simple value tokens with ']' characters. Third, we delete all\r\n// open brackets that follow a colon or comma or that begin the text. Finally,\r\n// we look to see that the remaining characters are only whitespace or ']' or\r\n// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.\r\n\r\n            if (/^[\\],:{}\\s]*$/\r\n                    .test(text.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')\r\n                        .replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']')\r\n                        .replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''))) {\r\n\r\n// In the third stage we use the eval function to compile the text into a\r\n// JavaScript structure. The '{' operator is subject to a syntactic ambiguity\r\n// in JavaScript: it can begin a block or an object literal. We wrap the text\r\n// in parens to eliminate the ambiguity.\r\n\r\n                j = eval('(' + text + ')');\r\n\r\n// In the optional fourth stage, we recursively walk the new structure, passing\r\n// each name/value pair to a reviver function for possible transformation.\r\n\r\n                return typeof reviver === 'function'\r\n                    ? walk({'': j}, '')\r\n                    : j;\r\n            }\r\n\r\n// If the text is not JSON parseable, then a SyntaxError is thrown.\r\n\r\n            throw new SyntaxError('JSON.parse');\r\n        };\r\n    }\r\n}());"
  },
  {
    "path": "src/main/webapp/static/js/tableExport.js",
    "content": "/*The MIT License (MIT)\r\n\r\nOriginal work Copyright (c) 2014 https://github.com/kayalshri/\r\nModified work Copyright (c) 2015 https://github.com/hhurz/\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.*/\r\n\r\n(function($){\r\n  $.fn.extend({\r\n    tableExport: function(options) {\r\n      var defaults = {\r\n        csvSeparator: ',',\r\n        csvEnclosure: '\"',\r\n        onCellData: null,\r\n        ignoreColumn: [],\r\n        displayTableName: 'false',\r\n        theadSelector:'tr',\r\n        tbodySelector: 'tr',\r\n        tableName:'myTableName',\r\n        worksheetName: 'xlsWorksheetName',\r\n        type:'csv',\r\n        dpi:0,\r\n        pdfLeftMargin:20,\r\n        escape:'false',\r\n        htmlContent:'false',\r\n        consoleLog:'false',\r\n        outputMode:'file',  // file|string|base64\r\n        fileName:'tableExport',\r\n        excelstyles: [ 'border-bottom', 'border-top', 'border-left', 'border-right' ]\r\n      };\r\n\r\n      var options = $.extend(true, defaults, options);\r\n      var el = this;\r\n      var DownloadEvt = null;\r\n\r\n      if(defaults.type == 'csv' || defaults.type == 'txt'){\r\n\r\n        // Header\r\n        var tdData =\"\";\r\n        var rowIndex = 0;\r\n        $(el).find('thead').find(defaults.theadSelector).each(function() {\r\n        tdData += \"\\n\";\r\n          $(this).filter(':visible').find('th').each(function(index,data) {\r\n            if ($(this).css('display') != 'none' &&\r\n                $(this).data(\"tableexport-display\") != 'none'){\r\n              if(defaults.ignoreColumn.indexOf(index) == -1){\r\n                tdData += csvString(this, rowIndex, index) + defaults.csvSeparator;\r\n              }\r\n            }\r\n\r\n          });\r\n          rowIndex++;\r\n          tdData = $.trim(tdData);\r\n          tdData = $.trim(tdData).substring(0, tdData.length -1);\r\n        });\r\n\r\n        // Row vs Column\r\n        $(el).find('tbody').find(defaults.tbodySelector).each(function() {\r\n        tdData += \"\\n\";\r\n          $(this).filter(':visible').find('td').each(function(index,data) {\r\n            if ($(this).css('display') != 'none' &&\r\n                $(this).data(\"tableexport-display\") != 'none'){\r\n              if(defaults.ignoreColumn.indexOf(index) == -1){\r\n                tdData += csvString(this, rowIndex, index) + defaults.csvSeparator;\r\n              }\r\n            }\r\n          });\r\n          rowIndex++;\r\n          //tdData = $.trim(tdData);\r\n          tdData = $.trim(tdData).substring(0, tdData.length -1);\r\n        });\r\n\r\n        //output\r\n        if(defaults.consoleLog == 'true')\r\n          console.log(tdData);\r\n\r\n        if(defaults.outputMode == 'string')\r\n          return tdData;\r\n\r\n        if(defaults.outputMode == 'base64')\r\n          return base64encode(tdData);\r\n\r\n        try {\r\n          var blob = new Blob([(defaults.type == 'csv' ? '\\ufeff' : '') + tdData], {type: \"text/\"+(defaults.type == 'csv' ? 'csv' : 'plain')+\";charset=utf-8\"});\r\n          saveAs (blob, defaults.fileName + '.' + defaults.type);\r\n        }\r\n        catch (e) {\r\n          downloadFile(defaults.fileName + '.' + defaults.type,\r\n                       'data:text/'+(defaults.type == 'csv' ? 'csv' : 'plain')+';charset=utf-8,' + (defaults.type == 'csv' ? '\\ufeff' : '') +\r\n                       encodeURIComponent(tdData));\r\n        }\r\n\r\n      }else if(defaults.type == 'sql'){\r\n\r\n        // Header\r\n        var rowIndex = 0;\r\n        var tdData =\"INSERT INTO `\"+defaults.tableName+\"` (\";\r\n        $(el).find('thead').find(defaults.theadSelector).each(function() {\r\n\r\n          $(this).filter(':visible').find('th').each(function(index,data) {\r\n            if ($(this).css('display') != 'none' &&\r\n                $(this).data(\"tableexport-display\") != 'none'){\r\n              if(defaults.ignoreColumn.indexOf(index) == -1){\r\n                tdData += \"'\" + parseString(this, rowIndex, index) + \"',\" ;\r\n              }\r\n            }\r\n\r\n          });\r\n          rowIndex++;\r\n          tdData = $.trim(tdData);\r\n          tdData = $.trim(tdData).substring(0, tdData.length -1);\r\n        });\r\n        tdData += \") VALUES \";\r\n        // Row vs Column\r\n        $(el).find('tbody').find(defaults.tbodySelector).each(function() {\r\n        tdData += \"(\";\r\n          $(this).filter(':visible').find('td').each(function(index,data) {\r\n            if ($(this).css('display') != 'none' &&\r\n                $(this).data(\"tableexport-display\") != 'none'){\r\n              if(defaults.ignoreColumn.indexOf(index) == -1){\r\n                tdData += \"'\" + parseString(this, rowIndex, index) + \"',\";\r\n              }\r\n            }\r\n          });\r\n          rowIndex++;\r\n          tdData = $.trim(tdData).substring(0, tdData.length -1);\r\n          tdData += \"),\";\r\n        });\r\n\r\n        tdData = $.trim(tdData).substring(0, tdData.length -1);\r\n        tdData += \";\";\r\n\r\n        //output\r\n        if(defaults.consoleLog == 'true')\r\n          console.log(tdData);\r\n\r\n        if(defaults.outputMode == 'string')\r\n          return tdData;\r\n\r\n        if(defaults.outputMode == 'base64')\r\n          return base64encode(tdData);\r\n\r\n        try {\r\n          var blob = new Blob([tdData], {type: \"text/plain;charset=utf-8\"});\r\n          saveAs (blob, defaults.fileName + '.sql');\r\n        }\r\n        catch (e) {\r\n          downloadFile(defaults.fileName+'.sql', 'data:application/sql;charset=utf-8,' + encodeURIComponent(tdData));\r\n        }\r\n\r\n      }else if(defaults.type == 'json'){\r\n\r\n        var jsonHeaderArray = [];\r\n        $(el).find('thead').find(defaults.theadSelector).each(function() {\r\n          var tdData =\"\";\r\n          var jsonArrayTd = [];\r\n          var rowIndex = 0;\r\n\r\n          $(this).filter(':visible').find('th').each(function(index,data) {\r\n            if ($(this).css('display') != 'none' &&\r\n                $(this).data(\"tableexport-display\") != 'none'){\r\n              if(defaults.ignoreColumn.indexOf(index) == -1){\r\n                jsonArrayTd.push(parseString(this, rowIndex, index));\r\n              }\r\n            }\r\n          });\r\n          rowIndex++;\r\n          jsonHeaderArray.push(jsonArrayTd);\r\n\r\n        });\r\n\r\n        var jsonArray = [];\r\n        $(el).find('tbody').find(defaults.tbodySelector).each(function() {\r\n          var tdData =\"\";\r\n          var jsonArrayTd = [];\r\n\r\n          $(this).filter(':visible').find('td').each(function(index,data) {\r\n            if ($(this).css('display') != 'none' &&\r\n                $(this).data(\"tableexport-display\") != 'none'){\r\n              if(defaults.ignoreColumn.indexOf(index) == -1){\r\n                jsonArrayTd.push(parseString(this, rowIndex, index));\r\n              }\r\n            }\r\n          });\r\n          rowIndex++;\r\n          jsonArray.push(jsonArrayTd);\r\n        });\r\n\r\n        var jsonExportArray =[];\r\n        jsonExportArray.push({header:jsonHeaderArray,data:jsonArray});\r\n\r\n        var sdata = JSON.stringify(jsonExportArray);\r\n\r\n        if(defaults.consoleLog == 'true')\r\n          console.log(sdata);\r\n\r\n        if(defaults.outputMode == 'string')\r\n          return sdata;\r\n\r\n        var base64data = base64encode(sdata);\r\n\r\n        if(defaults.outputMode == 'base64')\r\n          return base64data;\r\n\r\n        try {\r\n          var blob = new Blob([sdata], {type: \"application/json;charset=utf-8\"});\r\n          saveAs (blob, defaults.fileName + '.json');\r\n        }\r\n        catch (e) {\r\n          downloadFile(defaults.fileName+'.json', 'data:application/json;charset=utf-8;base64,' + base64data);\r\n        }\r\n\r\n      }else if(defaults.type == 'xml'){\r\n\r\n        var rowIndex = 0;\r\n        var xml = '<?xml version=\"1.0\" encoding=\"utf-8\"?>';\r\n        xml += '<tabledata><fields>';\r\n\r\n        // Header\r\n        $(el).find('thead').find(defaults.theadSelector).each(function() {\r\n          $(this).filter(':visible').find('th').each(function(index,data) {\r\n            if ($(this).css('display') != 'none' &&\r\n                $(this).data(\"tableexport-display\") != 'none'){\r\n              if(defaults.ignoreColumn.indexOf(index) == -1){\r\n                xml += \"<field>\" + parseString(this, rowIndex, index) + \"</field>\";\r\n              }\r\n            }\r\n          });\r\n          rowIndex++;\r\n        });\r\n        xml += '</fields><data>';\r\n\r\n        // Row Vs Column\r\n        var rowCount=1;\r\n        $(el).find('tbody').find(defaults.tbodySelector).each(function() {\r\n          xml += '<row id=\"'+rowCount+'\">';\r\n          var colCount=0;\r\n          $(this).filter(':visible').find('td').each(function(index,data) {\r\n            if ($(this).css('display') != 'none' &&\r\n                $(this).data(\"tableexport-display\") != 'none'){\r\n              if(defaults.ignoreColumn.indexOf(index) == -1){\r\n                xml += \"<column-\"+colCount+\">\"+parseString(this, rowIndex, index)+\"</column-\"+colCount+\">\";\r\n              }\r\n            }\r\n            colCount++;\r\n          });\r\n          rowCount++;\r\n          rowIndex++;\r\n          xml += '</row>';\r\n        });\r\n        xml += '</data></tabledata>'\r\n\r\n        //output\r\n        if(defaults.consoleLog == 'true')\r\n          console.log(xml);\r\n\r\n        if(defaults.outputMode == 'string')\r\n          return xml;\r\n\r\n        var base64data = base64encode(xml);\r\n\r\n        if(defaults.outputMode == 'base64')\r\n          return base64data;\r\n\r\n        try {\r\n          var blob = new Blob([xml], {type: \"application/xml;charset=utf-8\"});\r\n          saveAs (blob, defaults.fileName + '.xml');\r\n        }\r\n        catch (e) {\r\n          downloadFile(defaults.fileName+'.xml', 'data:application/xml;charset=utf-8;base64,' + base64data);\r\n        }\r\n\r\n      }else if(defaults.type == 'excel' || defaults.type == 'doc'){\r\n        //console.log($(this).html());\r\n\r\n        var rowIndex = 0;\r\n        var excel=\"<table>\";\r\n        // Header\r\n        $(el).find('thead').find(defaults.theadSelector).each(function() {\r\n          excel += \"<tr>\";\r\n          $(this).filter(':visible').find('th,td').each(function(index,data) {\r\n            if ($(this).css('display') != 'none' &&\r\n                $(this).data(\"tableexport-display\") != 'none'){\r\n              if(defaults.ignoreColumn.indexOf(index) == -1){\r\n                excel += \"<td style='\";\r\n                for( var styles in defaults.excelstyles ) {\r\n                  if( defaults.excelstyles.hasOwnProperty(styles) ) {\r\n                    excel += defaults.excelstyles[styles] + \": \" + $(this).css(defaults.excelstyles[styles]) + \";\";\r\n                  }\r\n                }\r\n                excel += \"'>\" + parseString(this, rowIndex, index)+ \"</td>\";\r\n              }\r\n            }\r\n          });\r\n          rowIndex++;\r\n          excel += '</tr>';\r\n        });\r\n\r\n        // Row Vs Column\r\n        var rowCount=1;\r\n        $(el).find('tbody').find(defaults.tbodySelector).each(function() {\r\n          excel += \"<tr>\";\r\n          var colCount=0;\r\n          $(this).filter(':visible').find('td').each(function(index,data) {\r\n            if ($(this).css('display') != 'none' &&\r\n                $(this).data(\"tableexport-display\") != 'none'){\r\n              if(defaults.ignoreColumn.indexOf(index) == -1){\r\n                excel += \"<td style='\";\r\n                for( var styles in defaults.excelstyles ) {\r\n                  if( defaults.excelstyles.hasOwnProperty(styles) ) {\r\n                    excel += defaults.excelstyles[styles] + \": \" + $(this).css(defaults.excelstyles[styles]) + \";\";\r\n                  }\r\n                }\r\n                if ($(this).is(\"[colspan]\"))\r\n                  excel += \"' colspan='\" + $(this).attr('colspan');\r\n                excel += \"'>\" + parseString(this, rowIndex, index) + \"</td>\";\r\n              }\r\n            }\r\n            colCount++;\r\n          });\r\n          rowCount++;\r\n          rowIndex++;\r\n          excel += '</tr>';\r\n        });\r\n\r\n        if(defaults.displayTableName)\r\n          excel +=\"<tr><td></td></tr><tr><td></td></tr><tr><td>\" + parseString($('<p>' + defaults.tableName + '</p>')) + \"</td></tr>\";\r\n\r\n        excel += '</table>'\r\n\r\n        if(defaults.consoleLog == 'true')\r\n          console.log(excel);\r\n\r\n        var excelFile = \"<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:\"+defaults.type+\"' xmlns='http://www.w3.org/TR/REC-html40'>\";\r\n        excelFile += '<meta http-equiv=\"content-type\" content=\"application/vnd.ms-'+defaults.type+'; charset=UTF-8\">';\r\n        excelFile += '<meta http-equiv=\"content-type\" content=\"application/';\r\n        excelFile += (defaults.type == 'excel')? 'vnd.ms-excel' : 'msword';\r\n        excelFile += '; charset=UTF-8\">';\r\n        excelFile += \"<head>\";\r\n        if (defaults.type == 'excel') {\r\n          excelFile += \"<!--[if gte mso 9]>\";\r\n          excelFile += \"<xml>\";\r\n          excelFile += \"<x:ExcelWorkbook>\";\r\n          excelFile += \"<x:ExcelWorksheets>\";\r\n          excelFile += \"<x:ExcelWorksheet>\";\r\n          excelFile += \"<x:Name>\";\r\n          excelFile += defaults.worksheetName;\r\n          excelFile += \"</x:Name>\";\r\n          excelFile += \"<x:WorksheetOptions>\";\r\n          excelFile += \"<x:DisplayGridlines/>\";\r\n          excelFile += \"</x:WorksheetOptions>\";\r\n          excelFile += \"</x:ExcelWorksheet>\";\r\n          excelFile += \"</x:ExcelWorksheets>\";\r\n          excelFile += \"</x:ExcelWorkbook>\";\r\n          excelFile += \"</xml>\";\r\n          excelFile += \"<![endif]-->\";\r\n        }\r\n        excelFile += \"</head>\";\r\n        excelFile += \"<body>\";\r\n        excelFile += excel;\r\n        excelFile += \"</body>\";\r\n        excelFile += \"</html>\";\r\n\r\n        if(defaults.outputMode == 'string')\r\n          return excelFile;\r\n\r\n        var base64data = base64encode(excelFile);\r\n\r\n        if(defaults.outputMode == 'base64')\r\n          return base64data;\r\n\r\n        var extension = (defaults.type == 'excel')? 'xls' : 'doc';\r\n        try {\r\n          var blob = new Blob([excelFile], {type: 'application/vnd.ms-'+defaults.type});\r\n          saveAs (blob, defaults.fileName+'.'+extension);\r\n        }\r\n        catch (e) {\r\n          downloadFile(defaults.fileName+'.'+extension, 'data:application/vnd.ms-'+defaults.type+';base64,' + base64data);\r\n        }\r\n\r\n      }else if(defaults.type == 'png'){\r\n        html2canvas($(el), {\r\n          onrendered: function(canvas) {\r\n\r\n            var image = canvas.toDataURL();\r\n            image = image.substring(22); // remove data stuff\r\n\r\n            var byteString = atob(image);\r\n            var buffer = new ArrayBuffer(byteString.length);\r\n            var intArray = new Uint8Array(buffer);\r\n\r\n            for (var i = 0; i < byteString.length; i++)\r\n              intArray[i] = byteString.charCodeAt(i);\r\n\r\n            try {\r\n              var blob = new Blob([buffer], { type: \"image/png\" });\r\n              saveAs (blob, defaults.fileName + '.png');\r\n            }\r\n            catch (e) {\r\n              downloadFile(defaults.fileName+'.png', 'data:image/png;base64,' + image);\r\n            }\r\n          }\r\n        });\r\n      }else if(defaults.type == 'pdf'){\r\n        var doc = new jsPDF();\r\n        var options = {\r\n          dim:{\r\n            w: getPropertyUnitValue ($(el).get(0), 'width', 'mm'),\r\n            h: getPropertyUnitValue ($(el).get(0), 'height', 'mm')\r\n          }\r\n        }\r\n\r\n        doc.addHTML($(el),defaults.pdfLeftMargin,0,options,function() {\r\n          var pdfdata = doc.output();\r\n\r\n          if(defaults.consoleLog == 'true')\r\n            console.log(pdfdata);\r\n\r\n          if(defaults.outputMode == 'string')\r\n            return pdfdata;\r\n\r\n          var base64data = base64encode(pdfdata);\r\n\r\n          if(defaults.outputMode == 'base64')\r\n            return base64data;\r\n\r\n          try {\r\n            var blob = doc.output('blob');\r\n            saveAs (blob, defaults.fileName + '.pdf');\r\n          }\r\n          catch (e) {\r\n            downloadFile(defaults.fileName+'.pdf', 'data:application/pdf;base64,' + base64data);\r\n          }\r\n        });\r\n      }\r\n\r\n      function escapeRegExp(string){\r\n        return string.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\r\n      }\r\n\r\n      function replaceAll(string, find, replace){\r\n        return string.replace(new RegExp(escapeRegExp(find), 'g'), replace);\r\n      }\r\n\r\n      function csvString(cell, rowIndex, colIndex){\r\n        var result = '';\r\n        var dataString = parseString(cell, rowIndex, colIndex);\r\n\r\n        var csvValue = (dataString === null || dataString == '')? '' : dataString.toString();\r\n\r\n        if ( dataString instanceof Date )\r\n          result = defaults.csvEnclosure + dataString.toLocaleString() + defaults.csvEnclosure;\r\n        else{\r\n          result = replaceAll (csvValue, defaults.csvEnclosure, defaults.csvEnclosure + defaults.csvEnclosure);\r\n\r\n          if ( result.indexOf (defaults.csvSeparator) >= 0 || /[\\r\\n ]/g.test(result) )\r\n            result = defaults.csvEnclosure + result + defaults.csvEnclosure;\r\n        }\r\n\r\n        return result;\r\n      }\r\n\r\n      function parseString(cell, rowIndex, colIndex){\r\n        var $cell = $(cell);\r\n\r\n        if(defaults.htmlContent == 'true'){\r\n          content_data = $cell.html().trim();\r\n        }else{\r\n          content_data = $cell.text().trim().replace(/\\u00AD/g, \"\"); // remove soft hyphens\r\n        }\r\n\r\n        if(defaults.escape == 'true'){\r\n          content_data = escape(content_data);\r\n        }\r\n\r\n        if (typeof defaults.onCellData === 'function'){\r\n          content_data = defaults.onCellData($cell, rowIndex, colIndex, content_data);\r\n        }\r\n\r\n        return content_data;\r\n      }\r\n\r\n      function hyphenate (a, b, c){\r\n        return b + \"-\" + c.toLowerCase();\r\n      }\r\n\r\n      // get computed style property\r\n      function getStyle (target, prop){\r\n        if(window.getComputedStyle){ // gecko and webkit\r\n          prop = prop.replace(/([a-z])([A-Z])/, hyphenate);  // requires hyphenated, not camel\r\n          return window.getComputedStyle(target, null).getPropertyValue(prop);\r\n        }\r\n        if(target.currentStyle){ // ie\r\n          return target.currentStyle[prop];\r\n        }\r\n        return target.style[prop];\r\n      }\r\n\r\n      function getPropertyUnitValue (target, prop, unit){\r\n        var baseline = 100;  // any number serves\r\n\r\n        var value = getStyle(target, prop);  // get the computed style value\r\n\r\n        var numeric = value.match(/\\d+/);  // get the numeric component\r\n        if(numeric !== null) {\r\n          numeric = numeric[0];  // get the string\r\n\r\n          var temp = document.createElement(\"div\");  // create temporary element\r\n          temp.style.overflow = \"hidden\";  // in case baseline is set too low\r\n          temp.style.visibility = \"hidden\";  // no need to show it\r\n\r\n          target.parentElement.appendChild(temp); // insert it into the parent for em, ex and %\r\n\r\n          temp.style.width = baseline + unit;\r\n          var factor = baseline / temp.offsetWidth;\r\n\r\n          target.parentElement.removeChild(temp);  // clean up\r\n\r\n          return (numeric * factor);\r\n        }\r\n        return 0;\r\n      }\r\n\r\n      function downloadFile(filename, data){\r\n        var DownloadLink = document.createElement('a');\r\n\r\n        if ( DownloadLink ){\r\n          document.body.appendChild(DownloadLink);\r\n          DownloadLink.style = 'display: none';\r\n          DownloadLink.download = filename;\r\n          DownloadLink.href = data;\r\n\r\n          if ( document.createEvent ){\r\n            if ( DownloadEvt == null )\r\n              DownloadEvt = document.createEvent('MouseEvents');\r\n\r\n            DownloadEvt.initEvent('click', true, false);\r\n            DownloadLink.dispatchEvent(DownloadEvt);\r\n          }\r\n          else if ( document.createEventObject )\r\n            DownloadLink.fireEvent('onclick');\r\n          else if (typeof DownloadLink.onclick == 'function' )\r\n            DownloadLink.onclick();\r\n\r\n          document.body.removeChild(DownloadLink);\r\n        }\r\n      }\r\n\r\n      function utf8Encode(string) {\r\n        string = string.replace(/\\x0d\\x0a/g, \"\\x0a\");\r\n        var utftext = \"\";\r\n        for (var n = 0; n < string.length; n++) {\r\n          var c = string.charCodeAt(n);\r\n          if (c < 128) {\r\n            utftext += String.fromCharCode(c);\r\n          }\r\n          else if((c > 127) && (c < 2048)) {\r\n            utftext += String.fromCharCode((c >> 6) | 192);\r\n            utftext += String.fromCharCode((c & 63) | 128);\r\n          }\r\n          else {\r\n            utftext += String.fromCharCode((c >> 12) | 224);\r\n            utftext += String.fromCharCode(((c >> 6) & 63) | 128);\r\n            utftext += String.fromCharCode((c & 63) | 128);\r\n          }\r\n        }\r\n        return utftext;\r\n      }\r\n\r\n      function base64encode(input) {\r\n        var keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n        var output = \"\";\r\n        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\r\n        var i = 0;\r\n        input = utf8Encode(input);\r\n        while (i < input.length) {\r\n          chr1 = input.charCodeAt(i++);\r\n          chr2 = input.charCodeAt(i++);\r\n          chr3 = input.charCodeAt(i++);\r\n          enc1 = chr1 >> 2;\r\n          enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\r\n          enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\r\n          enc4 = chr3 & 63;\r\n          if (isNaN(chr2)) {\r\n            enc3 = enc4 = 64;\r\n          } else if (isNaN(chr3)) {\r\n            enc4 = 64;\r\n          }\r\n          output = output +\r\n            keyStr.charAt(enc1) + keyStr.charAt(enc2) +\r\n            keyStr.charAt(enc3) + keyStr.charAt(enc4);\r\n        }\r\n        return output;\r\n      }\r\n    }\r\n  });\r\n})(jQuery);\r\n"
  },
  {
    "path": "src/test/java/com/test/bpm/TestBpm.java",
    "content": "package com.test.bpm;\r\n\r\nimport java.util.List;\r\n\r\nimport javax.annotation.Resource;\r\n\r\nimport org.junit.Test;\r\nimport org.junit.runner.RunWith;\r\nimport org.springframework.test.context.ContextConfiguration;\r\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r\n\r\nimport com.lcore.hr.core.entity.Root;\r\nimport com.lcore.hr.menu.organization.service.OrganizationService;\r\n\r\n@RunWith(SpringJUnit4ClassRunner.class)\r\n@ContextConfiguration(locations = { \"classpath*:spring-common.xml\" })\r\npublic class TestBpm{\r\n    @Resource\r\n    private OrganizationService organizationService;\r\n    \r\n    @Test\r\n    public void test01(){\r\n      List<Root> roots =  organizationService.getOuList(0, -1, null, null, null);\r\n      System.out.println(roots.size());\r\n      for(Root root:roots){\r\n    \t  System.out.println(root.toString());\r\n      }\r\n    }\r\n    \r\n}\r\n"
  },
  {
    "path": "src/test/resources/jdbc.properties",
    "content": "jdbc.driver=com.mysql.jdbc.Driver\r\njdbc.url=jdbc:mysql://localhost/hr\r\njdbc.username=root\r\njdbc.password=root"
  },
  {
    "path": "src/test/resources/log4j.properties",
    "content": "# Rules reminder:\n# DEBUG < INFO < WARN < ERROR < FATAL\n\n# Global logging configuration\nlog4j.rootLogger=info, stdout,DefLog\n\n# My logging configuration...\nlog4j.logger.org.mybatis.jpetstore=INFO\n\n## Console output...\nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender\nlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout\nlog4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n\n\n## File output...\nog4j.appender.DefLog=org.apache.log4j.RollingFileAppender   \nlog4j.appender.DefLog.File=${catalina.home}/logs/flow.log   \nlog4j.appender.DefLog.DatePattern='.'yyyy-MM-dd'.log'  \nlog4j.appender.DefLog.maxBackupIndex=10  \nlog4j.appender.DefLog.maxFileSize=10MB   \nlog4j.appender.DefLog.Append=true  \nlog4j.appender.DefLog.layout=org.apache.log4j.PatternLayout   \nlog4j.appender.DefLog.layout.ConversionPattern=%5p [%t] [%d] (%c) - %m%n  "
  },
  {
    "path": "src/test/resources/spring-common.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:context=\"http://www.springframework.org/schema/context\"\r\n\txmlns:p=\"http://www.springframework.org/schema/p\" xmlns:tx=\"http://www.springframework.org/schema/tx\"\r\n\txsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd\r\n\t\thttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd\r\n\t\thttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd\" default-autowire=\"byName\">\r\n\r\n\r\n      \r\n    <bean id=\"springContextHelper\" class=\"com.lcore.hr.core.utils.SpringFactory\">\r\n    </bean>  \r\n\t<context:property-placeholder location=\"classpath:jdbc.properties\" />\r\n\t<context:component-scan base-package=\"com.lcore.hr\" />\r\n\r\n\t<bean id=\"dataSource\" class=\"org.apache.commons.dbcp.BasicDataSource\"\r\n\t\tp:driverClassName=\"${jdbc.driver}\" p:url=\"${jdbc.url}\" p:username=\"${jdbc.username}\"\r\n\t\tp:password=\"${jdbc.password}\" />\r\n\r\n\t<bean id=\"sessionFactory\"\r\n\t\tclass=\"org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean\">\r\n\t\t<property name=\"dataSource\" ref=\"dataSource\" />\r\n\t\t<property name=\"hibernateProperties\">\r\n\t\t\t<props>\r\n\t\t\t\t<prop key=\"hibernate.dialect\">org.hibernate.dialect.MySQLDialect</prop>\r\n<!-- \t\t\t\t<prop key=\"hibernate.current_session_context_class\">thread</prop> -->\r\n\t\t\t\t<prop key=\"hibernate.hbm2ddl.auto\">update</prop>\r\n\t\t\t\t<prop key=\"hibernate.show_sql\">true</prop>\r\n\t\t\t\t<prop key=\"hibernate.format_sql\">false</prop>\r\n\t\t\t</props>\r\n\t\t</property>\r\n\t\t<property name=\"packagesToScan\">\r\n\t\t\t<list>\r\n\t\t\t\t<value>com.lcore.hr.core.entity</value>\r\n\t\t\t\t<value>com.lcore.hr.entity</value>\r\n\t\t\t</list>\r\n\t\t</property>\r\n\t</bean>\r\n\r\n\t<!-- JDBC模板 -->\r\n\t<bean id=\"jdbcTemplate\" class=\"org.springframework.jdbc.core.JdbcTemplate\">\r\n\t\t<property name=\"dataSource\" ref=\"dataSource\" />\r\n\t</bean>\r\n\r\n\t<!-- Hibernate模板 -->\r\n\t<bean id=\"hibernateTemplate\" class=\"org.springframework.orm.hibernate3.HibernateTemplate\">\r\n\t\t<property name=\"sessionFactory\" ref=\"sessionFactory\" />\r\n\t</bean>\r\n\t<!-- 配置事务 -->\r\n\t<bean id=\"transactionManager\"\r\n\t\tclass=\"org.springframework.orm.hibernate3.HibernateTransactionManager\">\r\n\t\t<property name=\"sessionFactory\" ref=\"sessionFactory\" />\r\n\t</bean>\r\n\t<!-- 配置注解性事务 -->\r\n    <tx:annotation-driven transaction-manager=\"transactionManager\"></tx:annotation-driven>\r\n</beans>\r\n"
  },
  {
    "path": "src/test/resources/spring-mvc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:context=\"http://www.springframework.org/schema/context\"\r\n\txmlns:mvc=\"http://www.springframework.org/schema/mvc\"\r\n\txsi:schemaLocation=\"http://www.springframework.org/schema/beans \r\n\thttp://www.springframework.org/schema/beans/spring-beans.xsd\r\n\thttp://www.springframework.org/schema/context\r\n\thttp://www.springframework.org/schema/context/spring-context-3.2.xsd\r\n\thttp://www.springframework.org/schema/mvc\r\n\thttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd\">\r\n\r\n\t<!-- 注解扫描包 -->\r\n\t<context:component-scan base-package=\"com.lcore.hr.menu.*.controller\" />\r\n\t<!-- 启动spring mvc的注解功能，完成请求和注解POJO的映射 -->\r\n\t<bean\r\n\t\tclass=\"org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter\">\r\n\t\t<!-- 配置信息转换，将用@responsebody注解的返回值转换为json返回前台，编码为utf-8 -->\r\n\t\t<property name=\"messageConverters\">\r\n\t\t\t<list>\r\n\t\t\t</list>\r\n\t\t</property>\r\n\t</bean>\r\n\t<mvc:annotation-driven>\r\n\t\t<!-- 处理responseBody 里面日期类型 -->\r\n\t\t<mvc:message-converters>\r\n\t\t\t<bean\r\n\t\t\t\tclass=\"org.springframework.http.converter.json.MappingJackson2HttpMessageConverter\">\r\n\t\t\t\t<property name=\"objectMapper\">\r\n\t\t\t\t\t<bean class=\"com.fasterxml.jackson.databind.ObjectMapper\">\r\n\t\t\t\t\t\t<property name=\"dateFormat\">\r\n\t\t\t\t\t\t\t<bean class=\"java.text.SimpleDateFormat\">\r\n\t\t\t\t\t\t\t\t<constructor-arg type=\"java.lang.String\" value=\"yyyy-MM-dd\" />\r\n\t\t\t\t\t\t\t</bean>\r\n\t\t\t\t\t\t</property>\r\n\t\t\t\t\t</bean>\r\n\t\t\t\t</property>\r\n\t\t\t</bean>\r\n\t\t</mvc:message-converters>\r\n\t</mvc:annotation-driven>\r\n\t<!-- 静态资源(js/image)的访问 -->\r\n\t<mvc:resources mapping=\"/static/**\" location=\"/static/\" />\r\n\t<mvc:interceptors>\r\n\t\t<mvc:interceptor>\r\n\t\t\t<mvc:mapping path=\"/ou/*\" />\r\n\t\t\t<mvc:mapping path=\"/user/*\" />\r\n\t\t\t<bean class=\"com.lcore.hr.interceptor.SecurityInterceptor\" />\r\n\t\t</mvc:interceptor>\r\n\t</mvc:interceptors>\r\n\t<!-- 定义视图解析器 -->\r\n\t<!-- 配置velocity引擎处理请求 -->\r\n\t<bean id=\"velocityConfigurer\"\r\n\t\tclass=\"org.springframework.web.servlet.view.velocity.VelocityConfigurer\">\r\n\t\t<!-- <property name=\"configLocation\"> <value>/WEB-INF/toolbox.xml</value> \r\n\t\t\t</property> -->\r\n\t\t<property name=\"resourceLoaderPath\">\r\n\t\t\t<value>/WEB-INF/views/</value>\r\n\t\t</property>\r\n\t\t<property name=\"velocityProperties\">\r\n\t\t\t<props>\r\n\t\t\t\t<prop key=\"input.encoding\">UTF-8</prop>\r\n\t\t\t\t<prop key=\"output.encoding\">UTF-8</prop>\r\n\t\t\t</props>\r\n\t\t</property>\r\n\t</bean>\r\n\r\n\t<!-- 配置velocity视图解析器 -->\r\n\t<bean id=\"viewResolver\"\r\n\t\tclass=\"org.springframework.web.servlet.view.velocity.VelocityViewResolver\">\r\n\t\t<property name=\"suffix\">\r\n\t\t\t<value>.vm</value>\r\n\t\t</property>\r\n\t\t<property name=\"contentType\" value=\"text/html;charset=UTF-8\"></property>\r\n\t</bean>\r\n</beans>\r\n"
  },
  {
    "path": "src/test/resources/sys.properties",
    "content": "basePath=/hr"
  }
]