diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..590af61 --- /dev/null +++ b/.classpath @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore index 32858aa..854eab1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,12 @@ .mtj.tmp/ # Package Files # -*.jar *.war *.ear +.settings/ + + # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* +/target/ diff --git a/.project b/.project new file mode 100644 index 0000000..04c4593 --- /dev/null +++ b/.project @@ -0,0 +1,42 @@ + + + Java-framework + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/WebContent/META-INF/MANIFEST.MF b/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000..254272e --- /dev/null +++ b/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/WebContent/WEB-INF/configs/spring-business-config.xml b/WebContent/WEB-INF/configs/spring-business-config.xml new file mode 100644 index 0000000..e35b642 --- /dev/null +++ b/WebContent/WEB-INF/configs/spring-business-config.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/WebContent/WEB-INF/configs/spring-dao-config.xml b/WebContent/WEB-INF/configs/spring-dao-config.xml new file mode 100644 index 0000000..d425d30 --- /dev/null +++ b/WebContent/WEB-INF/configs/spring-dao-config.xml @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/WebContent/WEB-INF/configs/spring-datasource-config.xml b/WebContent/WEB-INF/configs/spring-datasource-config.xml new file mode 100644 index 0000000..e1d5752 --- /dev/null +++ b/WebContent/WEB-INF/configs/spring-datasource-config.xml @@ -0,0 +1,67 @@ + + + + + file:D:/Programing/java/Java-framework/resources/spring-server-config.properties + + + + + + + + + + + + + + + + + + + + org.hibernate.dialect.MySQLDialect + true + 1 + 150 + 300 + 1800 + + + + + + framgiavn/project01/web/model/User.hbm.xml + + + + + + + + + + + + + + + + PROPAGATION_REQUIRED + PROPAGATION_REQUIRED + PROPAGATION_REQUIRED + PROPAGATION_SUPPORTS + + + + \ No newline at end of file diff --git a/WebContent/WEB-INF/configs/spring-struts-web-action-config.xml b/WebContent/WEB-INF/configs/spring-struts-web-action-config.xml new file mode 100644 index 0000000..6d7b071 --- /dev/null +++ b/WebContent/WEB-INF/configs/spring-struts-web-action-config.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/WebContent/WEB-INF/configs/tiles-defs-default.xml b/WebContent/WEB-INF/configs/tiles-defs-default.xml new file mode 100644 index 0000000..79f089e --- /dev/null +++ b/WebContent/WEB-INF/configs/tiles-defs-default.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WebContent/WEB-INF/configs/tiles-defs-user.xml b/WebContent/WEB-INF/configs/tiles-defs-user.xml new file mode 100644 index 0000000..7f88723 --- /dev/null +++ b/WebContent/WEB-INF/configs/tiles-defs-user.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/WebContent/WEB-INF/lib/XmlSchema-1.4.3.jar b/WebContent/WEB-INF/lib/XmlSchema-1.4.3.jar new file mode 100644 index 0000000..656eced Binary files /dev/null and b/WebContent/WEB-INF/lib/XmlSchema-1.4.3.jar differ diff --git a/WebContent/WEB-INF/lib/activation-1.1.jar b/WebContent/WEB-INF/lib/activation-1.1.jar new file mode 100644 index 0000000..53f82a1 Binary files /dev/null and b/WebContent/WEB-INF/lib/activation-1.1.jar differ diff --git a/WebContent/WEB-INF/lib/activeio-core-3.1.2.jar b/WebContent/WEB-INF/lib/activeio-core-3.1.2.jar new file mode 100644 index 0000000..87bb58c Binary files /dev/null and b/WebContent/WEB-INF/lib/activeio-core-3.1.2.jar differ diff --git a/WebContent/WEB-INF/lib/activemq-core-5.5.1.jar b/WebContent/WEB-INF/lib/activemq-core-5.5.1.jar new file mode 100644 index 0000000..7ea9077 Binary files /dev/null and b/WebContent/WEB-INF/lib/activemq-core-5.5.1.jar differ diff --git a/WebContent/WEB-INF/lib/activemq-protobuf-1.1.jar b/WebContent/WEB-INF/lib/activemq-protobuf-1.1.jar new file mode 100644 index 0000000..f533201 Binary files /dev/null and b/WebContent/WEB-INF/lib/activemq-protobuf-1.1.jar differ diff --git a/WebContent/WEB-INF/lib/annotation-detector-3.0.0.jar b/WebContent/WEB-INF/lib/annotation-detector-3.0.0.jar new file mode 100644 index 0000000..2e82c48 Binary files /dev/null and b/WebContent/WEB-INF/lib/annotation-detector-3.0.0.jar differ diff --git a/WebContent/WEB-INF/lib/antlr-2.7.6.jar b/WebContent/WEB-INF/lib/antlr-2.7.6.jar new file mode 100644 index 0000000..3702b64 Binary files /dev/null and b/WebContent/WEB-INF/lib/antlr-2.7.6.jar differ diff --git a/WebContent/WEB-INF/lib/aopalliance-1.0.jar b/WebContent/WEB-INF/lib/aopalliance-1.0.jar new file mode 100644 index 0000000..578b1a0 Binary files /dev/null and b/WebContent/WEB-INF/lib/aopalliance-1.0.jar differ diff --git a/WebContent/WEB-INF/lib/asm-3.3.jar b/WebContent/WEB-INF/lib/asm-3.3.jar new file mode 100644 index 0000000..d44dfd8 Binary files /dev/null and b/WebContent/WEB-INF/lib/asm-3.3.jar differ diff --git a/WebContent/WEB-INF/lib/asm-commons-3.3.jar b/WebContent/WEB-INF/lib/asm-commons-3.3.jar new file mode 100644 index 0000000..e509842 Binary files /dev/null and b/WebContent/WEB-INF/lib/asm-commons-3.3.jar differ diff --git a/WebContent/WEB-INF/lib/asm-tree-3.3.jar b/WebContent/WEB-INF/lib/asm-tree-3.3.jar new file mode 100644 index 0000000..374bc2e Binary files /dev/null and b/WebContent/WEB-INF/lib/asm-tree-3.3.jar differ diff --git a/WebContent/WEB-INF/lib/aspectjrt-1.6.6.jar b/WebContent/WEB-INF/lib/aspectjrt-1.6.6.jar new file mode 100644 index 0000000..bc53346 Binary files /dev/null and b/WebContent/WEB-INF/lib/aspectjrt-1.6.6.jar differ diff --git a/WebContent/WEB-INF/lib/aspectjweaver-1.6.6.jar b/WebContent/WEB-INF/lib/aspectjweaver-1.6.6.jar new file mode 100644 index 0000000..340e6f7 Binary files /dev/null and b/WebContent/WEB-INF/lib/aspectjweaver-1.6.6.jar differ diff --git a/WebContent/WEB-INF/lib/atmosphere-runtime-1.0.4.jar b/WebContent/WEB-INF/lib/atmosphere-runtime-1.0.4.jar new file mode 100644 index 0000000..5b3436e Binary files /dev/null and b/WebContent/WEB-INF/lib/atmosphere-runtime-1.0.4.jar differ diff --git a/WebContent/WEB-INF/lib/axiom-api-1.2.8.jar b/WebContent/WEB-INF/lib/axiom-api-1.2.8.jar new file mode 100644 index 0000000..81c07e3 Binary files /dev/null and b/WebContent/WEB-INF/lib/axiom-api-1.2.8.jar differ diff --git a/WebContent/WEB-INF/lib/axiom-impl-1.2.8.jar b/WebContent/WEB-INF/lib/axiom-impl-1.2.8.jar new file mode 100644 index 0000000..d604476 Binary files /dev/null and b/WebContent/WEB-INF/lib/axiom-impl-1.2.8.jar differ diff --git a/WebContent/WEB-INF/lib/axis2-adb-1.5.1.jar b/WebContent/WEB-INF/lib/axis2-adb-1.5.1.jar new file mode 100644 index 0000000..5f5d1ec Binary files /dev/null and b/WebContent/WEB-INF/lib/axis2-adb-1.5.1.jar differ diff --git a/WebContent/WEB-INF/lib/axis2-kernel-1.5.1.jar b/WebContent/WEB-INF/lib/axis2-kernel-1.5.1.jar new file mode 100644 index 0000000..13c4c02 Binary files /dev/null and b/WebContent/WEB-INF/lib/axis2-kernel-1.5.1.jar differ diff --git a/WebContent/WEB-INF/lib/axis2-transport-http-1.5.1.jar b/WebContent/WEB-INF/lib/axis2-transport-http-1.5.1.jar new file mode 100644 index 0000000..72b27b4 Binary files /dev/null and b/WebContent/WEB-INF/lib/axis2-transport-http-1.5.1.jar differ diff --git a/WebContent/WEB-INF/lib/axis2-transport-local-1.5.1.jar b/WebContent/WEB-INF/lib/axis2-transport-local-1.5.1.jar new file mode 100644 index 0000000..027c005 Binary files /dev/null and b/WebContent/WEB-INF/lib/axis2-transport-local-1.5.1.jar differ diff --git a/WebContent/WEB-INF/lib/backport-util-concurrent-2.1.jar b/WebContent/WEB-INF/lib/backport-util-concurrent-2.1.jar new file mode 100644 index 0000000..96ab689 Binary files /dev/null and b/WebContent/WEB-INF/lib/backport-util-concurrent-2.1.jar differ diff --git a/WebContent/WEB-INF/lib/cglib-2.2.2.jar b/WebContent/WEB-INF/lib/cglib-2.2.2.jar new file mode 100644 index 0000000..564b9f8 Binary files /dev/null and b/WebContent/WEB-INF/lib/cglib-2.2.2.jar differ diff --git a/WebContent/WEB-INF/lib/commons-beanutils-1.7.0.jar b/WebContent/WEB-INF/lib/commons-beanutils-1.7.0.jar new file mode 100644 index 0000000..b1b89c9 Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-beanutils-1.7.0.jar differ diff --git a/WebContent/WEB-INF/lib/commons-chain-1.1.jar b/WebContent/WEB-INF/lib/commons-chain-1.1.jar new file mode 100644 index 0000000..60c027e Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-chain-1.1.jar differ diff --git a/WebContent/WEB-INF/lib/commons-codec-1.2.jar b/WebContent/WEB-INF/lib/commons-codec-1.2.jar new file mode 100644 index 0000000..67cb720 Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-codec-1.2.jar differ diff --git a/WebContent/WEB-INF/lib/commons-collections-3.2.1.jar b/WebContent/WEB-INF/lib/commons-collections-3.2.1.jar new file mode 100644 index 0000000..c35fa1f Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-collections-3.2.1.jar differ diff --git a/WebContent/WEB-INF/lib/commons-digester-1.8.jar b/WebContent/WEB-INF/lib/commons-digester-1.8.jar new file mode 100644 index 0000000..1110f0a Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-digester-1.8.jar differ diff --git a/WebContent/WEB-INF/lib/commons-fileupload-1.2.2.jar b/WebContent/WEB-INF/lib/commons-fileupload-1.2.2.jar new file mode 100644 index 0000000..131f192 Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-fileupload-1.2.2.jar differ diff --git a/WebContent/WEB-INF/lib/commons-httpclient-3.1.jar b/WebContent/WEB-INF/lib/commons-httpclient-3.1.jar new file mode 100644 index 0000000..7c59774 Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-httpclient-3.1.jar differ diff --git a/WebContent/WEB-INF/lib/commons-io-2.0.1.jar b/WebContent/WEB-INF/lib/commons-io-2.0.1.jar new file mode 100644 index 0000000..5b64b7d Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-io-2.0.1.jar differ diff --git a/WebContent/WEB-INF/lib/commons-lang-2.6.jar b/WebContent/WEB-INF/lib/commons-lang-2.6.jar new file mode 100644 index 0000000..98467d3 Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-lang-2.6.jar differ diff --git a/WebContent/WEB-INF/lib/commons-logging-1.1.1.jar b/WebContent/WEB-INF/lib/commons-logging-1.1.1.jar new file mode 100644 index 0000000..1deef14 Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-logging-1.1.1.jar differ diff --git a/WebContent/WEB-INF/lib/commons-logging-api-1.1.jar b/WebContent/WEB-INF/lib/commons-logging-api-1.1.jar new file mode 100644 index 0000000..d1abcbb Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-logging-api-1.1.jar differ diff --git a/WebContent/WEB-INF/lib/commons-net-2.0.jar b/WebContent/WEB-INF/lib/commons-net-2.0.jar new file mode 100644 index 0000000..996e78f Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-net-2.0.jar differ diff --git a/WebContent/WEB-INF/lib/commons-validator-1.3.1.jar b/WebContent/WEB-INF/lib/commons-validator-1.3.1.jar new file mode 100644 index 0000000..55b12b1 Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-validator-1.3.1.jar differ diff --git a/WebContent/WEB-INF/lib/commons-vfs-1.0.jar b/WebContent/WEB-INF/lib/commons-vfs-1.0.jar new file mode 100644 index 0000000..ab7a213 Binary files /dev/null and b/WebContent/WEB-INF/lib/commons-vfs-1.0.jar differ diff --git a/WebContent/WEB-INF/lib/compat-jbossweb.jar b/WebContent/WEB-INF/lib/compat-jbossweb.jar new file mode 100644 index 0000000..8ecaaff Binary files /dev/null and b/WebContent/WEB-INF/lib/compat-jbossweb.jar differ diff --git a/WebContent/WEB-INF/lib/compat-tomcat.jar b/WebContent/WEB-INF/lib/compat-tomcat.jar new file mode 100644 index 0000000..ead1aea Binary files /dev/null and b/WebContent/WEB-INF/lib/compat-tomcat.jar differ diff --git a/WebContent/WEB-INF/lib/dom4j-1.6.1.jar b/WebContent/WEB-INF/lib/dom4j-1.6.1.jar new file mode 100644 index 0000000..c8c4dbb Binary files /dev/null and b/WebContent/WEB-INF/lib/dom4j-1.6.1.jar differ diff --git a/WebContent/WEB-INF/lib/ehcache-core-2.5.1.jar b/WebContent/WEB-INF/lib/ehcache-core-2.5.1.jar new file mode 100644 index 0000000..34b9085 Binary files /dev/null and b/WebContent/WEB-INF/lib/ehcache-core-2.5.1.jar differ diff --git a/WebContent/WEB-INF/lib/ejb3-persistence-1.0.2.GA.jar b/WebContent/WEB-INF/lib/ejb3-persistence-1.0.2.GA.jar new file mode 100644 index 0000000..32c2266 Binary files /dev/null and b/WebContent/WEB-INF/lib/ejb3-persistence-1.0.2.GA.jar differ diff --git a/WebContent/WEB-INF/lib/freemarker-2.3.18.jar b/WebContent/WEB-INF/lib/freemarker-2.3.18.jar new file mode 100644 index 0000000..aea0e40 Binary files /dev/null and b/WebContent/WEB-INF/lib/freemarker-2.3.18.jar differ diff --git a/WebContent/WEB-INF/lib/geronimo-j2ee-management_1.1_spec-1.0.1.jar b/WebContent/WEB-INF/lib/geronimo-j2ee-management_1.1_spec-1.0.1.jar new file mode 100644 index 0000000..0701ae0 Binary files /dev/null and b/WebContent/WEB-INF/lib/geronimo-j2ee-management_1.1_spec-1.0.1.jar differ diff --git a/WebContent/WEB-INF/lib/geronimo-jms_1.1_spec-1.1.1.jar b/WebContent/WEB-INF/lib/geronimo-jms_1.1_spec-1.1.1.jar new file mode 100644 index 0000000..4f5e646 Binary files /dev/null and b/WebContent/WEB-INF/lib/geronimo-jms_1.1_spec-1.1.1.jar differ diff --git a/WebContent/WEB-INF/lib/guice-2.0.jar b/WebContent/WEB-INF/lib/guice-2.0.jar new file mode 100644 index 0000000..204c4c2 Binary files /dev/null and b/WebContent/WEB-INF/lib/guice-2.0.jar differ diff --git a/WebContent/WEB-INF/lib/hibernate-annotations-3.4.0.GA.jar b/WebContent/WEB-INF/lib/hibernate-annotations-3.4.0.GA.jar new file mode 100644 index 0000000..24b1583 Binary files /dev/null and b/WebContent/WEB-INF/lib/hibernate-annotations-3.4.0.GA.jar differ diff --git a/WebContent/WEB-INF/lib/hibernate-commons-annotations-3.1.0.GA.jar b/WebContent/WEB-INF/lib/hibernate-commons-annotations-3.1.0.GA.jar new file mode 100644 index 0000000..e0ca904 Binary files /dev/null and b/WebContent/WEB-INF/lib/hibernate-commons-annotations-3.1.0.GA.jar differ diff --git a/WebContent/WEB-INF/lib/hibernate-core-3.3.2.GA.jar b/WebContent/WEB-INF/lib/hibernate-core-3.3.2.GA.jar new file mode 100644 index 0000000..eda14b7 Binary files /dev/null and b/WebContent/WEB-INF/lib/hibernate-core-3.3.2.GA.jar differ diff --git a/WebContent/WEB-INF/lib/hibernate-validator-3.1.0.GA.jar b/WebContent/WEB-INF/lib/hibernate-validator-3.1.0.GA.jar new file mode 100644 index 0000000..760880c Binary files /dev/null and b/WebContent/WEB-INF/lib/hibernate-validator-3.1.0.GA.jar differ diff --git a/WebContent/WEB-INF/lib/httpclient-4.1.1.jar b/WebContent/WEB-INF/lib/httpclient-4.1.1.jar new file mode 100644 index 0000000..74121b7 Binary files /dev/null and b/WebContent/WEB-INF/lib/httpclient-4.1.1.jar differ diff --git a/WebContent/WEB-INF/lib/httpcore-4.1.jar b/WebContent/WEB-INF/lib/httpcore-4.1.jar new file mode 100644 index 0000000..a357c07 Binary files /dev/null and b/WebContent/WEB-INF/lib/httpcore-4.1.jar differ diff --git a/WebContent/WEB-INF/lib/jackson-core-asl-1.9.10.jar b/WebContent/WEB-INF/lib/jackson-core-asl-1.9.10.jar new file mode 100644 index 0000000..1dff959 Binary files /dev/null and b/WebContent/WEB-INF/lib/jackson-core-asl-1.9.10.jar differ diff --git a/WebContent/WEB-INF/lib/jackson-mapper-asl-1.9.10.jar b/WebContent/WEB-INF/lib/jackson-mapper-asl-1.9.10.jar new file mode 100644 index 0000000..14b330f Binary files /dev/null and b/WebContent/WEB-INF/lib/jackson-mapper-asl-1.9.10.jar differ diff --git a/WebContent/WEB-INF/lib/jasypt-1.7.jar b/WebContent/WEB-INF/lib/jasypt-1.7.jar new file mode 100644 index 0000000..ffc192d Binary files /dev/null and b/WebContent/WEB-INF/lib/jasypt-1.7.jar differ diff --git a/WebContent/WEB-INF/lib/javassist-3.11.0.GA.jar b/WebContent/WEB-INF/lib/javassist-3.11.0.GA.jar new file mode 100644 index 0000000..b3bfeeb Binary files /dev/null and b/WebContent/WEB-INF/lib/javassist-3.11.0.GA.jar differ diff --git a/WebContent/WEB-INF/lib/jcip-annotations-1.0.jar b/WebContent/WEB-INF/lib/jcip-annotations-1.0.jar new file mode 100644 index 0000000..06e9066 Binary files /dev/null and b/WebContent/WEB-INF/lib/jcip-annotations-1.0.jar differ diff --git a/WebContent/WEB-INF/lib/jsoup-1.7.1.jar b/WebContent/WEB-INF/lib/jsoup-1.7.1.jar new file mode 100644 index 0000000..75d9f6a Binary files /dev/null and b/WebContent/WEB-INF/lib/jsoup-1.7.1.jar differ diff --git a/WebContent/WEB-INF/lib/jstl-1.2.jar b/WebContent/WEB-INF/lib/jstl-1.2.jar new file mode 100644 index 0000000..0fd275e Binary files /dev/null and b/WebContent/WEB-INF/lib/jstl-1.2.jar differ diff --git a/WebContent/WEB-INF/lib/jta-1.1.jar b/WebContent/WEB-INF/lib/jta-1.1.jar new file mode 100644 index 0000000..7736ec9 Binary files /dev/null and b/WebContent/WEB-INF/lib/jta-1.1.jar differ diff --git a/WebContent/WEB-INF/lib/kahadb-5.5.1.jar b/WebContent/WEB-INF/lib/kahadb-5.5.1.jar new file mode 100644 index 0000000..aea5c83 Binary files /dev/null and b/WebContent/WEB-INF/lib/kahadb-5.5.1.jar differ diff --git a/WebContent/WEB-INF/lib/log4j-1.2.16.jar b/WebContent/WEB-INF/lib/log4j-1.2.16.jar new file mode 100644 index 0000000..5429a90 Binary files /dev/null and b/WebContent/WEB-INF/lib/log4j-1.2.16.jar differ diff --git a/WebContent/WEB-INF/lib/mail-1.4.4.jar b/WebContent/WEB-INF/lib/mail-1.4.4.jar new file mode 100644 index 0000000..268ccfb Binary files /dev/null and b/WebContent/WEB-INF/lib/mail-1.4.4.jar differ diff --git a/WebContent/WEB-INF/lib/mysql-connector-java-5.1.18.jar b/WebContent/WEB-INF/lib/mysql-connector-java-5.1.18.jar new file mode 100644 index 0000000..cdee6a1 Binary files /dev/null and b/WebContent/WEB-INF/lib/mysql-connector-java-5.1.18.jar differ diff --git a/WebContent/WEB-INF/lib/neethi-2.0.4.jar b/WebContent/WEB-INF/lib/neethi-2.0.4.jar new file mode 100644 index 0000000..87da3f0 Binary files /dev/null and b/WebContent/WEB-INF/lib/neethi-2.0.4.jar differ diff --git a/WebContent/WEB-INF/lib/ognl-3.0.4.jar b/WebContent/WEB-INF/lib/ognl-3.0.4.jar new file mode 100644 index 0000000..a7f7691 Binary files /dev/null and b/WebContent/WEB-INF/lib/ognl-3.0.4.jar differ diff --git a/WebContent/WEB-INF/lib/openid4java-nodeps-0.9.6.jar b/WebContent/WEB-INF/lib/openid4java-nodeps-0.9.6.jar new file mode 100644 index 0000000..9950f1a Binary files /dev/null and b/WebContent/WEB-INF/lib/openid4java-nodeps-0.9.6.jar differ diff --git a/WebContent/WEB-INF/lib/org.osgi.core-4.1.0.jar b/WebContent/WEB-INF/lib/org.osgi.core-4.1.0.jar new file mode 100644 index 0000000..6999b1b Binary files /dev/null and b/WebContent/WEB-INF/lib/org.osgi.core-4.1.0.jar differ diff --git a/WebContent/WEB-INF/lib/oro-2.0.8.jar b/WebContent/WEB-INF/lib/oro-2.0.8.jar new file mode 100644 index 0000000..23488d2 Binary files /dev/null and b/WebContent/WEB-INF/lib/oro-2.0.8.jar differ diff --git a/WebContent/WEB-INF/lib/quartz-1.8.6.jar b/WebContent/WEB-INF/lib/quartz-1.8.6.jar new file mode 100644 index 0000000..43c0b7d Binary files /dev/null and b/WebContent/WEB-INF/lib/quartz-1.8.6.jar differ diff --git a/WebContent/WEB-INF/lib/restfb-1.6.7.jar b/WebContent/WEB-INF/lib/restfb-1.6.7.jar new file mode 100644 index 0000000..985d839 Binary files /dev/null and b/WebContent/WEB-INF/lib/restfb-1.6.7.jar differ diff --git a/WebContent/WEB-INF/lib/slf4j-api-1.6.1.jar b/WebContent/WEB-INF/lib/slf4j-api-1.6.1.jar new file mode 100644 index 0000000..f1f4fdd Binary files /dev/null and b/WebContent/WEB-INF/lib/slf4j-api-1.6.1.jar differ diff --git a/WebContent/WEB-INF/lib/slf4j-log4j12-1.6.0.jar b/WebContent/WEB-INF/lib/slf4j-log4j12-1.6.0.jar new file mode 100644 index 0000000..42cca51 Binary files /dev/null and b/WebContent/WEB-INF/lib/slf4j-log4j12-1.6.0.jar differ diff --git a/WebContent/WEB-INF/lib/spring-aop-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-aop-3.1.0.RELEASE.jar new file mode 100644 index 0000000..89122c6 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-aop-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-asm-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-asm-3.1.0.RELEASE.jar new file mode 100644 index 0000000..63780c7 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-asm-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-aspects-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-aspects-3.1.0.RELEASE.jar new file mode 100644 index 0000000..15429f3 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-aspects-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-beans-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-beans-3.1.0.RELEASE.jar new file mode 100644 index 0000000..7084391 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-beans-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-context-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-context-3.1.0.RELEASE.jar new file mode 100644 index 0000000..e84b39e Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-context-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-context-support-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-context-support-3.1.0.RELEASE.jar new file mode 100644 index 0000000..b332c85 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-context-support-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-core-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-core-3.1.0.RELEASE.jar new file mode 100644 index 0000000..7c2bced Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-core-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-expression-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-expression-3.1.0.RELEASE.jar new file mode 100644 index 0000000..64388b3 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-expression-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-instrument-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-instrument-3.1.0.RELEASE.jar new file mode 100644 index 0000000..6cb91ca Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-instrument-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-jdbc-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-jdbc-3.1.0.RELEASE.jar new file mode 100644 index 0000000..0bf5fc5 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-jdbc-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-jms-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-jms-3.1.0.RELEASE.jar new file mode 100644 index 0000000..b00e3f0 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-jms-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-orm-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-orm-3.1.0.RELEASE.jar new file mode 100644 index 0000000..82ef63e Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-orm-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-oxm-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-oxm-3.1.0.RELEASE.jar new file mode 100644 index 0000000..c4ebbb2 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-oxm-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-security-acl-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-security-acl-3.1.0.RELEASE.jar new file mode 100644 index 0000000..e5f0f36 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-security-acl-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-security-config-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-security-config-3.1.0.RELEASE.jar new file mode 100644 index 0000000..d405e58 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-security-config-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-security-core-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-security-core-3.1.0.RELEASE.jar new file mode 100644 index 0000000..8f63bcd Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-security-core-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-security-crypto-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-security-crypto-3.1.0.RELEASE.jar new file mode 100644 index 0000000..9a6179d Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-security-crypto-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-security-openid-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-security-openid-3.1.0.RELEASE.jar new file mode 100644 index 0000000..dadd577 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-security-openid-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-security-taglibs-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-security-taglibs-3.1.0.RELEASE.jar new file mode 100644 index 0000000..537bc11 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-security-taglibs-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-security-web-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-security-web-3.1.0.RELEASE.jar new file mode 100644 index 0000000..fd5f4b2 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-security-web-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-test-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-test-3.1.0.RELEASE.jar new file mode 100644 index 0000000..ce59641 Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-test-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-tx-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-tx-3.1.0.RELEASE.jar new file mode 100644 index 0000000..d26ceeb Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-tx-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/spring-web-3.1.0.RELEASE.jar b/WebContent/WEB-INF/lib/spring-web-3.1.0.RELEASE.jar new file mode 100644 index 0000000..bb6c8ab Binary files /dev/null and b/WebContent/WEB-INF/lib/spring-web-3.1.0.RELEASE.jar differ diff --git a/WebContent/WEB-INF/lib/sslext-1.2-0.jar b/WebContent/WEB-INF/lib/sslext-1.2-0.jar new file mode 100644 index 0000000..5d7175f Binary files /dev/null and b/WebContent/WEB-INF/lib/sslext-1.2-0.jar differ diff --git a/WebContent/WEB-INF/lib/struts2-config-browser-plugin-2.3.1.2.jar b/WebContent/WEB-INF/lib/struts2-config-browser-plugin-2.3.1.2.jar new file mode 100644 index 0000000..9701479 Binary files /dev/null and b/WebContent/WEB-INF/lib/struts2-config-browser-plugin-2.3.1.2.jar differ diff --git a/WebContent/WEB-INF/lib/struts2-core-2.3.1.2.jar b/WebContent/WEB-INF/lib/struts2-core-2.3.1.2.jar new file mode 100644 index 0000000..ee82fd7 Binary files /dev/null and b/WebContent/WEB-INF/lib/struts2-core-2.3.1.2.jar differ diff --git a/WebContent/WEB-INF/lib/struts2-json-plugin-2.3.1.2.jar b/WebContent/WEB-INF/lib/struts2-json-plugin-2.3.1.2.jar new file mode 100644 index 0000000..44cf00c Binary files /dev/null and b/WebContent/WEB-INF/lib/struts2-json-plugin-2.3.1.2.jar differ diff --git a/WebContent/WEB-INF/lib/struts2-junit-plugin-2.3.1.2.jar b/WebContent/WEB-INF/lib/struts2-junit-plugin-2.3.1.2.jar new file mode 100644 index 0000000..20a30a4 Binary files /dev/null and b/WebContent/WEB-INF/lib/struts2-junit-plugin-2.3.1.2.jar differ diff --git a/WebContent/WEB-INF/lib/struts2-spring-plugin-2.3.1.2.jar b/WebContent/WEB-INF/lib/struts2-spring-plugin-2.3.1.2.jar new file mode 100644 index 0000000..1fd4b35 Binary files /dev/null and b/WebContent/WEB-INF/lib/struts2-spring-plugin-2.3.1.2.jar differ diff --git a/WebContent/WEB-INF/lib/struts2-testng-plugin-2.3.1.2.jar b/WebContent/WEB-INF/lib/struts2-testng-plugin-2.3.1.2.jar new file mode 100644 index 0000000..0b3c31f Binary files /dev/null and b/WebContent/WEB-INF/lib/struts2-testng-plugin-2.3.1.2.jar differ diff --git a/WebContent/WEB-INF/lib/struts2-tiles-plugin-2.3.1.2.jar b/WebContent/WEB-INF/lib/struts2-tiles-plugin-2.3.1.2.jar new file mode 100644 index 0000000..bd748c8 Binary files /dev/null and b/WebContent/WEB-INF/lib/struts2-tiles-plugin-2.3.1.2.jar differ diff --git a/WebContent/WEB-INF/lib/testng-5.1-jdk15.jar b/WebContent/WEB-INF/lib/testng-5.1-jdk15.jar new file mode 100644 index 0000000..93b65f6 Binary files /dev/null and b/WebContent/WEB-INF/lib/testng-5.1-jdk15.jar differ diff --git a/WebContent/WEB-INF/lib/tiles-api-2.0.7.jar b/WebContent/WEB-INF/lib/tiles-api-2.0.7.jar new file mode 100644 index 0000000..7d03d5c Binary files /dev/null and b/WebContent/WEB-INF/lib/tiles-api-2.0.7.jar differ diff --git a/WebContent/WEB-INF/lib/tiles-core-2.0.7.jar b/WebContent/WEB-INF/lib/tiles-core-2.0.7.jar new file mode 100644 index 0000000..dfbb73c Binary files /dev/null and b/WebContent/WEB-INF/lib/tiles-core-2.0.7.jar differ diff --git a/WebContent/WEB-INF/lib/tiles-jsp-2.0.7.jar b/WebContent/WEB-INF/lib/tiles-jsp-2.0.7.jar new file mode 100644 index 0000000..4caddc2 Binary files /dev/null and b/WebContent/WEB-INF/lib/tiles-jsp-2.0.7.jar differ diff --git a/WebContent/WEB-INF/lib/twitter4j-core-2.2.5.jar b/WebContent/WEB-INF/lib/twitter4j-core-2.2.5.jar new file mode 100644 index 0000000..7e9ee6b Binary files /dev/null and b/WebContent/WEB-INF/lib/twitter4j-core-2.2.5.jar differ diff --git a/WebContent/WEB-INF/lib/velocity-1.7.jar b/WebContent/WEB-INF/lib/velocity-1.7.jar new file mode 100644 index 0000000..ae936d3 Binary files /dev/null and b/WebContent/WEB-INF/lib/velocity-1.7.jar differ diff --git a/WebContent/WEB-INF/lib/velocity-dep-1.4.jar b/WebContent/WEB-INF/lib/velocity-dep-1.4.jar new file mode 100644 index 0000000..375712b Binary files /dev/null and b/WebContent/WEB-INF/lib/velocity-dep-1.4.jar differ diff --git a/WebContent/WEB-INF/lib/velocity-tools-2.0.jar b/WebContent/WEB-INF/lib/velocity-tools-2.0.jar new file mode 100644 index 0000000..beb7434 Binary files /dev/null and b/WebContent/WEB-INF/lib/velocity-tools-2.0.jar differ diff --git a/WebContent/WEB-INF/lib/wsdl4j-1.6.2.jar b/WebContent/WEB-INF/lib/wsdl4j-1.6.2.jar new file mode 100644 index 0000000..b9ffc36 Binary files /dev/null and b/WebContent/WEB-INF/lib/wsdl4j-1.6.2.jar differ diff --git a/WebContent/WEB-INF/lib/xml-apis-1.0.b2.jar b/WebContent/WEB-INF/lib/xml-apis-1.0.b2.jar new file mode 100644 index 0000000..ad33a5a Binary files /dev/null and b/WebContent/WEB-INF/lib/xml-apis-1.0.b2.jar differ diff --git a/WebContent/WEB-INF/lib/xwork-core-2.3.1.2.jar b/WebContent/WEB-INF/lib/xwork-core-2.3.1.2.jar new file mode 100644 index 0000000..9cac3c8 Binary files /dev/null and b/WebContent/WEB-INF/lib/xwork-core-2.3.1.2.jar differ diff --git a/WebContent/WEB-INF/web.xml b/WebContent/WEB-INF/web.xml new file mode 100644 index 0000000..9b73993 --- /dev/null +++ b/WebContent/WEB-INF/web.xml @@ -0,0 +1,68 @@ + + + test + + + + struts2 + org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter + + + encodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + + + encodingFilter + /* + + + struts2 + /* + + + + contextConfigLocation + WEB-INF/configs/spring-*-config.xml + + + org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG + + /WEB-INF/configs/tiles-defs-default.xml + ,/WEB-INF/configs/tiles-defs-user.xml + + + + + + + org.springframework.web.context.ContextLoaderListener + + + org.apache.tiles.web.startup.TilesListener + + + + org.springframework.security.web.session.HttpSessionEventPublisher + + + + + + + + 30 + COOKIE + + + \ No newline at end of file diff --git a/WebContent/css/jquery-ui.css b/WebContent/css/jquery-ui.css new file mode 100644 index 0000000..5bdeaf6 --- /dev/null +++ b/WebContent/css/jquery-ui.css @@ -0,0 +1,1833 @@ +/* + * jQuery UI CSS Framework 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} + +.ui-helper-hidden-accessible { + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); + clip: rect(1px, 1px, 1px, 1px); +} + +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} + +.ui-helper-clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +.ui-helper-clearfix { + display: inline-block; +} +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { + height: 1%; +} + +.ui-helper-clearfix { + display: block; +} +/* end clearfix */ +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity = 0); +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +/* + * jQuery UI Accordion 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { + width: 100%; +} + +.ui-accordion .ui-accordion-header { + cursor: pointer; + position: relative; + margin-top: 1px; + zoom: 1; +} + +.ui-accordion .ui-accordion-li-fix { + display: inline; +} + +.ui-accordion .ui-accordion-header-active { + border-bottom: 0 !important; +} + +.ui-accordion .ui-accordion-header a { + display: block; + font-size: 1em; + padding: .5em .5em .5em .7em; +} + +.ui-accordion-icons .ui-accordion-header a { + padding-left: 2.2em; +} + +.ui-accordion .ui-accordion-header .ui-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} + +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + margin-top: -2px; + position: relative; + top: 1px; + margin-bottom: 2px; + overflow: auto; + display: none; + zoom: 1; +} + +.ui-accordion .ui-accordion-content-active { + display: block; +} +/* + * jQuery UI Autocomplete 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { + position: absolute; + cursor: default; +} + +/* workarounds */ +* html .ui-autocomplete { + width: 1px; +} /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.16 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style: none; + padding: 2px; + margin: 0; + display: block; + float: left; +} + +.ui-menu .ui-menu { + margin-top: -3px; +} + +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} + +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: .2em .4em; + line-height: 1.5; + zoom: 1; +} + +.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active + { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { + display: inline-block; + position: relative; + padding: 0; + margin-right: .1em; + text-decoration: none !important; + cursor: pointer; + text-align: center; + zoom: 1; + overflow: visible; +} /* the overflow property removes extra width in IE */ +.ui-button-icon-only { + width: 2.2em; +} /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { + width: 2.4em; +} /* button elements seem to need a little more width */ +.ui-button-icons-only { + width: 3.4em; +} + +button.ui-button-icons-only { + width: 3.7em; +} + +/*button text element */ +.ui-button .ui-button-text { + display: block; + line-height: 1.4; +} + +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} + +.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text + { + padding: .4em; + text-indent: -9999999px; +} + +.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text + { + padding: .4em 1em .4em 2.1em; +} + +.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text + { + padding: .4em 2.1em .4em 1em; +} + +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon + { + position: absolute; + top: 50%; + margin-top: -8px; +} + +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} + +.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary + { + left: .5em; +} + +.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary + { + right: .5em; +} + +.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary + { + right: .5em; +} + +/*button sets*/ +.ui-buttonset { + margin-right: 7px; +} + +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} /* reset extra padding in Firefox */ +/* + * jQuery UI Datepicker 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; + border-radius: 4px; + -webkit-border-radius: 4px; + border: 1px solid #ccc; +} + +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} + +.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} + +.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover + { + top: 1px; +} + +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} + +.ui-datepicker .ui-datepicker-next { + right: 2px; +} + +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} + +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} + +.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span + { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} + +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} + +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} + +.ui-datepicker select.ui-datepicker-month-year { + width: 100%; +} + +.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year + { + width: 49%; +} + +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} + +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} + +.ui-datepicker td { + border: 0; + padding: 1px; +} + +.ui-datepicker td span,.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} + +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} + +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} + +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} + +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} + +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} + +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} + +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} + +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} + +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { + border-left-width: 0; +} + +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} + +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} + +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0em; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} + +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} + +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current + { + float: right; +} + +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} + +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display /**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} /* + * jQuery UI Dialog 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { + position: absolute; +} + +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} + +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 16px .1em 0; +} + +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 19px; + margin: -10px 0 0 0; + padding: 1px; + height: 18px; +} + +.ui-dialog .ui-dialog-titlebar-close span { + display: block; + margin: 1px; +} + +.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus + { + padding: 0; +} + +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; /*padding: .5em 1em;*/ + background: none; + overflow: auto; + zoom: 1; +} + +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin: .5em 0 0 0; + padding: .3em 1em .5em .4em; +} + +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} + +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} + +.ui-dialog .ui-resizable-se { + width: 14px; + height: 14px; + right: 3px; + bottom: 3px; +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +/* + * jQuery UI Progressbar 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { + height: 2em; + text-align: left; +} + +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} /* + * jQuery UI Resizable 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { + position: relative; +} + +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + z-index: 99999; + display: block; +} + +.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle + { + display: none; +} + +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} + +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} + +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} + +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} + +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} + +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} /* + * jQuery UI Selectable 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +/* + * jQuery UI Slider 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { + position: relative; + text-align: left; +} + +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} + +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +.ui-slider-horizontal { + height: .7em; + background: #f2f2f2 !important; + border: 1px solid #e5e5e5; + margin: 3px 0px; + border-radius: 3px; + -webkit-border-radius: 3px; +} + +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} + +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} + +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} + +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} + +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} + +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} + +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} + +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} /* + * jQuery UI Tabs 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { + position: relative; + padding: .2em; + zoom: 1; +} + /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} + +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 1px; + margin: 0 .2em 1px 0; + border-bottom: 0 !important; + padding: 0; + white-space: nowrap; +} + +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .5em 1em; + text-decoration: none; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { + margin-bottom: 0; + padding-bottom: 1px; +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a + { + cursor: text; +} + +.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a + { + cursor: pointer; +} + /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} + +.ui-tabs .ui-tabs-hide { + display: none !important; +} +/* + * jQuery UI CSS Framework 1.8.16 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/ + */ + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana, Arial, sans-serif /*{ffDefault}*/; + font-size: 1.1em /*{fsDefault}*/; +} + +.ui-widget .ui-widget { + font-size: 1em; +} + +.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button + { + font-family: Verdana, Arial, sans-serif /*{ffDefault}*/; + font-size: 1em; +} + +.ui-widget-content { /*border: 1px solid #aaaaaa/*{borderColorContent}*/; + background: #ffffff /*{bgColorContent}*/; + url (http: //code.jquery.com/ui/1.8 .23/themes/base/images/ui-bg_glass_75_dadada_1x400.png) + /*{bgImgUrlContent}*/ 50% /*{bgContentXPos}*/ 50% /*{bgContentYPos}*/ + repeat-x /*{bgContentRepeat}*/; + color: #222222 /*{fcContent}*/; +} + +.ui-widget-content a { + color: #222222 /*{fcContent}*/; +} + +.ui-widget-header { + border: 1px solid #aaaaaa /*{borderColorHeader}*/; + background: #cccccc /*{bgColorHeader}*/ + url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) + /*{bgImgUrlHeader}*/ 50% /*{bgHeaderXPos}*/ 50% /*{bgHeaderYPos}*/ + repeat-x /*{bgHeaderRepeat}*/; + color: #222222 /*{fcHeader}*/; + font-weight: bold; +} + +.ui-widget-header a { + color: #222222 /*{fcHeader}*/; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default + { + border: 1px solid #d3d3d3 /*{borderColorDefault}*/; + background: #e6e6e6 /*{bgColorDefault}*/ + url(images/ui-bg_glass_75_e6e6e6_1x400.png) /*{bgImgUrlDefault}*/ 50% + /*{bgDefaultXPos}*/ 50% /*{bgDefaultYPos}*/ repeat-x + /*{bgDefaultRepeat}*/; + font-weight: normal /*{fwDefault}*/; + color: #555555 /*{fcDefault}*/; + border-radius: 5px; + -webkit-radius: 5px; +} + +.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited + { + color: #555555 /*{fcDefault}*/; + text-decoration: none; +} + +.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus + { + border: 1px solid #999999 /*{borderColorHover}*/; + background: #dadada /*{bgColorHover}*/ + url(images/ui-bg_glass_75_dadada_1x400.png) /*{bgImgUrlHover}*/ 50% + /*{bgHoverXPos}*/ 50% /*{bgHoverYPos}*/ repeat-x /*{bgHoverRepeat}*/; + font-weight: normal /*{fwDefault}*/; + color: #212121 /*{fcHover}*/; +} + +.ui-state-hover a,.ui-state-hover a:hover { + color: #212121 /*{fcHover}*/; + text-decoration: none; +} + +.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active + { + border: 1px solid #aaaaaa /*{borderColorActive}*/; + background: #ffffff /*{bgColorActive}*/ + url(images/ui-bg_glass_65_ffffff_1x400.png) /*{bgImgUrlActive}*/ 50% + /*{bgActiveXPos}*/ 50% /*{bgActiveYPos}*/ repeat-x + /*{bgActiveRepeat}*/; + font-weight: normal /*{fwDefault}*/; + color: #212121 /*{fcActive}*/; +} + +.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited { + color: #212121 /*{fcActive}*/; + text-decoration: none; +} + +.ui-widget :active { + outline: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight + { + border: 1px solid #fcefa1 /*{borderColorHighlight}*/; + background: #fbf9ee /*{bgColorHighlight}*/ + url(images/ui-bg_glass_55_fbf9ee_1x400.png) /*{bgImgUrlHighlight}*/ + 50% /*{bgHighlightXPos}*/ 50% /*{bgHighlightYPos}*/ repeat-x + /*{bgHighlightRepeat}*/; + color: #363636 /*{fcHighlight}*/; +} + +.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a + { + color: #363636 /*{fcHighlight}*/; +} + +.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error + { + border: 1px solid #cd0a0a /*{borderColorError}*/; + background: #fef1ec /*{bgColorError}*/ + url(images/ui-bg_glass_95_fef1ec_1x400.png) /*{bgImgUrlError}*/ 50% + /*{bgErrorXPos}*/ 50% /*{bgErrorYPos}*/ repeat-x /*{bgErrorRepeat}*/; + color: #cd0a0a /*{fcError}*/; +} + +.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a + { + color: #cd0a0a /*{fcError}*/; +} + +.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text + { + color: #cd0a0a /*{fcError}*/; +} + +.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary + { + font-weight: bold; +} + +.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary + { + opacity: .7; + filter: Alpha(Opacity = 70); + font-weight: normal; +} + +.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled + { + opacity: .35; + filter: Alpha(Opacity = 35); + background-image: none; +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; + background-image: url(images/ui-icons_222222_256x240.png) + /*{iconsContent}*/; +} + +.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_222222_256x240.png) + /*{iconsContent}*/; +} + +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_222222_256x240.png) + /*{iconsHeader}*/; +} + +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_888888_256x240.png) + /*{iconsDefault}*/; +} +/*.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }*/ +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png) + /*{iconsActive}*/; +} + +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_2e83ff_256x240.png) + /*{iconsHighlight}*/; +} + +.ui-state-error .ui-icon,.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_cd0a0a_256x240.png) + /*{iconsError}*/; +} + +/* positioning */ +.ui-icon-carat-1-n { + background-position: 0 0; +} + +.ui-icon-carat-1-ne { + background-position: -16px 0; +} + +.ui-icon-carat-1-e { + background-position: -32px 0; +} + +.ui-icon-carat-1-se { + background-position: -48px 0; +} + +.ui-icon-carat-1-s { + background-position: -64px 0; +} + +.ui-icon-carat-1-sw { + background-position: -80px 0; +} + +.ui-icon-carat-1-w { + background-position: -96px 0; +} + +.ui-icon-carat-1-nw { + background-position: -112px 0; +} + +.ui-icon-carat-2-n-s { + background-position: -128px 0; +} + +.ui-icon-carat-2-e-w { + background-position: -144px 0; +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px; +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px; +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px; +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px; +} + +.ui-icon-triangle-1-s { + background-position: -64px -16px; +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px; +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px; +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px; +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px; +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px; +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px; +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px; +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px; +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px; +} + +.ui-icon-arrow-1-s { + background-position: -64px -32px; +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px; +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px; +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px; +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px; +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px; +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px; +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px; +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px; +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px; +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px; +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px; +} + +.ui-icon-arrowthick-1-n { + background-position: 0 -48px; +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px; +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px; +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px; +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px; +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px; +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px; +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px; +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px; +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px; +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px; +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px; +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px; +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px; +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px; +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px; +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px; +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px; +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px; +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px; +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px; +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px; +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px; +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px; +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px; +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px; +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px; +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px; +} + +.ui-icon-arrow-4 { + background-position: 0 -80px; +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px; +} + +.ui-icon-extlink { + background-position: -32px -80px; +} + +.ui-icon-newwin { + background-position: -48px -80px; +} + +.ui-icon-refresh { + background-position: -64px -80px; +} + +.ui-icon-shuffle { + background-position: -80px -80px; +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px; +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px; +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px; +} + +.ui-icon-folder-open { + background-position: -16px -96px; +} + +.ui-icon-document { + background-position: -32px -96px; +} + +.ui-icon-document-b { + background-position: -48px -96px; +} + +.ui-icon-note { + background-position: -64px -96px; +} + +.ui-icon-mail-closed { + background-position: -80px -96px; +} + +.ui-icon-mail-open { + background-position: -96px -96px; +} + +.ui-icon-suitcase { + background-position: -112px -96px; +} + +.ui-icon-comment { + background-position: -128px -96px; +} + +.ui-icon-person { + background-position: -144px -96px; +} + +.ui-icon-print { + background-position: -160px -96px; +} + +.ui-icon-trash { + background-position: -176px -96px; +} + +.ui-icon-locked { + background-position: -192px -96px; +} + +.ui-icon-unlocked { + background-position: -208px -96px; +} + +.ui-icon-bookmark { + background-position: -224px -96px; +} + +.ui-icon-tag { + background-position: -240px -96px; +} + +.ui-icon-home { + background-position: 0 -112px; +} + +.ui-icon-flag { + background-position: -16px -112px; +} + +.ui-icon-calendar { + background-position: -32px -112px; +} + +.ui-icon-cart { + background-position: -48px -112px; +} + +.ui-icon-pencil { + background-position: -64px -112px; +} + +.ui-icon-clock { + background-position: -80px -112px; +} + +.ui-icon-disk { + background-position: -96px -112px; +} + +.ui-icon-calculator { + background-position: -112px -112px; +} + +.ui-icon-zoomin { + background-position: -128px -112px; +} + +.ui-icon-zoomout { + background-position: -144px -112px; +} + +.ui-icon-search { + background-position: -160px -112px; +} + +.ui-icon-wrench { + background-position: -176px -112px; +} + +.ui-icon-gear { + background-position: -192px -112px; +} + +.ui-icon-heart { + background-position: -208px -112px; +} + +.ui-icon-star { + background-position: -224px -112px; +} + +.ui-icon-link { + background-position: -240px -112px; +} + +.ui-icon-cancel { + background-position: 0 -128px; +} + +.ui-icon-plus { + background-position: -16px -128px; +} + +.ui-icon-plusthick { + background-position: -32px -128px; +} + +.ui-icon-minus { + background-position: -48px -128px; +} + +.ui-icon-minusthick { + background-position: -64px -128px; +} + +.ui-icon-close { + background-position: -80px -128px; +} + +.ui-icon-closethick { + background-position: -96px -128px; +} + +.ui-icon-key { + background-position: -112px -128px; +} + +.ui-icon-lightbulb { + background-position: -128px -128px; +} + +.ui-icon-scissors { + background-position: -144px -128px; +} + +.ui-icon-clipboard { + background-position: -160px -128px; +} + +.ui-icon-copy { + background-position: -176px -128px; +} + +.ui-icon-contact { + background-position: -192px -128px; +} + +.ui-icon-image { + background-position: -208px -128px; +} + +.ui-icon-video { + background-position: -224px -128px; +} + +.ui-icon-script { + background-position: -240px -128px; +} + +.ui-icon-alert { + background-position: 0 -144px; +} + +.ui-icon-info { + background-position: -16px -144px; +} + +.ui-icon-notice { + background-position: -32px -144px; +} + +.ui-icon-help { + background-position: -48px -144px; +} + +.ui-icon-check { + background-position: -64px -144px; +} + +.ui-icon-bullet { + background-position: -80px -144px; +} + +.ui-icon-radio-off { + background-position: -96px -144px; +} + +.ui-icon-radio-on { + background-position: -112px -144px; +} + +.ui-icon-pin-w { + background-position: -128px -144px; +} + +.ui-icon-pin-s { + background-position: -144px -144px; +} + +.ui-icon-play { + background-position: 0 -160px; +} + +.ui-icon-pause { + background-position: -16px -160px; +} + +.ui-icon-seek-next { + background-position: -32px -160px; +} + +.ui-icon-seek-prev { + background-position: -48px -160px; +} + +.ui-icon-seek-end { + background-position: -64px -160px; +} + +.ui-icon-seek-start { + background-position: -80px -160px; +} +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { + background-position: -80px -160px; +} + +.ui-icon-stop { + background-position: -96px -160px; +} + +.ui-icon-eject { + background-position: -112px -160px; +} + +.ui-icon-volume-off { + background-position: -128px -160px; +} + +.ui-icon-volume-on { + background-position: -144px -160px; +} + +.ui-icon-power { + background-position: 0 -176px; +} + +.ui-icon-signal-diag { + background-position: -16px -176px; +} + +.ui-icon-signal { + background-position: -32px -176px; +} + +.ui-icon-battery-0 { + background-position: -48px -176px; +} + +.ui-icon-battery-1 { + background-position: -64px -176px; +} + +.ui-icon-battery-2 { + background-position: -80px -176px; +} + +.ui-icon-battery-3 { + background-position: -96px -176px; +} + +.ui-icon-circle-plus { + background-position: 0 -192px; +} + +.ui-icon-circle-minus { + background-position: -16px -192px; +} + +.ui-icon-circle-close { + background-position: -32px -192px; +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px; +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px; +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px; +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px; +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px; +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px; +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px; +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px; +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px; +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px; +} + +.ui-icon-circle-check { + background-position: -208px -192px; +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px; +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px; +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px; +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px; +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px; +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px; +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px; +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px; +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px; +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px; +} + +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px; +} + +.ui-icon-grip-diagonal-se { + background-position: -80px -224px; +} + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ + +/* Overlays */ +.ui-widget-overlay { + background: #000000 /*{bgColorOverlay}*/ + url(images/ui-bg_flat_0_aaaaaa_40x100.png) /*{bgImgUrlOverlay}*/ 50% + /*{bgOverlayXPos}*/ 50% /*{bgOverlayYPos}*/ repeat-x + /*{bgOverlayRepeat}*/; + opacity: .8; + filter: Alpha(Opacity = 30) /*{opacityOverlay}*/; +} + +.ui-widget-shadow { + margin: -8px /*{offsetTopShadow}*/ 0 0 -8px /*{offsetLeftShadow}*/; + padding: 8px /*{thicknessShadow}*/; + background: #aaaaaa /*{bgColorShadow}*/ + url(images/ui-bg_flat_0_aaaaaa_40x100.png) /*{bgImgUrlShadow}*/ 50% + /*{bgShadowXPos}*/ 50% /*{bgShadowYPos}*/ repeat-x + /*{bgShadowRepeat}*/; + opacity: .3; + filter: Alpha(Opacity = 30) /*{opacityShadow}*/; + -moz-border-radius: 8px /*{cornerRadiusShadow}*/; + -khtml-border-radius: 8px /*{cornerRadiusShadow}*/; + -webkit-border-radius: 8px /*{cornerRadiusShadow}*/; + border-radius: 8px /*{cornerRadiusShadow}*/; +} \ No newline at end of file diff --git a/WebContent/css/main.css b/WebContent/css/main.css new file mode 100644 index 0000000..4e185a1 --- /dev/null +++ b/WebContent/css/main.css @@ -0,0 +1,3538 @@ +/* CSS Document */ +#header-main { + height: 60px; + position: relative; + margin-bottom: 10px; +} + +#header-main #logo-m { + position: absolute; + top: 7px; + left: 0px; +} + +#header-main #logo-m a { + display: block; + width: 111px; + height: 63px; +} + +#header-main #search-m { + position: absolute; + top: 20px; + left: 255px; +} + +#header-main #search-m input { + height: 25px; + width: 182px; + font-size: 12px; + color: #333; + padding-left: 30px; + padding-right: 5px; + background: url(../images/search.png) no-repeat center left; + border: none; + float: left; + line-height: 25px; +} + +#header-main #search-m button { + background: url(../images/btn-search-top.png) no-repeat center left; + border: none; + height: 25px; + text-indent: -9999px; + width: 51px; + float: right; + margin-top: 1px; +} + +#header-main #info { + position: absolute; + top: 20px; + right: -5px; +} + +#header-main #info li { + display: inline; + /* line-height: 41px; */ + color: #fff; + font-size: 11px; + font-weight: bold; + padding: 0px 10px; + border-right: 1px solid #ccc; + overflow: hidden; +} + +#header-main #info li:last-child { + border: none; +} + +#header-main #info li a { + color: #333; + font-size: 11px; +} + +/* #header-main #info li a img{ +float: left; +width: 35px; +height: 35px; +border: 1px solid #ddd; +padding:4px; +background: #fff; +} */ +#header-main #info li a:hover { + text-decoration: underline; +} + +#nav { + margin-bottom: 30px; + position: relative; +} + +#nav li .submenu { + position: absolute; + top: 35px; + left: 0px; + width: 988px !important; + height: 28px !important; + padding-left: 10px; + background: url(../images/bg-nav-bottom.png) repeat-x; + border-bottom: 1px solid #ddd; + border-left: 1px solid #ddd; + border-right: 1px solid #ddd; + -moz-border-radius: 0px 0px 6px 6px; + -webkit-border-radius: 0px 0px 6px 6px; + -o-border-radius: 0px 0px 6px 6px; + border-radius: 0px 0px 6px 6px; + -ms-border-radius: 0px 0px 6px 6px; + margin-bottom: 10px; + float: left; + display: none; +} + +#nav li:hover .submenu,#nav li.active2 .submenu { + display: block; + z-index: 100; +} + +#nav li .submenu li { + line-height: 28px; + padding: 0px !important; + margin-top: -4px; +} + +#nav li .submenu li a,#nav li .submenu li a.actived { + color: #555 !important; + font-size: 11px !important; + font-weight: bold !important; + padding: 0px; + background: none; + display: block; + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + -ms-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; + float: left; + margin-right: 15px; + text-shadow: 0px 0px 1px #fff; +} + +#nav li .submenu li a img { + float: left; + line-height: 28px; + margin-right: 5px; + margin-top: 4px; + width: 21px; + height: 20px; +} + +#nav li .submenu li a:hover { + color: #222 !important; +} + +#nav li .submenu li.football { + background: url(../images/icon-football.png) no-repeat center left; +} + +#nav li .submenu li.basketball { + background: url(../images/icon-basketball.png) no-repeat center left; +} + +#nav li .submenu li.voleyball { + background: url(../images/icon-voleyball.png) no-repeat center left; +} + +#nav li .submenu li.tennis { + background: url(../images/icon-tennis.png) no-repeat center left; +} + +#main { + float: left; + margin-top: 5px; + margin-bottom: 20px; + position: relative; + width: 100%; +} + +#left { + width: 218px; + float: left; + margin-right: 10px; +} + +.l-tab { + margin-left: 5px; +} + +.l-tab li { + display: inline; + height: 25px; + line-height: 25px; + position: relative; + margin-right: 3px; + background: url(../images/mdg_sprite_title.png) repeat-x 0 -177px; + padding: 6px 13px; + -moz-border-radius: 5px 5px 0px 0px; + -ms-border-radius: 5px 5px 0px 0px; + -webkit-border-radius: 5px 5px 0px 0px; + -o-border-radius: 5px 5px 0px 0px; + border-radius: 5px 5px 0px 0px; +} + +.l-tab li a { + color: #fff; + font-weight: bold; + font-size: 11px; +} + +.l-tab li.active,.l-tab li.actived,.l-tab li:hover { + /*background: url(../images/bg-tab-active.png) repeat-x;*/ + background: #f4c229; /* Old browsers */ + background: -moz-linear-gradient(top, #f4c229 0%, #ed9017 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f4c229), + color-stop(100%, #ed9017)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f4c229 0%, #ed9017 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f4c229 0%, #ed9017 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f4c229 0%, #ed9017 100%); + /* IE10+ */ + background: linear-gradient(to bottom, #f4c229 0%, #ed9017 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4c229', + endColorstr='#ed9017', GradientType=0); /* IE6-9 */ + color: #111; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.4); +} + +.l-tab li.active a,.l-tab li.actived a,.l-tab li:hover a { + color: #111; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.3); +} + +.block1 { + border: 1px solid #e5e5e5; + /*-moz-border-radius: 0px 0px 6px 6px; +-ms-border-radius: 0px 0px 6px 6px;; +-webkit-border-radius: 0px 0px 6px 6px;; +-o-border-radius: 0px 0px 6px 6px;; +border-radius: 0px 0px 6px 6px;;*/ + background: #fff; +} +/*hack chrome va safari*/ +@media screen and (-webkit-min-device-pixel-ratio:0) { + .block1 { + margin-top: -2px; + } +} + +.l-tour1 { + border-bottom: 1px solid #e1e1e1; +} + +.l-tour1:last-child { + border-bottom: none; +} + +#left .block { + /*-moz-border-radius: 0px 0px 6px 6px; +-ms-border-radius: 0px 0px 6px 6px; +-webkit-border-radius: 0px 0px 6px 6px; +-o-border-radius: 0px 0px 6px 6px; +boder-radius: 0px 0px 6px 6px;*/ + background: #fff; + border-left: 1px solid #e5e5e5; + border-right: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; +} +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { +#left .block { margin-top: -2px; } +} +*/ +#left .block h3,.l-bet h3 { + height: 24px; + color: #fff; + background: url(../images/mdg_sprite_title.png) 0 -241px repeat-x; + font-size: 11px; + font-weight: bold; + line-height: 24px; + padding-left: 5px; + display: block; + /*margin-bottom: 2px;*/ + position: relative; +} + +.l-bet h3 a.best_creatbet { + color: #111; + float: right; + font-size: 11px; + padding: 0px 2px; + background: url(../images/mdg_sprite_title.png) repeat-x 0 -124px; + border-left: 1px solid #ffcf00; + text-shadow: 0px 0px 2px rgba(255, 255, 255, 0.8); +} + +.l-bet h3 a.best_creatbet:hover { + color: #fff; +} + +.l-bet h3 a.public_bets_myname { + color: #fff; + font-size: 11px; + float: right; + margin-right: 5px; + font-weight: normal; +} + +.l-bet h3 a.public_bets_myname:hover { + color: #ffcf00; +} + +#left .block h3 span,.l-bet h3 span,.box h2 span,.pendingbets1 h1 span,.mybets1 h2 span + { + display: block; + width: 17px; + height: 17px; + background: url(../images/mdg_sprite.png) no-repeat -17px -859px; + margin-right: 10px; + float: left; + margin-top: 3px; +} + +#left .block h3 span.max,.l-bet h3 span.max,.box h2 span.max,.pendingbets1 h1 span.max,.mybets1 h2 span.max + { + display: block; + width: 17px; + height: 17px; + background: url(../images/mdg_sprite.png) no-repeat 0 -859px; + margin-right: 10px; + float: left; + margin-top: 3px; +} + +#left .block .list { + margin-bottom: 5px; +} + +#left .comming { + display: none; +} + +#left .block .list h2.l-name { + font-size: 11px; + font-weight: bold; + height: 25px; + line-height: 25px; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + background: url(../images/mdg_sprite.png) no-repeat 0 -616px, #ededed; + padding-left: 25px; + font-weight: bold; + text-transform: uppercase; +} + +#left .block .list p { + padding: 5px; + border-bottom: 1px solid #e5e5e5; +} + +#left .block .list p a { + font-size: 11px; + font-weight: bold; + color: #111; +} + +#left .block .list p a span { + float: right; + color: #ef7800; +} + +#left .block .list h4.league { + text-transform: uppercase; + border-bottom: 1px solid #ddd; + font-weight: bold; + font-size: 11px; + padding: 5px; +} + +#left .block .list h4.league a { + font-size: 11px; + font-weight: bold; + color: #bf0000; +} + +#left .block .list h4.league span { + color: #f07a00; + padding: 0px 5px; + font-size: 10px; +} + +#left .block .l-comming { + padding: 5px 0px; + border-bottom: 1px solid #ddd; +} + +#left .block .l-comming:nth-child(2n) { + background: #f5f5f5; +} + +#left .block .l-comming:hover { + background: #DCE8F2; +} + +#left .block .l-comming .l-n-come { + display: block; + padding: 0px 5px; +} + +#left .block .l-comming .l-n-come a { + font-size: 11px; + color: #2789CE; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: block; + width: 203px; + padding: 2px 0px; +} + +#left .block .l-comming .l-n-come a span { + display: inline-block; + max-width: 90px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: #2789ce; + padding: 2px 0px; +} + +#left .block .l-comming .time1 { + font-size: 10px; + color: #555; + margin-top: 2px; +} + +#left .block .l-comming .time1 span { + padding: 0px 5px; + color: #999; +} + +#left .block .l-comming .time1 span:last-child { + border: none; +} + +#mid { + width: 540px; + float: left; + margin-right: 10px; +} + +#mid #match h3 { + font-size: 13px; + color: #fff; + height: 24px; + padding-left: 10px; + background: url(../images/mdg_sprite_title.png) repeat-x 0 -241px; + line-height: 24px; + -moz-border-radius: 4px 4px 0px 0px; + -ms-border-radius: 4px 4px 0px 0px; + -webkit-border-radius: 4px 4px 0px 0px; + -o-border-radius: 4px 4px 0px 0px; + border-radius: 4px 4px 0px 0px; +} + +#mid #match .creatbet { + display: block; + width: 83px; + height: 18px; + background: url(../images/mdg_sprite.png) no-repeat 0 -708px; + margin-top: 3px; + margin-right: 10px; + color: #111; + float: right; + font-size: 11px; + line-height: 18px; + text-align: center; +} + +#mid #match .creatbet:hover { + color: #fff; +} + +#mid #match .match-detail { + background: url(../images/bg-match.jpg) no-repeat top left; + height: 79px; + padding-top: 15px; + text-align: center; + color: #fff; + font-weight: bold; +} + +#mid #match .match-detail .time-match { + font-size: 11px; + margin-bottom: 15px; +} + +#mid #match .match-detail .team { + font-size: 14px; + color: #fff; + line-height: 18px; +} + +#mid #match .match-detail .team p { + display: inline-block; + vertical-align: top; +} + +.match-detail .team-left { + text-align: right; + color: #ffb32b; + float: left; + width: 200px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; +} + +.match-detail .team-right { + text-align: left; + color: #ffb32b; + float: right; + width: 200px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; +} + +.match-detail .team img { + margin: 0px 3px; + width: 30px; +} + +.publicbet,.mutualbet { + display: none; +} + +.publicbet .betlist_title span,.friendbet .betlist_title span,.mutualbet .betlist_title span + { + color: #222; + display: inline-block; + font-size: 10px; + text-align: center; +} + +.bets a { + color: #111; + font-size: 11px; + font-weight: bold; +} + +.bets li { + padding-left: 5px; + /*height:30px;*/ + line-height: 30px; + /*border-bottom: 1px solid #ddd;*/ + /*overflow: hidden;*/ + color: #111; +} + +/*.bets li:nth-child(even){ +background: #efefef; +}*/ + +/*.bets li:last-child{ +border: none; +}*/ +.bets li span { + float: right; +} + +.bets li span span.exchange_odd { + float: none; +} + +span.l-betable-amount /*tuanca added*/ { + width: 90px !important; + text-align: right !important; + color: #333; + font-size: 11px; + margin-top: -1px; +} + +span.l-paticipants /*tuanca added*/ { + width: 60px !important; + text-align: center !important; + font-size: 11px; + color: #333; + margin-top: -1px; +} + +span.l-pot /*tuanca added*/ { + width: 46px !important; + text-align: right !important; + color: #333; + font-size: 11px; + margin-top: -1px; + margin-left: 5px; +} + +/*span.betlist_title_odd{ +width: 70px!important; +text-align: center; +margin-left: 5px; +}*/ +.bets li span a { + display: block; + width: 40px; + height: 25px; + background: #f7f7f7; /* Old browsers */ + background: -moz-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f7f7f7), + color-stop(100%, #e8e8e8)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* IE10+ */ + background: linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', + endColorstr='#e8e8e8', GradientType=0); /* IE6-9 */ + text-align: center; + margin: 0px 1px; + cursor: pointer; + line-height: 25px; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.4); +} + +.bets li span a:hover { + background: #efe788; /* Old browsers */ + background: -moz-linear-gradient(top, #efe788 0%, #fcc676 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #efe788), + color-stop(100%, #fcc676)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #efe788 0%, #fcc676 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #efe788 0%, #fcc676 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #efe788 0%, #fcc676 100%); + /* IE10+ */ + background: linear-gradient(to bottom, #efe788 0%, #fcc676 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efe788', + endColorstr='#fcc676', GradientType=0); /* IE6-9 */ + color: #111; +} + +.l-odd a { + border: 1px solid #cccccc; +} + +.l-odd a:hover { + border: 1px solid #f1a005; +} + +#primary { + margin-bottom: 10px; +} + +#right { + width: 270px; + float: right; + position: relative; +} + +/***MYBETS***/ +#bets { + background: #303030; + /*background: url(../images/bg-title-in-r.png) repeat-x; +-moz-border-radius: 6px 6px 0px 0px; +-webkit-border-radius: 6px 6px 0px 0px; +-ms-border-radius: 6px 6px 0px 0px; +-o-border-radius: 6px 6px 0px 0px; +border-radius: 6px 6px 0px 0px;*/ + height: 32px; + /* border-bottom: 1px solid #ED9017; */ +} + +#bets li { + line-height: 30px; + display: inline-block; + text-align: center; + position: relative; + margin-left: 5px; + margin-right: -3px; + margin-top: 6px; +} + +@ +-moz-document url-prefix () { #bets li{ line-height:30px; + display: inline-block; + text-align: center; + position: relative; + margin-left: 5px; + margin-right: -3px; + margin-top: 4px; +} + +} +#bets li a { + color: #f4c229; + font-weight: bold; + font-size: 11px; + height: 25px; + line-height: 25px; + padding: 0px 10px; + background: #232323; + border-top: 1px solid #454647; + border-left: 1px solid #454647; + border-right: 1px solid #454647; + display: inline-block; +} + +#bets li a.actived1 { + /*background: #000; +padding: 3px 5px; +-moz-border-radius: 15px; +-webkit-border-radius: 15px; +-ms-border-radius: 15px; +-o-border-radius: 15px; +border-radius: 15px;*/ + background: #f4c229; /* Old browsers */ + background: -moz-linear-gradient(top, #f4c229 0%, #ed9017 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f4c229), + color-stop(100%, #ed9017)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f4c229 0%, #ed9017 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f4c229 0%, #ed9017 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f4c229 0%, #ed9017 100%); + /* IE10+ */ + background: linear-gradient(to bottom, #f4c229 0%, #ed9017 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4c229', + endColorstr='#ed9017', GradientType=0); /* IE6-9 */ + color: #111; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.4); +} + +.box { + border: 1px solid #ccc; + margin-bottom: 10px; + border-top: 0px; + /*-moz-border-radius: 0px 0px 6px 6px; +-webkit-border-radius: 0px 0px 6px 6px; +-ms-border-radius: 0px 0px 6px 6px; +-o-border-radius: 0px 0px 6px 6px; +border-radius: 0px 0px 6px 6px;*/ + background: #fff; +} + +.box h2 { + font-size: 11px; + position: relative; +} + +.box h2 a { + color: #222 !important; +} + +.box ul { + padding: 0px 5px; + margin-bottom: 10px; +} + +.box h3.betsname { + font-size: 11px; + color: #111; + background: #ddd; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + position: relative; +} + +.box ul li { + border-bottom: 1px solid #ddd; + padding: 2px 0px; +} + +.box ul li:last-child { + border: none; +} + +.box ul li a { + color: #222; + font-weight: bold; + font-size: 11px; + display: inline-block; + width: 80px; +} + +.box ul li a label { + display: inline-block; + width: 80px; + text-overflow: ellipsis; + white-space: nowrap; + padding: 3px 0px; +} + +.box ul li a .pos_groups { + color: #777 !important; + font-size: 10px !important; + font-weight: normal !important; + line-height: normal !important; + display: inline-block; + width: 80px; + text-overflow: ellipsis; + white-space: nowrap; + padding: 3px 0px; + float: left; + margin-top: -3px; +} + +.box ul li a:hover { + color: #111; +} + +.box ul li span { + float: right; + font-size: 11px; + color: #333; + text-align: right; + padding: 3px 0px; +} + +.mybets { + display: none; +} + +#friend { + position: fixed; + right: 0px; + bottom: 0px; + width: 180px; + background: #fff; + border: 1px solid #ccc; + padding: 5px; +} + +#friend li { + padding: 5px 0px; + overflow: hidden; + line-height: 35px; +} + +#friend li img { + float: left; + margin-right: 10px; +} + +#friend li a { + color: #111; + font-size: 11px; + font-weight: bold; +} + +#friend #searchfriend { + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + padding: 3px; + overflow: hidden; +} + +#friend #searchfriend input { + background: url(../images/mdg_sprite.png) no-repeat 0 -941px; + padding-left: 20px; + font-size: 11px; + border: 1px solid #ccc; + color: #888; + padding-right: 5px; + float: left; + width: 120px; +} + +#friend #searchfriend button { + background: url(../images/btn-miz.png) no-repeat top left; + border: none; + display: block; + width: 21px; + height: 25px; + float: right; + cursor: pointer; + text-indent: -9999px; + margin-top: -3px; +} + +#friend li:hover { + background: #ddd; +} + +.chat { + position: fixed; + bottom: 0px; + right: 200px; + background: #fff; + border: 1px solid #ccc; + -moz-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); + width: 180px; + height: 200px; + display: none; +} + +.chat h4 { + background: #ff0000; + color: #fff; + height: 20px; + line-height: 20px; + padding-left: 5px; + font-size: 11px; + margin-bottom: 5px; +} + +.chat .chat-content { + padding: 0px 5px; + margin-bottom: 5px; + height: 140px; +} + +.chat .chat-content p { + color: #555; + font-size: 11px; + padding: 5px 0px; + line-height: 35px; +} + +.chat .chat-content p img { + float: left; + margin-right: 5px; +} + +.chat .send { + background: url(../images/mdg_sprite.jpg) no-repeat 0 -1306px; + padding-right: 5px; + padding-left: 20px; + font-size: 11px; + line-height: 30px; + height: 30px; + border: none; + border-top: 1px solid #ccc; + width: 155px; +} + +.chat h4 a { + color: #fff; + float: right; + margin-right: 5px; +} + +/***FIX***/ +.l-name1 { + background: url(../images/bg-tab-active.png) repeat-x !important; + height: 20px; + text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.2); +} + +h2.l-league { + font-size: 11px; + font-weight: bold; + height: 25px; + line-height: 25px; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; + background: url(../images/mdg_sprite.png) no-repeat 0 -616px, #ededed; + padding-left: 25px; + font-weight: bold; + text-transform: uppercase; + margin-top: 2px; +} + +/***FIX 3 ***/ +#right h2 a { + color: #fff; + width: 160px; + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + float: left; +} + +#right h2 { + padding-bottom: 0px !important; + margin-bottom: 0px !important; +} + +.total .top-total p { + color: #fff !important; +} + +.box h3.betsname a { + font-size: 11px; + color: #111; + display: block; + width: 185px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + padding: 5px 0; +} + +.box h3.betsname a:hover { + color: #F00; +} + +.block h3 a { + color: #fff; + font-size: 11px; + font-weight: bold; + font-family: arial, san-serif; +} + +/***FIX***/ +#info-main { + position: absolute; + top: 10px; + right: 10px; +} + +#info-main li { + display: block; + width: 100px; + margin: 0px 5px; + float: left; +} + +#info-main li input { + width: 100px; + margin-top: 5px; + color: #333; + font-size: 11px; +} + +#info-main li span { + color: #fff; + font-size: 11px; +} + +#info-main li input.btnlogin { + background: #000; + color: #fff; + width: auto; + margin-top: 16px; + display: block; + padding: 0px 5px; + margin-right: -5px; + border: none; + height: 20px; +} + +#info-main li.main,#info-main li.main1 { + width: auto; +} + +#info-main li.main a { + color: #fff; + font-size: 11px; + display: block; + margin-top: 20px; + border-left: 1px solid #fff; + padding-left: 5px; +} + +#info-main li.main a:hover { + text-decoration: underline; +} + +.slip .btn-bet { + background: #111; + color: #fff; + cursor: pointer; + border: none; + float: right; + text-align: center !important; + margin-right: 10px !important; +} + +.slip .btn-bet:hover { + background: red; +} + +.stake { + color: #111; + text-align: right; +} + +.stake span { + color: red; +} + +.stake p.max_stake { + width: 60%; +} + +.stake .num_stake { + float: right; + width: 30%; + color: #333; + text-align: right; + margin-right: 5px; +} + +.stake .max_stake { + float: left; +} + +.l-bet h3 a { + color: #FFFFFF; + font-size: 12px; + font-weight: bold; +} + +h2.l-league a { + color: #111; +} + +/*comments*/ +.__comment_block { + margin: 2px; + /*border:1px solid #e5e5e5;*/ + border-top: 0px; + position: relative; + margin-top: 5px; +} + +.__comment_block .__comment_arrow { + display: block; + width: 10px; + height: 5px; + background: url(../images/mdg_sprite.png) no-repeat 0 -541px; + position: absolute; + top: -4px; + left: 10px; +} + +.__comment_block .txtComment_block { + background: #efefef; +} + +.__comment_block #_txtComment { + width: 90%; + height: 20px; + margin: 3px 0px 3px 5px; + border: 1px solid #ddd; + padding: 5px; + color: #333; + font-size: 11px; +} + +.__comment_block ._comment_avatar img { + width: 30px; + height: 30px; + float: left; + margin-top: 3px; + margin-left: 3px; +} + +.__comment_block #__comment_list { + margin-top: 0px; +} + +.__comment_block #__comment_list li { + padding: 4px 5px; + border: 1px solid #e5e5e5; + background: #efefef; + overflow: hidden; + margin: 0px 0px 3px 0px; +} + +.__comment_block #__comment_list li:hover { + box-shadow: none; + -webkit-box-shadow: none; +} + +.__comment_block #__comment_list li a { + color: #111; + font-weight: bold; + font-size: 11px; +} + +.__comment_block #__comment_list li img { + float: left; + margin-right: 5px; + width: 30px; + height: 30px; + display: block; + border: 1px solid #ddd; + padding: 2px; + background: #fff; +} + +.__comment_block #__comment_list li p { + font-size: 11px; + margin-right: 5px; +} + +#_comment_time { + color: #777; + font-size: 11px; +} + +#_comment { + color: #333; + font-size: 11px; + line-height: 14px; +} + +#__comment_more { + font-size: 11px; + display: block; + margin: 3px 0px; + color: #00bff3; +} + +#__comment_more:hover { + color: #004a80; +} + +/* LIST TOURNEY */ +.list_tourney { + margin: 10px 0px; + color: #333; + border: 1px solid #dcdcdc; +} + +.list_tourney img { + float: left; + margin-right: 10px; + height: 54px; + width: 54px; +} +/* +.list_tourney:nth-child(even){ +border-top: 1px solid #e5e5e5; +border-bottom: 1px solid #e5e5e5; +background: #f1f1f1; +}*/ +.list_tourney .txtComment_block { + border-top: 1px solid #e1e1e1; + padding: 5px 0px; + background: #efefef; +} + +.list_tourney .__comment_block { + margin: 0px !important; +} + +.list_tourney .list_tourney_top { + padding: 10px 5px; + overflow: hidden; +} + +.list_tourney ._comment_avatar img { + margin-left: 5px !important; +} + +.list_tourney #__comment_component_tourney_list { + /*background: #efefef; + border: 1px solid #e1e1e1; + padding: 5px 0px;*/ + +} + +.list_tourney a.list_tourney_name { + color: #333; + font-size: 13px; + margin-bottom: 3px; + text-transform: uppercase; + font-weight: bold; + display: block; +} + +.list_tourney p.tourney_topbets { + line-height: 18px; + font-size: 11px; +} + +.list_tourney .list_tourney_time span { + color: #666; + font-size: 11px; +} + +.list_tourney a:hover { + color: red; +} + +.list_tourney p.tourney_topbets a { + color: red; +} + +.list_tourney p.tourney_topbets a:hover { + text-decoration: underline; +} + +.search_tourney { + padding: 3px; + font-size: 11px; + color: #363636; + background: #f7f7f7; /* Old browsers */ + background: -moz-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f7f7f7), + color-stop(100%, #e8e8e8)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* IE10+ */ + background: linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', + endColorstr='#e8e8e8', GradientType=0); /* IE6-9 */ + border: 1px solid #ccc; +} + +.search_tourney td { + padding: 5px; +} + +.search_tourney input { + font-size: 11px; + color: #363636; + padding: 2px 5px; + border: 1px solid #ccc; +} + +.search_tourney .ipt_tourney_name { + width: 298px; + margin-left: 2px; +} + +.pag { + margin-top: 5px; +} + +.pag .pag_select { + margin-right: 5px; + width: 80px; + border: 1px solid #ccc; +} + +.pag span { + color: #ff0000; +} + +/*tourney-detail*/ +.list_tourney_top_info { + display: table-cell; +} + +.list_tourney_top ._tourney_info_detail { + font-size: 11px; + margin-top: 5px; + color: #666; + background: #f9f9f9; + border-top: 1px solid #e5e5e5; + border-bottom: 1px solid #e5e5e5; + padding: 3px 0px; +} + +.list_tourney_top ._tourney_info_detail td { + padding-right: 10px; +} + +.list_tourney_top ._tourney_info_detail span { + color: #d20000; +} + +.list_tourney_top .list_tourney_time { + font-size: 11px; + color: #333; +} + +/* link trong betslip*/ +._bet_name { + color: #d20000; +} + +._bet_name:hover { + color: #111; +} + +/** fix Posibility/Name **/ +.bestbet .l-bet h3 label,#__bet_list h3 label { + width: 400px; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + cursor: pointer; +} + +.publicbet .l-bet h3 label { + width: 240px; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + cursor: pointer; +} + +.match_time_count { /* countdown in match */ + font-weight: normal; + float: right; + margin-right: 5px; + color: #f9d403; + font-size: 11px; +} + +.comment_content { + width: 465px; + display: table-cell; + text-align: justify; +} + +/*match-desc*/ +.detail-match-event { + margin-bottom: 15px; + margin-top: -9px; + background: #fff; + border: 1px solid #ccc; + padding: 5px 10px; + font-size: 12px; + color: #555; +} + +.detail-top { + overflow: hidden; + padding: 5px 0px 0px 0px; + border-top: 1px solid #ddd; +} + +.detail-top-time label,.detail-top label { + display: block; + float: left; + padding-top: 5px; + margin-right: 5px; +} + +.detail-top-time .detail-match-time { + float: right; +} + +.detail-top-time .event_status { + float: left; +} + +.detail-top-time p,.detail-top p { + font-size: 11px; +} + +.detail-top-time p span { + color: #d20000; +} + +.detail-match-desc { + line-height: 20px; + padding-top: 15px; +} + +.match-info { + color: #e5e5e5; + padding-left: 18px; + background: url(../images/mdg_sprite.png) no-repeat 0 -1230px; + margin-left: 5px; + font-weight: normal; + font-size: 11px; + cursor: pointer; +} + +.betlist_title { + overflow: hidden; + height: 20px; + line-height: 20px; +} + +.betlist_title_friend { + float: left; + line-height: 30px; +} + +.betlist_title_friend input { + float: left; +} + +.betlist_title_amount { + width: 74px !important; + text-align: right !important; +} + +.betlist_title_pot { + width: 46px !important; + text-align: right !important; +} + +.betlist_title_pati { + width: 50px !important; + display: block; +} + +.betlist_title_pot,.betlist_title_amount,.betlist_title_pati,.betlist_title_odd + { + float: right; + margin: 0px 3px; +} + +.bets_history { + overflow: hidden; + font-size: 11px; + color: #111; + background: #ED9017; + padding: 3px 0px; +} + +.bets_history ._b_history { + color: orange; + font-size: 11px; + display: inline-block; + margin-top: 2px; +} + +.bets_history ._b_history:hover { + color: #fff; +} + +.bets_history .mini_text { + float: right; + margin-right: 3px; + color: #222; +} + +.bets_history .mini_text p { + display: block; + float: left; +} + +.bets_history .mini_text p.bets_profit { + width: 50px; + text-align: right; +} + +.bets_history .mini_text p.bets_odd { + width: 50px; + text-align: center; +} + +span.bets_profit { + width: 65px; + text-align: right; + margin-left: 5px; +} + +span.bets_odd { + width: 30px; + text-align: center !important; +} + +.match-left,.match-right { + display: block; +} + +.match-left img { + float: right; + margin-top: -5px !important; + display: block; +} + +.match-right img { + float: left; + margin-top: -5px !important; + display: block; +} + +.tab-info { + display: block !important; + width: 13px !important; + height: 13px !important; + background: url(../images/mdg_sprite.png) no-repeat 0 -1249px !important; + position: absolute; + top: 5px; + right: 0px; + cursor: pointer; +} + +.bet_min { + display: inline-block; + width: 16px; + height: 9px; + background: url(../images/mdg_sprite.png) no-repeat 0 -30px; + cursor: pointer; + float: right; + margin-top: 7px; + margin-right: 3px; +} + +.bet_max { + display: inline-block; + width: 16px; + height: 9px; + background: url(../images/mdg_sprite.png) no-repeat 0 -40px; + cursor: pointer; + float: right; + margin-top: 7px; + margin-right: 3px; +} + +.bet_his_max { + display: inline-block; + width: 16px !important; + height: 9px !important; + background: url(../images/mdg_sprite.png) no-repeat 0 -40px; + float: right !important; + cursor: pointer; + margin-right: 3px; + margin-top: 13px; +} + +.bet_his_min { + display: inline-block; + width: 16px !important; + height: 9px; + background: url(../images/mdg_sprite.png) no-repeat 0 -30px; + float: right !important; + cursor: pointer; + margin-right: 3px; + margin-top: 11px; +} + +.bet_detail { + display: none; + overflow: hidden; +} + +.bet_detail #_txtComment { + width: 477px !important; +} + +.bet_detail ._viewbet_participant_td ._viewbet_participant_name { + width: 230px !important; +} + +.bet_detail .view-info img { + margin-top: 5px; + margin-left: 5px; +} + +.bet_detail .dialog-tbl { + border: none; + margin-left: -1px; +} + +.bet_detail .view-info .info-right { + margin-right: 5px; +} + +.bet_detail .view-info h4 a { + width: inherit; + margin-right: 5px; +} + +.b_verify { + display: block; + float: left; + width: 12px !important; + height: 12px !important; + background: url(../images/mdg_sprite.png) no-repeat 0 -1422px; + margin-top: 10px; + margin-right: 3px; +} + +.b_close { + display: block; + float: left; + width: 12px !important; + height: 12px !important; + background: url(../images/mdg_sprite.png) no-repeat 0 -1264px; + margin-top: 10px; + margin-right: 3px; +} + +.b_notyet { + display: block; + float: left; + width: 12px !important; + height: 12px !important; + margin-top: 10px; + margin-right: 3px; +} + +.b_na { + display: block; + float: left; + width: 12px !important; + height: 12px !important; + background: url(../images/mdg_sprite.png) no-repeat 0 -1353px; + margin-top: 10px !important; + margin-right: 3px !important; +} + +.btn_close { + position: absolute; + top: -10px; + right: -5px; + width: 16px; + height: 16px; + background: url(../images/mdg_sprite.png) no-repeat 0 -520px; + cursor: pointer; +} + +.l-profit a { + font-size: 11px; + color: #273A47; + background: none !important; + float: left; +} + +.list_title { + text-align: right; + height: 25px; + overflow: hidden; +} + +.list_title p { + display: inline-block; + line-height: 32px; +} + +.list_title p.b_exchange_matched { + font-size: 11px; + float: left; + display: inline-block; + margin-left: 20px; + color: #999; +} + +.list_title .list_title_left { + margin-top: 7px; +} + +.list_title p.list_title_right { + width: 70px; + text-align: center; + margin-left: 5px; + font-size: 11px; + font-weight: normal; + float: right; +} + +.list_title p.list_title_left span { + display: block; + width: 149px; + float: left; + background: none; + font-size: 11px; + color: #999; + text-align: center; + line-height: 16px; + font-weight: bold; + padding: 0px 2px; +} + +.list_title p.list_title_left span.titleBack { + text-align: right; + color: #2797E6; + border-bottom: 2px solid #2797e6; +} + +.list_title p.list_title_left span.titleBack label { + font-weight: normal; + color: #333; + float: left; +} + +.list_title p.list_title_left span.titleBack label.back_percent,.list_title p.list_title_left span.titleBack label.lay_percent + { + margin-left: 2px; +} + +.list_title p.list_title_left span.titleLay label { + font-weight: normal; + color: #333; + float: right; +} + +.list_title p.list_title_left span.titleLay { + text-align: left; + color: #F12F62; + border-bottom: 2px solid #f12f62; + margin-left: 4px; + margin-right: 1px; +} + +.betlist_title_pati_mutual,.betlist_title_pot_mutual { + float: right; + margin: 0px 3px; +} + +.betlist_title_pot_mutual { + width: 70px; + text-align: right !important; +} + +.betlist_title_pati_mutual { + width: 50px; + text-align: center; +} + +.betlist_title_matched { + font-size: 11px !important; + margin-left: 20px; + color: #999; +} + +.betlist_title_matched span { + font-size: 11px !important; + color: #999; +} + +.l-slip .t-slip { + margin-top: -4px; + color: #777 !important; +} + +.l-slip .t-slip label { + font-weight: bold; + margin-top: 4px; +} + +/*inplay-upcomming*/ +.title_mid { + font-size: 14px; + font-weight: bold; + margin-bottom: 10px; + color: #d80000; + background: url(../images/title-bar.png) repeat-x bottom, #fff; + border: 1px solid #ddd; + padding: 10px 5px 14px 8px; + border-bottom: none; +} + +.play_block { + margin-bottom: 15px; +} + +.play_block h3.active_title { + background: url(../images/mdg_sprite.png) repeat-x 0 -274px; + padding: 9px 15px; + font-size: 12px; + padding-left: 10px; + color: #fff; +} + +.play_block h3 { + background: #e2e2e2; /* Old browsers */ + /* IE9 SVG, needs conditional override of 'filter' to 'none' */ + background: + url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2UyZTJlMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iI2RiZGJkYiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjUxJSIgc3RvcC1jb2xvcj0iI2QxZDFkMSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlMmUyZTIiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, #e2e2e2 0%, #dbdbdb 50%, #d1d1d1 51%, #e2e2e2 + 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e2e2e2), + color-stop(50%, #dbdbdb), color-stop(51%, #d1d1d1), + color-stop(100%, #e2e2e2)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #e2e2e2 0%, #dbdbdb 50%, #d1d1d1 51%, + #e2e2e2 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #e2e2e2 0%, #dbdbdb 50%, #d1d1d1 51%, #e2e2e2 + 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #e2e2e2 0%, #dbdbdb 50%, #d1d1d1 51%, #e2e2e2 + 100%); /* IE10+ */ + background: linear-gradient(to bottom, #e2e2e2 0%, #dbdbdb 50%, #d1d1d1 51%, #e2e2e2 + 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e2e2e2', + endColorstr='#e2e2e2', GradientType=0); /* IE6-8 */ + /*background: url(../images/bg-title-in.png) repeat-x;*/ + padding: 6px 15px; + padding-left: 10px; + color: #111; + border: 1px solid #ccc; + border-bottom: none; + font-size: 12px; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.5); +} + +.play_block h3 a { + display: inline-block; + width: 14px; + height: 14px; + background: url(../images/mdg_sprite.png) no-repeat 0 -372px; + margin-left: -3px; + margin-right: -10px; + float: right; + margin-top: -1px; +} + +.play_block h3 a.mim { + background: url(../images/mdg_sprite.png) no-repeat 0px -389px; +} + +.play_block h3 label { + display: inline-block; +} + +.play_block .bets { + background: #fff; + margin-bottom: 10px; +} + +.play_block .bets li { + height: inherit; + line-height: 18px; + padding: 0px 8px; + cursor: pointer; +} + +.play_block .play_left_ct { + max-width: 370px; + float: left; + margin-top: 2px; +} + +.play_block label.play_time { + color: #666; + margin-top: 3px; + font-size: 11px; + margin-left: 4px; + float: left; +} + +.play_block .play_left_ct .b-name { + max-width: 230px; + display: inline-block; + padding: 3px 0px; + font-size: 11px; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.6); + float: left; +} + +.single_event_list label.play_time { + float: right; +} + +.possibility_group { + font-size: 11px; + color: #999; + text-align: center; +} + +.play_block .bet_min,.play_block .bet_max { + float: right; +} + +.betlist_title span { + font-size: 10px; + text-align: center; +} + +.news .block1 { + width: 650px !important; + margin: 10px 0px; +} + +.desc_comment { + margin-left: 49px; + position: relative; +} + +.news .block1 li { + padding: 0px !important; + padding-left: 5px !important; +} + +.desc_comment h3 label { + position: relative; + margin-left: 40px; + width: 350px; + display: inline-block; +} + +.desc_comment h3 .img_bet { + position: absolute; + top: -5px; + left: 5px; + border: 1px solid #ccc; + width: 30px; + height: 30px; + z-index: 10; +} + +#left .block .l-comming:last-child { + border: none; +} + +#left .block .l-comming:first-child { + border-top: 1px solid #ddd; +} + +#bets .close_bet { + display: inline-block; + width: 9px; + height: 9px; + background: url(../images/mdg_sprite.png) no-repeat 0 -506px; + margin-right: -5px !important; + cursor: pointer; +} + +.l-slip { + background: #fff; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; +} + +.pos_title .betlist_title { + float: right; + border-bottom: 1px solid #e5e5e5; + padding-bottom: 3px; + margin-top: -5px; + margin-right: 6px; +} + +.pos_title .betlist_title .betlist_title_odd { + width: 47px !important; + margin-left: 8px !important; +} + +.b-name { + padding: 3px 0px; +} + +#__best_odd_value_list .b-name { + display: inline-block; + width: 170px; + margin-top: 10px; + margin-right: 3px; +} + +#__best_odd_value_list li { + line-height: 19px !important; + clear: both; +} + +.bet_cancel { + color: #F4C229; + display: inline-block; + margin-left: 5px; + margin-top: 10px; +} + +.public_bets_myname img { + width: 20px; + height: 20px; + float: right; + margin-left: 2px; + margin-top: 2px; +} + +.bets li table { + margin-bottom: 5px; + width: 488px; + font-size: 11px !important; +} + +.bets li table td { + padding: 2px 4px; + border: 1px solid #e3e3e3; +} + +.bets li table tr { + background: #f3f3f3; + color: #666; + border: none; +} + +.bets li table._viewbet_participant .first_viewbet { + background: #eaeaea !important; + color: #555; +} + +.bets li table ._viewbet_participant_td ._viewbet_participant_name { + width: 200px !important; + color: #666 !important; +} + +.bets li span.l-profit { + margin-top: 4px; +} + +.l-bet h3 .bet_type { + background: none !important; + width: inherit !important; + height: inherit !important; + margin-top: 0px !important; + font-weight: normal; + font-size: 11px; + color: #FFB32B; + display: inline-block !important; + line-height: 24px; +} + +.dbet_type { + display: block; + color: #666; + margin-top: -17px; + margin-right: 5px; + float: right; +} + +._viewbet_list span { + margin-top: 0px !important; +} + +.public_bets_myname p { + float: left; +} + +.coll_min { + display: inline-block; + width: 8px; + height: 8px; + background: url(../images/icon_collapse_down.png) no-repeat top left; + margin-left: 3px; +} + +.coll_max { + display: inline-block; + width: 8px; + height: 8px; + background: url(../images/icon_collapse_up.png) no-repeat bottom left; + margin-left: 3px; +} + +.list_event_play li { + overflow: hidden; + border-left: 1px solid #ddd; + border-right: 1px solid #ddd; + border-top: 1px solid #ddd; +} + +.list_event_play li:last-child { + border-bottom: 1px solid #ddd; +} + +.listbet ul li span { + display: inline-block; +} + +.quote_comments { + /*border: 1px solid #D3DAE8;*/ + margin: 10px 0px; + width: 660px; +} + +.quote_comments ._viewbet { + width: 660px !important; +} + +.quote_comments li { + height: 30px !important; + line-height: 30px !important; + padding: 2px 0px !important; + padding-left: 5px !important; +} + +.quote_comments .dialog-tbl h3 { + text-transform: none !important; + background: #ccc; /* Old browsers */ + padding: 5px; +} + +.quote_comments .dialog-tbl h3 a { + color: #222 !important; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.3); +} + +.quote_comments .dialog-tbl h3 p { + float: right !important; + width: auto !important; + line-height: 20px; +} + +.quote_comments .dialog-tbl h3 p a { + line-height: 20px; + font-weight: 100 !important; + color: #999; +} + +.quote_comments .dialog-tbl h3 p img { + width: 15px; + height: 15px; + float: right; + margin-left: 4px; + border: 1px solid #ccc; + padding: 2px; + background: #fff; +} + +.quote_comments .dialog-tbl { + background: #ececec !important; + border: 1px dashed #bcbcbc !important; +} + +.quote_comments .dialog-tbl #_right_flg { + margin-top: 7px !important; +} + +.quote_comment .dbet_type { + +} + +.quote_comments h3 a { + color: #fff; + font-size: 11px; +} + +.quote_comments .bets li { + background: #f7f7f7; +} + +.quote_comments h3 a:hover { + color: #fff; + text-decoration: underline; +} + +.quote_comments .public_bets_myname { + color: #999 !important; +} + +#_right_flg { + display: block; + width: 12px; + height: 12px; + float: left; + margin-right: 3px !important; + margin-top: 10px !important; +} + +.list_bet h1 { + height: 24px; + color: #fff; + background: url(../images/mdg_sprite.png) repeat-x 0 -274px; + /*margin-top: 5px;*/ + font-size: 12px; + font-weight: bold; + line-height: 24px; + padding-left: 5px; + display: block; + /*margin-bottom: 2px;*/ + position: relative; +} + +.joinedbets1 h2 { + border-bottom: 2px solid #2797E6; + background: #BEDDF4; + font-size: 11px; + height: 24px; + line-height: 24px; + padding-left: 5px; +} + +.listbet h3,.pendingbets1 h3 { + background: none !important; + border: none !important; + font-weight: normal; +} + +.listbet h3,.pendingbets1 h3 span { + font-size: 10px !important; + color: #777 !important; + font-weight: normal !important; + margin-top: -5px; + margin-left: 0px; + padding: 5px; +} + +.joinedbets1 .listbet ul li { + margin-bottom: 1px; + border-bottom: none; + background: #BEDDF4; + padding: 3px 3px; + overflow: hidden; +} + +.joinedbets1 .listbet h3 a,.pendingbets1 .listbet h3 a,.mybets1 .listbet h3 a + { + font-weight: normal; +} + +.pendingbets1 .listbet ul li { + background: #BEDDF4; + border-bottom: none; + margin-bottom: 1px; + padding: 6px 3px; + overflow: hidden; +} + +.pendingbets1 .listbet .bets_profit,.pendingbets1 .listbet .bets_odd { + padding: 0px !important; + overflow: inherit; +} + +.pendingbets1 h1 { + border-bottom: 2px solid #2797E6; + background: #BEDDF4; + color: #111 !important; + font-size: 11px; +} + +.mybets1 h2 { + border-bottom: 2px solid #F12F62; + background: #F3DCE2; + font-size: 11px !important; + height: 24px; + line-height: 24px; + padding-left: 5px; +} + +.mybets1 .listbet ul li { + background: #F3DCE2; + border-bottom: none; + margin-bottom: 1px; + padding: 3px; + overflow: hidden; +} + +#mybet .del { + display: inline-block; + float: right; + width: 16px; + height: 10px; + background: url(../images/mdg_sprite.png) no-repeat 0 -686px; + position: absolute; + top: 8px; + right: 0px; + text-indent: -9999px; +} + +.pendingbets1 h3 .del { + width: 16px !important; + height: 5px !important; + top: 5px !important; +} + +.l-profit { + position: relative; + height: 19px; + border: 1px solid #84C4F1; + width: 70px !important; + line-height: 19px; + background: #D7ECFA; + background: -webkit-gradient(linear, left top, left bottom, from(#D7ECFA), + to(#BFE0F7)) !important; + background: -moz-linear-gradient(top, #D7ECFA, #BFE0F7) !important; + -ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d7ecfa, + endColorstr=#bfe0f7) !important; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d7ecfa, + endColorstr=#bfe0f7) !important; + zoom: 1; + margin-right: 5px; + text-align: left; + margin-left: 5px; + position: relative; +} + +.l-profit .icon_profit { + display: block; + float: right; + width: 12px; + height: 12px; + border: none; + background: url(../images/mdg_sprite.png) no-repeat 0 -941px; + margin-top: 4px; + margin-right: 2px; + cursor: pointer; + position: absolute; + right: 2px; +} + +._viewmore_bet { + font-size: 11px; + color: #666; + padding: 7px 0px; + margin-left: 5px; + display: block; +} + +._viewmore_bet:hover { + color: #111; + text-decoration: underline; +} + +.joinedbets1,.pendingbets1,.mybet1 { + margin: 7px 0px; +} + +.mybets1 .pos_groups_creat,.pendingbets1 .pos_groups_creat { + font-size: 10px !important; + color: #777 !important; + font-weight: normal !important; + margin-top: -5px; +} + +/*in-play, */ +.play_event_parti { + margin-bottom: 5px; + padding: 4px 8px; + background: #f5f5f5; + border-bottom: 1px solid #e1e1e1; + margin: 0px -8px; + border-top: 1px solid #e1e1e1; + margin-top: -2px !important; + overflow: hidden; +} + +.play_event_parti:hover { + background: #fff1d2; +} + +.play_event_parti .b-name { + font-size: 11px; + float: left; + display: inline-block; + max-width: 380px; +} + +.play_event_parti label { + color: #3B5160; +} + +.event_parti_list { + margin: 0px -10px; +} + +.event_parti_list li:hover { + cursor: default !important; +} + +.event_parti_list li { + border-left: none !important; + border-right: none !important; + margin-bottom: 0px !important; + border-top: none !important; + border-bottom: 1px solid #e9e9e9 !important; +} + +.event_parti_list li:last-child { + border: none !important; +} + +.event_parti_list li:nth-child(even) { + background: none !important; +} + +.event_parti_list li:hover { + background: #f5f5f5 !important; +} + +.event_parti_list .event_parti { + float: left; + width: 290px; + display: inline-block; + padding: 5px 5px; + font-size: 11px; +} + +.event_parti_list span.l-odd { + margin-top: 3px !important; +} + +.play_block .single_event_list { + background: #fff; + /*border-bottom: 1px solid #ddd!important;*/ + border-left: 1px solid #ddd !important; + border-right: 1px solid #ddd !important; +} + +.play_block .single_event_list:hover { + background: #fff1d2; +} + +.play_event_parti span { + color: #999; + margin-right: 4px; + margin-top: 4px; + font-size: 11px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 150px; +} + +.event_parti_list .handiCap { + float: none; + text-align: right; + width: 30px; + display: inline-block; + margin-top: 0; +} + +.event_fixed_odd .event_parti_list .event_parti { + width: 666px; +} + +.activity_betinfo span.betlist_title_odd { + width: 53px !important; +} + +.activity_betinfo .l-odd { + margin-top: 4px !important; + margin-left: 10px !important; +} + +.activity_betinfo .betlist_title_amount { + width: 70px !important; +} + +.activity_betinfo .l-betable-amount { + width: auto !important; +} + +.bestbet .l-odd { + margin-top: 5px; +} + +.detail-match-event .__embeded_text { + width: 447px !important; + height: 18px !important; + border: 1px solid #ddd; + font-size: 11px; + color: #333; + background: #f5f5f5; + float: right; +} + +.detail-match-event .__embeded_text:focus { + box-shadow: 0px 0px 3px #ddd; + -webkit-shadow: 0px 0px 3px #ddd; + background: #fff; +} + +#__view_bet_market .dialog-right { + margin-left: 10px !important; + max-height: 570px !important; + overflow: auto; + overflow-x: hidden; +} + +/*nav_bottom*/ +#nav .nav_bottom { + position: absolute; + top: 35px; + left: 0px; + width: 988px !important; + height: 28px !important; + padding-left: 10px; + background: url(../images/bg-nav-bottom.png) repeat-x; + border-bottom: 1px solid #ddd; + border-left: 1px solid #ddd; + border-right: 1px solid #ddd; + -moz-border-radius: 0px 0px 6px 6px; + -webkit-border-radius: 0px 0px 6px 6px; + -o-border-radius: 0px 0px 6px 6px; + border-radius: 0px 0px 6px 6px; + -ms-border-radius: 0px 0px 6px 6px; + margin-bottom: 10px; +} + +#nav .nav_bottom p.hotline { + float: left; + line-height: 28px; + font-weight: bold; + font-size: 11px; + border-right: 1px solid #ccc; + padding-right: 10px; +} + +#nav .nav_bottom p.hotline span { + color: #00ADED !important; +} + +#nav .nav_bottom .scroll_text { + line-height: 28px; + color: #555; + padding-left: 10px; + float: right; + width: 785px; +} + +#nav li:hover .nav_bottom { + display: none !important; +} + +#mdg-dialog #__view_bet_market { + margin: 0 auto !important; + padding: 0px 10px; +} + +#__best_odd_value_container .l-odd a { + text-align: center; + font-weight: normal; + width: 48px; + height: 32px; + background: #f7f7f7; /* Old browsers */ + background: -moz-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f7f7f7), + color-stop(100%, #e8e8e8)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f7f7f7 0%, #e8e8e8 100%); + /* IE10+ */ + background: linear-gradient(to bottom, #f7f7f7 0%, #e8e8e8 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7f7f7', + endColorstr='#e8e8e8', GradientType=0); /* IE6-9 */ + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.4); + margin: 0 1px; +} + +#__best_odd_value_container .l-odd a:hover { + background: #efe788; /* Old browsers */ + background: -moz-linear-gradient(top, #efe788 0%, #fcc676 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #efe788), + color-stop(100%, #fcc676)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #efe788 0%, #fcc676 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #efe788 0%, #fcc676 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #efe788 0%, #fcc676 100%); + /* IE10+ */ + background: linear-gradient(to bottom, #efe788 0%, #fcc676 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efe788', + endColorstr='#fcc676', GradientType=0); /* IE6-9 */ + color: #111; +} + +#__best_odd_value_container .l-odd a span { + display: block; + color: #333; + width: 100%; + line-height: 16px; +} + +#__best_odd_value_container .l-odd a span.exchange_odd { + font-weight: bold; +} + +#__best_odd_value_container .l-odd a span.exchange_money { + +} + +.bet_container_info { + max-height: 200px; + overflow: auto; +} + +.more_market { + display: inline-block; + width: 10px; + height: 10px; + background: url(../images/mdg_sprite.png) no-repeat 0 -1342px; + text-indent: -9999px; + line-height: 10px; +} + +.event_list span { + width: auto !important; + margin-right: 5px; + color: #333; +} + +.viewfullCategory { + font-weight: normal !important; + color: #444; + font-size: 11px; + color: red !important; + height: 22px; + display: block; + line-height: 22px; +} + +#nav li .submenu li a.current { + color: #d20000 !important; +} + +/*bonus Market*/ +#__view_bet_market .__view_bet_market { + width: 100% !important; +} + +#__view_bet_market #__market_participant_container { + float: right; +} + +#__view_bet_market ._viewbet_participant { + margin-left: 0px; + max-height: 550px; + overflow: auto; + width: 330px; +} + +#__view_bet_market ._viewbet_participant td { + padding: 5px; +} + +#jqplot-target .jqplot-title { + font-size: 13px !important; + font-weight: bold !important; + color: red !important; +} + +#__view_bet_market ._possibility_market_list { + float: left; + width: 188px; +} + +#__view_bet_market ._participant_bettingon { + float: left; + margin-right: 10px; +} + +#__view_bet_market table table { + margin-left: 50px; +} + +#__view_bet_market .traded_detail { + background: #ccc; + text-transform: uppercase; + font-weight: bold; + padding: 5px; + width: 320px; + font-size: 11px; +} + +/*touney detail*/ +.tourney_info_detail ._tourney_info img.banner-tourney { + width: 510px; + height: 200px; + float: left; +} + +.tourney_info_detail ._tourney_info_detail { + margin-bottom: 10px; + border-bottom: 1px solid #e5e5e5; + background: #f9f9f9; +} + +.tourney_info_detail ._tourney_info_detail p { + background: #ddd; + color: #333 !important; + text-align: center; + font-weight: bold; + font-size: 11px; + padding: 3px 5px; + margin-bottom: 5px; +} + +.tourney_info_detail ._tourney_info_detail span { + font-weight: normal; +} + +.tourney_info_detail ._tourney_info_detail td { + border-right: 1px solid #e5e5e5 !important; + text-align: center; +} + +.tourney_info_detail .touney_info_detail_ct { + line-height: 20px; + color: #363636; + padding: 0px 5px 5px 5px; + font-size: 11px; +} + +.tourney_info_detail .touney_info_detail_ct img { + width: inherit !important; + height: inherit !important; + border: none !important; + max-height: 480px !important; + max-width: 502px !important; +} + +.tourney_info_detail .__comment_block ._comment_avatar img { + padding: 0px !important; + margin: inherit !important; + margin-top: 3px !important; + margin-left: 3px !important; +} + +.tourney_info_detail .__comment_block #__comment_list li img { + padding: 0px !important; + margin: inherit !important; + margin-right: 5px !important; +} + +.tourney_info_detail ._tourney_info_time .tourney_time { + display: inline-block; + width: 350px; +} + +.tourney_info_detail ._tourney_info_time .tourney_status { + display: inline-block; + text-align: right; + width: 165px; + font-size: 11px; + font-weight: bold !important; +} + +.tourney_info_detail ._tourney_info_time .private { + color: #d20000 !important; +} + +.tourney_info_detail ._tourney_info_time .public { + color: green !important; +} + +.tourney_status_icon { + width: 12px; + height: 12px; + display: block; + float: left; + margin-right: 3px; + text-indent: -9999px; + margin-top: 8px; +} + +.resolve { + background: url(../images/mdg_sprite.png) no-repeat 0 -1422px; +} + +.cancel { + background: url(../images/mdg_sprite.png) no-repeat 0 -1264px; +} + +.tourney_info .tourney_title .tourney_status_icon { + float: right !important; +} + +.list_tourney_top_info .list_tourney_name .tourney_status_icon { + margin-top: 0px !important; +} + +/*add betslip*/ +.total p { + color: #ccc !important; + padding: 0px 5px; +} + +.joinedbets1 { + margin-top: 0px !important; +} + +.__betslip_result_list .l-slip .d-slip { + padding: 0px !important; + margin-top: -5px; +} + +.__betslip_result_list .l-slip .d-slip ul,.l-slip .l-slip ul li { + padding: 3px !important; + margin-bottom: 0px !important; +} + +.__betslip_result_list .l-slip .d-slip ul { + margin-top: -7px; +} + +.__betslip_result_list .l-slip .d-slip ul li .bets_time,.l-slip .l-slip .d-slip ul li .bets_time,.joinedbets1 .bets_time,.pendingbets1 .bets_time,.mybets1 .bets_time + { + color: #666; + display: block; + margin-top: -4px; + float: left; + font-size: 10px; +} + +.joinedbets1 .bets_time,.pendingbets1 .bets_time,.mybets1 .bets_time { + margin-top: 2px !important; +} + +.mybets1 .listbet { + overflow: hidden; + margin-bottom: 5px; +} + +.l-slip .l-slip .d-slip ul li .bets_time { + font-size: 10px; +} + +.__betslip_result_list .l-slip .d-slip ul li { + padding: 3px !important; +} + +.__betslip_result_list .l-slip .t-slip,.__betslip_result_list ._bet_name,.l-slip .l-slip .t-slip + { + margin-left: 3px !important; + color: #666; + font-weight: normal !important; +} + +.__betslip_result_list .l-slip .title-slip { + background: none !important; +} + +.__betslip_result_list .l-slip .title-slip a { + font-weight: bold; + color: #333 !important; + margin-left: 0px !important; + margin-right: -5px !important; +} + +.__betslip_result_list .l-slip .title-slip a:hover { + color: red; +} + +.__betslip_result_list .l-slip { + background: #fff !important; +} + +.__betslip_result_list .pendingbets1 { + margin-top: 0px !important; +} + +.__betslip_result_list .l-slip li { + border-bottom: none !important; +} +/*back*/ +.back_bets .bet_un_matched { + background: #BEDDF4; + padding: 0px 4px; + font-style: italic; +} + +.back_bets .bet_matched a,.back_bets .bet_un_matched a { + color: #000; + font-weight: bold !important; + display: inline-block; + width: 110px; +} + +.back_bets .bet_matched { + background: #BEDDF4; + padding: 0px 4px; +} + +.back_bets .bet_matched span,.back_bets .bet_un_matched span { + padding: 0px !important; + float: right; + text-align: right; + width: 47px !important; +} + +.back_bets .bet_matched .bets_time,.back_bets .bet_un_matched .bets_time + { + color: #666 !important; +} + +/*LAY*/ +.lay_bets .bet_un_matched { + background: #ffb3c7; + padding: 0px 4px; + font-style: italic; +} + +.lay_bets .bet_matched a,.lay_bets .bet_un_matched a { + color: #000; + font-weight: bold !important; + display: inline-block; + width: 80px; +} + +.lay_bets .bet_matched { + background: #ffb3c7; + padding: 0px 4px; +} + +.lay_bets .bet_matched span,.lay_bets .bet_un_matched span { + padding: 0px !important; + float: right; + text-align: right; + width: 47px !important; +} + +.lay_bets .bet_matched .bets_time,.lay_bets .bet_un_matched .bets_time { + color: #666 !important; +} +/*END LAY*/ +.__betslip_result_list .l-slip li p.title-slip { + padding-left: 4px; +} + +.l-slip .l-slip { + border: none !important; +} + +.l-slip .l-slip .d-slip { + padding: 0px 5px !important; +} + +#betslip .bets_history { + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; +} + +#betslip .bets_history .mini_text p.bets_profit { + width: 54px !important; +} + +#betslip .bets_history .mini_text p.bets_odd { + text-align: right; + width: 50px !important; +} + +.betslip_right input { + border: 1px solid #ddd; + padding: 2px; +} + +.l-slip ul li .bets_time { + margin-top: -5px !important; + float: left; + color: #666; + font-size: 10px; +} + +.__betslip_result_list { + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; +} + +.ref_code { + text-align: right !important; + float: right !important; +} + +.ref_code label { + color: red; + display: inline !important; + text-decoration: underline; +} + +/*end add betslip*/ +.info_bet_history { + background: #303030 !important; + /*border-radius: 0px 0px 6px 6px; + -webkit-border-radius: 0px 0px 6px 6px;*/ + padding: 6px; + color: #e5e5e5 !important; + text-align: left !important; + font-size: 11px; + border-top: 1px solid #ED9017; +} + +.info_bet_history a { + color: #F4C229; +} + +.info_bet_history a:hover { + color: #fff; +} + +._tourney_balance { + background: url(../images/mdg_sprite_title.png) repeat-x 0 -241px; + margin-bottom: 10px; + padding-top: 2px; + -webkit-border-radius: 3px; + border-radius: 3px; + height: 22px; +} + +._tourney_balance p { + color: #fff !important; + padding-left: 20px; + background: url(../images/mdg_sprite.png) no-repeat 0 -667px; +} + +._tourney_balance p a { + color: #F4C229 !important; + font-weight: bold; +} + +#betslip .box { + border-bottom: none !important; +} + +.bet_info_mutual_container { + max-height: 250px; + overflow: auto; +} + +.no-event { + background: #f5f5f5; + padding: 5px; + border: 1px solid #ddd; +} + +.no-event h2 { + font-size: 15px; + margin-bottom: 10px; + color: #222; +} + +.no-event p { + background: #F8DBDB; + border: 1px solid #E77776; + -moz-border-radius: 2px; + border-radius: 2px; + padding: 5px; + font-size: 11px; + color: red; + line-height: 14px; +} + +.l-posi ._viewbet_stake { + margin-right: 0px !important; +} + +.title .bet_his_min { + margin-top: 7px !important; +} + +.title .bet_his_max { + margin-top: 9px !important; +} + +.bet_info .bet_his_min { + margin-top: 7px !important; +} + +.bet_info .bet_his_max { + margin-top: 7px !important; +} + +#mybet_block { + /*position: absolute;*/ zoom =1; + margin-bottom: 10px; + z-index: 30; + top: 0; + righ: 0; +} + +#right #mybet { + width: 270px; +} + +#__mybets .mini_text>.bets_odd { + width: 90px; +} + +.detail-top-time { + padding-bottom: 5px; + overflow: hidden; + border-bottom: 1px solid #ddd; +} + +.event_status span { + font-weight: bold +} + +.mybets1 .bets_time { + padding: 0 5px +} + +.bet_info_creat input { + font-size: 11px; + border: 1px solid #ccc; + height: 20px; + padding: 0px 3px; + margin: 0px; +} + +.bet_info_creat input:focus { + background: #fff; +} + +.bet_info_creat input.pick_date { + box-shadow: 0px 0px 4px #ccc; + -webkit-box-shadow: 0px 0px 4px #ccc; + border-radius: 3px; + -webkit-border-radius: 3px; + padding: 5px; + height: auto; + background: #ffffff; /* Old browsers */ + background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), + color-stop(100%, #e5e5e5)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); + /* IE10+ */ + background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', + endColorstr='#e5e5e5', GradientType=0); /* IE6-9 */ + font-weight: bold; + text-shadow: 0px 1px 0px #f5f5f5; + cursor: pointer; +} + +.bet_info_creat input.pick_date:hover { + background: #ffaf4b; /* Old browsers */ + background: -moz-linear-gradient(top, #ffaf4b 0%, #ff920a 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffaf4b), + color-stop(100%, #ff920a)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #ffaf4b 0%, #ff920a 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #ffaf4b 0%, #ff920a 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #ffaf4b 0%, #ff920a 100%); + /* IE10+ */ + background: linear-gradient(to bottom, #ffaf4b 0%, #ff920a 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffaf4b', + endColorstr='#ff920a', GradientType=0); /* IE6-9 */ + border: 1px solid #ff920a; + text-shadow: 0px 1px 0px rgba(255, 255, 255, 0.4); +} + +#__best_odd_value_list li .bestodd_back { + float: right; +} + +#__best_odd_value_list li .bestodd_lay { + float: right; +} + +#__best_odd_value_list li .bestodd_back .l-odd:first-child a { + background: #BEDDF4; + border: 1px solid #8acafa; +} + +#__best_odd_value_list li .bestodd_back .l-odd:first-child a:hover { + background: #8dccfa; +} + +#__best_odd_value_list li .bestodd_lay .l-odd:last-child a { + background: #F3DCE2; + border: 1px solid #feaac0; +} + +#__best_odd_value_list li .bestodd_lay .l-odd:last-child a:hover { + background: #ffb3c7; +} + +/*back-lay*/ +.back_bets .l-slip .d-slip input,.lay_bets .l-slip .d-slip input { + width: 42% !important; +} + +.back_bets .top-total { + background: #BEDDF4; + border-top: 1px solid #86c8f8; +} + +.back_bets .top-total p { + color: #111 !important; +} + +.back_bets .l-slip .d-slip input { + background: #beddf4; + border: 1px solid #86c8f8; +} + +/* .lay_bets .bets_history{ + background: #F3DCE2; + border-bottom: 2px solid #F12F62; + padding: 2px 0px; + } + */ +.lay_bets .top-total { + background: #f3dce2; + border-top: 1px solid #fc8aa8; +} + +.lay_bets .l-slip .d-slip input { + background: #f3dce2; + border: 1px solid #fc8aa8; +} + +.lay_bets .bets_odd_text { + margin-right: 10px; +} + +.refreshBet { + display: inline-block; + width: 20px; + height: 20px; + background: url(../images/mdg_sprite.png) no-repeat 0 -970px; + border: none; + text-indent: -9999px; + cursor: pointer; + float: right; +} + +.handiCap { + font-size: 11px; + color: #666; + line-height: 33px; + margin-top: 7px; + float: right; +} + +.betslip_handicap { + font-weight: normal; + float: right; + margin-top: -2px; +} + +.back_bets .betslip_handicap { + color: #2797e6; +} + +.lay_bets .betslip_handicap { + color: #f12f62; +} + +._posCorrectoption { + color: #888; + font-style: normal; + font-weight: normal; +} + +.b-name-info { + float: left; + width: 203px; +} + +._cb_list_posi ._cb_posi { + float: left; + width: 265px; +} + +._cb_list_posi .listPos_handicap { + color: #666; + font-size: 11px; + text-align: right; + margin-top: 6px; + float: right; +} + +.bet_info_creat p label.error { + margin-left: 95px; +} + +#__best_odd_value_list #_right_flg { + margin-top: 17px !important; +} + +._view_odd { + text-align: center !important; + height: 19px; + line-height: 19px; + cursor: pointer; + width: 47px !important; + margin-top: -5px; + margin-left: 12px; +} + +#__mutual_odd_value_list .betlist_title span.betlist_title_odd { + width: 70px !important; +} + +#__mutual_odd_value_list .bets li span.l-profit a { + width: 100% !important; + padding-left: 4px; + margin-top: -3px; + text-align: left !important; +} + +/*back-lay*/ +.event_parti_list span.l-odd a.BEST_BACK_ODD_BUTTON,.single_event_list span.l-odd a.BEST_BACK_ODD_BUTTON + { + background: #BEDDF4 !important; + border: 1px solid #8acafa !important; +} + +.event_parti_list span.l-odd a.BEST_BACK_ODD_BUTTON:hover,.single_event_list span.l-odd a.BEST_BACK_ODD_BUTTON:hover + { + background: #8acafa !important; +} + +.event_parti_list span.l-odd a.BEST_LAY_ODD_BUTTON,.single_event_list span.l-odd a.BEST_LAY_ODD_BUTTON + { + background: #F3DCE2 !important; + border: 1px solid #feaac0 !important; +} + +.event_parti_list span.l-odd a.BEST_LAY_ODD_BUTTON:hover,.single_event_list span.l-odd a.BEST_LAY_ODD_BUTTON:hover + { + background: #feaac0 !important; +} + +.single_event_list span.l-odd:nth-child(odd) { + margin-right: 6px; +} + +.single_event_list span.l-odd:first-child { + margin-right: -2px; +} + +._cancel_unmatch { + text-align: right; + color: #feaac0; + margin-top: 4px; +} + +._cancel_unmatch:hover { + color: #666; +} + +.__view_full_pos { + color: #09f; + font-size: 11px; + text-align: left; + padding: 5px 0; + margin-left: 5px; + float: left; +} + +.list_title_1 { + clear: both; + margin: 4px 0; + padding-top: 5px; + overflow: hidden; +} + +.event_title_type { + float: right; + margin-right: -1px; +} + +.event_title_type span { + display: inline-block; + width: 86px; + text-align: center; + float: none !important; + margin-left: 4px; + font-size: 11px; + color: #7e97a7; +} + +.bets_history #__error_message { + color: #fff !important; +} + +.matrix_lottery .matchwin { + padding: 10px; + display: block; + font-weight: bold; + color: #3b5998; + font-size: 11px; +} + +.matrix_lottery .matchwin span { + font-size: 16px; + color: red; +} + +#__mybet_list .max { + background: url(../images/mdg_sprite.png) no-repeat 0 -903px !important; + width: 13px !important; + height: 13px !important; + display: block !important; + margin-top: 6px !important; +} + +#__mybet_list h1 span,#__mybet_list h2 span { + background: url(../images/mdg_sprite.png) no-repeat 0 -890px !important; + width: 13px !important; + height: 13px !important; + display: block !important; + margin-top: 6px !important; +} + +#__fixed_odd_value_container #__best_odd_value_list .b-name { + width: 430px; +} + +#__fixed_odd_value_container .b-name-info { + width: 465px; +} + +#__fixed_odd_value_container #__best_odd_value_list li .bestodd_back { + margin-right: 5px; +} + +#__fixed_odd_value_container #__best_odd_value_list li { + overflow: hidden; + line-height: 10px !important; +} + +#__fixed_odd_value_container #__best_odd_value_list #_right_flg { + margin-top: 13px !important; +} + +#__fixed_odd_value_container .handiCap { + margin-top: 2px; +} + +#__fixed_odd_value_container .exchange_odd { + float: none; +} + +.event_fixed_odd .single_event_list span.l-odd:nth-child(2n+1) { + margin-right: 0; +} + +.event_fixed_odd .event_title_type { + margin-right: 1px; +} + +.event_fixed_odd .event_title_type span { + width: 40px; + margin-left: 1px; +} + +.event_fixed_odd .bets li span { + margin: 3px 0; +} + +.cancel_unmatch { + width: 100% !important; +} + +.bet1x2ViewId { + background: #f9f9f9 !important; +} \ No newline at end of file diff --git a/WebContent/exception/system_exception.jsp b/WebContent/exception/system_exception.jsp new file mode 100644 index 0000000..67f16d1 --- /dev/null +++ b/WebContent/exception/system_exception.jsp @@ -0,0 +1,14 @@ +<%@ taglib prefix="s" uri="/struts-tags"%> + + +
+
+
+
   The system has been shutdown, please wait a + moment! + <% + Exception exception = (Exception) request.getAttribute("exception"); + //exception.printStackTrace(response.getWriter()); + %> + \ No newline at end of file diff --git a/WebContent/index.jsp b/WebContent/index.jsp new file mode 100644 index 0000000..3336cb6 --- /dev/null +++ b/WebContent/index.jsp @@ -0,0 +1,3 @@ +<%@ taglib prefix="s" uri="/struts-tags"%> +1">Show +manh">Find by name \ No newline at end of file diff --git a/WebContent/js/jquery-1.7.1.js b/WebContent/js/jquery-1.7.1.js new file mode 100644 index 0000000..5a88984 --- /dev/null +++ b/WebContent/js/jquery-1.7.1.js @@ -0,0 +1,9806 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(window, undefined) { + + // Use the correct document accordingly with window argument (sandbox) + var document = window.document, navigator = window.navigator, location = window.location; + var jQuery = (function() { + + // Define a local copy of jQuery + var jQuery = function(selector, context) { + // The jQuery object is actually just the init constructor + // 'enhanced' + return new jQuery.fn.init(selector, context, rootjQuery); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, rmsie = /(msie) ([\w.]+)/, rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function(all, letter) { + return (letter + "").toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, hasOwn = Object.prototype.hasOwnProperty, push = Array.prototype.push, slice = Array.prototype.slice, trim = String.prototype.trim, indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + + jQuery.fn = jQuery.prototype = { + constructor : jQuery, + init : function(selector, context, rootjQuery) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if (!selector) { + return this; + } + + // Handle $(DOMElement) + if (selector.nodeType) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if (selector === "body" && !context && document.body) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if (typeof selector === "string") { + // Are we dealing with HTML string or an ID? + if (selector.charAt(0) === "<" + && selector.charAt(selector.length - 1) === ">" + && selector.length >= 3) { + // Assume that strings that start and end with <> are + // HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec(selector); + } + + // Verify a match, and that no context was specified for #id + if (match && (match[1] || !context)) { + + // HANDLE: $(html) -> $(array) + if (match[1]) { + context = context instanceof jQuery ? context[0] + : context; + doc = (context ? context.ownerDocument || context + : document); + + // If a single string is passed in and it's a single + // tag + // just do a createElement and skip the rest + ret = rsingleTag.exec(selector); + + if (ret) { + if (jQuery.isPlainObject(context)) { + selector = [ document.createElement(ret[1]) ]; + jQuery.fn.attr + .call(selector, context, true); + + } else { + selector = [ doc.createElement(ret[1]) ]; + } + + } else { + ret = jQuery.buildFragment([ match[1] ], + [ doc ]); + selector = (ret.cacheable ? jQuery + .clone(ret.fragment) : ret.fragment).childNodes; + } + + return jQuery.merge(this, selector); + + // HANDLE: $("#id") + } else { + elem = document.getElementById(match[2]); + + // Check parentNode to catch when Blackberry 4.6 + // returns + // nodes that are no longer in the document #6963 + if (elem && elem.parentNode) { + // Handle the case where IE and Opera return + // items + // by name instead of ID + if (elem.id !== match[2]) { + return rootjQuery.find(selector); + } + + // Otherwise, we inject the element directly + // into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if (!context || context.jquery) { + return (context || rootjQuery).find(selector); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor(context).find(selector); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if (jQuery.isFunction(selector)) { + return rootjQuery.ready(selector); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray(selector, this); + }, + + // Start with an empty selector + selector : "", + + // The current version of jQuery being used + jquery : "1.7.1", + + // The default length of a jQuery object is 0 + length : 0, + + // The number of elements contained in the matched element set + size : function() { + return this.length; + }, + + toArray : function() { + return slice.call(this, 0); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get : function(num) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + (num < 0 ? this[this.length + num] : this[num]); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack : function(elems, name, selector) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if (jQuery.isArray(elems)) { + push.apply(ret, elems); + + } else { + jQuery.merge(ret, elems); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if (name === "find") { + ret.selector = this.selector + (this.selector ? " " : "") + + selector; + } else if (name) { + ret.selector = this.selector + "." + name + "(" + selector + + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each : function(callback, args) { + return jQuery.each(this, callback, args); + }, + + ready : function(fn) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add(fn); + + return this; + }, + + eq : function(i) { + i = +i; + return i === -1 ? this.slice(i) : this.slice(i, i + 1); + }, + + first : function() { + return this.eq(0); + }, + + last : function() { + return this.eq(-1); + }, + + slice : function() { + return this.pushStack(slice.apply(this, arguments), "slice", + slice.call(arguments).join(",")); + }, + + map : function(callback) { + return this.pushStack(jQuery.map(this, function(elem, i) { + return callback.call(elem, i, elem); + })); + }, + + end : function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push : push, + sort : [].sort, + splice : [].splice + }; + + // Give the init function the jQuery prototype for later instantiation + jQuery.fn.init.prototype = jQuery.fn; + + jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, target = arguments[0] + || {}, i = 1, length = arguments.length, deep = false; + + // Handle a deep copy situation + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in + // deep copy) + if (typeof target !== "object" && !jQuery.isFunction(target)) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if (length === i) { + target = this; + --i; + } + + for (; i < length; i++) { + // Only deal with non-null/undefined values + if ((options = arguments[i]) != null) { + // Extend the base object + for (name in options) { + src = target[name]; + copy = options[name]; + + // Prevent never-ending loop + if (target === copy) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if (deep + && copy + && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery + .isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src + : {}; + } + + // Never move original objects, clone them + target[name] = jQuery.extend(deep, clone, copy); + + // Don't bring in undefined values + } else if (copy !== undefined) { + target[name] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + + jQuery + .extend({ + noConflict : function(deep) { + if (window.$ === jQuery) { + window.$ = _$; + } + + if (deep && window.jQuery === jQuery) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady : false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait : 1, + + // Hold (or release) the ready event + holdReady : function(hold) { + if (hold) { + jQuery.readyWait++; + } else { + jQuery.ready(true); + } + }, + + // Handle when the DOM is ready + ready : function(wait) { + // Either a released hold or an DOMready/load event and + // not yet ready + if ((wait === true && !--jQuery.readyWait) + || (wait !== true && !jQuery.isReady)) { + // Make sure body exists, at least, in case IE gets + // a little overzealous (ticket #5443). + if (!document.body) { + return setTimeout(jQuery.ready, 1); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and + // wait if need be + if (wait !== true && --jQuery.readyWait > 0) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith(document, [ jQuery ]); + + // Trigger any bound ready events + if (jQuery.fn.trigger) { + jQuery(document).trigger("ready").off("ready"); + } + } + }, + + bindReady : function() { + if (readyList) { + return; + } + + readyList = jQuery.Callbacks("once memory"); + + // Catch cases where $(document).ready() is called after + // the + // browser event has already occurred. + if (document.readyState === "complete") { + // Handle it asynchronously to allow scripts the + // opportunity to delay ready + return setTimeout(jQuery.ready, 1); + } + + // Mozilla, Opera and webkit nightlies currently support + // this event + if (document.addEventListener) { + // Use the handy event callback + document.addEventListener("DOMContentLoaded", + DOMContentLoaded, false); + + // A fallback to window.onload, that will always + // work + window + .addEventListener("load", jQuery.ready, + false); + + // If IE event model is used + } else if (document.attachEvent) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent("onreadystatechange", + DOMContentLoaded); + + // A fallback to window.onload, that will always + // work + window.attachEvent("onload", jQuery.ready); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch (e) { + } + + if (document.documentElement.doScroll && toplevel) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction : function(obj) { + return jQuery.type(obj) === "function"; + }, + + isArray : Array.isArray || function(obj) { + return jQuery.type(obj) === "array"; + }, + + // A crude way of determining if an object is a window + isWindow : function(obj) { + return obj && typeof obj === "object" + && "setInterval" in obj; + }, + + isNumeric : function(obj) { + return !isNaN(parseFloat(obj)) && isFinite(obj); + }, + + type : function(obj) { + return obj == null ? String(obj) : class2type[toString + .call(obj)] + || "object"; + }, + + isPlainObject : function(obj) { + // Must be an Object. + // Because of IE, we also have to check the presence of + // the constructor property. + // Make sure that DOM nodes and window objects don't + // pass through, as well + if (!obj || jQuery.type(obj) !== "object" + || obj.nodeType || jQuery.isWindow(obj)) { + return false; + } + + try { + // Not own constructor property must be Object + if (obj.constructor + && !hasOwn.call(obj, "constructor") + && !hasOwn.call(obj.constructor.prototype, + "isPrototypeOf")) { + return false; + } + } catch (e) { + // IE8,9 Will throw exceptions on certain host + // objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed + // up, + // if last one is own, then all properties are own. + + var key; + for (key in obj) { + } + + return key === undefined || hasOwn.call(obj, key); + }, + + isEmptyObject : function(obj) { + for ( var name in obj) { + return false; + } + return true; + }, + + error : function(msg) { + throw new Error(msg); + }, + + parseJSON : function(data) { + if (typeof data !== "string" || !data) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE + // can't handle it) + data = jQuery.trim(data); + + // Attempt to parse using the native JSON parser first + if (window.JSON && window.JSON.parse) { + return window.JSON.parse(data); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if (rvalidchars.test(data.replace(rvalidescape, "@") + .replace(rvalidtokens, "]").replace( + rvalidbraces, ""))) { + + return (new Function("return " + data))(); + + } + jQuery.error("Invalid JSON: " + data); + }, + + // Cross-browser xml parsing + parseXML : function(data) { + var xml, tmp; + try { + if (window.DOMParser) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString(data, "text/xml"); + } else { // IE + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = "false"; + xml.loadXML(data); + } + } catch (e) { + xml = undefined; + } + if (!xml + || !xml.documentElement + || xml.getElementsByTagName("parsererror").length) { + jQuery.error("Invalid XML: " + data); + } + return xml; + }, + + noop : function() { + }, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval : function(data) { + if (data && rnotwhite.test(data)) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is + // window + // rather than jQuery in Firefox + (window.execScript || function(data) { + window["eval"].call(window, data); + })(data); + } + }, + + // Convert dashed to camelCase; used by the css and data + // modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase : function(string) { + return string.replace(rmsPrefix, "ms-").replace( + rdashAlpha, fcamelCase); + }, + + nodeName : function(elem, name) { + return elem.nodeName + && elem.nodeName.toUpperCase() === name + .toUpperCase(); + }, + + // args is for internal usage only + each : function(object, callback, args) { + var name, i = 0, length = object.length, isObj = length === undefined + || jQuery.isFunction(object); + + if (args) { + if (isObj) { + for (name in object) { + if (callback.apply(object[name], args) === false) { + break; + } + } + } else { + for (; i < length;) { + if (callback.apply(object[i++], args) === false) { + break; + } + } + } + + // A special, fast, case for the most common use of + // each + } else { + if (isObj) { + for (name in object) { + if (callback.call(object[name], name, + object[name]) === false) { + break; + } + } + } else { + for (; i < length;) { + if (callback + .call(object[i], i, object[i++]) === false) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim : trim ? function(text) { + return text == null ? "" : trim.call(text); + } : + + // Otherwise use our own trimming functionality + function(text) { + return text == null ? "" : text.toString().replace( + trimLeft, "").replace(trimRight, ""); + }, + + // results is for internal usage only + makeArray : function(array, results) { + var ret = results || []; + + if (array != null) { + // The window, strings (and functions) also have + // 'length' + // Tweaked logic slightly to handle Blackberry 4.7 + // RegExp issues #6930 + var type = jQuery.type(array); + + if (array.length == null || type === "string" + || type === "function" || type === "regexp" + || jQuery.isWindow(array)) { + push.call(ret, array); + } else { + jQuery.merge(ret, array); + } + } + + return ret; + }, + + inArray : function(elem, array, i) { + var len; + + if (array) { + if (indexOf) { + return indexOf.call(array, elem, i); + } + + len = array.length; + i = i ? i < 0 ? Math.max(0, len + i) : i : 0; + + for (; i < len; i++) { + // Skip accessing in sparse arrays + if (i in array && array[i] === elem) { + return i; + } + } + } + + return -1; + }, + + merge : function(first, second) { + var i = first.length, j = 0; + + if (typeof second.length === "number") { + for (var l = second.length; j < l; j++) { + first[i++] = second[j]; + } + + } else { + while (second[j] !== undefined) { + first[i++] = second[j++]; + } + } + + first.length = i; + + return first; + }, + + grep : function(elems, callback, inv) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for (var i = 0, length = elems.length; i < length; i++) { + retVal = !!callback(elems[i], i); + if (inv !== retVal) { + ret.push(elems[i]); + } + } + + return ret; + }, + + // arg is for internal usage only + map : function(elems, callback, arg) { + var value, key, ret = [], i = 0, length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery + || length !== undefined + && typeof length === "number" + && ((length > 0 && elems[0] && elems[length - 1]) + || length === 0 || jQuery + .isArray(elems)); + + // Go through the array, translating each of the items + // to their + if (isArray) { + for (; i < length; i++) { + value = callback(elems[i], i, arg); + + if (value != null) { + ret[ret.length] = value; + } + } + + // Go through every key on the object, + } else { + for (key in elems) { + value = callback(elems[key], key, arg); + + if (value != null) { + ret[ret.length] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply([], ret); + }, + + // A global GUID counter for objects + guid : 1, + + // Bind a function to a context, optionally partially + // applying any + // arguments. + proxy : function(fn, context) { + if (typeof context === "string") { + var tmp = fn[context]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in + // the spec + // this throws a TypeError, but we will just return + // undefined. + if (!jQuery.isFunction(fn)) { + return undefined; + } + + // Simulated bind + var args = slice.call(arguments, 2), proxy = function() { + return fn.apply(context, args.concat(slice + .call(arguments))); + }; + + // Set the guid of unique handler to the same of + // original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid + || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a + // collection + // The value/s can optionally be executed if it's a function + access : function(elems, key, value, exec, fn, pass) { + var length = elems.length; + + // Setting many attributes + if (typeof key === "object") { + for ( var k in key) { + jQuery + .access(elems, k, key[k], exec, fn, + value); + } + return elems; + } + + // Setting one attribute + if (value !== undefined) { + // Optionally, function values get executed if exec + // is true + exec = !pass && exec && jQuery.isFunction(value); + + for (var i = 0; i < length; i++) { + fn(elems[i], key, exec ? value.call(elems[i], + i, fn(elems[i], key)) : value, pass); + } + + return elems; + } + + // Getting an attribute + return length ? fn(elems[0], key) : undefined; + }, + + now : function() { + return (new Date()).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: + // http://docs.jquery.com/Utilities/jQuery.browser + uaMatch : function(ua) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec(ua) || ropera.exec(ua) + || rmsie.exec(ua) + || ua.indexOf("compatible") < 0 + && rmozilla.exec(ua) || []; + + return { + browser : match[1] || "", + version : match[2] || "0" + }; + }, + + sub : function() { + function jQuerySub(selector, context) { + return new jQuerySub.fn.init(selector, context); + } + jQuery.extend(true, jQuerySub, this); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init(selector, context) { + if (context && context instanceof jQuery + && !(context instanceof jQuerySub)) { + context = jQuerySub(context); + } + + return jQuery.fn.init.call(this, selector, context, + rootjQuerySub); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser : {} + }); + + // Populate the class2type map + jQuery.each("Boolean Number String Function Array Date RegExp Object" + .split(" "), function(i, name) { + class2type["[object " + name + "]"] = name.toLowerCase(); + }); + + browserMatch = jQuery.uaMatch(userAgent); + if (browserMatch.browser) { + jQuery.browser[browserMatch.browser] = true; + jQuery.browser.version = browserMatch.version; + } + + // Deprecated, use jQuery.browser.webkit instead + if (jQuery.browser.webkit) { + jQuery.browser.safari = true; + } + + // IE doesn't match non-breaking spaces with \s + if (rnotwhite.test("\xA0")) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; + } + + // All jQuery objects should point back to these + rootjQuery = jQuery(document); + + // Cleanup functions for the document ready method + if (document.addEventListener) { + DOMContentLoaded = function() { + document.removeEventListener("DOMContentLoaded", + DOMContentLoaded, false); + jQuery.ready(); + }; + + } else if (document.attachEvent) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little + // overzealous (ticket #5443). + if (document.readyState === "complete") { + document + .detachEvent("onreadystatechange", DOMContentLoaded); + jQuery.ready(); + } + }; + } + + // The DOM ready check for Internet Explorer + function doScrollCheck() { + if (jQuery.isReady) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch (e) { + setTimeout(doScrollCheck, 1); + return; + } + + // and execute any waiting functions + jQuery.ready(); + } + + return jQuery; + + })(); + + // String to Object flags format cache + var flagsCache = {}; + + // Convert String-formatted flags into Object-formatted ones and store in + // cache + function createFlags(flags) { + var object = flagsCache[flags] = {}, i, length; + flags = flags.split(/\s+/); + for (i = 0, length = flags.length; i < length; i++) { + object[flags[i]] = true; + } + return object; + } + + /* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how the + * callback list behaves + * + * By default a callback list will act like an event callback list and can + * be "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a + * Deferred) + * + * memory: will keep track of previous values and will call any callback + * added after the list has been fired right away with the latest + * "memorized" values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in + * the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ + jQuery.Callbacks = function(flags) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? (flagsCache[flags] || createFlags(flags)) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function(args) { + var i, length, elem, type, actual; + for (i = 0, length = args.length; i < length; i++) { + elem = args[i]; + type = jQuery.type(elem); + if (type === "array") { + // Inspect recursively + add(elem); + } else if (type === "function") { + // Add if not in unique mode and callback is not in + if (!flags.unique || !self.has(elem)) { + list.push(elem); + } + } + } + }, + // Fire callbacks + fire = function(context, args) { + args = args || []; + memory = !flags.memory || [ context, args ]; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for (; list && firingIndex < firingLength; firingIndex++) { + if (list[firingIndex].apply(context, args) === false + && flags.stopOnFalse) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if (list) { + if (!flags.once) { + if (stack && stack.length) { + memory = stack.shift(); + self.fireWith(memory[0], memory[1]); + } + } else if (memory === true) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add : function() { + if (list) { + var length = list.length; + add(arguments); + // Do we need to add the callbacks to the + // current firing batch? + if (firing) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if (memory && memory !== true) { + firingStart = length; + fire(memory[0], memory[1]); + } + } + return this; + }, + // Remove a callback from the list + remove : function() { + if (list) { + var args = arguments, argIndex = 0, argLength = args.length; + for (; argIndex < argLength; argIndex++) { + for (var i = 0; i < list.length; i++) { + if (args[argIndex] === list[i]) { + // Handle firingIndex and firingLength + if (firing) { + if (i <= firingLength) { + firingLength--; + if (i <= firingIndex) { + firingIndex--; + } + } + } + // Remove the element + list.splice(i--, 1); + // If we have some unicity property then + // we only need to do this once + if (flags.unique) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has : function(fn) { + if (list) { + var i = 0, length = list.length; + for (; i < length; i++) { + if (fn === list[i]) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty : function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable : function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled : function() { + return !list; + }, + // Lock the list in its current state + lock : function() { + stack = undefined; + if (!memory || memory === true) { + self.disable(); + } + return this; + }, + // Is it locked? + locked : function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith : function(context, args) { + if (stack) { + if (firing) { + if (!flags.once) { + stack.push([ context, args ]); + } + } else if (!(flags.once && memory)) { + fire(context, args); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire : function() { + self.fireWith(this, arguments); + return this; + }, + // To know if the callbacks have already been called at least once + fired : function() { + return !!memory; + } + }; + + return self; + }; + + var // Static reference to slice + sliceDeferred = [].slice; + + jQuery + .extend({ + + Deferred : function(func) { + var doneList = jQuery.Callbacks("once memory"), failList = jQuery + .Callbacks("once memory"), progressList = jQuery + .Callbacks("memory"), state = "pending", lists = { + resolve : doneList, + reject : failList, + notify : progressList + }, promise = { + done : doneList.add, + fail : failList.add, + progress : progressList.add, + + state : function() { + return state; + }, + + // Deprecated + isResolved : doneList.fired, + isRejected : failList.fired, + + then : function(doneCallbacks, failCallbacks, + progressCallbacks) { + deferred.done(doneCallbacks).fail(failCallbacks) + .progress(progressCallbacks); + return this; + }, + always : function() { + deferred.done.apply(deferred, arguments).fail + .apply(deferred, arguments); + return this; + }, + pipe : function(fnDone, fnFail, fnProgress) { + return jQuery + .Deferred( + function(newDefer) { + jQuery + .each( + { + done : [ + fnDone, + "resolve" ], + fail : [ + fnFail, + "reject" ], + progress : [ + fnProgress, + "notify" ] + }, + function( + handler, + data) { + var fn = data[0], action = data[1], returned; + if (jQuery + .isFunction(fn)) { + deferred[handler] + (function() { + returned = fn + .apply( + this, + arguments); + if (returned + && jQuery + .isFunction(returned.promise)) { + returned + .promise() + .then( + newDefer.resolve, + newDefer.reject, + newDefer.notify); + } else { + newDefer[action + + "With"] + ( + this === deferred ? newDefer + : this, + [ returned ]); + } + }); + } else { + deferred[handler] + (newDefer[action]); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to + // the object + promise : function(obj) { + if (obj == null) { + obj = promise; + } else { + for ( var key in promise) { + obj[key] = promise[key]; + } + } + return obj; + } + }, deferred = promise.promise({}), key; + + for (key in lists) { + deferred[key] = lists[key].fire; + deferred[key + "With"] = lists[key].fireWith; + } + + // Handle state + deferred.done(function() { + state = "resolved"; + }, failList.disable, progressList.lock).fail(function() { + state = "rejected"; + }, doneList.disable, progressList.lock); + + // Call given func if any + if (func) { + func.call(deferred, deferred); + } + + // All done! + return deferred; + }, + + // Deferred helper + when : function(firstParam) { + var args = sliceDeferred.call(arguments, 0), i = 0, length = args.length, pValues = new Array( + length), count = length, pCount = length, deferred = length <= 1 + && firstParam + && jQuery.isFunction(firstParam.promise) ? firstParam + : jQuery.Deferred(), promise = deferred.promise(); + function resolveFunc(i) { + return function(value) { + args[i] = arguments.length > 1 ? sliceDeferred + .call(arguments, 0) : value; + if (!(--count)) { + deferred.resolveWith(deferred, args); + } + }; + } + function progressFunc(i) { + return function(value) { + pValues[i] = arguments.length > 1 ? sliceDeferred + .call(arguments, 0) : value; + deferred.notifyWith(promise, pValues); + }; + } + if (length > 1) { + for (; i < length; i++) { + if (args[i] && args[i].promise + && jQuery.isFunction(args[i].promise)) { + args[i].promise().then(resolveFunc(i), + deferred.reject, progressFunc(i)); + } else { + --count; + } + } + if (!count) { + deferred.resolveWith(deferred, args); + } + } else if (deferred !== firstParam) { + deferred.resolveWith(deferred, length ? [ firstParam ] + : []); + } + return promise; + } + }); + + jQuery.support = (function() { + + var support, all, a, select, opt, input, marginDiv, fragment, tds, events, eventName, i, isSupported, div = document + .createElement("div"), documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
a"; + + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[0]; + + // Can't get basic test support + if (!all || !all.length || !a) { + return {}; + } + + // First batch of supports tests + select = document.createElement("select"); + opt = select.appendChild(document.createElement("option")); + input = div.getElementsByTagName("input")[0]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace : (div.firstChild.nodeType === 3), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody : !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by + // innerHTML + // This requires a wrapper element in IE + htmlSerialize : !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style : /top/.test(a.getAttribute("style")), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized : (a.getAttribute("href") === "/a"), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity : /^0.55/.test(a.style.opacity), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat : !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn : (input.value === "on"), + + // Make sure that a selected-by-default option has a working + // selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an + // optgroup) + optSelected : opt.selected, + + // Test setAttribute on camelCase class. If it works, we need + // attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute : div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype : !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone : document.createElement("nav").cloneNode(true).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles : true, + changeBubbles : true, + focusinBubbles : false, + deleteExpando : true, + noCloneEvent : true, + inlineBlockNeedsLayout : false, + shrinkWrapBlocks : false, + reliableMarginRight : true + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode(true).checked; + + // Make sure that the options inside disabled selects aren't marked as + // disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch (e) { + support.deleteExpando = false; + } + + if (!div.addEventListener && div.attachEvent && div.fireEvent) { + div.attachEvent("onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode(true).fireEvent("onclick"); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + div.appendChild(input); + fragment = document.createDocumentFragment(); + fragment.appendChild(div.lastChild); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild(input); + fragment.appendChild(div); + + div.innerHTML = ""; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for + // margin-right + if (window.getComputedStyle) { + marginDiv = document.createElement("div"); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild(marginDiv); + support.reliableMarginRight = (parseInt((window.getComputedStyle( + marginDiv, null) || { + marginRight : 0 + }).marginRight, 10) || 0) === 0; + } + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if (div.attachEvent) { + for (i in { + submit : 1, + change : 1, + focusin : 1 + }) { + eventName = "on" + i; + isSupported = (eventName in div); + if (!isSupported) { + div.setAttribute(eventName, "return;"); + isSupported = (typeof div[eventName] === "function"); + } + support[i + "Bubbles"] = isSupported; + } + } + + fragment.removeChild(div); + + // Null elements to avoid leaks in IE + fragment = select = opt = marginDiv = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, conMarginTop, ptlm, vb, style, html, body = document + .getElementsByTagName("body")[0]; + + if (!body) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;"; + vb = "visibility:hidden;border:0;"; + style = "style='" + ptlm + "border:5px solid #000;padding:0;'"; + html = "
" + "" + + "
"; + + container = document.createElement("div"); + container.style.cssText = vb + + "width:0;height:0;position:static;top:0;margin-top:" + + conMarginTop + "px"; + body.insertBefore(container, body.firstChild); + + // Construct the test element + div = document.createElement("div"); + container.appendChild(div); + + // Check if table cells still have offsetWidth/Height when they are + // set + // to display:none and there are still other visible table cells in + // a + // table row; if so, offsetWidth/Height are not reliable for use + // when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element + // is + // hidden; don safety goggles and see bug #4512 for more + // information). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + tds = div.getElementsByTagName("td"); + isSupported = (tds[0].offsetHeight === 0); + + tds[0].style.display = ""; + tds[1].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported + && (tds[0].offsetHeight === 0); + + // Figure out if the W3C box model works as expected + div.innerHTML = ""; + div.style.width = div.style.paddingLeft = "1px"; + jQuery.boxModel = support.boxModel = div.offsetWidth === 2; + + if (typeof div.style.zoom !== "undefined") { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = (div.offsetWidth === 2); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
"; + support.shrinkWrapBlocks = (div.offsetWidth !== 2); + } + + div.style.cssText = ptlm + vb; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder : (inner.offsetTop !== 5), + doesAddBorderForTableAndCells : (td.offsetTop === 5) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = (inner.offsetTop === 20 || inner.offsetTop === 15); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = (inner.offsetTop === -5); + offsetSupport.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== conMarginTop); + + body.removeChild(container); + div = container = null; + + jQuery.extend(support, offsetSupport); + }); + + return support; + })(); + + var rbrace = /^(?:\{.*\}|\[.*\])$/, rmultiDash = /([A-Z])/g; + + jQuery + .extend({ + cache : {}, + + // Please use with caution + uuid : 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando : "jQuery" + + (jQuery.fn.jquery + Math.random()).replace(/\D/g, ""), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData : { + "embed" : true, + // Ban all objects except for Flash (which handle expandos) + "object" : "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet" : true + }, + + hasData : function(elem) { + elem = elem.nodeType ? jQuery.cache[elem[jQuery.expando]] + : elem[jQuery.expando]; + return !!elem && !isEmptyDataObject(elem); + }, + + data : function(elem, name, data, pvt /* Internal Use Only */) { + if (!jQuery.acceptData(elem)) { + return; + } + + var privateCache, thisCache, ret, internalKey = jQuery.expando, getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently + // because IE6-7 + // can't GC object references properly across the DOM-JS + // boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object + // data is + // attached directly to the object so GC can occur + // automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already + // exists allows + // the code to shortcut on the same path as a DOM node with + // no cache + id = isNode ? elem[internalKey] : elem[internalKey] + && internalKey, isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to + // get data on an + // object that has no data at all + if ((!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) + && getByName && data === undefined) { + return; + } + + if (!id) { + // Only DOM nodes need a new unique ID for each element + // since their data + // ends up in the global cache + if (isNode) { + elem[internalKey] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if (!cache[id]) { + cache[id] = {}; + + // Avoids exposing jQuery metadata on plain JS objects + // when the object + // is serialized using JSON.stringify + if (!isNode) { + cache[id].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a + // key/value pair; this gets + // shallow copied over onto the existing cache + if (typeof name === "object" || typeof name === "function") { + if (pvt) { + cache[id] = jQuery.extend(cache[id], name); + } else { + cache[id].data = jQuery + .extend(cache[id].data, name); + } + } + + privateCache = thisCache = cache[id]; + + // jQuery data() is stored in a separate object inside the + // object's internal data + // cache in order to avoid key collisions between internal + // data and user-defined + // data. + if (!pvt) { + if (!thisCache.data) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if (data !== undefined) { + thisCache[jQuery.camelCase(name)] = data; + } + + // Users should not attempt to inspect the internal events + // object using jQuery.data, + // it is undocumented and subject to change. But does anyone + // listen? No. + if (isEvents && !thisCache[name]) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data + // property names + // If a data property was specified + if (getByName) { + + // First Try to find as-is property data + ret = thisCache[name]; + + // Test for null|undefined property data + if (ret == null) { + + // Try to find the camelCased property + ret = thisCache[jQuery.camelCase(name)]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData : function(elem, name, pvt /* Internal Use Only */) { + if (!jQuery.acceptData(elem)) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[internalKey] : internalKey; + + // If there is already no cache entry for this object, there + // is no + // purpose in continuing + if (!cache[id]) { + return; + } + + if (name) { + + thisCache = pvt ? cache[id] : cache[id].data; + + if (thisCache) { + + // Support array or space separated string names for + // data keys + if (!jQuery.isArray(name)) { + + // try the string as a key before any + // manipulation + if (name in thisCache) { + name = [ name ]; + } else { + + // split the camel cased version by spaces + // unless a key with the spaces exists + name = jQuery.camelCase(name); + if (name in thisCache) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } + + for (i = 0, l = name.length; i < l; i++) { + delete thisCache[name[i]]; + } + + // If there is no data left in the cache, we want to + // continue + // and let the cache object itself get destroyed + if (!(pvt ? isEmptyDataObject + : jQuery.isEmptyObject)(thisCache)) { + return; + } + } + } + + // See jQuery.data for more information + if (!pvt) { + delete cache[id].data; + + // Don't destroy the parent cache unless the internal + // data object + // had been the only thing left in it + if (!isEmptyDataObject(cache[id])) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete + // expandos on + // the window, but it will allow it on all other JS objects; + // other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if (jQuery.support.deleteExpando || !cache.setInterval) { + delete cache[id]; + } else { + cache[id] = null; + } + + // We destroyed the cache and need to eliminate the expando + // on the node to avoid + // false lookups in the cache for entries that no longer + // exist + if (isNode) { + // IE does not allow us to delete expando properties + // from nodes, + // nor does it have a removeAttribute function on + // Document nodes; + // we must handle all of these cases + if (jQuery.support.deleteExpando) { + delete elem[internalKey]; + } else if (elem.removeAttribute) { + elem.removeAttribute(internalKey); + } else { + elem[internalKey] = null; + } + } + }, + + // For internal use only. + _data : function(elem, name, data) { + return jQuery.data(elem, name, data, true); + }, + + // A method for determining if a DOM node can handle the data + // expando + acceptData : function(elem) { + if (elem.nodeName) { + var match = jQuery.noData[elem.nodeName.toLowerCase()]; + + if (match) { + return !(match === true || elem + .getAttribute("classid") !== match); + } + } + + return true; + } + }); + + jQuery.fn.extend({ + data : function(key, value) { + var parts, attr, name, data = null; + + if (typeof key === "undefined") { + if (this.length) { + data = jQuery.data(this[0]); + + if (this[0].nodeType === 1 + && !jQuery._data(this[0], "parsedAttrs")) { + attr = this[0].attributes; + for (var i = 0, l = attr.length; i < l; i++) { + name = attr[i].name; + + if (name.indexOf("data-") === 0) { + name = jQuery.camelCase(name.substring(5)); + + dataAttr(this[0], name, data[name]); + } + } + jQuery._data(this[0], "parsedAttrs", true); + } + } + + return data; + + } else if (typeof key === "object") { + return this.each(function() { + jQuery.data(this, key); + }); + } + + parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if (value === undefined) { + data = this.triggerHandler("getData" + parts[1] + "!", + [ parts[0] ]); + + // Try to fetch any internally stored data first + if (data === undefined && this.length) { + data = jQuery.data(this[0], key); + data = dataAttr(this[0], key, data); + } + + return data === undefined && parts[1] ? this.data(parts[0]) + : data; + + } else { + return this.each(function() { + var self = jQuery(this), args = [ parts[0], value ]; + + self.triggerHandler("setData" + parts[1] + "!", args); + jQuery.data(this, key, value); + self.triggerHandler("changeData" + parts[1] + "!", args); + }); + } + }, + + removeData : function(key) { + return this.each(function() { + jQuery.removeData(this, key); + }); + } + }); + + function dataAttr(elem, key, data) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if (data === undefined && elem.nodeType === 1) { + + var name = "data-" + key.replace(rmultiDash, "-$1").toLowerCase(); + + data = elem.getAttribute(name); + + if (typeof data === "string") { + try { + data = data === "true" ? true : data === "false" ? false + : data === "null" ? null + : jQuery.isNumeric(data) ? parseFloat(data) + : rbrace.test(data) ? jQuery + .parseJSON(data) : data; + } catch (e) { + } + + // Make sure we set the data so it isn't changed later + jQuery.data(elem, key, data); + + } else { + data = undefined; + } + } + + return data; + } + + // checks a cache object for emptiness + function isEmptyDataObject(obj) { + for ( var name in obj) { + + // if the public data object is empty, the private is still empty + if (name === "data" && jQuery.isEmptyObject(obj[name])) { + continue; + } + if (name !== "toJSON") { + return false; + } + } + + return true; + } + + function handleQueueMarkDefer(elem, type, src) { + var deferDataKey = type + "defer", queueDataKey = type + "queue", markDataKey = type + + "mark", defer = jQuery._data(elem, deferDataKey); + if (defer && (src === "queue" || !jQuery._data(elem, queueDataKey)) + && (src === "mark" || !jQuery._data(elem, markDataKey))) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout(function() { + if (!jQuery._data(elem, queueDataKey) + && !jQuery._data(elem, markDataKey)) { + jQuery.removeData(elem, deferDataKey, true); + defer.fire(); + } + }, 0); + } + } + + jQuery + .extend({ + + _mark : function(elem, type) { + if (elem) { + type = (type || "fx") + "mark"; + jQuery._data(elem, type, + (jQuery._data(elem, type) || 0) + 1); + } + }, + + _unmark : function(force, elem, type) { + if (force !== true) { + type = elem; + elem = force; + force = false; + } + if (elem) { + type = type || "fx"; + var key = type + "mark", count = force ? 0 : ((jQuery + ._data(elem, key) || 1) - 1); + if (count) { + jQuery._data(elem, key, count); + } else { + jQuery.removeData(elem, key, true); + handleQueueMarkDefer(elem, type, "mark"); + } + } + }, + + queue : function(elem, type, data) { + var q; + if (elem) { + type = (type || "fx") + "queue"; + q = jQuery._data(elem, type); + + // Speed up dequeue by getting out quickly if this is + // just a lookup + if (data) { + if (!q || jQuery.isArray(data)) { + q = jQuery._data(elem, type, jQuery + .makeArray(data)); + } else { + q.push(data); + } + } + return q || []; + } + }, + + dequeue : function(elem, type) { + type = type || "fx"; + + var queue = jQuery.queue(elem, type), fn = queue.shift(), hooks = {}; + + // If the fx queue is dequeued, always remove the progress + // sentinel + if (fn === "inprogress") { + fn = queue.shift(); + } + + if (fn) { + // Add a progress sentinel to prevent the fx queue from + // being + // automatically dequeued + if (type === "fx") { + queue.unshift("inprogress"); + } + + jQuery._data(elem, type + ".run", hooks); + fn.call(elem, function() { + jQuery.dequeue(elem, type); + }, hooks); + } + + if (!queue.length) { + jQuery.removeData(elem, + type + "queue " + type + ".run", true); + handleQueueMarkDefer(elem, type, "queue"); + } + } + }); + + jQuery.fn + .extend({ + queue : function(type, data) { + if (typeof type !== "string") { + data = type; + type = "fx"; + } + + if (data === undefined) { + return jQuery.queue(this[0], type); + } + return this.each(function() { + var queue = jQuery.queue(this, type, data); + + if (type === "fx" && queue[0] !== "inprogress") { + jQuery.dequeue(this, type); + } + }); + }, + dequeue : function(type) { + return this.each(function() { + jQuery.dequeue(this, type); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay : function(time, type) { + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue(type, function(next, hooks) { + var timeout = setTimeout(next, time); + hooks.stop = function() { + clearTimeout(timeout); + }; + }); + }, + clearQueue : function(type) { + return this.queue(type || "fx", []); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise : function(type, object) { + if (typeof type !== "string") { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), elements = this, i = elements.length, count = 1, deferDataKey = type + + "defer", queueDataKey = type + "queue", markDataKey = type + + "mark", tmp; + function resolve() { + if (!(--count)) { + defer.resolveWith(elements, [ elements ]); + } + } + while (i--) { + if ((tmp = jQuery.data(elements[i], deferDataKey, + undefined, true) + || (jQuery.data(elements[i], queueDataKey, + undefined, true) || jQuery.data( + elements[i], markDataKey, undefined, + true)) + && jQuery.data(elements[i], deferDataKey, + jQuery.Callbacks("once memory"), true))) { + count++; + tmp.add(resolve); + } + } + resolve(); + return defer.promise(); + } + }); + + var rclass = /[\n\t\r]/g, rspace = /\s+/, rreturn = /\r/g, rtype = /^(?:button|input)$/i, rfocusable = /^(?:button|input|object|select|textarea)$/i, rclickable = /^a(?:rea)?$/i, rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, getSetAttribute = jQuery.support.getSetAttribute, nodeHook, boolHook, fixSpecified; + + jQuery.fn + .extend({ + attr : function(name, value) { + return jQuery.access(this, name, value, true, jQuery.attr); + }, + + removeAttr : function(name) { + return this.each(function() { + jQuery.removeAttr(this, name); + }); + }, + + prop : function(name, value) { + return jQuery.access(this, name, value, true, jQuery.prop); + }, + + removeProp : function(name) { + name = jQuery.propFix[name] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as + // removing a property on window) + try { + this[name] = undefined; + delete this[name]; + } catch (e) { + } + }); + }, + + addClass : function(value) { + var classNames, i, l, elem, setClass, c, cl; + + if (jQuery.isFunction(value)) { + return this.each(function(j) { + jQuery(this).addClass( + value.call(this, j, this.className)); + }); + } + + if (value && typeof value === "string") { + classNames = value.split(rspace); + + for (i = 0, l = this.length; i < l; i++) { + elem = this[i]; + + if (elem.nodeType === 1) { + if (!elem.className && classNames.length === 1) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for (c = 0, cl = classNames.length; c < cl; c++) { + if (!~setClass.indexOf(" " + + classNames[c] + " ")) { + setClass += classNames[c] + " "; + } + } + elem.className = jQuery.trim(setClass); + } + } + } + } + + return this; + }, + + removeClass : function(value) { + var classNames, i, l, elem, className, c, cl; + + if (jQuery.isFunction(value)) { + return this.each(function(j) { + jQuery(this).removeClass( + value.call(this, j, this.className)); + }); + } + + if ((value && typeof value === "string") + || value === undefined) { + classNames = (value || "").split(rspace); + + for (i = 0, l = this.length; i < l; i++) { + elem = this[i]; + + if (elem.nodeType === 1 && elem.className) { + if (value) { + className = (" " + elem.className + " ") + .replace(rclass, " "); + for (c = 0, cl = classNames.length; c < cl; c++) { + className = className.replace(" " + + classNames[c] + " ", " "); + } + elem.className = jQuery.trim(className); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass : function(value, stateVal) { + var type = typeof value, isBool = typeof stateVal === "boolean"; + + if (jQuery.isFunction(value)) { + return this.each(function(i) { + jQuery(this).toggleClass( + value.call(this, i, this.className, + stateVal), stateVal); + }); + } + + return this + .each(function() { + if (type === "string") { + // toggle individual class names + var className, i = 0, self = jQuery(this), state = stateVal, classNames = value + .split(rspace); + + while ((className = classNames[i++])) { + // check each className given, space + // seperated list + state = isBool ? state : !self + .hasClass(className); + self[state ? "addClass" : "removeClass"] + (className); + } + + } else if (type === "undefined" + || type === "boolean") { + if (this.className) { + // store className if set + jQuery._data(this, "__className__", + this.className); + } + + // toggle whole className + this.className = this.className + || value === false ? "" : jQuery + ._data(this, "__className__") + || ""; + } + }); + }, + + hasClass : function(selector) { + var className = " " + selector + " ", i = 0, l = this.length; + for (; i < l; i++) { + if (this[i].nodeType === 1 + && (" " + this[i].className + " ").replace( + rclass, " ").indexOf(className) > -1) { + return true; + } + } + + return false; + }, + + val : function(value) { + var hooks, ret, isFunction, elem = this[0]; + + if (!arguments.length) { + if (elem) { + hooks = jQuery.valHooks[elem.nodeName.toLowerCase()] + || jQuery.valHooks[elem.type]; + + if (hooks + && "get" in hooks + && (ret = hooks.get(elem, "value")) !== undefined) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction(value); + + return this + .each(function(i) { + var self = jQuery(this), val; + + if (this.nodeType !== 1) { + return; + } + + if (isFunction) { + val = value.call(this, i, self.val()); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers + // to string + if (val == null) { + val = ""; + } else if (typeof val === "number") { + val += ""; + } else if (jQuery.isArray(val)) { + val = jQuery.map(val, function(value) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[this.nodeName + .toLowerCase()] + || jQuery.valHooks[this.type]; + + // If set returns undefined, fall back to normal + // setting + if (!hooks + || !("set" in hooks) + || hooks.set(this, val, "value") === undefined) { + this.value = val; + } + }); + } + }); + + jQuery + .extend({ + valHooks : { + option : { + get : function(elem) { + // attributes.value is undefined in Blackberry 4.7 + // but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value + : elem.text; + } + }, + select : { + get : function(elem) { + var value, i, max, option, index = elem.selectedIndex, values = [], options = elem.options, one = elem.type === "select-one"; + + // Nothing was selected + if (index < 0) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for (; i < max; i++) { + option = options[i]; + + // Don't return options that are disabled or in + // a disabled optgroup + if (option.selected + && (jQuery.support.optDisabled ? !option.disabled + : option + .getAttribute("disabled") === null) + && (!option.parentNode.disabled || !jQuery + .nodeName(option.parentNode, + "optgroup"))) { + + // Get the specific value for the option + value = jQuery(option).val(); + + // We don't need an array for one selects + if (one) { + return value; + } + + // Multi-Selects return an array + values.push(value); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE + // after form.reset() + if (one && !values.length && options.length) { + return jQuery(options[index]).val(); + } + + return values; + }, + + set : function(elem, value) { + var values = jQuery.makeArray(value); + + jQuery(elem).find("option").each( + function() { + this.selected = jQuery.inArray(jQuery( + this).val(), values) >= 0; + }); + + if (!values.length) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn : { + val : true, + css : true, + html : true, + text : true, + data : true, + width : true, + height : true, + offset : true + }, + + attr : function(elem, name, value, pass) { + var ret, hooks, notxml, nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute + // nodes + if (!elem || nType === 3 || nType === 8 || nType === 2) { + return; + } + + if (pass && name in jQuery.attrFn) { + return jQuery(elem)[name](value); + } + + // Fallback to prop when attributes are not supported + if (typeof elem.getAttribute === "undefined") { + return jQuery.prop(elem, name, value); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc(elem); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if (notxml) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[name] + || (rboolean.test(name) ? boolHook : nodeHook); + } + + if (value !== undefined) { + + if (value === null) { + jQuery.removeAttr(elem, name); + return; + + } else if (hooks + && "set" in hooks + && notxml + && (ret = hooks.set(elem, value, name)) !== undefined) { + return ret; + + } else { + elem.setAttribute(name, "" + value); + return value; + } + + } else if (hooks && "get" in hooks && notxml + && (ret = hooks.get(elem, name)) !== null) { + return ret; + + } else { + + ret = elem.getAttribute(name); + + // Non-existent attributes return null, we normalize to + // undefined + return ret === null ? undefined : ret; + } + }, + + removeAttr : function(elem, value) { + var propName, attrNames, name, l, i = 0; + + if (value && elem.nodeType === 1) { + attrNames = value.toLowerCase().split(rspace); + l = attrNames.length; + + for (; i < l; i++) { + name = attrNames[i]; + + if (name) { + propName = jQuery.propFix[name] || name; + + // See #9699 for explanation of this approach + // (setting first, then removal) + jQuery.attr(elem, name, ""); + elem.removeAttribute(getSetAttribute ? name + : propName); + + // Set corresponding property to false for + // boolean attributes + if (rboolean.test(name) && propName in elem) { + elem[propName] = false; + } + } + } + } + }, + + attrHooks : { + type : { + set : function(elem, value) { + // We can't allow the type property to be changed + // (since it causes problems in IE) + if (rtype.test(elem.nodeName) && elem.parentNode) { + jQuery.error("type property can't be changed"); + } else if (!jQuery.support.radioValue + && value === "radio" + && jQuery.nodeName(elem, "input")) { + // Setting the type on a radio button after the + // value resets the value in IE6-9 + // Reset value to it's default in case type is + // set after value + // This is for element creation + var val = elem.value; + elem.setAttribute("type", value); + if (val) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value : { + get : function(elem, name) { + if (nodeHook && jQuery.nodeName(elem, "button")) { + return nodeHook.get(elem, name); + } + return name in elem ? elem.value : null; + }, + set : function(elem, value, name) { + if (nodeHook && jQuery.nodeName(elem, "button")) { + return nodeHook.set(elem, value, name); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix : { + tabindex : "tabIndex", + readonly : "readOnly", + "for" : "htmlFor", + "class" : "className", + maxlength : "maxLength", + cellspacing : "cellSpacing", + cellpadding : "cellPadding", + rowspan : "rowSpan", + colspan : "colSpan", + usemap : "useMap", + frameborder : "frameBorder", + contenteditable : "contentEditable" + }, + + prop : function(elem, name, value) { + var ret, hooks, notxml, nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute + // nodes + if (!elem || nType === 3 || nType === 8 || nType === 2) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc(elem); + + if (notxml) { + // Fix name and attach hooks + name = jQuery.propFix[name] || name; + hooks = jQuery.propHooks[name]; + } + + if (value !== undefined) { + if (hooks + && "set" in hooks + && (ret = hooks.set(elem, value, name)) !== undefined) { + return ret; + + } else { + return (elem[name] = value); + } + + } else { + if (hooks && "get" in hooks + && (ret = hooks.get(elem, name)) !== null) { + return ret; + + } else { + return elem[name]; + } + } + }, + + propHooks : { + tabIndex : { + get : function(elem) { + // elem.tabIndex doesn't always return the correct + // value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem + .getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? parseInt( + attributeNode.value, 10) + : rfocusable.test(elem.nodeName) + || rclickable.test(elem.nodeName) + && elem.href ? 0 : undefined; + } + } + } + }); + + // Add the tabIndex propHook to attrHooks for back-compat (different case is + // intentional) + jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + + // Hook for boolean attributes + boolHook = { + get : function(elem, name) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not + // supported + var attrNode, property = jQuery.prop(elem, name); + return property === true || typeof property !== "boolean" + && (attrNode = elem.getAttributeNode(name)) + && attrNode.nodeValue !== false ? name.toLowerCase() + : undefined; + }, + set : function(elem, value, name) { + var propName; + if (value === false) { + // Remove boolean attributes when set to false + jQuery.removeAttr(elem, name); + } else { + // value is true since we know at this point it's type boolean + // and not false + // Set boolean attributes to the same name and set the DOM + // property + propName = jQuery.propFix[name] || name; + if (propName in elem) { + // Only set the IDL specifically if it already exists on the + // element + elem[propName] = true; + } + + elem.setAttribute(name, name.toLowerCase()); + } + return name; + } + }; + + // IE6/7 do not support getting/setting some attributes with + // get/setAttribute + if (!getSetAttribute) { + + fixSpecified = { + name : true, + id : true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get : function(elem, name) { + var ret; + ret = elem.getAttributeNode(name); + return ret + && (fixSpecified[name] ? ret.nodeValue !== "" + : ret.specified) ? ret.nodeValue : undefined; + }, + set : function(elem, value, name) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode(name); + if (!ret) { + ret = document.createAttribute(name); + elem.setAttributeNode(ret); + } + return (ret.nodeValue = value + ""); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 + // ) + // This is for removals + jQuery.each([ "width", "height" ], function(i, name) { + jQuery.attrHooks[name] = jQuery.extend(jQuery.attrHooks[name], { + set : function(elem, value) { + if (value === "") { + elem.setAttribute(name, "auto"); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get : nodeHook.get, + set : function(elem, value, name) { + if (value === "") { + value = "false"; + } + nodeHook.set(elem, value, name); + } + }; + } + + // Some attributes require a special call on IE + if (!jQuery.support.hrefNormalized) { + jQuery.each([ "href", "src", "width", "height" ], function(i, name) { + jQuery.attrHooks[name] = jQuery.extend(jQuery.attrHooks[name], { + get : function(elem) { + var ret = elem.getAttribute(name, 2); + return ret === null ? undefined : ret; + } + }); + }); + } + + if (!jQuery.support.style) { + jQuery.attrHooks.style = { + get : function(elem) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set : function(elem, value) { + return (elem.style.cssText = "" + value); + } + }; + } + + // Safari mis-reports the default selected property of an option + // Accessing the parent's selectedIndex property fixes it + if (!jQuery.support.optSelected) { + jQuery.propHooks.selected = jQuery.extend(jQuery.propHooks.selected, { + get : function(elem) { + var parent = elem.parentNode; + + if (parent) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if (parent.parentNode) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); + } + + // IE6/7 call enctype encoding + if (!jQuery.support.enctype) { + jQuery.propFix.enctype = "encoding"; + } + + // Radios and checkboxes getter/setter + if (!jQuery.support.checkOn) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[this] = { + get : function(elem) { + // Handle the case where in Webkit "" is returned instead of + // "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" + : elem.value; + } + }; + }); + } + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[this] = jQuery.extend(jQuery.valHooks[this], { + set : function(elem, value) { + if (jQuery.isArray(value)) { + return (elem.checked = jQuery.inArray(jQuery(elem).val(), + value) >= 0); + } + } + }); + }); + + var rformElems = /^(?:textarea|input|select)$/i, rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, rhoverHack = /\bhover(\.\S+)?\b/, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|contextmenu)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, quickParse = function( + selector) { + var quick = rquickIs.exec(selector); + if (quick) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = (quick[1] || "").toLowerCase(); + quick[3] = quick[3] + && new RegExp("(?:^|\\s)" + quick[3] + "(?:\\s|$)"); + } + return quick; + }, quickIs = function(elem, m) { + var attrs = elem.attributes || {}; + return ((!m[1] || elem.nodeName.toLowerCase() === m[1]) + && (!m[2] || (attrs.id || {}).value === m[2]) && (!m[3] || m[3] + .test((attrs["class"] || {}).value))); + }, hoverHack = function(events) { + return jQuery.event.special.hover ? events : events.replace(rhoverHack, + "mouseenter$1 mouseleave$1"); + }; + + /* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ + jQuery.event = { + + add : function(elem, types, handler, data, selector) { + + var elemData, eventHandle, events, t, tns, type, namespaces, handleObj, handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain + // objects tho) + if (elem.nodeType === 3 || elem.nodeType === 8 || !types + || !handler || !(elemData = jQuery._data(elem))) { + return; + } + + // Caller can pass in an object of custom data in lieu of the + // handler + if (handler.handler) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the handler has a unique ID, used to find/remove + // it later + if (!handler.guid) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is + // the first + events = elemData.events; + if (!events) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if (!eventHandle) { + elemData.handle = eventHandle = function(e) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" + && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch + .apply(eventHandle.elem, arguments) + : undefined; + }; + // Add elem as a property of the handle fn to prevent a memory + // leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim(hoverHack(types)).split(" "); + for (t = 0; t < types.length; t++) { + + tns = rtypenamespace.exec(types[t]) || []; + type = tns[1]; + namespaces = (tns[2] || "").split(".").sort(); + + // If event changes its type, use the special event handlers for + // the changed type + special = jQuery.event.special[type] || {}; + + // If selector defined, determine special event api type, + // otherwise given type + type = (selector ? special.delegateType : special.bindType) + || type; + + // Update special based on newly reset type + special = jQuery.event.special[type] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type : type, + origType : tns[1], + data : data, + handler : handler, + guid : handler.guid, + selector : selector, + quick : quickParse(selector), + namespace : namespaces.join(".") + }, handleObjIn); + + // Init the event handler queue if we're the first + handlers = events[type]; + if (!handlers) { + handlers = events[type] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special + // events handler returns false + if (!special.setup + || special.setup.call(elem, data, namespaces, + eventHandle) === false) { + // Bind the global event handler to the element + if (elem.addEventListener) { + elem.addEventListener(type, eventHandle, false); + + } else if (elem.attachEvent) { + elem.attachEvent("on" + type, eventHandle); + } + } + } + + if (special.add) { + special.add.call(elem, handleObj); + + if (!handleObj.handler.guid) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if (selector) { + handlers.splice(handlers.delegateCount++, 0, handleObj); + } else { + handlers.push(handleObj); + } + + // Keep track of which events have ever been used, for event + // optimization + jQuery.event.global[type] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global : {}, + + // Detach an event or set of events from an element + remove : function(elem, types, handler, selector, mappedTypes) { + + var elemData = jQuery.hasData(elem) && jQuery._data(elem), t, tns, type, origType, namespaces, origCount, j, events, special, handle, eventType, handleObj; + + if (!elemData || !(events = elemData.events)) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim(hoverHack(types || "")).split(" "); + for (t = 0; t < types.length; t++) { + tns = rtypenamespace.exec(types[t]) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the + // element + if (!type) { + for (type in events) { + jQuery.event.remove(elem, type + types[t], handler, + selector, true); + } + continue; + } + + special = jQuery.event.special[type] || {}; + type = (selector ? special.delegateType : special.bindType) + || type; + eventType = events[type] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + + "(\\.|$)") : null; + + // Remove matching events + for (j = 0; j < eventType.length; j++) { + handleObj = eventType[j]; + + if ((mappedTypes || origType === handleObj.origType) + && (!handler || handler.guid === handleObj.guid) + && (!namespaces || namespaces + .test(handleObj.namespace)) + && (!selector || selector === handleObj.selector || selector === "**" + && handleObj.selector)) { + eventType.splice(j--, 1); + + if (handleObj.selector) { + eventType.delegateCount--; + } + if (special.remove) { + special.remove.call(elem, handleObj); + } + } + } + + // Remove generic event handler if we removed something and no + // more handlers exist + // (avoids potential for endless recursion during removal of + // special event handlers) + if (eventType.length === 0 && origCount !== eventType.length) { + if (!special.teardown + || special.teardown.call(elem, namespaces) === false) { + jQuery.removeEvent(elem, type, elemData.handle); + } + + delete events[type]; + } + } + + // Remove the expando if it's no longer used + if (jQuery.isEmptyObject(events)) { + handle = elemData.handle; + if (handle) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando + // if empty + // so use it instead of delete + jQuery.removeData(elem, [ "events", "handle" ], true); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent : { + "getData" : true, + "setData" : true, + "changeData" : true + }, + + trigger : function(event, data, elem, onlyHandlers) { + // Don't do events on text and comment nodes + if (elem && (elem.nodeType === 3 || elem.nodeType === 8)) { + return; + } + + // Event object or event type + var type = event.type || event, namespaces = [], cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them + // right now + if (rfocusMorph.test(type + jQuery.event.triggered)) { + return; + } + + if (type.indexOf("!") >= 0) { + // Exclusive events trigger only for the exact event (no + // namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if (type.indexOf(".") >= 0) { + // Namespaced trigger; create a regexp to match event type in + // handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ((!elem || jQuery.event.customEvent[type]) + && !jQuery.event.global[type]) { + // No jQuery handlers for this event type, and it can't have + // inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[jQuery.expando] ? event : + // Object literal + new jQuery.Event(type, event) : + // Just the event type (string) + new jQuery.Event(type); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? new RegExp("(^|\\.)" + + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf(":") < 0 ? "on" + type : ""; + + // Handle a global trigger + if (!elem) { + + // TODO: Stop taunting the data cache; remove global events and + // always attach to document + cache = jQuery.cache; + for (i in cache) { + if (cache[i].events && cache[i].events[type]) { + jQuery.event.trigger(event, data, cache[i].handle.elem, + true); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if (!event.target) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the + // handler arg list + data = data != null ? jQuery.makeArray(data) : []; + data.unshift(event); + + // Allow special events to draw outside the lines + special = jQuery.event.special[type] || {}; + if (special.trigger && special.trigger.apply(elem, data) === false) { + return; + } + + // Determine event propagation path in advance, per W3C events spec + // (#9951) + // Bubble up to document, then to window; watch for a global + // ownerDocument var (#9724) + eventPath = [ [ elem, special.bindType || type ] ]; + if (!onlyHandlers && !special.noBubble && !jQuery.isWindow(elem)) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test(bubbleType + type) ? elem + : elem.parentNode; + old = null; + for (; cur; cur = cur.parentNode) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or + // detached DOM) + if (old && old === elem.ownerDocument) { + eventPath.push([ + old.defaultView || old.parentWindow || window, + bubbleType ]); + } + } + + // Fire handlers on the event path + for (i = 0; i < eventPath.length && !event.isPropagationStopped(); i++) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = (jQuery._data(cur, "events") || {})[event.type] + && jQuery._data(cur, "handle"); + if (handle) { + handle.apply(cur, data); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ontype]; + if (handle && jQuery.acceptData(cur) + && handle.apply(cur, data) === false) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if (!onlyHandlers && !event.isDefaultPrevented()) { + + if ((!special._default || special._default.apply( + elem.ownerDocument, data) === false) + && !(type === "click" && jQuery.nodeName(elem, "a")) + && jQuery.acceptData(elem)) { + + // Call a native DOM method on the target with the same name + // name as the event. + // Can't use an .isFunction() check here because IE6/7 fails + // that test. + // Don't do default actions on window, that's where global + // variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if (ontype + && elem[type] + && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) + && !jQuery.isWindow(elem)) { + + // Don't re-trigger an onFOO event when we call its + // FOO() method + old = elem[ontype]; + + if (old) { + elem[ontype] = null; + } + + // Prevent re-triggering of the same event, since we + // already bubbled it above + jQuery.event.triggered = type; + elem[type](); + jQuery.event.triggered = undefined; + + if (old) { + elem[ontype] = old; + } + } + } + } + + return event.result; + }, + + dispatch : function(event) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix(event || window.event); + + var handlers = ((jQuery._data(this, "events") || {})[event.type] || []), delegateCount = handlers.delegateCount, args = [].slice + .call(arguments, 0), run_all = !event.exclusive + && !event.namespace, handlerQueue = [], i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native + // event + args[0] = event; + event.delegateTarget = this; + + // Determine handlers that should run if there are delegated events + // Avoid disabled elements in IE (#6911) and non-left-click bubbling + // in Firefox (#3861) + if (delegateCount && !event.target.disabled + && !(event.button && event.type === "click")) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for (cur = event.target; cur != this; cur = cur.parentNode + || this) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for (i = 0; i < delegateCount; i++) { + handleObj = handlers[i]; + sel = handleObj.selector; + + if (selMatch[sel] === undefined) { + selMatch[sel] = (handleObj.quick ? quickIs(cur, + handleObj.quick) : jqcur.is(sel)); + } + if (selMatch[sel]) { + matches.push(handleObj); + } + } + if (matches.length) { + handlerQueue.push({ + elem : cur, + matches : matches + }); + } + } + } + + // Add the remaining (directly-bound) handlers + if (handlers.length > delegateCount) { + handlerQueue.push({ + elem : this, + matches : handlers.slice(delegateCount) + }); + } + + // Run delegates first; they may want to stop propagation beneath us + for (i = 0; i < handlerQueue.length + && !event.isPropagationStopped(); i++) { + matched = handlerQueue[i]; + event.currentTarget = matched.elem; + + for (j = 0; j < matched.matches.length + && !event.isImmediatePropagationStopped(); j++) { + handleObj = matched.matches[j]; + + // Triggered event must either 1) be non-exclusive and have + // no namespace, or + // 2) have namespace(s) a subset or equal to those in the + // bound event (both can have no namespace). + if (run_all || (!event.namespace && !handleObj.namespace) + || event.namespace_re + && event.namespace_re.test(handleObj.namespace)) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler) + .apply(matched.elem, args); + + if (ret !== undefined) { + event.result = ret; + if (ret === false) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, + // non-W3C, deprecated, will be removed in 1.8 *** + props : "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which" + .split(" "), + + fixHooks : {}, + + keyHooks : { + props : "char charCode key keyCode".split(" "), + filter : function(event, original) { + + // Add which for key events + if (event.which == null) { + event.which = original.charCode != null ? original.charCode + : original.keyCode; + } + + return event; + } + }, + + mouseHooks : { + props : "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement" + .split(" "), + filter : function(event, original) { + var eventDoc, doc, body, button = original.button, fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if (event.pageX == null && original.clientX != null) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + (doc && doc.scrollLeft || body && body.scrollLeft || 0) + - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = original.clientY + + (doc && doc.scrollTop || body && body.scrollTop || 0) + - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add relatedTarget, if necessary + if (!event.relatedTarget && fromElement) { + event.relatedTarget = fromElement === event.target ? original.toElement + : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if (!event.which && button !== undefined) { + event.which = (button & 1 ? 1 : (button & 2 ? 3 + : (button & 4 ? 2 : 0))); + } + + return event; + } + }, + + fix : function(event) { + if (event[jQuery.expando]) { + return event; + } + + // Create a writable copy of the event object and normalize some + // properties + var i, prop, originalEvent = event, fixHook = jQuery.event.fixHooks[event.type] + || {}, copy = fixHook.props ? this.props + .concat(fixHook.props) : this.props; + + event = jQuery.Event(originalEvent); + + for (i = copy.length; i;) { + prop = copy[--i]; + event[prop] = originalEvent[prop]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if (!event.target) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if (event.target.nodeType === 3) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, + // IE6/7/8) + if (event.metaKey === undefined) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter ? fixHook.filter(event, originalEvent) + : event; + }, + + special : { + ready : { + // Make sure the ready event is setup + setup : jQuery.bindReady + }, + + load : { + // Prevent triggered image.load events from bubbling to + // window.load + noBubble : true + }, + + focus : { + delegateType : "focusin" + }, + blur : { + delegateType : "focusout" + }, + + beforeunload : { + setup : function(data, namespaces, eventHandle) { + // We only want to do this special case on windows + if (jQuery.isWindow(this)) { + this.onbeforeunload = eventHandle; + } + }, + + teardown : function(namespaces, eventHandle) { + if (this.onbeforeunload === eventHandle) { + this.onbeforeunload = null; + } + } + } + }, + + simulate : function(type, elem, event, bubble) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the + // donor. + var e = jQuery.extend(new jQuery.Event(), event, { + type : type, + isSimulated : true, + originalEvent : {} + }); + if (bubble) { + jQuery.event.trigger(e, null, elem); + } else { + jQuery.event.dispatch.call(elem, e); + } + if (e.isDefaultPrevented()) { + event.preventDefault(); + } + } + }; + + // Some plugins are using, but it's undocumented/deprecated and will be + // removed. + // The 1.7 special event interface should provide all the hooks needed now. + jQuery.event.handle = jQuery.event.dispatch; + + jQuery.removeEvent = document.removeEventListener ? function(elem, type, + handle) { + if (elem.removeEventListener) { + elem.removeEventListener(type, handle, false); + } + } : function(elem, type, handle) { + if (elem.detachEvent) { + elem.detachEvent("on" + type, handle); + } + }; + + jQuery.Event = function(src, props) { + // Allow instantiation without the 'new' keyword + if (!(this instanceof jQuery.Event)) { + return new jQuery.Event(src, props); + } + + // Event object + if (src && src.type) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = (src.defaultPrevented + || src.returnValue === false || src.getPreventDefault + && src.getPreventDefault()) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if (props) { + jQuery.extend(this, props); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[jQuery.expando] = true; + }; + + function returnFalse() { + return false; + } + function returnTrue() { + return true; + } + + // jQuery.Event is based on DOM3 Events as specified by the ECMAScript + // Language Binding + // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html + jQuery.Event.prototype = { + preventDefault : function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if (!e) { + return; + } + + // if preventDefault exists run it on the original event + if (e.preventDefault) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event + // to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation : function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if (!e) { + return; + } + // if stopPropagation exists run it on the original event + if (e.stopPropagation) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to + // true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation : function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented : returnFalse, + isPropagationStopped : returnFalse, + isImmediatePropagationStopped : returnFalse + }; + + // Create mouseenter/leave events using mouseover/out and event-time checks + jQuery + .each( + { + mouseenter : "mouseover", + mouseleave : "mouseout" + }, + function(orig, fix) { + jQuery.event.special[orig] = { + delegateType : fix, + bindType : fix, + + handle : function(event) { + var target = this, related = event.relatedTarget, handleObj = event.handleObj, selector = handleObj.selector, ret; + + // For mousenter/leave call the handler if + // related is outside the target. + // NB: No relatedTarget if the mouse + // left/entered the browser window + if (!related + || (related !== target && !jQuery + .contains(target, related))) { + event.type = handleObj.origType; + ret = handleObj.handler.apply(this, + arguments); + event.type = fix; + } + return ret; + } + }; + }); + + // IE submit delegation + if (!jQuery.support.submitBubbles) { + + jQuery.event.special.submit = { + setup : function() { + // Only need this for delegated form submit events + if (jQuery.nodeName(this, "form")) { + return false; + } + + // Lazy-add a submit handler when a descendant form may + // potentially be submitted + jQuery.event + .add( + this, + "click._submit keypress._submit", + function(e) { + // Node name check avoids a VML-related + // crash in IE (#9807) + var elem = e.target, form = jQuery + .nodeName(elem, "input") + || jQuery.nodeName(elem, "button") ? elem.form + : undefined; + if (form && !form._submit_attached) { + jQuery.event + .add( + form, + "submit._submit", + function(event) { + // If form was + // submitted by the + // user, bubble the + // event up the tree + if (this.parentNode + && !event.isTrigger) { + jQuery.event + .simulate( + "submit", + this.parentNode, + event, + true); + } + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + teardown : function() { + // Only need this for delegated form submit events + if (jQuery.nodeName(this, "form")) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit + // handlers attached above + jQuery.event.remove(this, "._submit"); + } + }; + } + + // IE change delegation and checkbox/radio fix + if (!jQuery.support.changeBubbles) { + + jQuery.event.special.change = { + + setup : function() { + + if (rformElems.test(this.nodeName)) { + // IE doesn't fire change on a check/radio until blur; + // trigger it on click + // after a propertychange. Eat the blur-change in + // special.change.handle. + // This still fires onchange a second time for check/radio + // after blur. + if (this.type === "checkbox" || this.type === "radio") { + jQuery.event + .add( + this, + "propertychange._change", + function(event) { + if (event.originalEvent.propertyName === "checked") { + this._just_changed = true; + } + }); + jQuery.event + .add(this, "click._change", + function(event) { + if (this._just_changed + && !event.isTrigger) { + this._just_changed = false; + jQuery.event.simulate("change", + this, event, true); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant + // inputs + jQuery.event.add(this, "beforeactivate._change", function(e) { + var elem = e.target; + + if (rformElems.test(elem.nodeName) + && !elem._change_attached) { + jQuery.event.add(elem, "change._change", + function(event) { + if (this.parentNode && !event.isSimulated + && !event.isTrigger) { + jQuery.event.simulate("change", + this.parentNode, event, true); + } + }); + elem._change_attached = true; + } + }); + }, + + handle : function(event) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already + // triggered them above + if (this !== elem || event.isSimulated || event.isTrigger + || (elem.type !== "radio" && elem.type !== "checkbox")) { + return event.handleObj.handler.apply(this, arguments); + } + }, + + teardown : function() { + jQuery.event.remove(this, "._change"); + + return rformElems.test(this.nodeName); + } + }; + } + + // Create "bubbling" focus and blur events + if (!jQuery.support.focusinBubbles) { + jQuery.each({ + focus : "focusin", + blur : "focusout" + }, function(orig, fix) { + + // Attach a single capturing handler while someone wants + // focusin/focusout + var attaches = 0, handler = function(event) { + jQuery.event.simulate(fix, event.target, jQuery.event + .fix(event), true); + }; + + jQuery.event.special[fix] = { + setup : function() { + if (attaches++ === 0) { + document.addEventListener(orig, handler, true); + } + }, + teardown : function() { + if (--attaches === 0) { + document.removeEventListener(orig, handler, true); + } + } + }; + }); + } + + jQuery.fn + .extend({ + + on : function(types, selector, data, fn, /* INTERNAL */one) { + var origFn, type; + + // Types can be a map of types/handlers + if (typeof types === "object") { + // ( types-Object, selector, data ) + if (typeof selector !== "string") { + // ( types-Object, data ) + data = selector; + selector = undefined; + } + for (type in types) { + this.on(type, selector, data, types[type], one); + } + return this; + } + + if (data == null && fn == null) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if (fn == null) { + if (typeof selector === "string") { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if (fn === false) { + fn = returnFalse; + } else if (!fn) { + return this; + } + + if (one === 1) { + origFn = fn; + fn = function(event) { + // Can use an empty set, since event contains the + // info + jQuery().off(event); + return origFn.apply(this, arguments); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || (origFn.guid = jQuery.guid++); + } + return this.each(function() { + jQuery.event.add(this, types, fn, data, selector); + }); + }, + one : function(types, selector, data, fn) { + return this.on.call(this, types, selector, data, fn, 1); + }, + off : function(types, selector, fn) { + if (types && types.preventDefault && types.handleObj) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery(types.delegateTarget).off( + handleObj.namespace ? handleObj.type + "." + + handleObj.namespace : handleObj.type, + handleObj.selector, handleObj.handler); + return this; + } + if (typeof types === "object") { + // ( types-object [, selector] ) + for ( var type in types) { + this.off(type, selector, types[type]); + } + return this; + } + if (selector === false || typeof selector === "function") { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if (fn === false) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove(this, types, fn, selector); + }); + }, + + bind : function(types, data, fn) { + return this.on(types, null, data, fn); + }, + unbind : function(types, fn) { + return this.off(types, null, fn); + }, + + live : function(types, data, fn) { + jQuery(this.context).on(types, this.selector, data, fn); + return this; + }, + die : function(types, fn) { + jQuery(this.context).off(types, this.selector || "**", fn); + return this; + }, + + delegate : function(selector, types, data, fn) { + return this.on(types, selector, data, fn); + }, + undelegate : function(selector, types, fn) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1 ? this.off(selector, "**") + : this.off(types, selector, fn); + }, + + trigger : function(type, data) { + return this.each(function() { + jQuery.event.trigger(type, data, this); + }); + }, + triggerHandler : function(type, data) { + if (this[0]) { + return jQuery.event.trigger(type, data, this[0], true); + } + }, + + toggle : function(fn) { + // Save reference to arguments for access in closure + var args = arguments, guid = fn.guid || jQuery.guid++, i = 0, toggler = function( + event) { + // Figure out which function to execute + var lastToggle = (jQuery._data(this, "lastToggle" + + fn.guid) || 0) + % i; + jQuery._data(this, "lastToggle" + fn.guid, + lastToggle + 1); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[lastToggle].apply(this, arguments) || false; + }; + + // link all the functions, so any of them can unbind this + // click handler + toggler.guid = guid; + while (i < args.length) { + args[i++].guid = guid; + } + + return this.click(toggler); + }, + + hover : function(fnOver, fnOut) { + return this.mouseenter(fnOver).mouseleave(fnOut || fnOver); + } + }); + + jQuery + .each( + ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu") + .split(" "), + function(i, name) { + + // Handle event binding + jQuery.fn[name] = function(data, fn) { + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? this.on(name, null, + data, fn) : this.trigger(name); + }; + + if (jQuery.attrFn) { + jQuery.attrFn[name] = true; + } + + if (rkeyEvent.test(name)) { + jQuery.event.fixHooks[name] = jQuery.event.keyHooks; + } + + if (rmouseEvent.test(name)) { + jQuery.event.fixHooks[name] = jQuery.event.mouseHooks; + } + }); + + /* + * ! Sizzle CSS Selector Engine Copyright 2011, The Dojo Foundation Released + * under the MIT, BSD, and GPL Licenses. More information: + * http://sizzlejs.com/ + */ + (function() { + + var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, expando = "sizcache" + + (Math.random() + '').replace('.', ''), done = 0, toString = Object.prototype.toString, hasDuplicate = false, baseHasDuplicate = true, rBackslash = /\\/g, rReturn = /\r\n/g, rNonWord = /\W/; + + // Here we check if the JavaScript engine is using some sort of + // optimization where it does not always call our comparision + // function. If that is the case, discard the hasDuplicate value. + // Thus far that includes Google Chrome. + [ 0, 0 ].sort(function() { + baseHasDuplicate = false; + return 0; + }); + + var Sizzle = function(selector, context, results, seed) { + results = results || []; + context = context || document; + + var origContext = context; + + if (context.nodeType !== 1 && context.nodeType !== 9) { + return []; + } + + if (!selector || typeof selector !== "string") { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, prune = true, contextXML = Sizzle + .isXML(context), parts = [], soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec(""); + m = chunker.exec(soFar); + + if (m) { + soFar = m[3]; + + parts.push(m[1]); + + if (m[2]) { + extra = m[3]; + break; + } + } + } while (m); + + if (parts.length > 1 && origPOS.exec(selector)) { + + if (parts.length === 2 && Expr.relative[parts[0]]) { + set = posProcess(parts[0] + parts[1], context, seed); + + } else { + set = Expr.relative[parts[0]] ? [ context ] : Sizzle(parts + .shift(), context); + + while (parts.length) { + selector = parts.shift(); + + if (Expr.relative[selector]) { + selector += parts.shift(); + } + + set = posProcess(selector, set, seed); + } + } + + } else { + // Take a shortcut and set the context if the root selector is + // an ID + // (but not if it'll be faster if the inner selector is an ID) + if (!seed && parts.length > 1 && context.nodeType === 9 + && !contextXML && Expr.match.ID.test(parts[0]) + && !Expr.match.ID.test(parts[parts.length - 1])) { + + ret = Sizzle.find(parts.shift(), context, contextXML); + context = ret.expr ? Sizzle.filter(ret.expr, ret.set)[0] + : ret.set[0]; + } + + if (context) { + ret = seed ? { + expr : parts.pop(), + set : makeArray(seed) + } : Sizzle.find(parts.pop(), parts.length === 1 + && (parts[0] === "~" || parts[0] === "+") + && context.parentNode ? context.parentNode + : context, contextXML); + + set = ret.expr ? Sizzle.filter(ret.expr, ret.set) : ret.set; + + if (parts.length > 0) { + checkSet = makeArray(set); + + } else { + prune = false; + } + + while (parts.length) { + cur = parts.pop(); + pop = cur; + + if (!Expr.relative[cur]) { + cur = ""; + } else { + pop = parts.pop(); + } + + if (pop == null) { + pop = context; + } + + Expr.relative[cur](checkSet, pop, contextXML); + } + + } else { + checkSet = parts = []; + } + } + + if (!checkSet) { + checkSet = set; + } + + if (!checkSet) { + Sizzle.error(cur || selector); + } + + if (toString.call(checkSet) === "[object Array]") { + if (!prune) { + results.push.apply(results, checkSet); + + } else if (context && context.nodeType === 1) { + for (i = 0; checkSet[i] != null; i++) { + if (checkSet[i] + && (checkSet[i] === true || checkSet[i].nodeType === 1 + && Sizzle + .contains(context, checkSet[i]))) { + results.push(set[i]); + } + } + + } else { + for (i = 0; checkSet[i] != null; i++) { + if (checkSet[i] && checkSet[i].nodeType === 1) { + results.push(set[i]); + } + } + } + + } else { + makeArray(checkSet, results); + } + + if (extra) { + Sizzle(extra, origContext, results, seed); + Sizzle.uniqueSort(results); + } + + return results; + }; + + Sizzle.uniqueSort = function(results) { + if (sortOrder) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if (hasDuplicate) { + for (var i = 1; i < results.length; i++) { + if (results[i] === results[i - 1]) { + results.splice(i--, 1); + } + } + } + } + + return results; + }; + + Sizzle.matches = function(expr, set) { + return Sizzle(expr, null, null, set); + }; + + Sizzle.matchesSelector = function(node, expr) { + return Sizzle(expr, null, null, [ node ]).length > 0; + }; + + Sizzle.find = function(expr, context, isXML) { + var set, i, len, match, type, left; + + if (!expr) { + return []; + } + + for (i = 0, len = Expr.order.length; i < len; i++) { + type = Expr.order[i]; + + if ((match = Expr.leftMatch[type].exec(expr))) { + left = match[1]; + match.splice(1, 1); + + if (left.substr(left.length - 1) !== "\\") { + match[1] = (match[1] || "").replace(rBackslash, ""); + set = Expr.find[type](match, context, isXML); + + if (set != null) { + expr = expr.replace(Expr.match[type], ""); + break; + } + } + } + } + + if (!set) { + set = typeof context.getElementsByTagName !== "undefined" ? context + .getElementsByTagName("*") + : []; + } + + return { + set : set, + expr : expr + }; + }; + + Sizzle.filter = function(expr, set, inplace, not) { + var match, anyFound, type, found, item, filter, left, i, pass, old = expr, result = [], curLoop = set, isXMLFilter = set + && set[0] && Sizzle.isXML(set[0]); + + while (expr && set.length) { + for (type in Expr.filter) { + if ((match = Expr.leftMatch[type].exec(expr)) != null + && match[2]) { + filter = Expr.filter[type]; + left = match[1]; + + anyFound = false; + + match.splice(1, 1); + + if (left.substr(left.length - 1) === "\\") { + continue; + } + + if (curLoop === result) { + result = []; + } + + if (Expr.preFilter[type]) { + match = Expr.preFilter[type](match, curLoop, + inplace, result, not, isXMLFilter); + + if (!match) { + anyFound = found = true; + + } else if (match === true) { + continue; + } + } + + if (match) { + for (i = 0; (item = curLoop[i]) != null; i++) { + if (item) { + found = filter(item, match, i, curLoop); + pass = not ^ found; + + if (inplace && found != null) { + if (pass) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if (pass) { + result.push(item); + anyFound = true; + } + } + } + } + + if (found !== undefined) { + if (!inplace) { + curLoop = result; + } + + expr = expr.replace(Expr.match[type], ""); + + if (!anyFound) { + return []; + } + + break; + } + } + } + + // Improper expression + if (expr === old) { + if (anyFound == null) { + Sizzle.error(expr); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; + }; + + Sizzle.error = function(msg) { + throw new Error("Syntax error, unrecognized expression: " + msg); + }; + + /** + * Utility function for retreiving the text value of an array of DOM + * nodes + * + * @param {Array|Element} + * elem + */ + var getText = Sizzle.getText = function(elem) { + var i, node, nodeType = elem.nodeType, ret = ""; + + if (nodeType) { + if (nodeType === 1 || nodeType === 9) { + // Use textContent || innerText for elements + if (typeof elem.textContent === 'string') { + return elem.textContent; + } else if (typeof elem.innerText === 'string') { + // Replace IE's carriage returns + return elem.innerText.replace(rReturn, ''); + } else { + // Traverse it's children + for (elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText(elem); + } + } + } else if (nodeType === 3 || nodeType === 4) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for (i = 0; (node = elem[i]); i++) { + // Do not traverse comment nodes + if (node.nodeType !== 8) { + ret += getText(node); + } + } + } + return ret; + }; + + var Expr = Sizzle.selectors = { + order : [ "ID", "NAME", "TAG" ], + + match : { + ID : /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS : /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME : /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR : /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG : /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD : /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS : /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO : /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch : {}, + + attrMap : { + "class" : "className", + "for" : "htmlFor" + }, + + attrHandle : { + href : function(elem) { + return elem.getAttribute("href"); + }, + type : function(elem) { + return elem.getAttribute("type"); + } + }, + + relative : { + "+" : function(checkSet, part) { + var isPartStr = typeof part === "string", isTag = isPartStr + && !rNonWord.test(part), isPartStrNotTag = isPartStr + && !isTag; + + if (isTag) { + part = part.toLowerCase(); + } + + for (var i = 0, l = checkSet.length, elem; i < l; i++) { + if ((elem = checkSet[i])) { + while ((elem = elem.previousSibling) + && elem.nodeType !== 1) { + } + + checkSet[i] = isPartStrNotTag || elem + && elem.nodeName.toLowerCase() === part ? elem || false + : elem === part; + } + } + + if (isPartStrNotTag) { + Sizzle.filter(part, checkSet, true); + } + }, + + ">" : function(checkSet, part) { + var elem, isPartStr = typeof part === "string", i = 0, l = checkSet.length; + + if (isPartStr && !rNonWord.test(part)) { + part = part.toLowerCase(); + + for (; i < l; i++) { + elem = checkSet[i]; + + if (elem) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent + : false; + } + } + + } else { + for (; i < l; i++) { + elem = checkSet[i]; + + if (elem) { + checkSet[i] = isPartStr ? elem.parentNode + : elem.parentNode === part; + } + } + + if (isPartStr) { + Sizzle.filter(part, checkSet, true); + } + } + }, + + "" : function(checkSet, part, isXML) { + var nodeCheck, doneName = done++, checkFn = dirCheck; + + if (typeof part === "string" && !rNonWord.test(part)) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn("parentNode", part, doneName, checkSet, nodeCheck, + isXML); + }, + + "~" : function(checkSet, part, isXML) { + var nodeCheck, doneName = done++, checkFn = dirCheck; + + if (typeof part === "string" && !rNonWord.test(part)) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn("previousSibling", part, doneName, checkSet, + nodeCheck, isXML); + } + }, + + find : { + ID : function(match, context, isXML) { + if (typeof context.getElementById !== "undefined" && !isXML) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [ m ] : []; + } + }, + + NAME : function(match, context) { + if (typeof context.getElementsByName !== "undefined") { + var ret = [], results = context + .getElementsByName(match[1]); + + for (var i = 0, l = results.length; i < l; i++) { + if (results[i].getAttribute("name") === match[1]) { + ret.push(results[i]); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG : function(match, context) { + if (typeof context.getElementsByTagName !== "undefined") { + return context.getElementsByTagName(match[1]); + } + } + }, + preFilter : { + CLASS : function(match, curLoop, inplace, result, not, isXML) { + match = " " + match[1].replace(rBackslash, "") + " "; + + if (isXML) { + return match; + } + + for (var i = 0, elem; (elem = curLoop[i]) != null; i++) { + if (elem) { + if (not + ^ (elem.className && (" " + elem.className + " ") + .replace(/[\t\n\r]/g, " ").indexOf( + match) >= 0)) { + if (!inplace) { + result.push(elem); + } + + } else if (inplace) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID : function(match) { + return match[1].replace(rBackslash, ""); + }, + + TAG : function(match, curLoop) { + return match[1].replace(rBackslash, "").toLowerCase(); + }, + + CHILD : function(match) { + if (match[1] === "nth") { + if (!match[2]) { + Sizzle.error(match[0]); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', + // '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/ + .exec(match[2] === "even" && "2n" + || match[2] === "odd" && "2n+1" + || !/\D/.test(match[2]) && "0n+" + + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if + // they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } else if (match[2]) { + Sizzle.error(match[0]); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR : function(match, curLoop, inplace, result, not, isXML) { + var name = match[1] = match[1].replace(rBackslash, ""); + + if (!isXML && Expr.attrMap[name]) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = (match[4] || match[5] || "").replace(rBackslash, + ""); + + if (match[2] === "~=") { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO : function(match, curLoop, inplace, result, not) { + if (match[1] === "not") { + // If we're dealing with a complex expression, or a + // simple one + if ((chunker.exec(match[3]) || "").length > 1 + || /^\w/.test(match[3])) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, + true ^ not); + + if (!inplace) { + result.push.apply(result, ret); + } + + return false; + } + + } else if (Expr.match.POS.test(match[0]) + || Expr.match.CHILD.test(match[0])) { + return true; + } + + return match; + }, + + POS : function(match) { + match.unshift(true); + + return match; + } + }, + + filters : { + enabled : function(elem) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled : function(elem) { + return elem.disabled === true; + }, + + checked : function(elem) { + return elem.checked === true; + }, + + selected : function(elem) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if (elem.parentNode) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent : function(elem) { + return !!elem.firstChild; + }, + + empty : function(elem) { + return !elem.firstChild; + }, + + has : function(elem, i, match) { + return !!Sizzle(match[3], elem).length; + }, + + header : function(elem) { + return (/h\d/i).test(elem.nodeName); + }, + + text : function(elem) { + var attr = elem.getAttribute("type"), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 + // types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" + && "text" === type + && (attr === type || attr === null); + }, + + radio : function(elem) { + return elem.nodeName.toLowerCase() === "input" + && "radio" === elem.type; + }, + + checkbox : function(elem) { + return elem.nodeName.toLowerCase() === "input" + && "checkbox" === elem.type; + }, + + file : function(elem) { + return elem.nodeName.toLowerCase() === "input" + && "file" === elem.type; + }, + + password : function(elem) { + return elem.nodeName.toLowerCase() === "input" + && "password" === elem.type; + }, + + submit : function(elem) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") + && "submit" === elem.type; + }, + + image : function(elem) { + return elem.nodeName.toLowerCase() === "input" + && "image" === elem.type; + }, + + reset : function(elem) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") + && "reset" === elem.type; + }, + + button : function(elem) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type + || name === "button"; + }, + + input : function(elem) { + return (/input|select|textarea|button/i) + .test(elem.nodeName); + }, + + focus : function(elem) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters : { + first : function(elem, i) { + return i === 0; + }, + + last : function(elem, i, match, array) { + return i === array.length - 1; + }, + + even : function(elem, i) { + return i % 2 === 0; + }, + + odd : function(elem, i) { + return i % 2 === 1; + }, + + lt : function(elem, i, match) { + return i < match[3] - 0; + }, + + gt : function(elem, i, match) { + return i > match[3] - 0; + }, + + nth : function(elem, i, match) { + return match[3] - 0 === i; + }, + + eq : function(elem, i, match) { + return match[3] - 0 === i; + } + }, + filter : { + PSEUDO : function(elem, match, i, array) { + var name = match[1], filter = Expr.filters[name]; + + if (filter) { + return filter(elem, i, match, array); + + } else if (name === "contains") { + return (elem.textContent || elem.innerText + || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if (name === "not") { + var not = match[3]; + + for (var j = 0, l = not.length; j < l; j++) { + if (not[j] === elem) { + return false; + } + } + + return true; + + } else { + Sizzle.error(name); + } + }, + + CHILD : function(elem, match) { + var first, last, doneName, parent, cache, count, diff, type = match[1], node = elem; + + switch (type) { + case "only": + case "first": + while ((node = node.previousSibling)) { + if (node.nodeType === 1) { + return false; + } + } + + if (type === "first") { + return true; + } + + node = elem; + + case "last": + while ((node = node.nextSibling)) { + if (node.nodeType === 1) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if (first === 1 && last === 0) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if (parent + && (parent[expando] !== doneName || !elem.nodeIndex)) { + count = 0; + + for (node = parent.firstChild; node; node = node.nextSibling) { + if (node.nodeType === 1) { + node.nodeIndex = ++count; + } + } + + parent[expando] = doneName; + } + + diff = elem.nodeIndex - last; + + if (first === 0) { + return diff === 0; + + } else { + return (diff % first === 0 && diff / first >= 0); + } + } + }, + + ID : function(elem, match) { + return elem.nodeType === 1 + && elem.getAttribute("id") === match; + }, + + TAG : function(elem, match) { + return (match === "*" && elem.nodeType === 1) + || !!elem.nodeName + && elem.nodeName.toLowerCase() === match; + }, + + CLASS : function(elem, match) { + return (" " + + (elem.className || elem.getAttribute("class")) + " ") + .indexOf(match) > -1; + }, + + ATTR : function(elem, match) { + var name = match[1], result = Sizzle.attr ? Sizzle.attr( + elem, name) + : Expr.attrHandle[name] ? Expr.attrHandle[name] + (elem) : elem[name] != null ? elem[name] + : elem.getAttribute(name), value = result + + "", type = match[2], check = match[4]; + + return result == null ? type === "!=" + : !type && Sizzle.attr ? result != null + : type === "=" ? value === check + : type === "*=" ? value + .indexOf(check) >= 0 + : type === "~=" ? (" " + + value + " ") + .indexOf(check) >= 0 + : !check ? value + && result !== false + : type === "!=" ? value !== check + : type === "^=" ? value + .indexOf(check) === 0 + : type === "$=" ? value + .substr(value.length + - check.length) === check + : type === "|=" ? value === check + || value + .substr( + 0, + check.length + 1) === check + + "-" + : false; + }, + + POS : function(elem, match, i, array) { + var name = match[2], filter = Expr.setFilters[name]; + + if (filter) { + return filter(elem, i, match, array); + } + } + } + }; + + var origPOS = Expr.match.POS, fescape = function(all, num) { + return "\\" + (num - 0 + 1); + }; + + for ( var type in Expr.match) { + Expr.match[type] = new RegExp(Expr.match[type].source + + (/(?![^\[]*\])(?![^\(]*\))/.source)); + Expr.leftMatch[type] = new RegExp(/(^(?:.|\r|\n)*?)/.source + + Expr.match[type].source.replace(/\\(\d+)/g, fescape)); + } + + var makeArray = function(array, results) { + array = Array.prototype.slice.call(array, 0); + + if (results) { + results.push.apply(results, array); + return results; + } + + return array; + }; + + // Perform a simple check to determine if the browser is capable of + // converting a NodeList to an array using builtin methods. + // Also verifies that the returned array holds DOM nodes + // (which is not the case in the Blackberry browser) + try { + Array.prototype.slice.call(document.documentElement.childNodes, 0)[0].nodeType; + + // Provide a fallback method if it does not work + } catch (e) { + makeArray = function(array, results) { + var i = 0, ret = results || []; + + if (toString.call(array) === "[object Array]") { + Array.prototype.push.apply(ret, array); + + } else { + if (typeof array.length === "number") { + for (var l = array.length; i < l; i++) { + ret.push(array[i]); + } + + } else { + for (; array[i]; i++) { + ret.push(array[i]); + } + } + } + + return ret; + }; + } + + var sortOrder, siblingCheck; + + if (document.documentElement.compareDocumentPosition) { + sortOrder = function(a, b) { + if (a === b) { + hasDuplicate = true; + return 0; + } + + if (!a.compareDocumentPosition || !b.compareDocumentPosition) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + + } else { + sortOrder = function(a, b) { + // The nodes are identical, we can exit early + if (a === b) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available + // on both nodes + } else if (a.sourceIndex && b.sourceIndex) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, ap = [], bp = [], aup = a.parentNode, bup = b.parentNode, cur = aup; + + // If the nodes are siblings (or identical) we can do a quick + // check + if (aup === bup) { + return siblingCheck(a, b); + + // If no parents were found then the nodes are disconnected + } else if (!aup) { + return -1; + + } else if (!bup) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while (cur) { + ap.unshift(cur); + cur = cur.parentNode; + } + + cur = bup; + + while (cur) { + bp.unshift(cur); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for (var i = 0; i < al && i < bl; i++) { + if (ap[i] !== bp[i]) { + return siblingCheck(ap[i], bp[i]); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? siblingCheck(a, bp[i], -1) : siblingCheck( + ap[i], b, 1); + }; + + siblingCheck = function(a, b, ret) { + if (a === b) { + return ret; + } + + var cur = a.nextSibling; + + while (cur) { + if (cur === b) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; + } + + // Check to see if the browser returns elements by name when + // querying by getElementById (and provide a workaround) + (function() { + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), id = "script" + + (new Date()).getTime(), root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it + // quickly + root.insertBefore(form, root.firstChild); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if (document.getElementById(id)) { + Expr.find.ID = function(match, context, isXML) { + if (typeof context.getElementById !== "undefined" && !isXML) { + var m = context.getElementById(match[1]); + + return m ? m.id === match[1] + || typeof m.getAttributeNode !== "undefined" + && m.getAttributeNode("id").nodeValue === match[1] ? [ m ] + : undefined + : []; + } + }; + + Expr.filter.ID = function(elem, match) { + var node = typeof elem.getAttributeNode !== "undefined" + && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node + && node.nodeValue === match; + }; + } + + root.removeChild(form); + + // release memory in IE + root = form = null; + })(); + + (function() { + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild(document.createComment("")); + + // Make sure no comments are found + if (div.getElementsByTagName("*").length > 0) { + Expr.find.TAG = function(match, context) { + var results = context.getElementsByTagName(match[1]); + + // Filter out possible comments + if (match[1] === "*") { + var tmp = []; + + for (var i = 0; results[i]; i++) { + if (results[i].nodeType === 1) { + tmp.push(results[i]); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if (div.firstChild + && typeof div.firstChild.getAttribute !== "undefined" + && div.firstChild.getAttribute("href") !== "#") { + + Expr.attrHandle.href = function(elem) { + return elem.getAttribute("href", 2); + }; + } + + // release memory in IE + div = null; + })(); + + if (document.querySelectorAll) { + (function() { + var oldSizzle = Sizzle, div = document.createElement("div"), id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if (div.querySelectorAll + && div.querySelectorAll(".TEST").length === 0) { + return; + } + + Sizzle = function(query, context, extra, seed) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if (!seed && !Sizzle.isXML(context)) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/ + .exec(query); + + if (match + && (context.nodeType === 1 || context.nodeType === 9)) { + // Speed-up: Sizzle("TAG") + if (match[1]) { + return makeArray(context + .getElementsByTagName(query), extra); + + // Speed-up: Sizzle(".CLASS") + } else if (match[2] && Expr.find.CLASS + && context.getElementsByClassName) { + return makeArray(context + .getElementsByClassName(match[2]), + extra); + } + } + + if (context.nodeType === 9) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize + // finding it + if (query === "body" && context.body) { + return makeArray([ context.body ], extra); + + // Speed-up: Sizzle("#ID") + } else if (match && match[3]) { + var elem = context.getElementById(match[3]); + + // Check parentNode to catch when Blackberry 4.6 + // returns + // nodes that are no longer in the document + // #6963 + if (elem && elem.parentNode) { + // Handle the case where IE and Opera return + // items + // by name instead of ID + if (elem.id === match[3]) { + return makeArray([ elem ], extra); + } + + } else { + return makeArray([], extra); + } + } + + try { + return makeArray(context + .querySelectorAll(query), extra); + } catch (qsaError) { + } + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID + // on the root + // and working up from there (Thanks to Andrew + // Dupont for the technique) + // IE 8 doesn't work on object elements + } else if (context.nodeType === 1 + && context.nodeName.toLowerCase() !== "object") { + var oldContext = context, old = context + .getAttribute("id"), nid = old || id, hasParent = context.parentNode, relativeHierarchySelector = /^\s*[+~]/ + .test(query); + + if (!old) { + context.setAttribute("id", nid); + } else { + nid = nid.replace(/'/g, "\\$&"); + } + if (relativeHierarchySelector && hasParent) { + context = context.parentNode; + } + + try { + if (!relativeHierarchySelector || hasParent) { + return makeArray(context + .querySelectorAll("[id='" + nid + + "'] " + query), extra); + } + + } catch (pseudoError) { + } finally { + if (!old) { + oldContext.removeAttribute("id"); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle) { + Sizzle[prop] = oldSizzle[prop]; + } + + // release memory in IE + div = null; + })(); + } + + (function() { + var html = document.documentElement, matches = html.matchesSelector + || html.mozMatchesSelector || html.webkitMatchesSelector + || html.msMatchesSelector; + + if (matches) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call(document + .createElement("div"), "div"), pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call(document.documentElement, "[test!='']:sizzle"); + + } catch (pseudoError) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function(node, expr) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if (!Sizzle.isXML(node)) { + try { + if (pseudoWorks || !Expr.match.PSEUDO.test(expr) + && !/!=/.test(expr)) { + var ret = matches.call(node, expr); + + // IE 9's matchesSelector returns false on + // disconnected nodes + if (ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in + // a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11) { + return ret; + } + } + } catch (e) { + } + } + + return Sizzle(expr, null, null, [ node ]).length > 0; + }; + } + })(); + + (function() { + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if (!div.getElementsByClassName + || div.getElementsByClassName("e").length === 0) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if (div.getElementsByClassName("e").length === 1) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function(match, context, isXML) { + if (typeof context.getElementsByClassName !== "undefined" + && !isXML) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; + })(); + + function dirNodeCheck(dir, cur, doneName, checkSet, nodeCheck, isXML) { + for (var i = 0, l = checkSet.length; i < l; i++) { + var elem = checkSet[i]; + + if (elem) { + var match = false; + + elem = elem[dir]; + + while (elem) { + if (elem[expando] === doneName) { + match = checkSet[elem.sizset]; + break; + } + + if (elem.nodeType === 1 && !isXML) { + elem[expando] = doneName; + elem.sizset = i; + } + + if (elem.nodeName.toLowerCase() === cur) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } + } + + function dirCheck(dir, cur, doneName, checkSet, nodeCheck, isXML) { + for (var i = 0, l = checkSet.length; i < l; i++) { + var elem = checkSet[i]; + + if (elem) { + var match = false; + + elem = elem[dir]; + + while (elem) { + if (elem[expando] === doneName) { + match = checkSet[elem.sizset]; + break; + } + + if (elem.nodeType === 1) { + if (!isXML) { + elem[expando] = doneName; + elem.sizset = i; + } + + if (typeof cur !== "string") { + if (elem === cur) { + match = true; + break; + } + + } else if (Sizzle.filter(cur, [ elem ]).length > 0) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } + } + + if (document.documentElement.contains) { + Sizzle.contains = function(a, b) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + + } else if (document.documentElement.compareDocumentPosition) { + Sizzle.contains = function(a, b) { + return !!(a.compareDocumentPosition(b) & 16); + }; + + } else { + Sizzle.contains = function() { + return false; + }; + } + + Sizzle.isXML = function(elem) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" + : false; + }; + + var posProcess = function(selector, context, seed) { + var match, tmpSet = [], later = "", root = context.nodeType ? [ context ] + : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ((match = Expr.match.PSEUDO.exec(selector))) { + later += match[0]; + selector = selector.replace(Expr.match.PSEUDO, ""); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for (var i = 0, l = root.length; i < l; i++) { + Sizzle(selector, root[i], tmpSet, seed); + } + + return Sizzle.filter(later, tmpSet); + }; + + // EXPOSE + // Override sizzle attribute retrieval + Sizzle.attr = jQuery.attr; + Sizzle.selectors.attrMap = {}; + jQuery.find = Sizzle; + jQuery.expr = Sizzle.selectors; + jQuery.expr[":"] = jQuery.expr.filters; + jQuery.unique = Sizzle.uniqueSort; + jQuery.text = Sizzle.getText; + jQuery.isXMLDoc = Sizzle.isXML; + jQuery.contains = Sizzle.contains; + + })(); + + var runtil = /Until$/, rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, isSimple = /^.[^:#\[\.,]*$/, slice = Array.prototype.slice, POS = jQuery.expr.match.POS, + // methods guaranteed to produce a unique set when starting from a unique + // set + guaranteedUnique = { + children : true, + contents : true, + next : true, + prev : true + }; + + jQuery.fn + .extend({ + find : function(selector) { + var self = this, i, l; + + if (typeof selector !== "string") { + return jQuery(selector).filter(function() { + for (i = 0, l = self.length; i < l; i++) { + if (jQuery.contains(self[i], this)) { + return true; + } + } + }); + } + + var ret = this.pushStack("", "find", selector), length, n, r; + + for (i = 0, l = this.length; i < l; i++) { + length = ret.length; + jQuery.find(selector, this[i], ret); + + if (i > 0) { + // Make sure that the results are unique + for (n = length; n < ret.length; n++) { + for (r = 0; r < length; r++) { + if (ret[r] === ret[n]) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has : function(target) { + var targets = jQuery(target); + return this.filter(function() { + for (var i = 0, l = targets.length; i < l; i++) { + if (jQuery.contains(this, targets[i])) { + return true; + } + } + }); + }, + + not : function(selector) { + return this.pushStack(winnow(this, selector, false), "not", + selector); + }, + + filter : function(selector) { + return this.pushStack(winnow(this, selector, true), + "filter", selector); + }, + + is : function(selector) { + return !!selector + && (typeof selector === "string" ? + // If this is a positional selector, check + // membership in the returned set + // so $("p:first").is("p:last") won't return true + // for a doc with two "p". + POS.test(selector) ? jQuery(selector, this.context) + .index(this[0]) >= 0 : jQuery.filter( + selector, this).length > 0 : this + .filter(selector).length > 0); + }, + + closest : function(selectors, context) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if (jQuery.isArray(selectors)) { + var level = 1; + + while (cur && cur.ownerDocument && cur !== context) { + for (i = 0; i < selectors.length; i++) { + + if (jQuery(cur).is(selectors[i])) { + ret.push({ + selector : selectors[i], + elem : cur, + level : level + }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test(selectors) + || typeof selectors !== "string" ? jQuery( + selectors, context || this.context) : 0; + + for (i = 0, l = this.length; i < l; i++) { + cur = this[i]; + + while (cur) { + if (pos ? pos.index(cur) > -1 : jQuery.find + .matchesSelector(cur, selectors)) { + ret.push(cur); + break; + + } else { + cur = cur.parentNode; + if (!cur || !cur.ownerDocument + || cur === context + || cur.nodeType === 11) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique(ret) : ret; + + return this.pushStack(ret, "closest", selectors); + }, + + // Determine the position of an element within + // the matched set of elements + index : function(elem) { + + // No argument, return index in parent + if (!elem) { + return (this[0] && this[0].parentNode) ? this.prevAll().length + : -1; + } + + // index in selector + if (typeof elem === "string") { + return jQuery.inArray(this[0], jQuery(elem)); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this); + }, + + add : function(selector, context) { + var set = typeof selector === "string" ? jQuery(selector, + context) : jQuery.makeArray(selector + && selector.nodeType ? [ selector ] : selector), all = jQuery + .merge(this.get(), set); + + return this.pushStack(isDisconnected(set[0]) + || isDisconnected(all[0]) ? all : jQuery + .unique(all)); + }, + + andSelf : function() { + return this.add(this.prevObject); + } + }); + + // A painfully simple check to see if an element is disconnected + // from a document (should be improved, where feasible). + function isDisconnected(node) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; + } + + jQuery.each({ + parent : function(elem) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents : function(elem) { + return jQuery.dir(elem, "parentNode"); + }, + parentsUntil : function(elem, i, until) { + return jQuery.dir(elem, "parentNode", until); + }, + next : function(elem) { + return jQuery.nth(elem, 2, "nextSibling"); + }, + prev : function(elem) { + return jQuery.nth(elem, 2, "previousSibling"); + }, + nextAll : function(elem) { + return jQuery.dir(elem, "nextSibling"); + }, + prevAll : function(elem) { + return jQuery.dir(elem, "previousSibling"); + }, + nextUntil : function(elem, i, until) { + return jQuery.dir(elem, "nextSibling", until); + }, + prevUntil : function(elem, i, until) { + return jQuery.dir(elem, "previousSibling", until); + }, + siblings : function(elem) { + return jQuery.sibling(elem.parentNode.firstChild, elem); + }, + children : function(elem) { + return jQuery.sibling(elem.firstChild); + }, + contents : function(elem) { + return jQuery.nodeName(elem, "iframe") ? elem.contentDocument + || elem.contentWindow.document : jQuery + .makeArray(elem.childNodes); + } + }, function(name, fn) { + jQuery.fn[name] = function(until, selector) { + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery + .unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) + && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + }); + + jQuery.extend({ + filter : function(expr, elems, not) { + if (not) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? jQuery.find.matchesSelector(elems[0], + expr) ? [ elems[0] ] : [] : jQuery.find + .matches(expr, elems); + }, + + dir : function(elem, dir, until) { + var matched = [], cur = elem[dir]; + + while (cur + && cur.nodeType !== 9 + && (until === undefined || cur.nodeType !== 1 || !jQuery( + cur).is(until))) { + if (cur.nodeType === 1) { + matched.push(cur); + } + cur = cur[dir]; + } + return matched; + }, + + nth : function(cur, result, dir, elem) { + result = result || 1; + var num = 0; + + for (; cur; cur = cur[dir]) { + if (cur.nodeType === 1 && ++num === result) { + break; + } + } + + return cur; + }, + + sibling : function(n, elem) { + var r = []; + + for (; n; n = n.nextSibling) { + if (n.nodeType === 1 && n !== elem) { + r.push(n); + } + } + + return r; + } + }); + + // Implement the identical functionality for filter and not + function winnow(elements, qualifier, keep) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if (jQuery.isFunction(qualifier)) { + return jQuery.grep(elements, function(elem, i) { + var retVal = !!qualifier.call(elem, i, elem); + return retVal === keep; + }); + + } else if (qualifier.nodeType) { + return jQuery.grep(elements, function(elem, i) { + return (elem === qualifier) === keep; + }); + + } else if (typeof qualifier === "string") { + var filtered = jQuery.grep(elements, function(elem) { + return elem.nodeType === 1; + }); + + if (isSimple.test(qualifier)) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter(qualifier, filtered); + } + } + + return jQuery.grep(elements, function(elem, i) { + return (jQuery.inArray(elem, qualifier) >= 0) === keep; + }); + } + + function createSafeFragment(document) { + var list = nodeNames.split("|"), safeFrag = document + .createDocumentFragment(); + + if (safeFrag.createElement) { + while (list.length) { + safeFrag.createElement(list.pop()); + } + } + return safeFrag; + } + + var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, rleadingWhitespace = /^\s+/, rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, rtagName = /<([\w:]+)/, rtbody = /", "" ], + legend : [ 1, "
", "
" ], + thead : [ 1, "", "
" ], + tr : [ 2, "", "
" ], + td : [ 3, "", "
" ], + col : [ 2, "", "
" ], + area : [ 1, "", "" ], + _default : [ 0, "", "" ] + }, safeFragment = createSafeFragment(document); + + wrapMap.optgroup = wrapMap.option; + wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; + wrapMap.th = wrapMap.td; + + // IE can't serialize and + + +<%-- Addition JS --%> + + + + + + + + + +
+ +
+ +
+ + + +
+ +
+ + +
+ + diff --git a/WebContent/user/user_info.jsp b/WebContent/user/user_info.jsp new file mode 100644 index 0000000..ac49a8b --- /dev/null +++ b/WebContent/user/user_info.jsp @@ -0,0 +1,3 @@ +<%@ taglib prefix="s" uri="/struts-tags"%> + + \ No newline at end of file diff --git a/build/classes/.gitignore b/build/classes/.gitignore new file mode 100644 index 0000000..b698c85 --- /dev/null +++ b/build/classes/.gitignore @@ -0,0 +1 @@ +/framgiavn/ diff --git a/build/classes/framgiavn/project01/web/model/User.hbm.xml b/build/classes/framgiavn/project01/web/model/User.hbm.xml new file mode 100644 index 0000000..1db9860 --- /dev/null +++ b/build/classes/framgiavn/project01/web/model/User.hbm.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select user + from User user + where user.user_id = + :user_id + + + \ No newline at end of file diff --git a/build/classes/struts-user.xml b/build/classes/struts-user.xml new file mode 100644 index 0000000..1cdb64a --- /dev/null +++ b/build/classes/struts-user.xml @@ -0,0 +1,23 @@ + + + + + + + + + {1} + User.Info + User.Info + User.Info + + + + {1} + User.Info + User.Info + + + \ No newline at end of file diff --git a/build/classes/struts.xml b/build/classes/struts.xml new file mode 100644 index 0000000..2b3f03a --- /dev/null +++ b/build/classes/struts.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + Default.SystemException + + + + + + + + + HomePage + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..c333b46 --- /dev/null +++ b/pom.xml @@ -0,0 +1,828 @@ + + 4.0.0 + Java-framework + Java-framework + 1.0 + + + + mysql + mysql-connector-java + 6.0.6 + + + + + org.hibernate + hibernate-core + 5.2.10.Final + + + + + dom4j + dom4j + 1.6.1 + + + + + antlr + antlr + 2.7.7 + + + + + javax.activation + activation + 1.1.1 + + + + + org.apache.activemq + activeio-core + 3.1.4 + + + + + org.apache.activemq + activemq-core + 5.7.0 + + + + + org.apache.activemq.protobuf + activemq-protobuf + 1.1 + + + + + eu.infomas + annotation-detector + 3.0.5 + + + + + aopalliance + aopalliance + 1.0 + + + + + org.ow2.asm + asm + 5.2 + + + + + org.ow2.asm + asm-commons + 5.2 + + + + + org.ow2.asm + asm-tree + 5.2 + + + + + org.aspectj + aspectjrt + 1.8.10 + + + + + org.aspectj + aspectjweaver + 1.8.10 + + + + + org.atmosphere + atmosphere-runtime + 2.4.13 + + + + + org.apache.ws.commons.axiom + axiom-api + 1.2.20 + + + + + org.apache.ws.commons.axiom + axiom-impl + 1.2.20 + + + + + org.apache.axis2 + axis2-adb + 1.7.5 + + + + + org.apache.axis2 + axis2-kernel + 1.7.5 + + + + + org.apache.axis2 + axis2-transport-http + 1.7.5 + + + + + org.apache.axis2 + axis2-transport-local + 1.7.5 + + + + + backport-util-concurrent + backport-util-concurrent + 3.1 + + + + + cglib + cglib + 3.2.5 + + + + + commons-beanutils + commons-beanutils + 1.9.3 + + + + + commons-chain + commons-chain + 1.2 + + + + + commons-io + commons-io + 2.5 + + + + + org.apache.commons + commons-lang3 + 3.6 + + + + + commons-lang + commons-lang + 2.6 + + + + + commons-logging + commons-logging + 1.2 + + + + + commons-logging + commons-logging-api + 1.1 + + + + + commons-codec + commons-codec + 1.10 + + + + + commons-collections + commons-collections + 3.2.2 + + + + + commons-digester + commons-digester + 2.1 + + + + + commons-fileupload + commons-fileupload + 1.3.3 + + + + + commons-httpclient + commons-httpclient + 3.1 + + + + + commons-net + commons-net + 3.6 + + + + + commons-validator + commons-validator + 1.6 + + + + + commons-vfs + commons-vfs + 1.0 + + + + + org.atmosphere + atmosphere-compat-jbossweb + 2.0.1 + + + + + org.atmosphere + atmosphere-compat-tomcat + 2.0.1 + + + + + net.sf.ehcache + ehcache-core + 2.6.11 + + + + + org.hibernate + ejb3-persistence + 1.0.2.GA + pom + + + + + org.freemarker + freemarker + 2.3.23 + + + + + org.apache.geronimo.specs + geronimo-j2ee-management_1.1_spec + 1.0.1 + + + + + org.apache.geronimo.specs + geronimo-jms_1.1_spec + 1.1.1 + + + + + com.google.inject + guice + 4.1.0 + + + + + org.hibernate + hibernate-annotations + 3.5.6-Final + + + + + org.hibernate + hibernate-commons-annotations + 3.3.0.ga + + + + + org.hibernate + hibernate-validator + 5.4.1.Final + + + + + org.apache.httpcomponents + httpclient + 4.5.3 + + + + + org.apache.httpcomponents + httpcore + 4.4.6 + + + + + org.codehaus.jackson + jackson-core-asl + 1.9.13 + + + + + org.codehaus.jackson + jackson-mapper-asl + 1.9.13 + + + + + org.jasypt + jasypt + 1.9.2 + + + + + org.javassist + javassist + 3.21.0-GA + + + + + net.jcip + jcip-annotations + 1.0 + + + + + org.jsoup + jsoup + 1.10.3 + + + + + javax.servlet + jstl + 1.2 + + + + + javax.transaction + jta + 1.1 + + + + + org.apache.activemq + activemq-kahadb-store + 5.15.0 + test + + + + + javax.mail + mail + 1.4.7 + + + + + org.apache.neethi + neethi + 3.0.3 + + + + + ognl + ognl + 3.2.2 + + + + + org.openid4java + openid4java-nodeps + 0.9.6 + + + + + org.osgi + org.osgi.core + 6.0.0 + provided + + + + + oro + oro + 2.0.8 + + + + + org.quartz-scheduler + quartz + 2.3.0 + + + + + com.restfb + restfb + 1.43.0 + + + + + org.slf4j + slf4j-api + 1.7.25 + + + + + org.slf4j + slf4j-log4j12 + 1.7.25 + test + + + + + org.springframework + spring-aop + 5.0.0.M5 + + + + + org.springframework + spring-asm + 3.1.4.Release + + + + + org.springframework + spring-context + 5.0.0.M5 + + + + + org.springframework + spring-aspects + 5.0.0.M5 + + + + + org.springframework + spring-beans + 5.0.0.M5 + + + + + org.springframework + spring-core + 5.0.0.M5 + + + + + org.springframework + spring-context-support + 5.0.0.M5 + + + + + org.springframework + spring-expression + 4.3.9.RELEASE + + + + + org.springframework + spring-instrument + 5.0.0.M5 + + + + + org.springframework + spring-jdbc + 5.0.0.M5 + + + + + org.springframework + spring-jms + 5.0.0.M5 + + + + + org.springframework + spring-orm + 5.0.0.M5 + + + + + org.springframework + spring-oxm + 5.0.0.M5 + + + + + org.springframework.security + spring-security-acl + 5.0.0.M2 + + + + + org.springframework.security + spring-security-config + 5.0.0.M2 + + + + + + + + org.springframework.security + spring-security-crypto + 4.2.3.RELEASE + + + + + org.springframework.security + spring-security-openid + 4.2.3.RELEASE + + + + + org.springframework.security + spring-security-taglibs + 4.2.3.RELEASE + + + + + org.springframework.security + spring-security-web + 4.2.3.RELEASE + + + + + org.springframework + spring-test + 4.3.9.RELEASE + test + + + + + org.springframework + spring-tx + 4.3.9.RELEASE + + + + + org.springframework + spring-web + 4.3.9.RELEASE + + + + + sslext + sslext + 1.2-0 + + + + + org.apache.struts + struts2-config-browser-plugin + 2.5.12 + + + + + + + + org.apache.struts + struts2-json-plugin + 2.5.12 + + + + + org.apache.struts + struts2-junit-plugin + 2.5.12 + test + + + + + org.apache.struts + struts2-spring-plugin + 2.5.12 + + + + + org.apache.struts + struts2-testng-plugin + 2.5.12 + + + + + org.apache.struts + struts2-tiles-plugin + 2.5.12 + + + + + org.testng + testng + 6.11 + test + + + + + org.apache.tiles + tiles-api + 3.0.7 + + + + + org.apache.tiles + tiles-core + 3.0.7 + + + + + org.apache.tiles + tiles-jsp + 3.0.7 + + + + + org.twitter4j + twitter4j-core + 4.0.6 + + + + + org.apache.velocity + velocity + 1.7 + + + + + velocity + velocity-dep + 1.4 + + + + + org.apache.velocity + velocity-tools + 2.0 + + + + + wsdl4j + wsdl4j + 1.6.3 + + + + + xml-apis + xml-apis + 2.0.2 + + + + + org.apache.ws.commons.schema + XmlSchema + 1.4.7 + + + + + org.apache.struts.xwork + xwork-core + 2.3.33 + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + /lib + + + + + + + diff --git a/resources/log4j.properties b/resources/log4j.properties new file mode 100644 index 0000000..caaf9d6 --- /dev/null +++ b/resources/log4j.properties @@ -0,0 +1,32 @@ +#For the standard levels, we have DEBUG < INFO < WARN < ERROR < FATAL. +#====================================================================== +log4j.rootCategory=INFO,cons + +log4j.logger.org.jasig.cas=INFO, WebLog +log4j.category.java.lang=INFO, WebLog +log4j.category.org.springframework=INFO, WebLog +log4j.category.org.apache=INFO, WebLog +log4j.category.org.hibernate=INFO, WebLog +log4j.category.com.mysql=INFO, WebLog +log4j.category.net.sf=INFO, WebLog +log4j.category.com.opensymphony=ERROR, WebLog +log4j.category.freemarker=INFO, WebLog +log4j.category.org.eclipse=INFO, WebLog +log4j.category.com.lowagie=INFO, WebLog +log4j.category.com.gjt=INFO, WebLog +log4j.category.edu.emory=INFO, WebLog +log4j.category.org.jaxen=INFO, WebLog +log4j.category.org.quartz=INFO, WebLog +log4j.category.org.apache.velocity=INFO, WebLog +log4j.category.com.googlecode=INFO, WebLog + +## Log console +log4j.appender.cons=org.apache.log4j.ConsoleAppender +log4j.appender.cons.layout=org.apache.log4j.PatternLayout +log4j.appender.cons.layout.ConversionPattern=%5p [%t] (%F:%L)- %m%n +log4j.appender.files.File=D:/logs/console.log +log4j.appender.files.MaxFileSize=10MB +log4j.appender.files.MaxBackupIndex=1 +log4j.appender.files.layout=org.apache.log4j.PatternLayout +log4j.appender.files.layout.ConversionPattern=%-5p\: %-2C{5} [%d{dd/MM/yyyy HH\:mm\:ss}]\: %-2m%n +#====================================================================== \ No newline at end of file diff --git a/resources/spring-server-config.properties b/resources/spring-server-config.properties new file mode 100644 index 0000000..9bc9f95 --- /dev/null +++ b/resources/spring-server-config.properties @@ -0,0 +1,8 @@ +### Configure for Mysql DB +jdbc.driverClassName=com.mysql.jdbc.Driver +jdbc.url=jdbc:mysql://localhost:3306/java + + +jdbc.username=root +jdbc.password= +jdbc.showSql=false; \ No newline at end of file diff --git a/src/framgiavn/project01/web/action/UserAction.java b/src/framgiavn/project01/web/action/UserAction.java new file mode 100644 index 0000000..fd3fbb2 --- /dev/null +++ b/src/framgiavn/project01/web/action/UserAction.java @@ -0,0 +1,48 @@ +package framgiavn.project01.web.action; + +import com.opensymphony.xwork2.ActionSupport; + +import framgiavn.project01.web.business.UserBusiness; +import framgiavn.project01.web.model.User; + +public class UserAction extends ActionSupport { + + /** + * + */ + private static final long serialVersionUID = 1L; + + // private Logit2 log = Logit2.getInstance(UserAction.class); + + private UserBusiness userBusiness = null; + private User user = null; + + public void setUserBusiness(UserBusiness userBusiness) { + this.userBusiness = userBusiness; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public String findByUserId() { +// user = userBusiness.findByUserId(user.getUser_id()); + return SUCCESS; + } + + public String findByUsername() { +// user = userBusiness.findByUsername(user.getUsername()); + return SUCCESS; + } + + public String homePage() { + System.out + .println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); + return SUCCESS; + } + +} \ No newline at end of file diff --git a/src/framgiavn/project01/web/business/UserBusiness.java b/src/framgiavn/project01/web/business/UserBusiness.java new file mode 100644 index 0000000..636c4ca --- /dev/null +++ b/src/framgiavn/project01/web/business/UserBusiness.java @@ -0,0 +1,10 @@ +package framgiavn.project01.web.business; + +import framgiavn.project01.web.info.UserInfo; +import framgiavn.project01.web.model.User; + +public interface UserBusiness { + public UserInfo findByUserId(Integer user_id); + + public UserInfo findByUsername(String username); +} \ No newline at end of file diff --git a/src/framgiavn/project01/web/business/impl/UserBusinessImpl.java b/src/framgiavn/project01/web/business/impl/UserBusinessImpl.java new file mode 100644 index 0000000..07b46b2 --- /dev/null +++ b/src/framgiavn/project01/web/business/impl/UserBusinessImpl.java @@ -0,0 +1,42 @@ +package framgiavn.project01.web.business.impl; + +import framgiavn.project01.web.business.UserBusiness; +import framgiavn.project01.web.dao.UserDAO; +import framgiavn.project01.web.info.UserInfo; +import framgiavn.project01.web.model.User; + +public class UserBusinessImpl implements UserBusiness { + + private UserDAO userDAO; + + public UserDAO getUserDAO() { + return userDAO; + } + + public void setUserDAO(UserDAO userDAO) { + this.userDAO = userDAO; + } + + @Override + public UserInfo findByUserId(Integer user_id) { + try { +// return getUserDAO().findByUserId(user_id); + return null; + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Override + public UserInfo findByUsername(String username) { + try { +// return getUserDAO().findByUsername(username); + return null; + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + +} \ No newline at end of file diff --git a/src/framgiavn/project01/web/dao/UserDAO.java b/src/framgiavn/project01/web/dao/UserDAO.java new file mode 100644 index 0000000..605d977 --- /dev/null +++ b/src/framgiavn/project01/web/dao/UserDAO.java @@ -0,0 +1,9 @@ +package framgiavn.project01.web.dao; + +import framgiavn.project01.web.model.User; + +public interface UserDAO { + public User findByUserId(Integer user_id); + + public User findByUsername(String username); +} \ No newline at end of file diff --git a/src/framgiavn/project01/web/dao/impl/UserDAOImpl.java b/src/framgiavn/project01/web/dao/impl/UserDAOImpl.java new file mode 100644 index 0000000..95d7faf --- /dev/null +++ b/src/framgiavn/project01/web/dao/impl/UserDAOImpl.java @@ -0,0 +1,53 @@ +package framgiavn.project01.web.dao.impl; + +import org.hibernate.LockMode; +import org.hibernate.Query; +import org.hibernate.SessionFactory; + +import framgiavn.project01.web.dao.UserDAO; +import framgiavn.project01.web.model.User; +import framgiavn.project01.web.ulti.Logit2; + +public class UserDAOImpl implements UserDAO { + + private static final Logit2 log = Logit2.getInstance(UserDAOImpl.class); + public SessionFactory sessionFactory; + + + public SessionFactory getSessionFactory() { + return sessionFactory; + } + + public void setSessionFactory(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + protected void initDAO() { + // Do nothing + } + + @Override + public User findByUserId(Integer user_id) { + return findByUserId(user_id, false); + } + + public User findByUserId(Integer user_id, boolean lock) { + try { + Query query = sessionFactory.getCurrentSession().getNamedQuery("User.SelectUserByUserId"); + if (lock) + query.setLockMode("User", LockMode.UPGRADE); + query.setParameter("user_id", user_id); + return (User) query.uniqueResult(); + } catch (RuntimeException re) { + log.error("get failed", re); + throw re; + } + } + + @Override + public User findByUsername(String username) { + // TODO Auto-generated method stub + return null; + } + +} \ No newline at end of file diff --git a/src/framgiavn/project01/web/info/UserInfo.java b/src/framgiavn/project01/web/info/UserInfo.java new file mode 100644 index 0000000..2e4d77a --- /dev/null +++ b/src/framgiavn/project01/web/info/UserInfo.java @@ -0,0 +1,5 @@ +package framgiavn.project01.web.info; + +public class UserInfo { + +} diff --git a/src/framgiavn/project01/web/model/User.hbm.xml b/src/framgiavn/project01/web/model/User.hbm.xml new file mode 100644 index 0000000..1db9860 --- /dev/null +++ b/src/framgiavn/project01/web/model/User.hbm.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select user + from User user + where user.user_id = + :user_id + + + \ No newline at end of file diff --git a/src/framgiavn/project01/web/model/User.java b/src/framgiavn/project01/web/model/User.java new file mode 100644 index 0000000..82a250c --- /dev/null +++ b/src/framgiavn/project01/web/model/User.java @@ -0,0 +1,67 @@ +package framgiavn.project01.web.model; + +import java.io.Serializable; + +public class User implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 1L; + + private int user_id; + private String username; + private String password; + private String email; + private String avatar; + + private boolean isAdmin; + + public int getUser_id() { + return user_id; + } + + public void setUser_id(int user_id) { + this.user_id = user_id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public boolean getIsAdmin() { + return isAdmin; + } + + public void setIsAdmin(boolean isAdmin) { + this.isAdmin = isAdmin; + } +} \ No newline at end of file diff --git a/src/framgiavn/project01/web/ulti/Helpers.java b/src/framgiavn/project01/web/ulti/Helpers.java new file mode 100644 index 0000000..0b19a52 --- /dev/null +++ b/src/framgiavn/project01/web/ulti/Helpers.java @@ -0,0 +1,254 @@ +package framgiavn.project01.web.ulti; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Queue; +import java.util.Set; +import java.util.TreeSet; + +/** + * Helpers class, which contains static methods helper methods like loading the + * given property file etc. + */ +public final class Helpers { + + // file name + private static final String CGS_CONFIG_FILE = "cgs_config.properties"; + private static final String CGS_SERVER_FILE = "spring-server-config.properties"; + + // for logging + // private static final Logit m_log = Logit.getInstance(Helpers.class); + + // singleton + private Helpers() { + ; + } + + /** + * Loads the given property file by searching the CLASSPATH or + * java.class.path system property value and returns the Properties object. + * + * @param propertyFileName + * Name of the property file. + * @return Returns Properties object containing the contents of the + * specified Properties file. + * @exception java.io.FileNotFoundException + * Thrown if the given property file could not found in the + * CLASSPATH. + */ + @SuppressWarnings("unused") + public static Properties getProperties(String propertyFileName) + throws java.io.FileNotFoundException { + + InputStream is = null; + try { + String configPath = System.getProperty("configPath"); + File file = new File(configPath + File.separator + propertyFileName); + System.out + .println("####################################################### " + + configPath); + is = new FileInputStream(file); + + if (is == null) { + throw new FileNotFoundException(propertyFileName + " not found"); + } + + // load properties + Properties props = new Properties(); + props.load(is); + return props; + + } catch (Exception ignore) { + ignore.printStackTrace(); + throw new java.io.FileNotFoundException(propertyFileName + + " not found"); + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + /** + * Loads the given property file by searching the CLASSPATH or + * java.class.path system property value and returns the Properties object. + * + * @param propertyFileName + * Name of the property file. + * @param onNotFound + * Properties to return if the named properties file is not + * found. + * @return Returns Properties object containing the contents of the + * specified Properties file if found, or the onNotFound value if + * not found. + */ + public static Properties getProperties(String propertyFileName, + Properties onNotFound) { + try { + return getProperties(propertyFileName); + } catch (java.io.FileNotFoundException fe) { + // m_log.warn("Properties file not found: " + propertyFileName); + return onNotFound; + } + } + + public static int getIntegerProperty(Properties p, String name, + int defaultValue) { + String l = p.getProperty(name); + return l == null ? defaultValue : Integer.valueOf(l).intValue(); + } + + public static String getStringProperty(Properties p, String name, + String defaultValue) { + String propertyValue = p.getProperty(name); + return propertyValue == null ? defaultValue : propertyValue; + } + + public static boolean getBooleanProperty(Properties p, String name, + boolean defaultValue) { + String propertyValue = p.getProperty(name); + return propertyValue == null ? defaultValue + : new Boolean(propertyValue).booleanValue(); + } + + public static String createStringId(String header, int n, long id) { + NumberFormat idFormat = createNumberFormat(n); + return header + idFormat.format(id); + } + + public static String createStringId(String header, int n, int id) { + NumberFormat idFormat = createNumberFormat(n); + return header + idFormat.format(id); + } + + /** + * get value from cgs_config.properties + * + * @param key + * @return + * @throws Exception + */ + public static String getCgsProperty(String key) throws Exception { + return getStringProperty(getProperties(CGS_CONFIG_FILE), key, ""); + } + + /** + * get value from spring-server-config.properties + * + * @param key + * @return + * @throws Exception + */ + public static String getServerProperty(String key) throws Exception { + return getStringProperty(getProperties(CGS_SERVER_FILE), key, ""); + } + + private static NumberFormat createNumberFormat(int n) { + NumberFormat idFormat = null; + try { + + StringBuffer sb = new StringBuffer(""); + for (int i = 0; i < n; i++) { + sb = sb.append("0"); + } + idFormat = new DecimalFormat(sb.toString()); + } catch (Exception e) { + e.printStackTrace(); + } + return idFormat; + } + + public static String getFullPath(String fileName) + throws java.io.FileNotFoundException { + try { + String configPath = System.getProperty("configPath"); + if (configPath == null) { + configPath = ""; + } + // System.out.println("configPath=" + configPath); + // System.out.println("File.separatorChar = " + File.separatorChar); + return configPath + File.separator + fileName; + + } catch (Exception ignore) { + ignore.printStackTrace(); + throw new java.io.FileNotFoundException(fileName); + } + + } + + public static boolean isEmpty(List value) { + return value == null || value.size() == 0; + } + + public static boolean isEmpty(Collection value) { + return value == null || value.size() == 0; + } + + public static boolean isEmpty(Queue value) { + return value == null || value.size() == 0; + } + + public static boolean isEmpty(Set value) { + return value == null || value.size() == 0; + } + + public static boolean isEmpty(String value) { + return value == null || value.equals("") || value.trim().equals(""); + } + + public static boolean isEmpty(String value, boolean isTrim) { + if (isTrim) { + return value == null || value.trim().equals(""); + } else { + return value == null || value.equals(""); + } + } + + public static boolean isEmpty(Object[] value) { + return value == null || value.length == 0; + } + + public static boolean isEmpty(Map value) { + return value == null || value.size() == 0; + } + + public static Integer toInteger(Object obj) { + if (obj == null) { + return null; + } + try { + return Integer.parseInt(obj.toString()); + } catch (Exception e) { + return null; + } + } + + public static BigDecimal toBigDecimal(Object obj) { + if (obj == null) { + return null; + } + try { + return new BigDecimal(obj.toString()); + } catch (Exception e) { + return null; + } + } + +} \ No newline at end of file diff --git a/src/framgiavn/project01/web/ulti/Logit2.java b/src/framgiavn/project01/web/ulti/Logit2.java new file mode 100644 index 0000000..92b7f12 --- /dev/null +++ b/src/framgiavn/project01/web/ulti/Logit2.java @@ -0,0 +1,255 @@ +package framgiavn.project01.web.ulti; + +import java.util.Properties; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.PropertyConfigurator; + +public class Logit2 { + private static String propertiesFilename = "log4j.properties"; + protected Log log; + + static { + Properties p = null; + try { + p = Helpers.getProperties(propertiesFilename); + } catch (java.io.FileNotFoundException e) { + } + if (p != null) { + PropertyConfigurator.configure(p); + } else { + System.err.println("Logit could not find " + propertiesFilename); + System.err.println("Logit will use default configuration"); + BasicConfigurator.configure(); + } + } + + /** + * Get an instance of Logit. + * + * @param classInstance + * Class to hold the instance. + * @retrun An instance of Logit. + */ + public static Logit2 getInstance(Class classInstance) { + return new Logit2(classInstance.getName()); + } + + /** + * Get an instance of Logit. + * + * @param String + * to hold the instance. add by wangxl . 20050228 + * @retrun An instance of Logit. + */ + public static Logit2 getInstance(String className) { + return new Logit2(className); + } + + /** + * Constructor with a class name. + * + * @param className + * Class name to hold the instance. + */ + private Logit2(String className) { + log = LogFactory.getLog(className); + } + + /** + * Prevent the default constructor. + */ + private Logit2() { + } + + /** + * Check if DEBUG priority enabled. + * + * @return true if enabled, false otherwise. + */ + public boolean ison() { + return log.isDebugEnabled(); + } + + /** + * Log a text debug message. + * + * @param message + * Message to log. + */ + public void debug(String message) { + log.debug(message); + } + + /** + * Log a object debug message. + * + * @param message + * Message to log. + */ + public void debug(Object message) { + log.debug(message); + } + + /** + * Log a text debug message with a stack trace. + * + * @param message + * Message to log. + * @param t + * Throwable instance to log. + */ + public void debug(String message, Throwable t) { + log.debug(message, t); + } + + /** + * Log a object debug message with a stack trace. + * + * @param message + * Message to log. + * @param t + * Throwable instance to log. + */ + public void debug(Object message, Throwable t) { + log.debug(message, t); + } + + /** + * Log a text info message. + * + * @param message + * Message to log. + */ + public void info(String message) { + log.info(message); + } + + /** + * Log a object info message. + * + * @param message + * Message to log. + */ + public void info(Object message) { + log.info(message); + } + + /** + * Log a text info message with a stack trace. + * + * @param message + * Message to log. + * @param t + * Throwable instance to log. + */ + public void info(String message, Throwable t) { + log.info(message, t); + } + + /** + * Log a object info message with a stack trace. + * + * @param message + * Message to log. + * @param t + * Throwable instance to log. + */ + public void info(Object message, Throwable t) { + log.info(message, t); + } + + /** + * Log a text warn message. + * + * @param message + * Message to log. + */ + public void warn(String message) { + log.warn(message); + } + + /** + * Log a object warn message. + * + * @param message + * Message to log. + */ + public void warn(Object message) { + log.warn(message); + } + + /** + * Log a text warn message with a stack trace. + * + * @param message + * Message to log. + * @param t + * Throwable instance to log. + */ + public void warn(String message, Throwable t) { + log.warn(message, t); + } + + /** + * Log a object warn message with a stack trace. + * + * @param message + * Message to log. + * @param t + * Throwable instance to log. + */ + public void warn(Object message, Throwable t) { + log.warn(message, t); + } + + /** + * Log a text error message. + * + * @param message + * Message to log. + */ + public void error(String message) { + log.error(message); + } + + /** + * Log a object error message. + * + * @param message + * Message to log. + */ + public void error(Object message) { + if (message instanceof Throwable) { + error(message, (Throwable) message); + } else { + log.error(message); + } + } + + /** + * Log a text error message with a stack trace. + * + * @param message + * Message to log. + * @param t + * Throwable instance to log. + */ + public void error(String message, Throwable t) { + log.error(message, t); + } + + /** + * Log a object error message with a stack trace. + * + * @param message + * Message to log. + * @param t + * Throwable instance to log. + */ + public void error(Object message, Throwable t) { + log.error(message, t); + } +} \ No newline at end of file diff --git a/src/struts-user.xml b/src/struts-user.xml new file mode 100644 index 0000000..1cdb64a --- /dev/null +++ b/src/struts-user.xml @@ -0,0 +1,23 @@ + + + + + + + + + {1} + User.Info + User.Info + User.Info + + + + {1} + User.Info + User.Info + + + \ No newline at end of file diff --git a/src/struts.xml b/src/struts.xml new file mode 100644 index 0000000..2b3f03a --- /dev/null +++ b/src/struts.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + Default.SystemException + + + + + + + + + HomePage + + + + + + + \ No newline at end of file