]> _ Git - sandvik-screen-selection.git/commitdiff
wip #6483 @0.75
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 24 Nov 2023 08:12:24 +0000 (09:12 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Fri, 24 Nov 2023 08:12:24 +0000 (09:12 +0100)
37 files changed:
.gitignore [new file with mode: 0644]
.idea/$CACHE_FILE$ [new file with mode: 0644]
.idea/ScreenSelectionGuide.iml [new file with mode: 0644]
.idea/codeStyles/Project.xml [new file with mode: 0644]
.idea/codeStyles/codeStyleConfig.xml [new file with mode: 0644]
.idea/composerJson.xml [new file with mode: 0644]
.idea/deployment.xml [new file with mode: 0644]
.idea/misc.xml [new file with mode: 0644]
.idea/modules.xml [new file with mode: 0644]
.idea/vcs.xml [new file with mode: 0644]
.idea/watcherTasks.xml [new file with mode: 0644]
ScreenSelectionGuide.zip [new file with mode: 0644]
_doc/Copy of SCREEN SELECTION GUIDE 10-1.xlsx [new file with mode: 0644]
_doc/screenselection.xlsx [new file with mode: 0644]
_doc/translations.xlsx [new file with mode: 0644]
fonts/AktivGrotesk_W_Lt.woff [new file with mode: 0644]
fonts/AktivGrotesk_W_Rg.woff [new file with mode: 0644]
images/back-arrow.svg [new file with mode: 0644]
images/lines.svg [new file with mode: 0644]
images/locale.svg [new file with mode: 0644]
images/logo.svg [new file with mode: 0644]
images/select-arrow.svg [new file with mode: 0644]
index.html [new file with mode: 0644]
js/common.js [new file with mode: 0644]
js/data.js [new file with mode: 0644]
js/jquery.min.js [new file with mode: 0644]
js/lib.js [new file with mode: 0644]
js/links.js [new file with mode: 0644]
js/locales.js [new file with mode: 0644]
js/project.js [new file with mode: 0644]
js/script.js [new file with mode: 0644]
js/select2.js [new file with mode: 0644]
js/sprintf.min.js [new file with mode: 0644]
style.less [new file with mode: 0644]
tools/common.php [new file with mode: 0644]
tools/importtranslations.php [new file with mode: 0644]
tools/refreshdata.php [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..2443197
--- /dev/null
@@ -0,0 +1,4 @@
+*.css
+*.css*.map
+~$*.xlsx
+.idea/workspace.xml
\ No newline at end of file
diff --git a/.idea/$CACHE_FILE$ b/.idea/$CACHE_FILE$
new file mode 100644 (file)
index 0000000..bc060dc
--- /dev/null
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="NodePackageJsonFileManager">
+    <packageJsonPaths />
+  </component>
+  <component name="ProjectInspectionProfilesVisibleTreeState">
+    <entry key="Project Default">
+      <profile-state>
+        <expanded-state>
+          <State>
+            <id />
+          </State>
+          <State>
+            <id>Abstraction issuesJava</id>
+          </State>
+          <State>
+            <id>Android Lint</id>
+          </State>
+          <State>
+            <id>Class metricsJava</id>
+          </State>
+          <State>
+            <id>Code StylePHP</id>
+          </State>
+          <State>
+            <id>Code maturity issuesJava</id>
+          </State>
+          <State>
+            <id>Code style issuesJava</id>
+          </State>
+          <State>
+            <id>CoffeeScript</id>
+          </State>
+          <State>
+            <id>Concurrency annotation issuesJava</id>
+          </State>
+          <State>
+            <id>Control flow issuesJava</id>
+          </State>
+          <State>
+            <id>Cucumber</id>
+          </State>
+          <State>
+            <id>DOM issuesJavaScript</id>
+          </State>
+          <State>
+            <id>Declaration redundancyJava</id>
+          </State>
+          <State>
+            <id>DeclarationGroovy</id>
+          </State>
+          <State>
+            <id>Django</id>
+          </State>
+          <State>
+            <id>General</id>
+          </State>
+          <State>
+            <id>GeneralCoffeeScript</id>
+          </State>
+          <State>
+            <id>GeneralJavaScript</id>
+          </State>
+          <State>
+            <id>Google Web Toolkit issues</id>
+          </State>
+          <State>
+            <id>Groovy</id>
+          </State>
+          <State>
+            <id>Initialization issuesJava</id>
+          </State>
+          <State>
+            <id>Internationalization issues</id>
+          </State>
+          <State>
+            <id>Internationalization issuesJava</id>
+          </State>
+          <State>
+            <id>J2ME issuesJava</id>
+          </State>
+          <State>
+            <id>JPA issues</id>
+          </State>
+          <State>
+            <id>Java</id>
+          </State>
+          <State>
+            <id>Java language level issuesJava</id>
+          </State>
+          <State>
+            <id>Java language level migration aidsJava</id>
+          </State>
+          <State>
+            <id>JavaScript</id>
+          </State>
+          <State>
+            <id>Javadoc issuesJava</id>
+          </State>
+          <State>
+            <id>Memory issuesJava</id>
+          </State>
+          <State>
+            <id>Method metricsJava</id>
+          </State>
+          <State>
+            <id>PHP</id>
+          </State>
+          <State>
+            <id>Packaging issuesJava</id>
+          </State>
+          <State>
+            <id>Performance issuesJava</id>
+          </State>
+          <State>
+            <id>Plugin DevKit</id>
+          </State>
+          <State>
+            <id>Portability issuesJava</id>
+          </State>
+          <State>
+            <id>Probable bugsCoffeeScript</id>
+          </State>
+          <State>
+            <id>Probable bugsGroovy</id>
+          </State>
+          <State>
+            <id>Probable bugsJava</id>
+          </State>
+          <State>
+            <id>Probable bugsJavaScript</id>
+          </State>
+          <State>
+            <id>RELAX NG</id>
+          </State>
+          <State>
+            <id>SQL</id>
+          </State>
+          <State>
+            <id>Security issuesJava</id>
+          </State>
+          <State>
+            <id>Serialization issuesJava</id>
+          </State>
+          <State>
+            <id>Spring</id>
+          </State>
+          <State>
+            <id>Spring CoreSpring</id>
+          </State>
+          <State>
+            <id>Struts</id>
+          </State>
+          <State>
+            <id>Struts 2Struts</id>
+          </State>
+          <State>
+            <id>Threading issuesGroovy</id>
+          </State>
+          <State>
+            <id>Threading issuesJava</id>
+          </State>
+          <State>
+            <id>Visibility issuesJava</id>
+          </State>
+          <State>
+            <id>XMLSpring CoreSpring</id>
+          </State>
+        </expanded-state>
+        <selected-state>
+          <State>
+            <id>Android</id>
+          </State>
+        </selected-state>
+      </profile-state>
+    </entry>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/ScreenSelectionGuide.iml b/.idea/ScreenSelectionGuide.iml
new file mode 100644 (file)
index 0000000..d6ebd48
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644 (file)
index 0000000..645f4a0
--- /dev/null
@@ -0,0 +1,22 @@
+<component name="ProjectCodeStyleConfiguration">
+  <code_scheme name="Project" version="173">
+    <JetCodeStyleSettings>
+      <option name="PACKAGES_TO_USE_STAR_IMPORTS">
+        <value>
+          <package name="java.util" alias="false" withSubpackages="false" />
+          <package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" />
+          <package name="io.ktor" alias="false" withSubpackages="true" />
+        </value>
+      </option>
+      <option name="PACKAGES_IMPORT_LAYOUT">
+        <value>
+          <package name="" alias="false" withSubpackages="true" />
+          <package name="java" alias="false" withSubpackages="true" />
+          <package name="javax" alias="false" withSubpackages="true" />
+          <package name="kotlin" alias="false" withSubpackages="true" />
+          <package name="" alias="true" withSubpackages="true" />
+        </value>
+      </option>
+    </JetCodeStyleSettings>
+  </code_scheme>
+</component>
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644 (file)
index 0000000..a55e7a1
--- /dev/null
@@ -0,0 +1,5 @@
+<component name="ProjectCodeStyleConfiguration">
+  <state>
+    <option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
+  </state>
+</component>
\ No newline at end of file
diff --git a/.idea/composerJson.xml b/.idea/composerJson.xml
new file mode 100644 (file)
index 0000000..1b07430
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ComposerJsonPluginSettings">
+    <unboundedVersionInspectionSettings>
+      <excludedPackages />
+    </unboundedVersionInspectionSettings>
+    <customRepositories />
+    <composerUpdateOptions />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/deployment.xml b/.idea/deployment.xml
new file mode 100644 (file)
index 0000000..3be5caf
--- /dev/null
@@ -0,0 +1,422 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PublishConfigData" autoUpload="Always" serverName="demo1.cubedesigners.com" confirmBeforeDeletion="false" autoUploadExternalChanges="true">
+    <option name="confirmBeforeDeletion" value="false" />
+    <serverData>
+      <paths name="alphaville.cubedesigners.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="demo1.cubedesigners.com">
+        <serverdata>
+          <mappings>
+            <mapping deploy="/Sandvik/ScreenSelectionGuide" local="$PROJECT_DIR$" web="/Sandvik/ScreenSelectionGuide/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev-digital.danone.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.ccgm.fr">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.cubedesigners.fr">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.cubjeans.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.detouteslescouleurs.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.enko-running-shoes.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.extranet.cubedesigners.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.fluidbook.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.pm-instrumentation.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.rbcmobilier.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.renversez.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.toolbox.fluidbook.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="dev.toolbox.fluidbook.com (Host)">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="digitaltoolbox.danone.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="etatpur.ei-plateforme1.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="extranet.cubedesigners.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="extranet.preventicom.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="hosting.fluidbook.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="kingkong.cubedesigners.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="m.cubjeans.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="magento.enko-running-shoes.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="odl.cube">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="odl.paris.cubedesigners.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="parrotmail.dev.cubedesigners.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="preview.cubedesigners.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="pro.cubjeans.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="simeox.dev.cubedesigners.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="songbook.enhydra.fr">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="stats3.fluidbook.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="toolbox.fluidbook.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="toolbox.fluidbook.com (Host)">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="vps-e87c4d02.vps.ovh.net">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="workshop.fluidbook.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.adangelis.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.animeland.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.ccgm.fr">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.cesaretleonie.fr">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.cfgv.fr">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.cubedesigners.fr">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.cubjeans.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.detouteslescouleurs.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.enko-running-shoes.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.eurofinsadmebioanalyses.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.fluidbook.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.hf-customercare.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.kadreo.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.mdryvescouzy.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.microbas.se">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.mirakl.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.optimed-recrutement.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.pavillonmadeleine.fr">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.physioassist.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.pm-instrumentation.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.preventicom.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.rbcmobilier.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.renversez.com">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+      <paths name="www.sycomore-am.com (1)">
+        <serverdata>
+          <mappings>
+            <mapping local="$PROJECT_DIR$" web="/" />
+          </mappings>
+        </serverdata>
+      </paths>
+    </serverData>
+    <option name="myAutoUpload" value="ALWAYS" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644 (file)
index 0000000..a8b25a0
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AhkProjectSettings">
+    <option name="defaultAhkSdk" value="AutoHotkey" />
+  </component>
+  <component name="EncodingComponent">
+    <option name="projectEncoding" />
+  </component>
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" />
+  <component name="SvnBranchConfigurationManager">
+    <option name="myConfigurationMap">
+      <map>
+        <entry key="$PROJECT_DIR$">
+          <value>
+            <SvnBranchConfiguration>
+              <option name="trunkUrl" value="svn+ssh://svn.cubedesigners.com/projects/Sandvik/ScreenSelectionGuide" />
+            </SvnBranchConfiguration>
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+  <component name="TaskProjectConfiguration">
+    <server type="Redmine" url="https://team.cubedesigners.com/redmine" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644 (file)
index 0000000..59a4b9b
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/ScreenSelectionGuide.iml" filepath="$PROJECT_DIR$/.idea/ScreenSelectionGuide.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644 (file)
index 0000000..35eb1dd
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml
new file mode 100644 (file)
index 0000000..2c91a19
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectTasksOptions">
+    <TaskOptions isEnabled="true">
+      <option name="arguments" value="$FileName$ $FileNameWithoutExtension$.css --source-map" />
+      <option name="checkSyntaxErrors" value="true" />
+      <option name="description" />
+      <option name="exitCodeBehavior" value="ERROR" />
+      <option name="fileExtension" value="less" />
+      <option name="immediateSync" value="true" />
+      <option name="name" value="Less" />
+      <option name="output" value="$FileNameWithoutExtension$.css:$FileNameWithoutExtension$.css.map" />
+      <option name="outputFilters">
+        <array>
+          <FilterInfo>
+            <option name="description" value="" />
+            <option name="name" value="" />
+            <option name="regExp" value="$MESSAGE$\Q in \E$FILE_PATH$\Q on line \E$LINE$\Q, column \E$COLUMN$" />
+          </FilterInfo>
+        </array>
+      </option>
+      <option name="outputFromStdout" value="false" />
+      <option name="program" value="lessc" />
+      <option name="runOnExternalChanges" value="true" />
+      <option name="scopeName" value="Project Files" />
+      <option name="trackOnlyRoot" value="true" />
+      <option name="workingDir" value="$FileDir$" />
+      <envs />
+    </TaskOptions>
+  </component>
+</project>
\ No newline at end of file
diff --git a/ScreenSelectionGuide.zip b/ScreenSelectionGuide.zip
new file mode 100644 (file)
index 0000000..aafb20f
Binary files /dev/null and b/ScreenSelectionGuide.zip differ
diff --git a/_doc/Copy of SCREEN SELECTION GUIDE 10-1.xlsx b/_doc/Copy of SCREEN SELECTION GUIDE 10-1.xlsx
new file mode 100644 (file)
index 0000000..21c140b
Binary files /dev/null and b/_doc/Copy of SCREEN SELECTION GUIDE 10-1.xlsx differ
diff --git a/_doc/screenselection.xlsx b/_doc/screenselection.xlsx
new file mode 100644 (file)
index 0000000..681fa34
Binary files /dev/null and b/_doc/screenselection.xlsx differ
diff --git a/_doc/translations.xlsx b/_doc/translations.xlsx
new file mode 100644 (file)
index 0000000..0044ff5
Binary files /dev/null and b/_doc/translations.xlsx differ
diff --git a/fonts/AktivGrotesk_W_Lt.woff b/fonts/AktivGrotesk_W_Lt.woff
new file mode 100644 (file)
index 0000000..771685c
Binary files /dev/null and b/fonts/AktivGrotesk_W_Lt.woff differ
diff --git a/fonts/AktivGrotesk_W_Rg.woff b/fonts/AktivGrotesk_W_Rg.woff
new file mode 100644 (file)
index 0000000..1577e14
Binary files /dev/null and b/fonts/AktivGrotesk_W_Rg.woff differ
diff --git a/images/back-arrow.svg b/images/back-arrow.svg
new file mode 100644 (file)
index 0000000..cd6908e
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        viewBox="0 0 16.9 31.9" style="enable-background:new 0 0 16.9 31.9;" xml:space="preserve">
+<style type="text/css">
+       .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<polyline class="st0" points="15.4,30.4 1.5,16 15.4,1.5 "/>
+</svg>
diff --git a/images/lines.svg b/images/lines.svg
new file mode 100644 (file)
index 0000000..8ac66e2
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg version="1.1" id="lines" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
+        viewBox="0 0 1920.5 202.2" style="enable-background:new 0 0 1920.5 202.2;" xml:space="preserve">
+<style type="text/css">
+       .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-miterlimit:10;}
+</style>
+<g>
+       <polyline class="st0" points="0,149.8 512,158.3 1339.2,1.5 1920,109.8   "/>
+       <polyline class="st0" points="0.8,22.2 512,158.3 1624.1,99.3    "/>
+       <line class="st0" x1="1339.2" y1="1.5" x2="1920" y2="200.8"/>
+</g>
+</svg>
diff --git a/images/locale.svg b/images/locale.svg
new file mode 100644 (file)
index 0000000..2121175
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        viewBox="0 0 44.8 44.8" style="enable-background:new 0 0 44.8 44.8;" xml:space="preserve">
+<style type="text/css">
+       .st0{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-miterlimit:10;}
+</style>
+<g>
+       <path class="st0" d="M43.8,22.3c0,11.9-9.6,21.5-21.5,21.5C10.5,43.8,1,33.8,1,21.9C1,10.4,10.1,1.5,21.5,1c0.3,0,0.6,0,0.9,0
+               C34.2,1,43.8,10.5,43.8,22.3z"/>
+       <path class="st0" d="M21.5,1c-11.2,12.1-11.2,27.9,0,42.8"/>
+       <path class="st0" d="M23.3,1c11.2,12.1,11.2,27.9,0,42.7"/>
+       <line class="st0" x1="4.2" y1="33.5" x2="40.7" y2="33.5"/>
+       <line class="st0" x1="3.1" y1="12.8" x2="41.6" y2="12.8"/>
+       <line class="st0" x1="1" y1="23.1" x2="43.8" y2="23.1"/>
+</g>
+</svg>
diff --git a/images/logo.svg b/images/logo.svg
new file mode 100644 (file)
index 0000000..ee6996f
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        viewBox="0 0 136.3 50" style="enable-background:new 0 0 136.3 50;" xml:space="preserve">
+<style type="text/css">
+       .st0{fill:#FFFFFF;}
+</style>
+<g>
+       <g>
+               <path class="st0" d="M0,0v50h136.3V0H0z M135.2,48.9H1.1V1.1h134.1V48.9z M132.5,26.4H3.7v19.9h128.8V26.4z M117.3,15.3l8.7,9.1
+                       h6.1l-10.9-11.1l10.1-9.8H125l-7.7,8v-8H113v20.9h4.2V15.3z M109.5,3.5h-4.2v20.9h4.2V3.5z M96.7,24.4l7.1-20.9h-4.4l-5.7,16.8
+                       L88.2,3.5h-4.3l6.9,20.9H96.7z M80.4,23c1.8-1.5,3.6-3.3,3.6-9.5c0-6.2-2.9-8-3.9-8.7c-1-0.7-2.2-1.2-4.9-1.2
+                       c-2.7-0.1-8.8,0-8.8,0v20.9l8.2,0C74.5,24.4,78.6,24.5,80.4,23z M70.5,7h4.3c0.4,0,2.3-0.1,3.6,1.6c1.5,2,1.3,6.6,1.1,8
+                       c-0.1,1.4-1,2.8-1.8,3.5c-1.1,0.8-2.4,0.8-2.4,0.8l-4.9,0V7z M49,7.5l8.6,16.9h5.2V3.5h-4.2v15.2L51.1,3.5h-6.2v20.9H49V7.5z
+                        M28.9,19.5h8.6l1.7,4.9h4.3l-7-20.9H30l-7.2,20.9h4.5L28.9,19.5z M33.3,6.8l3.1,9.1h-6.3L33.3,6.8z M10,24.4
+                       c1.1,0.3,2.6,0.4,3.8,0.4c1.2,0,3.9-0.1,6-1.5c2.1-1.4,2.7-3.2,2.7-5.4c0-2.2-0.6-3.2-1.6-4.1c-1-0.8-2.5-1.3-4.2-1.5
+                       c-1.7-0.3-2.4-0.2-4-0.4c-1.6-0.2-2.9-0.3-3.5-1.4C8.7,9.3,8.7,8,9.9,6.9c1.1-1.1,3.1-1,3.6-1c0.5,0,2.6,0.2,3.4,1.1
+                       c0.8,0.9,1.1,1.4,1.2,3.1h4.5c0,0,0.1-2.9-1.1-4.5c-1.2-1.6-3.2-2.2-4.9-2.4c-1.7-0.3-7.1-0.8-9.9,1.4C4,6.6,4.4,9.4,4.4,9.4
+                       c0,0-0.2,3.7,3,5c1.8,0.8,5.4,1,5.4,1s2.8,0.3,3.7,0.6c0.9,0.3,1.6,1,1.6,2.2c0,1.2-0.3,2.1-1,2.6c-0.7,0.5-1.3,0.9-3.3,0.9
+                       c-1.9,0-3.3-0.7-3.7-1.1c-0.4-0.4-1.1-1.4-1.1-2.2c0-0.9,0-1.4,0-1.4H4.3c0,0-0.3,2.7,1.1,4.7C6.8,23.5,9,24.1,10,24.4z"/>
+       </g>
+</g>
+</svg>
diff --git a/images/select-arrow.svg b/images/select-arrow.svg
new file mode 100644 (file)
index 0000000..745549a
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        viewBox="0 0 28.2 15.1" style="enable-background:new 0 0 28.2 15.1;" xml:space="preserve">
+<style type="text/css">
+       .st0{fill:none;stroke:#FFFFFF;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
+</style>
+<polyline class="st0" points="26.7,1.5 14.1,13.6 1.5,1.5 "/>
+</svg>
diff --git a/index.html b/index.html
new file mode 100644 (file)
index 0000000..1e9d6b2
--- /dev/null
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>Screen Type Selection Guide App</title>
+    <link type="text/css" rel="stylesheet" href="style.css">
+</head>
+<body>
+<div class="logo">
+    <img src="images/logo.svg"/>
+</div>
+<header>
+    <div id="back_header"><a href="#" class="back" data-l10n="Back"></a></div>
+    <div id="calculator_locale_selector"><a href="#" class="openLocaleMenu"><img src="images/locale.svg"> <span
+            id="current_locale"></span></a><span
+            id="calculator_locale_select_holder"></span></div>
+</header>
+<footer>
+    <img src="images/lines.svg" class="lines">
+</footer>
+<div id="holder">
+    <section id="calculator">
+        <h2 data-l10n="Screen type %n selection guide"></h2>
+        <form>
+            <div id="fields">
+
+            </div>
+        </form>
+    </section>
+    <section id="locale">
+        <ul>
+            <li data-locale="en">English</li>
+            <li data-locale="de">Deutsch</li>
+            <li data-locale="es">Español</li>
+            <li data-locale="fr">Français</li>
+            <li data-locale="fi">Suomi</li>
+            <li data-locale="sv">Svenska</li>
+            <li data-locale="pt">Português</li>
+            <li data-locale="zh">中文</li>
+            <li data-locale="ru">русский язык</li>
+        </ul>
+    </section>
+</div>
+</div>
+<script src="js/links.js"></script>
+<script src="js/data.js"></script>
+<script src="js/sprintf.min.js"></script>
+<script src="js/lib.js"></script>
+<script src="js/jquery.min.js"></script>
+<script src="js/select2.js"></script>
+<script src="js/locales.js"></script>
+<script src="js/common.js"></script>
+<script src="js/project.js"></script>
+<script src="js/script.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/js/common.js b/js/common.js
new file mode 100644 (file)
index 0000000..e1cb585
--- /dev/null
@@ -0,0 +1,375 @@
+$(function () {
+    initLocales();
+    initLocaleEvents();
+})
+
+if (!window.localStorage) {
+    window.localStorage = {
+        getItem: function (sKey) {
+            if (!sKey || !this.hasOwnProperty(sKey)) {
+                return null;
+            }
+            return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1"));
+        },
+        key: function (nKeyId) {
+            return unescape(document.cookie.replace(/\s*\=(?:.(?!;))*$/, "").split(/\s*\=(?:[^;](?!;))*[^;]?;\s*/)[nKeyId]);
+        },
+        setItem: function (sKey, sValue) {
+            if (!sKey) {
+                return;
+            }
+            document.cookie = escape(sKey) + "=" + escape(sValue) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
+            this.length = document.cookie.match(/\=/g).length;
+        },
+        length: 0,
+        removeItem: function (sKey) {
+            if (!sKey || !this.hasOwnProperty(sKey)) {
+                return;
+            }
+            document.cookie = escape(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
+            this.length--;
+        },
+        hasOwnProperty: function (sKey) {
+            return (new RegExp("(?:^|;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
+        }
+    };
+    window.localStorage.length = (document.cookie.match(/\=/g) || window.localStorage).length;
+}
+
+var currentLocale;
+
+function guessPreferedLanguage(available, defaultLanguage) {
+    if (defaultLanguage == undefined) {
+        defaultLanguage = available[0];
+    }
+
+    var browserLanguages = getLanguagesFromBrowser();
+    var res = null;
+
+    for (var i = 0; i < browserLanguages.length; i++) {
+        var bl = browserLanguages[i];
+        if (available.indexOf(bl) >= 0) {
+            res = bl;
+            break;
+        }
+    }
+    if (res == null) {
+        return defaultLanguage;
+    }
+
+    return res;
+}
+
+
+function initLocales() {
+    var available = [];
+    var options = [];
+    $.each(LOCALES, function (k, v) {
+        available.push(k);
+        options.push('<option value="' + k + '">' + v._name + '</option>');
+    });
+
+    if (window.localStorage.getItem('svl_calculator_locale') == null) {
+        window.localStorage.setItem('svl_calculator_locale', guessPreferedLanguage(available, 'en'));
+    }
+    currentLocale = window.localStorage.getItem('svl_calculator_locale');
+
+    setTranslations(currentLocale);
+}
+
+function changeLocale(locale) {
+
+    currentLocale = locale;
+    $("#calculator_locale_select_holder select option[value='" + currentLocale + "']").prop('selected', true);
+    window.localStorage.setItem('svl_calculator_locale', locale);
+    window.location.reload();
+}
+
+function getLanguagesFromBrowser() {
+    var res = [];
+
+    var navigatorLanguages = navigator.languages || [navigator.language || navigator.userLanguage];
+    $.each(navigatorLanguages, function (k, v) {
+        var e = v.split('-');
+        if (res.indexOf(e[0]) === -1) {
+            res.push(e[0]);
+        }
+    });
+    return res;
+}
+
+
+var currentSection = "#calculator";
+
+function initLocaleEvents() {
+    $(document).on('click', "section#locale [data-locale]", function () {
+        changeLocale($(this).data('locale'));
+        goBackToCurrentSection();
+        return false;
+    });
+
+    $(document).on('click', '.openLocaleMenu', function () {
+        var s = $("section:visible").attr('id');
+        if (s === 'locale') {
+            return false;
+        }
+        currentSection = s;
+        showHide('section#locale', function () {
+
+        });
+        return false;
+    })
+}
+
+function goBackToCurrentSection() {
+    showHide('section#' + currentSection, function () {
+
+    });
+}
+
+function getTranslation(str, locale) {
+    if (locale === undefined) {
+        locale = currentLocale;
+    }
+    if (str === undefined) {
+        return;
+    }
+
+    if (str.toString().indexOf('__(') >= 0) {
+        return str.toString().replace(/__\(([^)]*)\)/gm, function (a, b) {
+            return getTranslation(b, locale);
+        });
+    }
+
+    addToTranslations(str, true);
+
+    var translation;
+    if (LOCALES[locale] !== undefined && LOCALES[locale][str] !== undefined && LOCALES[locale][str] !== '') {
+        translation = LOCALES[locale][str];
+    } else {
+        translation = str;
+    }
+    return translation.toString().replace("%n", '<br>');
+}
+
+function setTranslations(locale) {
+    if (locale === undefined) {
+        locale = $('html').attr('lang');
+    }
+    $("html").attr('lang', locale);
+
+    $("[data-l10n]").each(function () {
+        var str = $(this).data('l10n');
+        var translation = getTranslation(str, locale);
+        $(this).html(translation.toString().replace("\\n", "<br>"));
+    });
+
+    $("#current_locale").text(locale);
+    $("section#locale [data-locale]").removeClass('active');
+    $('section#locale [data-locale="' + locale + '"]').addClass('active');
+}
+
+function showHide(show, callback) {
+    $("section.visible").removeClass('visible').each(function () {
+        var $this = this;
+        setTimeout(function () {
+            $(window).scrollTop(0);
+            $($this).addClass('hidden');
+            if ($(show).find('a.back').length > 0 || show.indexOf('#conv') === 0) {
+                $("header #back_header").show();
+            } else {
+                $("header #back_header").hide();
+            }
+            $(show).removeClass('hidden').each(function () {
+                var $this = this;
+                setTimeout(function () {
+                    $($this).addClass('visible');
+                    calculator_resize();
+                    callback();
+                }, 10);
+            });
+        }, 500);
+    });
+}
+
+function exportTranslations() {
+    parseDataForTranslations();
+    parseScriptForTranslations(function () {
+        post('https://extranet.cubedesigners.com/tools/excelTranslation', {
+            name: APPNAME,
+            str: JSON.stringify(TRANSLATIONS)
+        });
+    });
+
+}
+
+function addLinkToResult(selector) {
+
+    $(selector).each(function () {
+        if ($(this).find('a').length > 0) {
+            return;
+        }
+        var $this = this;
+        var t = $(this).text();
+        $.each(LINKS, function (code, url) {
+            var sepcode=code.substr(0,2)+' '+code.substr(2);
+            if (t.indexOf(code) !== -1 || t.indexOf(sepcode) !== -1) {
+                $($this).wrapInner('<a href="' + url + '"></a>');
+                return false;
+            }
+        });
+    })
+}
+
+function parseScriptForTranslations(callback) {
+    $.ajax('js/script.js', {
+        success: function (data) {
+            let m;
+            var regex = /data-l10n="([^"]+)"/gm
+            while ((m = regex.exec(data)) !== null) {
+                // This is necessary to avoid infinite loops with zero-width matches
+                if (m.index === regex.lastIndex) {
+                    regex.lastIndex++;
+                }
+                if (m[1].indexOf("' + ") === 0) {
+                    continue;
+                }
+
+                addToTranslations(m[1], true);
+            }
+
+            regex = /getTranslation\(\'(.*)\'\)/gm;
+            while ((m = regex.exec(data)) !== null) {
+                // This is necessary to avoid infinite loops with zero-width matches
+                if (m.index === regex.lastIndex) {
+                    regex.lastIndex++;
+                }
+
+                addToTranslations(m[1], true);
+            }
+
+            callback();
+        },
+    });
+}
+
+function parseDataForTranslations() {
+    var seen = {};
+    var keys = ['hint', 'message', 'value_format', 'unit'];
+    var ignoreTypes = ['function', 'var', 'formula','sheet'];
+    var ignoreColumns = [];
+
+    $.each(DATA, function (name, sheet) {
+        $.each(sheet, function (lineId, line) {
+            $.each(line, function (columnId, cell) {
+                if (ignoreColumns.indexOf(columnId) >= 0) {
+                    return;
+                }
+                if (cell === null || typeof cell !== 'string' || cell === '') {
+                    return;
+                }
+                var cellLines = cell.trim().split("\n");
+                $.each(cellLines, function (cellLineId, c) {
+                    if (c === null || typeof c !== 'string' || c === '') {
+                        return;
+                    }
+                    c = c.trim();
+
+                    if (lineId === 0) {
+                        var e = c.split(':', 2);
+                        if (e[0] === 'type') {
+                            if (ignoreTypes.indexOf(e[1])) {
+                                ignoreColumns.push(columnId);
+                                return false;
+                            }
+                        }
+                        if (keys.indexOf(e[0]) === -1) {
+                            return;
+                        }
+                        c = e[1];
+                    }
+                    if (c === '') {
+                        return;
+                    }
+
+                    if (seen[c]) {
+                        return;
+                    }
+                    seen[c] = true;
+                    addToTranslations(c, false);
+                });
+            });
+        });
+    });
+}
+
+function addToTranslations(str, force) {
+    if (force === undefined) {
+        force = false;
+    }
+    if (window.TRANSLATIONS === undefined) {
+        window.TRANSLATIONS = [];
+    }
+
+    if (str === null || typeof str !== 'string') {
+        return;
+    }
+
+    var e = str.split('|');
+
+    for (var i = 0; i < e.length; i++) {
+        var s = e[i];
+        if (window.TRANSLATIONS.indexOf(s) >= 0) {
+            continue;
+        }
+        if (!force && !/[a-hj-z]+/.test(s)) {
+            continue;
+        }
+        window.TRANSLATIONS.push(s);
+    }
+}
+
+/**
+ * sends a request to the specified url from a form. this will change the window location.
+ * @param {string} path the path to send the post request to
+ * @param {object} params the paramiters to add to the url
+ * @param {string} [method=post] the method to use on the form
+ */
+
+function post(path, params, method = 'post') {
+
+    // The rest of this code assumes you are not using a library.
+    // It can be made less wordy if you use one.
+    const form = document.createElement('form');
+    form.method = method;
+    form.action = path;
+
+    for (const key in params) {
+        if (params.hasOwnProperty(key)) {
+            const hiddenField = document.createElement('input');
+            hiddenField.type = 'hidden';
+            hiddenField.name = key;
+            hiddenField.value = params[key];
+
+            form.appendChild(hiddenField);
+        }
+    }
+
+    document.body.appendChild(form);
+    form.submit();
+}
+
+function ucFirst(str, forceLower) {
+    if (forceLower === undefined) {
+        forceLower = false;
+    }
+
+    if (str.length > 0) {
+        if (forceLower) {
+            str = str.toLowerCase();
+        }
+        return str[0].toUpperCase() + str.substring(1);
+    } else {
+        return str;
+    }
+}
\ No newline at end of file
diff --git a/js/data.js b/js/data.js
new file mode 100644 (file)
index 0000000..0f0764f
--- /dev/null
@@ -0,0 +1 @@
+DATA={"S0":[["type:integer\nvar:max_feed_size\nrange:1\nhint:($min - $max mm)\nunit:mm","type:integer\nvar:separation_deck_1\nrange:1\nhint:($min - $max mm)\nunit:mm","type:float\nvar:bulk_density\nrange:1\nhint:($min - $max ton\/cubic meter)\nunit:ton\/cubic meter","type:select\nvar:importance_wear_protection\nhint:(1 = LOW, 5 = HIGH)\nprevent_ignore:1","type:select\nvar:importance_misplaced_particles\nhint:(1 = LOW, 5 = HIGH)\nprevent_ignore:1","type:select\nvar:importance_available_height\nhint:(1 = LOW, 5 = HIGH)\nprevent_ignore:1","type:select\nvar:importance_tolc\nhint:(1 = LOW, 5 = HIGH)\nprevent_ignore:1","type:formula\nvar:sum_scores\nformula:$importance_wear_protection+$importance_misplaced_particles+$importance_available_height+$importance_tolc\nprevent_ignore:1","type:formulacol\nvar:score_wear_protection\nformula:($importance_wear_protection\/$sum_scores)*$column*0.5\nprevent_ignore:1","type:formulacol\nvar:score_misplaced_particles\nformula:($importance_misplaced_particles\/$sum_scores)*$column\nprevent_ignore:1","type:formulacol\nvar:score_available_height\nformula:($importance_available_height\/$sum_scores)*0.5*$column\nprevent_ignore:1","type:formulacol\nvar:score_tolc\nformula:((5\/$importance_tolc)\/$sum_scores)*$column\nprevent_ignore:1","type:formulacol\nvar:score\nformula:$score_wear_protection+$score_misplaced_particles+$score_available_height+$score_tolc\nprevent_ignore:1","type:select2\nvar:screen_type_choice\nhint:In case of multiple options, please click on the screen type that you think is the most suitable for your application\norderby:score\norderway:desc\nprevent_ignore:1","type:var\nvar:screen_type\nvartype:string","type:error\nvar:error_sg\nwhen:$screen_type=='SG'\nmessage:Please use Plant Designer for making the suitable SG model size selection for your application.\nclass:info","type:integer\nvar:decks\nmin:1\nmax:4\nhint:($min - $max)\nrange:1\nprevent_ignore:1","type:integer\nvar:feed_capacity\nmin:0\nunit:MTPH\nprevent_ignore:1","type:integer\nvar:separation_deck_2\nmin:0\nmax:$separation_deck_1\nwhen:$decks>=2\nhint:($min - $max mm)\nunit:mm\nprevent_ignore:1","type:integer\nvar:separation_deck_3\nmin:0\nmax:$separation_deck_2\nwhen:$decks>=3\nhint:($min - $max mm)\nunit:mm\nprevent_ignore:1","type:integer\nvar:separation_deck_4\nmin:0\nmax:$separation_deck_3\nwhen:$decks>=4\nhint:($min - $max mm)\nunit:mm\nprevent_ignore:1","type:integer\nvar:pct_deck_1\nmin:0\nmax:100\nunit:%\nprevent_ignore:1\nhint:($min - $max %)","type:integer\nvar:pct_deck_2\nwhen:$decks>=2\nmin:0\nmax:$pct_deck_1\nunit:%\nhint:($min - $max %)\nprevent_ignore:1","type:integer\nvar:pct_deck_3\nwhen:$decks>=3\nmin:0\nmax:$pct_deck_2\nunit:%\nhint:($min - $max %)\nprevent_ignore:1","type:integer\nvar:pct_deck_4\nwhen:$decks>=4\nmin:0\nmax:$pct_deck_3\nunit:%\nhint:($min - $max %)\nprevent_ignore:1","type:var\nvar:material_speed\nvartype:number","type:formula\nvar:feed_rate_volume\nformula:$feed_capacity\/$bulk_density","type:formula\nvar:max_bed_depth\nformula:Math.min(400,10*$separation_deck_1)","type:formula\nvar:FE\nformula:$feed_rate_volume\/($max_bed_depth\/1000*$material_speed*3600)","type:formula\nvar:DE_base\nformula:4.5\/1000*$material_speed*3600","type:formula\nvar:DE1\nformula:($feed_rate_volume*$pct_deck_1\/100)\/($DE_base*$separation_deck_1)","type:formula\nvar:DE2\nformula:($feed_rate_volume*($pct_deck_1-$pct_deck_2)\/100)\/($DE_base*$separation_deck_2)","type:formula\nvar:DE3\nformula:($feed_rate_volume*($pct_deck_2-$pct_deck_3)\/100)\/($DE_base*$separation_deck_3)","type:formula\nvar:DE4\nformula:($feed_rate_volume*($pct_deck_3-$pct_deck_4)\/100)\/($DE_base*$separation_deck_4)","type:formula\nvar:DE\nformula:$decks==1?$DE1:$decks==2?$DE2:$decks==3?$DE3:$DE4","type:formula\nvar:width_min\nformula:max($FE,$DE,$DE1,$DE2,$DE3,$DE4)","type:formula\nvar:FA_SLSJSA_1\nstorewhen:FA_1:$screen_type=='SA' || $screen_type=='SL' || $screen_type=='SJ'\nformula:1.6*(0.878+(0.9973*$separation_deck_1)-(0.014079*Math.pow($separation_deck_1,2))+(0.00013602*Math.pow($separation_deck_1,3))-(0.0000006359*Math.pow($separation_deck_1,4))+(0.00000000111257*Math.pow($separation_deck_1,5)))","type:formula\nvar:FA_SLSJSA_2\nstorewhen:FA_2:$screen_type=='SA' || $screen_type=='SL' || $screen_type=='SJ'\nformula:1.6*(0.878+(0.9973*$separation_deck_2)-(0.014079*Math.pow($separation_deck_2,2))+(0.00013602*Math.pow($separation_deck_2,3))-(0.0000006359*Math.pow($separation_deck_2,4))+(0.00000000111257*Math.pow($separation_deck_2,5)))","type:formula\nvar:FA_SLSJSA_3\nstorewhen:FA_3:$screen_type=='SA' || $screen_type=='SL' || $screen_type=='SJ'\nformula:1.6*(0.878+(0.9973*$separation_deck_3)-(0.014079*Math.pow($separation_deck_3,2))+(0.00013602*Math.pow($separation_deck_3,3))-(0.0000006359*Math.pow($separation_deck_3,4))+(0.00000000111257*Math.pow($separation_deck_3,5)))","type:formula\nvar:FA_SLSJSA_4\nstorewhen:FA_4:$screen_type=='SA' || $screen_type=='SL' || $screen_type=='SJ'\nformula:1.6*(0.878+(0.9973*$separation_deck_4)-(0.014079*Math.pow($separation_deck_4,2))+(0.00013602*Math.pow($separation_deck_4,3))-(0.0000006359*Math.pow($separation_deck_4,4))+(0.00000000111257*Math.pow($separation_deck_4,5)))","type:formula\nvar:FA_SF_1\nstorewhen:FA_1:$screen_type=='SF'\nformula:1.5*((0.00031*Math.pow($separation_deck_1,3))-(0.11705*Math.pow($separation_deck_1,2))+(12.75*$separation_deck_1+1))","type:formula\nvar:FA_SF_2\nstorewhen:FA_2:$screen_type=='SF'\nformula:1.5*((0.00031*Math.pow($separation_deck_2,3))-(0.11705*Math.pow($separation_deck_2,2))+(12.75*$separation_deck_2+1))","type:formula\nvar:FA_SF_3\nstorewhen:FA_3:$screen_type=='SF'\nformula:1.5*((0.00031*Math.pow($separation_deck_3,3))-(0.11705*Math.pow($separation_deck_3,2))+(12.75*$separation_deck_3+1))","type:formula\nvar:FA_SF_4\nstorewhen:FA_4:$screen_type=='SF'\nformula:1.5*((0.00031*Math.pow($separation_deck_4,3))-(0.11705*Math.pow($separation_deck_4,2))+(12.75*$separation_deck_4+1))","type:formula\nvar:FA_SS_1\nstorewhen:FA_1:$screen_type=='SS'\nformula:(0.0008*Math.pow($separation_deck_1,3))-(0.1646*Math.pow($separation_deck_1,2))+(14.362*$separation_deck_1)-8.859","type:formula\nvar:FA_SS_2\nstorewhen:FA_2:$screen_type=='SS'\nformula:(0.0008*Math.pow($separation_deck_2,3))-(0.1646*Math.pow($separation_deck_2,2))+(14.362*$separation_deck_2)-8.859","type:formula\nvar:FA_SS_3\nstorewhen:FA_3:$screen_type=='SS'\nformula:(0.0008*Math.pow($separation_deck_3,3))-(0.1646*Math.pow($separation_deck_3,2))+(14.362*$separation_deck_3)-8.859","type:formula\nvar:Q_1\nformula:$FA_1*$bulk_density\/1.6","type:formula\nvar:Q_2\nformula:$FA_2*$bulk_density\/1.6","type:formula\nvar:Q_3\nformula:$FA_3*$bulk_density\/1.6","type:formula\nvar:Q_4\nformula:$FA_4*$bulk_density\/1.6","type:formula\nvar:AREA_1\nformula:$feed_capacity*($pct_deck_1\/100)\/$Q_1","type:formula\nvar:AREA_2\nformula:$decks<2?0:$feed_capacity*($pct_deck_2\/100)\/$Q_2","type:formula\nvar:AREA_3\nformula:$decks<3?0:$feed_capacity*($pct_deck_3\/100)\/$Q_3","type:formula\nvar:AREA_4\nformula:$decks<4?0:$feed_capacity*($pct_deck_4\/100)\/$Q_4","type:formula\nvar:AREA\nformula:Math.max($AREA_1,$AREA_2,$AREA_3,$AREA_4)","type:function\nvar:SCREEN\nfunction:findScreeningMedia","type:error\nwhen:$SCREEN.MODEL_ERROR || $SCREEN.LARGE_ERROR\nmessage:No suitable model size available for this application","type:formula\nvar:D1_THROUGH\nformula:$feed_capacity*($pct_deck_1\/100)","type:formula\nvar:D1_OVER\nformula:$feed_capacity-$D1_THROUGH","type:formula\nvar:D2_THROUGH\nformula:$feed_capacity*($pct_deck_2\/100)","type:formula\nvar:D2_OVER\nformula:$D1_THROUGH-$D2_THROUGH","type:formula\nvar:D3_THROUGH\nformula:$feed_capacity*($pct_deck_3\/100)","type:formula\nvar:D3_OVER\nformula:$D2_THROUGH-$D3_THROUGH","type:formula\nvar:D4_THROUGH\nformula:$feed_capacity*($pct_deck_4\/100)","type:formula\nvar:D4_OVER\nformula:$D3_THROUGH-$D4_THROUGH","type:result\nfunction:getResultsContents",null],["Max feed size","Separation on top deck","Bulk Density","Importance of screen body wear protection","Importance of misplaced particles","Importance of available installation height (LAYOUT)","Importance of Total operating lifetime costs","Sum of scores",null,null,null,null,null,"Screen type","Screen type",null,"Number of decks","Feed capacity","Separation on 2nd deck","Separation on 3rd deck","Separation on 3rd deck","% of feed smaller than separation on 1st deck","% of feed smaller than separation on 2nd deck","% of feed smaller than separation on 3rd deck","% of feed smaller than separation on 4th deck","Material speed","Feed rate (m3\/h)","Max bed depth","FE","DE base","DE deck 1","DE deck 2","DE deck 3","DE deck 4","DE","Width min","Factor A \/ Deck 1 (SL, SJ, SA)","Factor A \/ Deck 2 (SL, SJ, SA)","Factor A \/ Deck 3 (SL, SJ, SA)","Factor A \/ Deck 4 (SL, SJ, SA)","Factor A \/ Deck 1 (SF)","Factor A \/ Deck 2 (SF)","Factor A \/ Deck 3 (SF)","Factor A \/ Deck 4 (SF)","Factor A \/ Deck 1 (SS)","Factor A \/ Deck 2 (SS)","Factor A \/ Deck 3 (SS)","Q1","Q2","Q3","Q4","Area 1","Area 2","Area 3","Area 4","Area min","Screening Area",null,"1st Deck Through","1st Deck Over","2nd Deck Through","2nd Deck Over","3rd Deck Through","3rd Deck Over","4th Deck Through","4th Deck Over",null,null],["60-1500","60-250","0.7-2.7","1\n2\n3\n4\n5","1\n2","1\n2\n3\n4\n5","1\n2\n3\n4\n5",null,"100","30","100","70",null,"SG|For primary scalping|Scalping in one dimension, pay attension on screening accuracy recuirement","SG",null,"1-4",null,null,null,null,null,null,null,null,"0.4",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],["1-300","1-130","0.7-1.999","1\n2\n3\n4\n5","1\n2\n3\n4\n5","1\n2\n3\n4\n5","1\n2\n3\n4\n5",null,"85","85","60","70",null,"SA|Widely used type, low investment cost, less sensible for pegging (circular stroke)|Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable","SA",null,"2-4",null,null,null,null,null,null,null,null,"0.4",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"2|5.4|1542\n2|8.6|1852\n2|10.8|1852\n2|14.4|1462\n3|5.4|1543\n3|8.6|1853\n3|10.8|1863\n3|12.6|2163\n3|14.4|2463\n4|8.6|1854\n4|10.8|1864\n4|12.6|2164\n4|14.4|2464",null,null,null,null,null,null,null,null,null,null,null],["1-300","1-140","0.7-2.7","1\n2\n3\n4\n5","1\n2\n3\n4\n5","1\n2\n3\n4\n5","1\n2\n3\n4\n5",null,"90","85","60","60",null,"SJ|Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)|Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications","SJ",null,"2-3",null,null,null,null,null,null,null,null,"0.4",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"2|5.4|1542\n2|8.6|1852\n2|10.8|1862\n2|14.4|2462\n2|18|3062\n2|21.6|3072\n3|5.4|1543\n3|8.6|1853\n3|10.8|1863\n3|12.6|2163\n3|14.4|2463\n3|18|3063\n3|21.6|3073",null,null,null,null,null,null,null,null,null,null,null],["2-350","1-100","0.7-2.7","1\n2\n3\n4\n5","1\n2\n3\n4\n5","1\n2\n3\n4\n5","1\n2\n3\n4\n5",null,"95","100","100","40",null,"SL|Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)|Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications","SL",null,"1-3",null,null,null,null,null,null,null,null,"0.25",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"1|10.8|1861\n1|14.4|2461\n1|18.0|3060\n2|8.6|1852\n2|10.8|1862\n2|14.4|2462\n2|17.3|2472\n2|18.0|3062\n2|21.6|3072\n3|8.6|1853\n3|10.8|1863\n3|14.4|2463\n3|17.3|2473\n3|18.0|3063\n3|21.6|3073",null,null,null,null,null,null,null,null,null,null,null],["2-150","1-80","0.7-2.7","1\n2\n3\n4\n5","1\n2\n3","1\n2\n3\n4\n5","1\n2\n3\n4\n5",null,"70","35","90","100",null,"SS|High capacity to screening area ratio, cost-effective, maintainability, compact size|Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement","SS",null,"2-3",null,null,null,null,null,null,null,null,"0.5",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"2|1,1|1012|\n2|1,1|1013|H\n2|1,7|1223|\n2|1,7|1233|\n2|1,9|1233|H\n2|2,5|1433|\n2|2,6|1633|H\n2|3,0|1823|\n2|3,0|1833|",null,null,null,null,null,null,null,null,null,null,null],["2-120","1-64","0.7-1.999","1\n2\n3\n4\n5","1\n2\n3\n4\n5","1\n2\n3\n4\n5","1\n2\n3\n4\n5",null,"50","60","85","90",null,"SF|High capacity to screening area ratio, cost-effective, maintainability, compact size|Primarily for portable and mobile crushing plants","SF",null,"3-4",null,null,null,null,null,null,null,null,"0.3",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3|4.5|1443\n3|7.0|1843\n4|7.0|1844",null,null,null,null,null,null,null,null,null,null,null]]};
\ No newline at end of file
diff --git a/js/jquery.min.js b/js/jquery.min.js
new file mode 100644 (file)
index 0000000..2e7ce19
--- /dev/null
@@ -0,0 +1,5 @@
+/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
+}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
+    marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.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(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
+    padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
diff --git a/js/lib.js b/js/lib.js
new file mode 100644 (file)
index 0000000..6d0b597
--- /dev/null
+++ b/js/lib.js
@@ -0,0 +1,95 @@
+function format(value, format) {
+    if (format === 'feed_size') {
+        return format_feed_size(value);
+    }
+
+    if (format.indexOf('%r') >= 0) {
+        var s = value.split('/');
+        if (s[0] === '') {
+            value = '< ' + s[0];
+        }
+        if (s[1] === '') {
+            value = '> ' + s[0];
+        } else {
+            value = s[0] + ' - ' + s[1];
+        }
+        format = format.replace('%r', '%s');
+    }
+
+    try {
+        return vsprintf(format, value.split('/'));
+    } catch (e) {
+        return value;
+    }
+}
+
+function format_feed_size(value) {
+    var s = value.split('/');
+    var res = '';
+    if (s.length === 0 || s[1] === undefined) {
+        res += '> ' + s[0] + ' mm';
+    } else if (s[0] === '0') {
+        res += '≤ ' + s[1] + ' mm';
+    } else {
+        res += '> ' + s[0] + ' mm - ≤ ' + s[1] + ' mm';
+    }
+    return res;
+}
+
+function unique(array) {
+    return array.filter(function (el, index, arr) {
+        return index === arr.indexOf(el);
+    });
+}
+
+function clone(obj) {
+    var copy;
+
+    // Handle the 3 simple types, and null or undefined
+    if (null == obj || "object" != typeof obj) return obj;
+
+    // Handle Date
+    if (obj instanceof Date) {
+        copy = new Date();
+        copy.setTime(obj.getTime());
+        return copy;
+    }
+
+    // Handle Array
+    if (obj instanceof Array) {
+        copy = [];
+        for (var i = 0, len = obj.length; i < len; i++) {
+            copy[i] = clone(obj[i]);
+        }
+        return copy;
+    }
+
+    // Handle Object
+    if (obj instanceof Object) {
+        copy = {};
+        for (var attr in obj) {
+            if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
+        }
+        return copy;
+    }
+
+    throw new Error("Unable to copy obj! Its type isn't supported.");
+}
+
+
+function array_intersect(a1, a2) {
+    return a1.filter(function (n) {
+        return a2.indexOf(n) !== -1;
+    });
+}
+
+function max() {
+    var res = Number.NEGATIVE_INFINITY;
+    $.each(arguments, function (k, v) {
+        if (isNaN(v) || res === Number.POSITIVE_INFINITY || v.toString() === 'Infinity') {
+            return;
+        }
+        res = Math.max(res, v);
+    });
+    return res;
+}
\ No newline at end of file
diff --git a/js/links.js b/js/links.js
new file mode 100644 (file)
index 0000000..11d906f
--- /dev/null
@@ -0,0 +1 @@
+LINKS={"SL1861":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL1861","SL2461":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL2461","SL3060":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL3062","SL1852":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL1852","SL1862":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL1862","SL2462":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL2462","SL2472":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL2472","SL3062":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL3062","SL3072":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL3072","SL1853":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL1853","SL1863":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL1863","SL2463":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL2463","SL2473":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL2473","SL3063":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL3063","SL3073":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SL_Horizontal_Screens\/SL3073","SA1542":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA1542","SA1852":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA1852","SA1862":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA1862","SA2462":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA2462","SA1543":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA1543","SA1853":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA1853","SA1863":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA1863","SA2163":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA2163","SA2463":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA2463","SA1854":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA1854","SA1864":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA1864","SA2164":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA2164","SA2464":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SA_Inclined_Screens\/SA2464","SF1443":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SF1443","SF1843":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SF1843","SF1844":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SF1844","SS1012":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SS1012","SS1013":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SS1013H","SS1223":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SS1223","SS1233":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SS1233H","SS1433":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SS1433","SS1633":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SS1633H","SS1823":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SS1823","SS1833":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SS_and_SF_Free-fall_Screens\/SS1833","SJ1542":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ1542","SJ1852":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ1852","SJ1862":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ1862","SJ2462":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ2464","SJ3062":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ3062","SJ3072":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ3072","SJ1543":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ1543","SJ1853":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ1853","SJ1863":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ1863","SJ2163":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ2163","SJ2463":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ2463","SJ3063":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ3063","SJ3073":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SJ_Inclined_Screens\/SJ3073","SR1221":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SR_Roller_screens\/SR1221","SR1521":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SR_Roller_screens\/SR1521","SR1541":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SR_Roller_screens\/SR1541","SR1821":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SR_Roller_screens\/SR1821","SG1231":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SG_Grizzly_screens\/SG1231","SG1242":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SG_Grizzly_screens\/SG1242","SG1531":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SG_Grizzly_screens\/SG1531","SG1541":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SG_Grizzly_screens\/SG1541","SG1542":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Screens_%26_Feeders\/SG_Grizzly_screens\/SG1542","CG810i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Gyratory_Crushers\/CG810i","CG820i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Gyratory_Crushers\/CG820i","CG830i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Gyratory_Crushers\/CG830i","CG850i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Gyratory_Crushers\/CG850i","CJ211":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Jaw_Crushers\/CJ211","CJ409":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Jaw_Crushers\/CJ409","CJ411":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Jaw_Crushers\/CJ411","CJ412":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Jaw_Crushers\/CJ412","CJ612":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Jaw_Crushers\/CJ612","CJ613":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Jaw_Crushers\/CJ613","CJ615":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Jaw_Crushers\/CJ615","CJ815":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Jaw_Crushers\/CJ815","CR810\/08-10":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Roll_crushers\/CR810","CR810\/08-15":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Roll_crushers\/CR810","CR810\/08-20":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Roll_crushers\/CR810","CR810\/08-30":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Roll_crushers\/CR810","CR810\/12-20":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Roll_crushers\/CR810","CR810\/14-20":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Roll_crushers\/CR810","CR810\/14-30":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Roll_crushers\/CR810","CI711":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Horizontal_shaft_impactors_(HSI)\/CI711","CI712":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Horizontal_shaft_impactors_(HSI)\/CI712","CI721":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Horizontal_shaft_impactors_(HSI)\/CI721","CI722":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Horizontal_shaft_impactors_(HSI)\/CI722","CI731":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Horizontal_shaft_impactors_(HSI)\/CI731","CI732":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Horizontal_shaft_impactors_(HSI)\/CI732","CS420":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CS_Series\/CS420","CS430":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CS_Series\/CS430","CS440":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CS_Series\/CS440","CS660":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CS_Series\/CS660","CS840i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CS_Series\/CS840i","CH420":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH420","CH430":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH430","CH440":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH440","CH660":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH660","CH830i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH830i","CH840i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH840i","CH860i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH860i","CH865i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH865i","CH870i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH870i","CH890i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH890i","CH895i":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Cone_Crushers\/CH_Series\/CH895i","CV215":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Vertical_shaft_impactors_(VSI)\/CV215","CV216":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Vertical_shaft_impactors_(VSI)\/CV216","CV217":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Vertical_shaft_impactors_(VSI)\/CV217","CV218":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Vertical_shaft_impactors_(VSI)\/CV218","CV228":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Vertical_shaft_impactors_(VSI)\/CV228","CV229":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Impact_Crushers\/Vertical_shaft_impactors_(VSI)\/CV229","WX6000":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Tensioned_screening_media\/WX6000","WX6500":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Tensioned_screening_media\/WX6500","WX7000":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Tensioned_screening_media\/WX7000","WX8500":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Tensioned_screening_media\/WX8500","WN4000":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Modular_screening_media\/WN4000","WN5000":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Modular_screening_media\/WN5000","WN6000":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Modular_screening_media\/WN6000","WN7000":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Modular_screening_media\/WN7000","WN7000H":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Modular_screening_media\/WN7000H","WK6000":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Pre-tensioned_screening_media\/WK6000_pre-tensioned_rubber_screen_panel","WK8500":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Pre-tensioned_screening_media\/WK8500_pre-tensioned_rubber_screen_panel","WS6000":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Self-supporting_screening_media\/WS6000","WF9000":"showell:\/\/files\/Parts%2C_Tools_%26_Accessories\/Wear_Solutions_%26_Screening_Media\/Screening_media\/Special_Screening_Media\/WF9000","A155-2":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/A155-2","A160-4":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/A160-4","A170-3":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/A170-3","A190-4":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/A190-4","A260-2":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/A260-2","A275-3":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/A275-3","A305-4":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/A305-4","A450-4":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/A450-4","M125-2":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/M125-2","M200-2":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/M200-2","L100-1":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/L100-1","L200-2":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/L200-2","L300-3":"showell:\/\/files\/Products\/Stationary_Crushing_and_Screening\/Plant_Solutions\/FastPlant%E2%84%A2\/L300-3"};
\ No newline at end of file
diff --git a/js/locales.js b/js/locales.js
new file mode 100644 (file)
index 0000000..49e7595
--- /dev/null
@@ -0,0 +1 @@
+var LOCALES={"en":{"_name":"English","Back":"Back","Screen type %n selection guide":"Screen type %n selection guide","Max feed size":"Max feed size","mm":"mm","ton\/cubic meter":"ton\/cubic meter","($min - $max mm)":"($min - $max mm)","Separation on top deck":"Separation on top deck","Bulk Density":"Bulk Density","($min - $max ton\/cubic meter)":"($min - $max ton\/cubic meter)","No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.":"No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.","Importance of screen body wear protection":"Importance of screen body wear protection","(1 = LOW, 5 = HIGH)":"(1 = LOW, 5 = HIGH)","Importance of misplaced particles":"Importance of misplaced particles","Importance of available installation height (LAYOUT)":"Importance of available installation height (LAYOUT)","Importance of Total operating lifetime costs":"Importance of Total operating lifetime costs","Sum of scores":"Sum of scores","SF":"SF","High capacity to screening area ratio, cost-effective, maintainability, compact size":"High capacity to screening area ratio, cost-effective, maintainability, compact size","Primarily for portable and mobile crushing plants":"Primarily for portable and mobile crushing plants","SL":"SL","Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)":"Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)","Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications":"Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications","SA":"SA","Widely used type, low investment cost, less sensible for pegging (circular stroke)":"Widely used type, low investment cost, less sensible for pegging (circular stroke)","Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable":"Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable","SJ":"SJ","Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)":"Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)","Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications":"Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications","Screen type":"Screen type","In case of multiple options, please click on the screen type that you think is the most suitable for your application":"In case of multiple options, please click on the screen type that you think is the most suitable for your application","SG":"SG","For primary scalping":"For primary scalping","Scalping in one dimension, pay attension on screening accuracy recuirement":"Scalping in one dimension, pay attension on screening accuracy recuirement","Please use Plant Designer for making the suitable SG model size selection for your application.":"Please use Plant Designer for making the suitable SG model size selection for your application.","SS":"SS","Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement":"Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement","Number of decks":"Number of decks","($min - $max)":"($min - $max)","Feed capacity":"Feed capacity","Separation on 2nd deck":"Separation on 2nd deck","Separation on 3rd deck":"Separation on 3rd deck","% of feed smaller than separation on 1st deck":"% of feed smaller than separation on 1st deck","($min - $max %)":"($min - $max %)","% of feed smaller than separation on 2nd deck":"% of feed smaller than separation on 2nd deck","% of feed smaller than separation on 3rd deck":"% of feed smaller than separation on 3rd deck","% of feed smaller than separation on 4th deck":"% of feed smaller than separation on 4th deck","1st":"1st","2nd":"2nd","3rd":"3rd","4th":"4th","Preliminary selection":"Preliminary selection","For final selection, use Plant Designer":"For final selection, use Plant Designer","Screening area of selected screen":"Screening area of selected screen","m\u00b2":"m\u00b2","Minimum width":"Minimum width","m":"m","Min. screening area":"Min. screening area","Overflow and underflow volumes per deck (mtph)":"Overflow and underflow volumes per deck (mtph)","Deck":"Deck","Over":"Over","Through":"Through"},"de":{"_name":"Deutsch","Back":"Zur\u00fcck","Screen type %n selection guide":"Selection Guide Siebtyp %n","Max feed size":"Max. Aufgabegr\u00f6\u00dfe","mm":"mm","ton\/cubic meter":"Tonnen\/Kubikmeter","($min - $max mm)":"($min - $max mm)","Separation on top deck":"Trennung auf Oberdeck","Bulk Density":"Sch\u00fcttdichte","($min - $max ton\/cubic meter)":"($min - $max Tonnen\/Kubikmeter)","No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.":"Es wurden keine passenden Produkte gefunden. Bitte versuchen Sie es mit anderen Suchkriterien oder wenden Sie sich an Ihren lokalen Sandvik-Support. ","Importance of screen body wear protection":"Bedeutung des Siebkastenverschlei\u00dfschutzes","(1 = LOW, 5 = HIGH)":"(1 = NIEDRIG, 5 = HOCH)","Importance of misplaced particles":"Bedeutung der Streuk\u00f6rnung","Importance of available installation height (LAYOUT)":"Bedeutung der verf\u00fcgbaren Einbauh\u00f6he (LAYOUT)","Importance of Total operating lifetime costs":"Bedeutung der Gesamtkosten der betrieblichen Nutzungsdauer","Sum of scores":"Punkte insgesamt","SF":"SF","High capacity to screening area ratio, cost-effective, maintainability, compact size":"Hohe Siebleistung bezogen auf die Siebfl\u00e4che, kosteneffektiv, Wartbarkeit, Kompaktgr\u00f6\u00dfe ","Primarily for portable and mobile crushing plants":"Prim\u00e4r f\u00fcr portable und mobile Brechanlagen","SL":"SL","Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)":"Verstellbarkeit, Trennsch\u00e4rfe, wartungsfreundlich, Installation erfordert wenig Raum in der H\u00f6henrichtung, weniger anf\u00e4llig f\u00fcr Verstopfung (linearer Hub, hohe G-Kraft)","Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications":"Horizontale oder leicht geneigte Installation, immer mit Doppelmechanismus, modulare Siebdeck-Design, f\u00fcr alle Anwendungen im Bergbau und Bauwesen geeignet","SA":"SA","Widely used type, low investment cost, less sensible for pegging (circular stroke)":"Weithin genutzter Typ, geringe Investitionskosten, weniger anf\u00e4llig f\u00fcr Anhaftungen (kreisende Hubbewegung)","Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable":"Geneigtes Sieb, Einzelmechanismus, geeignet f\u00fcr mittelschwere Steinbruch-Arbeiten, nur seitlich gespannte Siebmedienanordnungen anwendbar","SJ":"SJ","Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)":"Weithin genutzter Typ, leicht an ver\u00e4nderliche Bedingungen anpassbar, geringes Investitionskosten-Leistungs-Verh\u00e4ltnis, weniger anf\u00e4llig f\u00fcr Anhaftungen (kreisende Hubbewegung)","Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications":"Geneigtes Sieb, haupts\u00e4chlich Einzelmechanismus, modulares Siebdeck-Design, geeignet f\u00fcr schwere Steinbruch- und mittelschwere Bergbau-Arbeiten","Screen type":"Siebtyp","In case of multiple options, please click on the screen type that you think is the most suitable for your application":"Bei mehreren Auswahlm\u00f6glichkeiten klicken Sie bitte auf den Siebtyp, der Ihrer Meinung nach am besten f\u00fcr Ihre Anwendung geeignet ist.","SG":"SG","For primary scalping":"Bei Vorabsiebung","Scalping in one dimension, pay attension on screening accuracy recuirement":"Siebgenauigkeit nur in einer Dimension; beachten Sie die Anforderungen in Bezug auf die Siebgenauigkeit","Please use Plant Designer for making the suitable SG model size selection for your application.":"Bitte benutzen Sie zum Ausw\u00e4hlen der geeigneten SG-Modellgr\u00f6\u00dfe f\u00fcr Ihre Anwendung den Plant Designer.","SS":"SS","Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement":"Beste Leistung, wenn mindestens 70 % des Aufgabematerials kleiner als die Trennung sind; achten Sie auf die Anforderungen an die Siebgenauigkeit","Number of decks":"Anzahl der Decks","($min - $max)":"($min - $max)","Feed capacity":"Aufgabeleistung","Separation on 2nd deck":"Trennung auf 2. Deck","Separation on 3rd deck":"Trennung auf 3. Deck","% of feed smaller than separation on 1st deck":"% des Aufgabematerials kleiner als Trennung auf 1. Deck","($min - $max %)":"($min - $max %)","% of feed smaller than separation on 2nd deck":"% des Aufgabematerials kleiner als Trennung auf 2. Deck","% of feed smaller than separation on 3rd deck":"% des Aufgabematerials kleiner als Trennung auf 3. Deck","% of feed smaller than separation on 4th deck":"% des Aufgabematerials kleiner als Trennung auf 4. Deck","1st":"1.","2nd":"2.","3rd":"3.","4th":"4.","Preliminary selection":"Vorauswahl","For final selection, use Plant Designer":"Benutzen Sie f\u00fcr die endg\u00fcltige Auswahl den Plant Designer.","Screening area of selected screen":"Siebfl\u00e4che des ausgew\u00e4hlten Siebs","m\u00b2":"m\u00b2","Minimum width":"Minimale Breite","m":"m","Min. screening area":"Min. Siebfl\u00e4che","Overflow and underflow volumes per deck (mtph)":"\u00dcberlauf- und Unterlaufmengen pro Deck (mt\/h)","Deck":"Deck","Over":"Sieb\u00fcberlauf","Through":"Durchgang"},"es":{"_name":"Espa\u00f1ol","Back":"Volver","Screen type %n selection guide":"Tipo de Criba %n gu\u00eda de selecci\u00f3n","Max feed size":"Tama\u00f1o m\u00e1x. de alimentaci\u00f3n","mm":"mm","ton\/cubic meter":"ton\/metro c\u00fabico","($min - $max mm)":"($min - $max mm)","Separation on top deck":"Separaci\u00f3n en bandeja superior","Bulk Density":"Densidad Aparente","($min - $max ton\/cubic meter)":"($min - $max ton\/metro c\u00fabico)","No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.":"No se han encontrado productos coincidentes. Intente la b\u00fasqueda empleando distintos criterios o, si su aplicaci\u00f3n est\u00e1 fuera de los l\u00edmites, contacte con la asistencia t\u00e9cnica local de Sandvik.","Importance of screen body wear protection":"Importancia de proteger el cuerpo de la zaranda contra el desgaste","(1 = LOW, 5 = HIGH)":"(1 = BAJO, 5 = ALTO)","Importance of misplaced particles":"Importancia de eficiencia del cribado","Importance of available installation height (LAYOUT)":"Importancia de la altura de instalaci\u00f3n disponible (DISPOSICI\u00d3N)","Importance of Total operating lifetime costs":"Importancia de los costes operativos totales","Sum of scores":"Suma de puntuaciones","SF":"SF","High capacity to screening area ratio, cost-effective, maintainability, compact size":"Alta relaci\u00f3n de capacidad\/superficie de cribado, rentable, mantenibilidad, tama\u00f1o compacto","Primarily for portable and mobile crushing plants":"Principalmente para instalaciones de trituraci\u00f3n port\u00e1tiles y m\u00f3viles","SL":"SL","Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)":"La capacidad de ajuste, eficiencia de cribado, el mantenimiento sencillo y la instalaci\u00f3n requieren un espacio bajo en la direcci\u00f3n de altura, menos sensible al tapado de malla (movimiento lineal, alta fuerza g)","Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications":"Instalaci\u00f3n horizontal o ligeramente inclinada, disposici\u00f3n de doble mecanismo, dise\u00f1o de bandeja de cribado modular, adecuada para todas las aplicaciones de miner\u00eda y construcci\u00f3n.","SA":"SA","Widely used type, low investment cost, less sensible for pegging (circular stroke)":"Tipo muy utilizado, bajo coste de inversi\u00f3n, menos sensible para la fijaci\u00f3n (carrera circular)","Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable":"Criba inclinada, disposici\u00f3n de mecanismo \u00fanico, adecuada para aplicaciones en canteras de servicio medio, solo aplicable a disposiciones de material de cribado con tensi\u00f3n lateral","SJ":"SJ","Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)":"Tipo muy utilizado, f\u00e1cilmente adaptable a condiciones variables, baja relaci\u00f3n de capex\/rendimiento, menos sensible para acumulaci\u00f3n de material (carrera circular)","Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications":"Pantalla inclinada, principalmente disposici\u00f3n de mecanismo \u00fanico, dise\u00f1o de bandeja de cribado modular, adecuado para aplicaciones de miner\u00eda de servicio alto y miner\u00eda de servicio medio","Screen type":"Tipo de criba","In case of multiple options, please click on the screen type that you think is the most suitable for your application":"Si dispone de m\u00faltiples opciones, haga clic en el tipo de criba que considere m\u00e1s adecuado para su aplicaci\u00f3n","SG":"SG","For primary scalping":"Para separaci\u00f3n primaria (tipo scalper)","Scalping in one dimension, pay attension on screening accuracy recuirement":"Clasificaci\u00f3n en una dimensi\u00f3n, preste atenci\u00f3n al requisito de precisi\u00f3n de cribado","Please use Plant Designer for making the suitable SG model size selection for your application.":"Utilice Plant Designer para realizar la selecci\u00f3n del tama\u00f1o de modelo SG m\u00e1s adecuado para su aplicaci\u00f3n.","SS":"SS","Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement":"Mejor rendimiento cuando al menos el 70% de la alimentaci\u00f3n es menor que la separaci\u00f3n; preste atenci\u00f3n al requisito de precisi\u00f3n de cribado","Number of decks":"N\u00famero de bandejas","($min - $max)":"($min - $max)","Feed capacity":"Capacidad de alimentaci\u00f3n","Separation on 2nd deck":"Separaci\u00f3n en la 2\u00aa bandeja","Separation on 3rd deck":"Separaci\u00f3n en la 3\u00aa bandeja","% of feed smaller than separation on 1st deck":"% de alimentaci\u00f3n menor que la separaci\u00f3n en la 1\u00aa bandeja","($min - $max %)":"($min - $max %)","% of feed smaller than separation on 2nd deck":"% de alimentaci\u00f3n menor que la separaci\u00f3n en la 2\u00aa bandeja","% of feed smaller than separation on 3rd deck":"% de alimentaci\u00f3n menor que la separaci\u00f3n en la 3\u00aa bandeja","% of feed smaller than separation on 4th deck":"% de alimentaci\u00f3n menor que la separaci\u00f3n en la 4\u00aa bandeja","1st":"1\u00aa","2nd":"2\u00aa","3rd":"3\u00aa","4th":"4\u00aa","Preliminary selection":"Selecci\u00f3n preliminar","For final selection, use Plant Designer":"Utilice Plant Designer para la selecci\u00f3n final","Screening area of selected screen":"Superficie de cribado de la criba seleccionada","m\u00b2":"m\u00b2","Minimum width":"Ancho m\u00ednimo","m":"m","Min. screening area":"Superficie de cribado m\u00edn.","Overflow and underflow volumes per deck (mtph)":"Volumen de sobre tama\u00f1o y bajo tama\u00f1o por bandeja","Deck":"Bandeja","Over":"Sobre","Through":"A trav\u00e9s de"},"fr":{"_name":"Fran\u00e7ais","Back":"Retour","Screen type %n selection guide":"Guide de s\u00e9lection %n de type de crible","Max feed size":"Taille maxi du mat\u00e9riau d'alimentation","mm":"mm","ton\/cubic meter":"tonne\/m\u00e8tre cube","($min - $max mm)":"($min - $max mm)","Separation on top deck":"S\u00e9paration sur \u00e9tage sup\u00e9rieur","Bulk Density":"Masse volumique en vrac","($min - $max ton\/cubic meter)":"($min - $max tonne\/m\u00e8tre cube)","No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.":"Pas de produit correspondant trouv\u00e9. Veuillez effectuer une recherche avec des crit\u00e8res diff\u00e9rents ou, si votre application ne correspond pas \u00e0 d'autres crit\u00e8res, veuillez contacter l'assistance produit Sandvik locale.","Importance of screen body wear protection":"Importance de la protection d'usure des flancs du crible","(1 = LOW, 5 = HIGH)":"(1 = BAS, 5 = HAUT)","Importance of misplaced particles":"Importance d'avoir une alimentation homog\u00e8ne","Importance of available installation height (LAYOUT)":"Importance de la hauteur d'implantation disponible","Importance of Total operating lifetime costs":"Importance du co\u00fbt total d'exploitation de la dur\u00e9e de vie","Sum of scores":"Somme des scores","SF":"SF","High capacity to screening area ratio, cost-effective, maintainability, compact size":"Rapport capacit\u00e9\/surface de criblage \u00e9lev\u00e9, bon rapport co\u00fbt-efficacit\u00e9, facilit\u00e9 d'entretien, taille compacte","Primarily for portable and mobile crushing plants":"Principalement pour les installations de concassage portables et mobiles","SL":"SL","Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)":"Facilit\u00e9 des r\u00e9glages, efficacit\u00e9 du criblage, maintenance ais\u00e9e, \nl'installation demande moins de place en hauteur, moins sensible au colmatage (course lin\u00e9iare, force G \u00e9lev\u00e9e)","Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications":"Installation horizontale ou l\u00e9g\u00e8rement inclin\u00e9e, toujours dispositif \u00e0 m\u00e9canisme double, conception modulaire de la surface criblante, convient \u00e0 toutes les applications d'exploitation mini\u00e8re et de construction","SA":"SA","Widely used type, low investment cost, less sensible for pegging (circular stroke)":"Type fr\u00e9quemment utilis\u00e9, co\u00fbt d'investissement bas, moins sensible au goujeonnage","Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable":"Crible inclin\u00e9, dispositif \u00e0 m\u00e9canisme unique, convient aux applications de carri\u00e8res de moyenne intensit\u00e9, seuls les dispositifs de criblage \u00e0 tension lat\u00e9rale sont applicables","SJ":"SJ","Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)":"Type fr\u00e9quemment utilis\u00e9, ais\u00e9ment adaptable aux diff\u00e9rentes conditions, faible rapport capex\/performances, moins susceptible de goujeonnage (course circulaire)","Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications":"Crible inclin\u00e9, dispositif \u00e0 m\u00e9canisme unique, conception modulaire de surface criblante, convient aux grosses carri\u00e8res  et aux exploitations mini\u00e8res moyennes ","Screen type":"Type de crible","In case of multiple options, please click on the screen type that you think is the most suitable for your application":"En cas d'options multiples, veuillez cliquer sur le type de crible qui convient le mieux, selon vous, \u00e0 votre application.","SG":"SG","For primary scalping":"Pour scalpage primaire","Scalping in one dimension, pay attension on screening accuracy recuirement":"Scalpage grossier, attention aux exigences en mati\u00e8re de pr\u00e9cision du criblage","Please use Plant Designer for making the suitable SG model size selection for your application.":"Veuillez utiliser Plant Designer pour s\u00e9lectionner une taille de mod\u00e8le SG appropri\u00e9e pour votre application.","SS":"SS","Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement":"Meilleures performances lorsqu'au moins 70 % du mat\u00e9riau aliment\u00e9 est plus petit que la s\u00e9paration, attention aux exigences en mati\u00e8re de pr\u00e9cision du criblage","Number of decks":"Nombre d'\u00e9tages","($min - $max)":"($min - $max)","Feed capacity":"Capacit\u00e9 de l'alimentation","Separation on 2nd deck":"s\u00e9paration sur 2\u00e8me \u00e9tage","Separation on 3rd deck":"s\u00e9paration sur 3\u00e8me \u00e9tage","% of feed smaller than separation on 1st deck":"% de l'alimentation plus petit que la s\u00e9paration au 1er \u00e9tage","($min - $max %)":"($min - $max %)","% of feed smaller than separation on 2nd deck":"% de l'alimentation plus petit que la s\u00e9paration au 2\u00e8me \u00e9tage","% of feed smaller than separation on 3rd deck":"% de l'alimentation plus petit que la s\u00e9paration au 3\u00e8me \u00e9tage","% of feed smaller than separation on 4th deck":"% de l'alimentation plus petit que la s\u00e9paration au 4\u00e8me \u00e9tage","1st":"1e","2nd":"2e","3rd":"3e","4th":"4e","Preliminary selection":"S\u00e9lection pr\u00e9liminaire","For final selection, use Plant Designer":"Utilisez Plant Designer pour la s\u00e9lection finale","Screening area of selected screen":"Surface de criblage du crible s\u00e9lectionn\u00e9","m\u00b2":"m\u00b2","Minimum width":"Largeur minimale","m":"m","Min. screening area":"Surface de criblage mini.","Overflow and underflow volumes per deck (mtph)":"Surcharges (\u00e9paisseur de couche trop importante) ou\n sous-charges (\u00e9paisseur de couche tropp faible) par \u00e9tage de crible","Deck":"Claie","Over":"Au-dessus","Through":"Au-travers"},"fi":{"_name":"Suomi","Back":"Takaisin","Screen type %n selection guide":"Seulatyypin %n valintaopas","Max feed size":"Maksimisy\u00f6tekoko","mm":"mm","ton\/cubic meter":"tonnia\/m3","($min - $max mm)":"($min - $max mm)","Separation on top deck":"Erotteluraja yl\u00e4tasolla","Bulk Density":"Irtotiheys","($min - $max ton\/cubic meter)":"($min - $max tonnia\/m3)","No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.":"Hakua vastaavia tuotteita ei l\u00f6ytynyt. Tee uusi haku eri hakukriteereill\u00e4 tai ota yhteytt\u00e4 paikalliseen Sandvik-myyntiorganisaatioon.","Importance of screen body wear protection":"Seulakorin kulutussuojauksen merkitys","(1 = LOW, 5 = HIGH)":"(1 = V\u00c4H\u00c4INEN, 5 = SUURI)","Importance of misplaced particles":"Erottelutarkkuuden merkitys","Importance of available installation height (LAYOUT)":"Asennuskorkeuden merkitys (LAYOUT)","Importance of Total operating lifetime costs":"Elinkaarikustannusten merkitys","Sum of scores":"Kokonaispistem\u00e4\u00e4r\u00e4","SF":"SF","High capacity to screening area ratio, cost-effective, maintainability, compact size":"Suuri kapasiteetti verrattuna seulontapinta-alaan, kustannustehokas, helppo kunnossapito, kompakti koko","Primarily for portable and mobile crushing plants":"Ensisijaisesti siirrett\u00e4viin murskauslaitoksiin","SL":"SL","Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)":"S\u00e4\u00e4dett\u00e4vyys, seulonnan tehokkuus, helppo kunnossapito, korkeussuunnassa v\u00e4h\u00e4n tilaa vaativa asennus","Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications":"Asennus vaakatasoon tai liev\u00e4sti kallistettuna, kaksiakselinen, modulaarinen seulatasomalli, soveltuu moneen kaivos- ja kiviainessovellukseen","SA":"SA","Widely used type, low investment cost, less sensible for pegging (circular stroke)":"Yleisesti k\u00e4yt\u00f6ss\u00e4 oleva seulamalli, alhaiset investointikustannukset, v\u00e4hemm\u00e4n tukkeutumisherkk\u00e4 (py\u00f6riv\u00e4 isku)","Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable":"Yksiakselinen kallistettu seula, soveltuu moneen k\u00e4ytt\u00f6\u00f6n, tasorakenne sivukiristeinen","SJ":"SJ","Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)":"Yleisesti k\u00e4yt\u00f6ss\u00e4 oleva seulamalli, joustava ratkaisu vaihteleviin olosuhteisiin, kustannustehokas, v\u00e4hemm\u00e4n tukkeutumisherkk\u00e4 (py\u00f6riv\u00e4 isku)","Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications":"Yksiakselinen kallistettu seula, soveltuu moneen k\u00e4ytt\u00f6\u00f6n, tasorakenne modulaarinen, soveltuu moneen kaivos- ja kiviainessovellukseen","Screen type":"Seulatyyppi","In case of multiple options, please click on the screen type that you think is the most suitable for your application":"Jos vaihtoehtoja on useita, napauta seulatyyppi\u00e4, joka soveltuu mielest\u00e4si parhaiten k\u00e4ytt\u00f6tarkoitukseesi","SG":"SG","For primary scalping":"Esiseulontaan","Scalping in one dimension, pay attension on screening accuracy recuirement":"Kiinnit\u00e4 huomiota seulonnan tarkkuusvaatimuksiin","Please use Plant Designer for making the suitable SG model size selection for your application.":"K\u00e4yt\u00e4 Plant Designeria k\u00e4ytt\u00f6tarkoitukseesi soveltuvan SG-seulan koon valintaan.","SS":"SS","Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement":"Parhaimmillaan, kun v\u00e4hint\u00e4\u00e4n 70 % sy\u00f6t\u00f6st\u00e4 on pienemp\u00e4\u00e4 kuin erotteluraja, huomioi seulonnan tarkkuusvaatimukset","Number of decks":"Tasojen m\u00e4\u00e4r\u00e4","($min - $max)":"($min - $max)","Feed capacity":"Sy\u00f6tt\u00f6kapasiteetti","Separation on 2nd deck":"Erotteluraja 2. tasolla","Separation on 3rd deck":"Erotteluraja 3. tasolla","% of feed smaller than separation on 1st deck":"% sy\u00f6temateriaalista on pienemp\u00e4\u00e4 kuin erotteluraja 1. tasolla","($min - $max %)":"($min - $max %)","% of feed smaller than separation on 2nd deck":"%  sy\u00f6temateriaalista on pienemp\u00e4\u00e4 kuin erotteluraja 2. tasolla","% of feed smaller than separation on 3rd deck":"%  sy\u00f6temateriaalista on pienemp\u00e4\u00e4 kuin erotteluraja 3. tasolla","% of feed smaller than separation on 4th deck":"%  sy\u00f6temateriaalista on pienemp\u00e4\u00e4 kuin erotteluraja 4. tasolla","1st":"1.","2nd":"2.","3rd":"3.","4th":"4.","Preliminary selection":"Esivalinta","For final selection, use Plant Designer":"K\u00e4yt\u00e4 lopulliseen valintaan Plant Designeria.","Screening area of selected screen":"Valitun seulan seulontapinta-ala","m\u00b2":"m\u00b2","Minimum width":"Minimileveys","m":"m","Min. screening area":"Minimiseulontapinta-ala","Overflow and underflow volumes per deck (mtph)":"Ylitteiden ja alitteiden m\u00e4\u00e4r\u00e4 (mtph)","Deck":"Taso","Over":"Yli","Through":"L\u00e4pi"},"sv":{"_name":"Svenska","Back":"Bak\u00e5t","Screen type %n selection guide":"Sikttyp %n v\u00e4ljarguide","Max feed size":"St\u00f6rsta matningsstorlek","mm":"mm","ton\/cubic meter":"ton\/kubikmeter","($min - $max mm)":"($min - $max mm)","Separation on top deck":"Avskiljning p\u00e5 \u00f6vre d\u00e4ck","Bulk Density":"Volymvikt","($min - $max ton\/cubic meter)":"($min - $max ton\/kubikmeter)","No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.":"Inga matchande produkter finns. F\u00f6rs\u00f6k s\u00f6ka med andra villkor eller kontakta Sandviks lokala produktsupport om din anv\u00e4ndning ligger utanf\u00f6r gr\u00e4nserna.","Importance of screen body wear protection":"Betydelse av siktl\u00e5dans slitageskydd","(1 = LOW, 5 = HIGH)":"(1 = L\u00c5G, 5 = H\u00d6G)","Importance of misplaced particles":"Betydelse av felkorn","Importance of available installation height (LAYOUT)":"Betydelse av tillg\u00e4nglig inbyggnadsh\u00f6jd (LAYOUT)","Importance of Total operating lifetime costs":"Betydelse av totala driftskostnader under livsl\u00e4ngden","Sum of scores":"Summa po\u00e4ng","SF":"SF","High capacity to screening area ratio, cost-effective, maintainability, compact size":"H\u00f6gt f\u00f6rh\u00e5llande mellan kapacitet och siktyta, kostnadseffektiv, underh\u00e5llsv\u00e4nlig, kompakt storlek","Primarily for portable and mobile crushing plants":"Fr\u00e4mst f\u00f6r portabla och mobila krossanl\u00e4ggningar","SL":"SL","Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)":"Inst\u00e4llningsm\u00f6jligheter, rensiktningsf\u00f6rm\u00e5ga, underh\u00e5llsv\u00e4nlig, installationen kr\u00e4ver litet utrymme p\u00e5 h\u00f6jden, mindre k\u00e4nslig f\u00f6r igens\u00e4ttning (linj\u00e4rt slag, h\u00f6g G-kraft)","Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications":"Installeras horisontellt eller med liten lutning, mekanismer alltid i dubbelt arrangemang, modul\u00e4r utformning av siktd\u00e4ck, l\u00e4mplig f\u00f6r alla anv\u00e4ndningsomr\u00e5den inom gruvdrift och anl\u00e4ggning","SA":"SA","Widely used type, low investment cost, less sensible for pegging (circular stroke)":"Allm\u00e4nt anv\u00e4nd typ, l\u00e5g investeringskostnad, mindre k\u00e4nslig f\u00f6r pluggning (cirkul\u00e4rt slag)","Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable":"Lutande sikt, enkelt arrangemang av mekanism, l\u00e4mplig f\u00f6r medeltunga anv\u00e4ndningsomr\u00e5den inom stenbrytning, endast sidosp\u00e4nda arrangemang f\u00f6r siktmedia anv\u00e4nds","SJ":"SJ","Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)":"Allm\u00e4nt anv\u00e4nd typ, l\u00e4tt att anpassa till varierande f\u00f6rh\u00e5llanden, l\u00e5gt f\u00f6rh\u00e5llande mellan kapitalinvestering och prestanda, mindre k\u00e4nslig f\u00f6r pluggning (cirkul\u00e4rt slag)","Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications":"Lutande sikt, oftast enkelt arrangemang av mekanism, modul\u00e4r utformning av siktd\u00e4ck, l\u00e4mplig f\u00f6r tunga anv\u00e4ndningsomr\u00e5den inom stenbrytning och medeltunga anv\u00e4ndningsomr\u00e5den inom gruvbrytning","Screen type":"Sikttyp","In case of multiple options, please click on the screen type that you think is the most suitable for your application":"Vid flera alternativ, klicka p\u00e5 den sikttyp du tror passar b\u00e4st f\u00f6r ditt anv\u00e4ndningsomr\u00e5de","SG":"SG","For primary scalping":"F\u00f6r prim\u00e4r vibrationssiktning","Scalping in one dimension, pay attension on screening accuracy recuirement":"Vibration i en dimension, var uppm\u00e4rksam p\u00e5 krav p\u00e5 siktningsnoggrannhet","Please use Plant Designer for making the suitable SG model size selection for your application.":"Anv\u00e4nd Plant Designer f\u00f6r att g\u00f6ra l\u00e4mpligt val av SG-modellstorlek f\u00f6r ditt anv\u00e4ndningsomr\u00e5de.","SS":"SS","Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement":"B\u00e4sta prestanda n\u00e4r minst 70 % av matningen \u00e4r mindre \u00e4n avskiljningen, var uppm\u00e4rksam p\u00e5 krav p\u00e5 siktningsnoggrannhet","Number of decks":"Antal d\u00e4ck","($min - $max)":"($min - $max)","Feed capacity":"Matningskapacitet","Separation on 2nd deck":"Avskiljning p\u00e5 andra d\u00e4ck","Separation on 3rd deck":"Avskiljning p\u00e5 tredje d\u00e4ck","% of feed smaller than separation on 1st deck":"% av matningen mindre \u00e4n avskiljningen p\u00e5 f\u00f6rsta d\u00e4ck","($min - $max %)":"($min - $max %)","% of feed smaller than separation on 2nd deck":"% av matningen mindre \u00e4n avskiljningen p\u00e5 andra d\u00e4ck","% of feed smaller than separation on 3rd deck":"% av matningen mindre \u00e4n avskiljningen p\u00e5 tredje d\u00e4ck","% of feed smaller than separation on 4th deck":"% av matningen mindre \u00e4n avskiljningen p\u00e5 fj\u00e4rde d\u00e4ck","1st":"F\u00f6rsta","2nd":"Andra","3rd":"Tredje","4th":"Fj\u00e4rde","Preliminary selection":"Prelimin\u00e4rt val","For final selection, use Plant Designer":"F\u00f6r slutgiltigt val, anv\u00e4nd Plant Designer","Screening area of selected screen":"Siktyta p\u00e5 vald sikt","m\u00b2":"m\u00b2","Minimum width":"Minsta bredd","m":"m","Min. screening area":"Minsta siktyta","Overflow and underflow volumes per deck (mtph)":"\u00d6verfl\u00f6des- och underfl\u00f6desvolymer per d\u00e4ck (mtph)","Deck":"D\u00e4ck","Over":"\u00d6ver","Through":"Genom"},"pt":{"_name":"Portuguese","Back":"Voltar","Screen type %n selection guide":"Guia de sele\u00e7\u00e3o de tipo de peneira %n","Max feed size":"Tamanho m\u00e1ximo de alimenta\u00e7\u00e3o","mm":"mm","ton\/cubic meter":"toneladas\/metros c\u00fabicos","($min - $max mm)":"($min - $max mm)","Separation on top deck":"Separa\u00e7\u00e3o no deck superior","Bulk Density":"Densidade aparente","($min - $max ton\/cubic meter)":"($min - $max toneladas\/metros c\u00fabicos)","No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.":"Nenhum produto correspondente encontrado. Pesquise usando crit\u00e9rios diferentes ou, caso a aplica\u00e7\u00e3o esteja fora dos limites, entre em contato com o suporte local de produtos da Sandvik.","Importance of screen body wear protection":"Import\u00e2ncia da prote\u00e7\u00e3o do desgaste da carca\u00e7a da peneira","(1 = LOW, 5 = HIGH)":"(1 = BAIXA, 5 = ALTA)","Importance of misplaced particles":"Import\u00e2ncia das part\u00edculas extraviadas","Importance of available installation height (LAYOUT)":"Import\u00e2ncia da altura da instala\u00e7\u00e3o dispon\u00edvel (LAYOUT)","Importance of Total operating lifetime costs":"Import\u00e2ncia do custo de opera\u00e7\u00e3o total durante a vida \u00fatil","Sum of scores":"Soma das pontua\u00e7\u00f5es","SF":"SF","High capacity to screening area ratio, cost-effective, maintainability, compact size":"Alta rela\u00e7\u00e3o de capacidade para \u00e1rea de peneiramento, boa rela\u00e7\u00e3o custo\/benef\u00edcio, manutenibilidade, tamanho compacto","Primarily for portable and mobile crushing plants":"Uso prim\u00e1rio para instala\u00e7\u00f5es de britagem m\u00f3veis e port\u00e1teis","SL":"SL","Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)":"Ajustabilidade, efici\u00eancia de peneiramento, f\u00e1cil manuten\u00e7\u00e3o, a instala\u00e7\u00e3o requer um pequeno espa\u00e7o vertical, menos sens\u00edvel \u00e0 obstru\u00e7\u00e3o (curso linear, alta for\u00e7a g)","Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications":"Instala\u00e7\u00e3o ligeiramente inclinada ou horizontal, sempre uma disposi\u00e7\u00e3o de mecanismo duplo, projeto de deck modular, adequado para todas as aplica\u00e7\u00f5es de minera\u00e7\u00e3o e constru\u00e7\u00e3o","SA":"SA","Widely used type, low investment cost, less sensible for pegging (circular stroke)":"Tipo amplamente usado, baixo custo de investimento, menos sens\u00edvel \u00e0 obstru\u00e7\u00e3o (curso circular)","Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable":"Peneira inclinada, disposi\u00e7\u00e3o de mecanismo \u00fanico, adequado para aplica\u00e7\u00f5es de pedreira de trabalho m\u00e9dio, aplic\u00e1vel apenas para telas tensionadas lateralmente","SJ":"SJ","Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)":"Amplamente usado, f\u00e1cil adapta\u00e7\u00e3o a diversas condi\u00e7\u00f5es, baixa rela\u00e7\u00e3o capital-desempenho, menos sens\u00edvel a obstru\u00e7\u00f5es","Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications":"Peneira inclinada, disposi\u00e7\u00e3o principalmente de mecanismo \u00fanico, projeto de plataforma de peneiramento modular, adequado para aplica\u00e7\u00f5es de pedreira de trabalho pesado e minera\u00e7\u00e3o de trabalho m\u00e9dio","Screen type":"Tipo de peneira","In case of multiple options, please click on the screen type that you think is the most suitable for your application":"Em caso de diversas op\u00e7\u00f5es, clique no tipo de peneira que acredita ser o mais adequado para a sua aplica\u00e7\u00e3o","SG":"SG","For primary scalping":"Para escalpe prim\u00e1rio","Scalping in one dimension, pay attension on screening accuracy recuirement":"Para escalpe em uma dimens\u00e3o, preste aten\u00e7\u00e3o ao requisito de precis\u00e3o do peneiramento","Please use Plant Designer for making the suitable SG model size selection for your application.":"Use o Plant Designer para adequar a sele\u00e7\u00e3o de tamanho de modelo SG para a sua aplica\u00e7\u00e3o.","SS":"SS","Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement":"Melhor desempenho quando pelo menos 70% da alimenta\u00e7\u00e3o \u00e9 menor do que a separa\u00e7\u00e3o, preste aten\u00e7\u00e3o aos requisitos de precis\u00e3o de peneiramento","Number of decks":"N\u00famero de decks","($min - $max)":"($min - $max)","Feed capacity":"Capacidade da alimenta\u00e7\u00e3o","Separation on 2nd deck":"Separa\u00e7\u00e3o no 2\u00ba deck","Separation on 3rd deck":"Separa\u00e7\u00e3o no 3\u00ba deck","% of feed smaller than separation on 1st deck":"% da alimenta\u00e7\u00e3o menor do que a separa\u00e7\u00e3o no 1\u00ba deck","($min - $max %)":"($min - $max %)","% of feed smaller than separation on 2nd deck":"% da alimenta\u00e7\u00e3o menor do que a separa\u00e7\u00e3o no 2\u00ba deck","% of feed smaller than separation on 3rd deck":"% da alimenta\u00e7\u00e3o menor do que a separa\u00e7\u00e3o no 3\u00ba deck","% of feed smaller than separation on 4th deck":"% da alimenta\u00e7\u00e3o menor do que a separa\u00e7\u00e3o no 4\u00ba deck","1st":"1\u00ba","2nd":"2\u00ba","3rd":"3\u00ba","4th":"4\u00ba","Preliminary selection":"Sele\u00e7\u00e3o preliminar","For final selection, use Plant Designer":"Para a sele\u00e7\u00e3o final, use o Plant Designer","Screening area of selected screen":"\u00c1rea de peneiramento da peneira selecionada","m\u00b2":"m\u00b2","Minimum width":"Largura m\u00ednima","m":"m","Min. screening area":"\u00c1rea de peneiramento m\u00ednima","Overflow and underflow volumes per deck (mtph)":"Volume de retido e passante por deck (mtph)","Deck":"Deck","Over":"Retido","Through":"Passante"},"zh":{"_name":"","Back":"\u540e\u9000","Screen type %n selection guide":"\u7b5b\u5206\u673a\u7c7b\u578b%n\u9009\u62e9\u6307\u5357","Max feed size":"\u6700\u5927\u7ed9\u6599\u7c92\u5ea6","mm":"mm","ton\/cubic meter":"t\/m\u00b3","($min - $max mm)":"\uff08$min - $max mm\uff09","Separation on top deck":"\u9876\u5c42\u7b5b\u9762\u7684\u5206\u79bb\u7c92\u5f84","Bulk Density":"\u5806\u79ef\u5bc6\u5ea6","($min - $max ton\/cubic meter)":"\uff08$min - $max t\/\u33a1\uff09","No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.":"\u672a\u627e\u5230\u5339\u914d\u7684\u4ea7\u54c1\u3002 \u8bf7\u5c1d\u8bd5\u6839\u636e\u4e0d\u540c\u7684\u6761\u4ef6\u8fdb\u884c\u641c\u7d22\uff0c\u6216\u5982\u679c\u5e94\u7528\u8d85\u51fa\u9650\u503c\uff0c\u8bf7\u8054\u7cfb\u60a8\u7684\u672c\u5730Sandvik\u4ea7\u54c1\u652f\u6301\u4e2d\u5fc3\u3002","Importance of screen body wear protection":"\u7b5b\u5206\u673a\u4e3b\u4f53\u9632\u78e8\u635f\u4fdd\u62a4\u7684\u91cd\u8981\u6027","(1 = LOW, 5 = HIGH)":"\uff081 = \u4f4e\uff0c5 = \u9ad8\uff09","Importance of misplaced particles":"\u7b5b\u5206\u7cbe\u5ea6\u7684\u91cd\u8981\u6027","Importance of available installation height (LAYOUT)":"\u5b89\u88c5\u9ad8\u5ea6\u5408\u9002\u7684\u91cd\u8981\u6027\uff08\u5e03\u7f6e\uff09","Importance of Total operating lifetime costs":"\u603b\u8fd0\u884c\u4f7f\u7528\u5bff\u547d\u6210\u672c\u7684\u91cd\u8981\u6027","Sum of scores":"\u603b\u5f97\u5206","SF":"SF","High capacity to screening area ratio, cost-effective, maintainability, compact size":"\u5355\u4f4d\u7b5b\u5206\u9762\u79ef\u80fd\u529b\u5927\uff0c\u6210\u672c\u6548\u76ca\u9ad8\uff0c\u53ef\u7ef4\u62a4\u6027\u597d\uff0c\u4f53\u79ef\u5c0f","Primarily for portable and mobile crushing plants":"\u4e3b\u8981\u7528\u4e8e\u62fc\u88c5\u5f0f\u548c\u79fb\u52a8\u5f0f\u7834\u788e\u8bbe\u5907","SL":"SL","Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)":"\u53ef\u8c03\u6027\u597d\uff0c\u7b5b\u5206\u6548\u7387\u9ad8\uff0c\u4fbf\u4e8e\u7ef4\u62a4\uff0c\u5b89\u88c5\u9ad8\u5ea6\u8981\u6c42\u7a7a\u95f4\u5c0f\uff0c\u4e0d\u6613\u5835\u5b54\uff08\u76f4\u7ebf\u632f\u52a8\uff0c\u9ad8\u6fc0\u632f\u529b\uff09","Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications":"\u6c34\u5e73\u6216\u5c0f\u503e\u89d2\u5b89\u88c5\uff0c\u59cb\u7ec8\u662f\u53cc\u6fc0\u632f\u5668\u5e03\u7f6e\uff0c\u6a21\u5757\u5316\u7b5b\u9762\u8bbe\u8ba1\uff0c\u9002\u5408\u6240\u6709\u77ff\u5c71\u548c\u5de5\u7a0b\u5e94\u7528","SA":"SA","Widely used type, low investment cost, less sensible for pegging (circular stroke)":"\u5e94\u7528\u5e7f\u6cdb\uff0c\u6295\u8d44\u6210\u672c\u4f4e\uff0c\u4e0d\u6613\u5835\u5b54\uff08\u5706\u632f\u52a8\uff09","Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable":"\u659c\u9762\u7b5b\uff0c\u5355\u6fc0\u632f\u5668\u5e03\u7f6e\uff0c\u9002\u7528\u4e8e\u4e2d\u578b\u91c7\u77f3\u573a\uff0c\u4ec5\u9002\u7528\u4e8e\u4fa7\u5f20\u7d27\u7b5b\u7f51","SJ":"SJ","Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)":"\u5e94\u7528\u5e7f\u6cdb\uff0c\u6613\u4e8e\u9002\u5e94\u4e0d\u540c\u7684\u6761\u4ef6\uff0c\u6027\u4ef7\u6bd4\u9ad8\uff0c\u4e0d\u6613\u5835\u5b54\uff08\u5706\u632f\u52a8\uff09","Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications":"\u659c\u9762\u7b5b\uff0c\u4e3b\u8981\u4e3a\u5355\u6fc0\u632f\u5668\u5e03\u7f6e\uff0c\u6a21\u5757\u5316\u7b5b\u9762\u8bbe\u8ba1\uff0c\u9002\u7528\u4e8e\u91cd\u578b\u91c7\u77f3\u573a\u548c\u4e2d\u578b\u77ff\u5c71\u5e94\u7528","Screen type":"\u7b5b\u5206\u673a\u7c7b\u578b","In case of multiple options, please click on the screen type that you think is the most suitable for your application":"\u5982\u679c\u6709\u591a\u4e2a\u9009\u9879\uff0c\u8bf7\u5355\u51fb\u60a8\u8ba4\u4e3a\u6700\u9002\u5408\u60a8\u7684\u5e94\u7528\u7684\u7b5b\u5206\u673a\u7c7b\u578b","SG":"SG","For primary scalping":"\u5bf9\u4e8e\u521d\u7ea7\u5265\u79bb\u7b5b\u5206","Scalping in one dimension, pay attension on screening accuracy recuirement":"\u4ec5\u63a7\u5236\u5355\u5411\u7b5b\u5206\u5c3a\u5bf8\uff0c\u6ce8\u610f\u7b5b\u5206\u7cbe\u5ea6\u8981\u6c42","Please use Plant Designer for making the suitable SG model size selection for your application.":"\u8bf7\u4f7f\u7528Plant Designer\u4e3a\u60a8\u7684\u5e94\u7528\u5236\u4f5c\u5408\u9002\u7684SG\u7b5b\u5206\u673a\u578b\u53f7\u3002","SS":"SS","Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement":"\u81f3\u5c1170%\u7684\u8fdb\u6599\u5c0f\u4e8e\u5206\u79bb\u7c92\u5ea6\u65f6\u5177\u6709\u6700\u4f73\u6027\u80fd\uff0c\u6ce8\u610f\u7b5b\u5206\u7cbe\u5ea6\u7684\u8981\u6c42","Number of decks":"\u7b5b\u9762\u6570\u91cf","($min - $max)":"\uff08$min - $max\uff09","Feed capacity":"\u7ed9\u6599\u91cf","Separation on 2nd deck":"\u7b2c\u4e8c\u5c42\u7b5b\u9762\u7684\u5206\u79bb\u7c92\u5f84","Separation on 3rd deck":"\u7b2c\u4e09\u5c42\u7b5b\u9762\u7684\u5206\u79bb\u7c92\u5f84","% of feed smaller than separation on 1st deck":"%\u8fdb\u6599\u5c0f\u4e8e\u7b2c\u4e00\u5c42\u7b5b\u9762\u7684\u5206\u79bb\u7c92\u5f84","($min - $max %)":"\uff08$min - $max %\uff09","% of feed smaller than separation on 2nd deck":"%\u8fdb\u6599\u5c0f\u4e8e\u7b2c\u4e8c\u5c42\u7b5b\u9762\u7684\u5206\u79bb\u7c92\u5f84","% of feed smaller than separation on 3rd deck":"%\u8fdb\u6599\u5c0f\u4e8e\u7b2c\u4e09\u5c42\u7b5b\u9762\u7684\u5206\u79bb\u7c92\u5f84","% of feed smaller than separation on 4th deck":"%\u8fdb\u6599\u5c0f\u4e8e\u7b2c\u56db\u5c42\u7b5b\u9762\u7684\u5206\u79bb\u7c92\u5f84","1st":"\u7b2c\u4e00\u5c42","2nd":"\u7b2c\u4e8c\u5c42","3rd":"\u7b2c\u4e09\u5c42","4th":"\u7b2c\u56db\u5c42","Preliminary selection":"\u521d\u6b65\u9009\u62e9","For final selection, use Plant Designer":"\u4f7f\u7528Plant Designer\u8fdb\u884c\u6700\u7ec8\u9009\u62e9","Screening area of selected screen":"\u5df2\u9009\u7b5b\u5206\u673a\u7684\u7b5b\u5206\u9762\u79ef","m\u00b2":"m\u00b2","Minimum width":"\u6700\u5c0f\u5bbd\u5ea6","m":"m","Min. screening area":"\u6700\u5c0f\u7b5b\u5206\u9762\u79ef","Overflow and underflow volumes per deck (mtph)":"\u6bcf\u4e2a\u7b5b\u9762\u7684\u7b5b\u4e0a\u91cf\u548c\u7b5b\u4e0b\u91cf (mtph)","Deck":"\u7b5b\u9762 ","Over":"\u7b5b\u4e0a","Through":"\u8fc7\u7b5b"},"ru":{"_name":"","Back":"\u041d\u0430\u0437\u0430\u0434","Screen type %n selection guide":"\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0432\u044b\u0431\u043e\u0440\u0443 %n \u0442\u0438\u043f\u0430 \u0433\u0440\u043e\u0445\u043e\u0442\u0430","Max feed size":"\u041c\u0430\u043a\u0441. \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0438\u0442\u0430\u043d\u0438\u044f","mm":"\u043c\u043c","ton\/cubic meter":"\u0442\u043e\u043d\u043d\/\u043a\u0443\u0431.\u043c\u0435\u0442\u0440","($min - $max mm)":"($min - $max \u043c\u043c)","Separation on top deck":"\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0434\u0435\u043a\u0435","Bulk Density":"\u041e\u0431\u044a\u0435\u043c\u043d\u0430\u044f \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c","($min - $max ton\/cubic meter)":"($min - $max \u0442\u043e\u043d\u043d\/\u043a\u0443\u0431.\u043c\u0435\u0442\u0440)","No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.":"\u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041f\u043e\u043f\u044b\u0442\u0430\u0439\u0442\u0435\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c\u0438 \u0438\u043b\u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u0430\u0448\u0438\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c, \u0441\u0432\u044f\u0436\u0438\u0442\u0435\u0441\u044c \u0441 \u043c\u0435\u0441\u0442\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u043c Sandvik.","Importance of screen body wear protection":"\u0412\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u0438\u0437\u043d\u043e\u0441\u0430 \u043a\u043e\u0440\u043f\u0443\u0441\u0430 \u0433\u0440\u043e\u0445\u043e\u0442\u0430","(1 = LOW, 5 = HIGH)":"(1 = \u041d\u0418\u0417\u041a\u0410\u042f, 5 = \u0412\u042b\u0421\u041e\u041a\u0410\u042f)","Importance of misplaced particles":"\u0412\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0438\u0446","Importance of available installation height (LAYOUT)":"\u0412\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (\u041a\u041e\u041c\u041f\u041e\u041d\u041e\u0412\u041a\u0410)","Importance of Total operating lifetime costs":"\u0412\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0449\u0438\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u0437\u0430 \u0432\u0435\u0441\u044c \u0441\u0440\u043e\u043a \u0441\u043b\u0443\u0436\u0431\u044b","Sum of scores":"\u0421\u0443\u043c\u043c\u0430 \u0431\u0430\u043b\u043b\u043e\u0432","SF":"SF","High capacity to screening area ratio, cost-effective, maintainability, compact size":"\u0412\u044b\u0441\u043e\u043a\u043e\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u0433\u0440\u043e\u0445\u043e\u0447\u0435\u043d\u0438\u044f, \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0447\u043d\u043e\u0441\u0442\u044c, \u0440\u0435\u043c\u043e\u043d\u0442\u043e\u043f\u0440\u0438\u0433\u043e\u0434\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440","Primarily for portable and mobile crushing plants":"\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0436\u043d\u044b\u0445 \u0438 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0434\u0440\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a","SL":"SL","Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)":"\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0433\u0440\u043e\u0445\u043e\u0447\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0442\u0435\u0445\u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u043e \u0432\u044b\u0441\u043e\u0442\u0435 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043d\u0438\u0437\u043a\u0430\u044f \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0431\u0438\u0432\u0430\u043d\u0438\u044e \u0433\u0440\u043e\u0445\u043e\u0442\u0430 (\u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0445\u043e\u0434, \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438)","Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043b\u0438 \u0441\u043b\u0435\u0433\u043a\u0430 \u043d\u0430\u043a\u043b\u043e\u043d\u043d\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430, \u0432\u0441\u0435\u0433\u0434\u0430 \u0441 \u0434\u0432\u043e\u0439\u043d\u044b\u043c \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c, \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u0435\u043a, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043b\u044e\u0431\u044b\u0445 \u0433\u043e\u0440\u043d\u043e\u0434\u043e\u0431\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0438\u043b\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0430\u0445","SA":"SA","Widely used type, low investment cost, less sensible for pegging (circular stroke)":"\u0428\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0442\u0438\u043f, \u043d\u0438\u0437\u043a\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b, \u043d\u0435\u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0431\u0438\u0432\u0430\u043d\u0438\u044e \u044f\u0447\u0435\u0435\u043a (\u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0439 \u0445\u043e\u0434)","Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable":"\u041d\u0430\u043a\u043b\u043e\u043d\u043d\u044b\u0439 \u0433\u0440\u043e\u0445\u043e\u0442, \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0430 \u0441 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u0430\u0440\u044c\u0435\u0440\u0430\u0445 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0435\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0431\u043e\u043a\u043e\u0432\u044b\u043c \u043d\u0430\u0442\u044f\u0436\u0435\u043d\u0438\u0435\u043c","SJ":"SJ","Widely used type, easily adaptable to varying conditions, low capex to performance ratio, less sensible for pegging (circular stroke)":"\u0428\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0442\u0438\u043f, \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043a \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u043c\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c, \u043d\u0438\u0437\u043a\u043e\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043f\u0438\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043d\u0435\u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0431\u0438\u0432\u0430\u043d\u0438\u044e \u044f\u0447\u0435\u0435\u043a (\u043a\u0440\u0443\u0433\u043e\u0432\u043e\u0439 \u0445\u043e\u0434)","Inclined screen, mainly single mechanism arrangement, modular screening deck design, suitable for heavy duty quarry and medium duty mining applications":"\u041d\u0430\u043a\u043b\u043e\u043d\u043d\u044b\u0439 \u0433\u0440\u043e\u0445\u043e\u0442, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0430 \u0441 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c, \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u0435\u043a, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043a\u0430\u0440\u044c\u0435\u0440\u043e\u0432 \u0438 \u0433\u043e\u0440\u043d\u043e\u0434\u043e\u0431\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0439 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.","Screen type":"\u0422\u0438\u043f \u0433\u0440\u043e\u0445\u043e\u0442\u0430","In case of multiple options, please click on the screen type that you think is the most suitable for your application":"\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u0433\u0440\u043e\u0445\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f","SG":"SG","For primary scalping":"\u0414\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u0442\u0441\u0435\u0438\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0444\u0440\u0430\u043a\u0446\u0438\u0439","Scalping in one dimension, pay attension on screening accuracy recuirement":"\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0435, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0433\u0440\u043e\u0445\u043e\u0447\u0435\u043d\u0438\u044f","Please use Plant Designer for making the suitable SG model size selection for your application.":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 Plant Designer, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 SG \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f","SS":"SS","Best performance when at least 70% of feed is smaller than separation, pay attention on screening accuracy requirement":"\u041d\u0430\u0438\u043b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0443\u043c 70% \u0444\u0440\u0430\u043a\u0446\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0440\u043e\u0441\u0435\u0438\u0432\u0430\u044e\u0449\u0435\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0433\u0440\u043e\u0445\u043e\u0447\u0435\u043d\u0438\u044f","Number of decks":"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0435\u043a","($min - $max)":"($min - $max)","Feed capacity":"\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c","Separation on 2nd deck":"\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 2-\u0439 \u0434\u0435\u043a\u0435","Separation on 3rd deck":"\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 3-\u0439 \u0434\u0435\u043a\u0435","% of feed smaller than separation on 1st deck":"% \u043f\u043e\u0434\u0430\u0447\u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 1-\u0439 \u0434\u0435\u043a\u0435","($min - $max %)":"($min - $max %)","% of feed smaller than separation on 2nd deck":"% \u043f\u043e\u0434\u0430\u0447\u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 2-\u0439 \u0434\u0435\u043a\u0435","% of feed smaller than separation on 3rd deck":"% \u043f\u043e\u0434\u0430\u0447\u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 3-\u0439 \u0434\u0435\u043a\u0435","% of feed smaller than separation on 4th deck":"% \u043f\u043e\u0434\u0430\u0447\u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 4-\u0439 \u0434\u0435\u043a\u0435","1st":"1-\u0439","2nd":"2-\u0439","3rd":"3-\u0439","4th":"4-\u0439","Preliminary selection":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440","For final selection, use Plant Designer":"\u0414\u043b\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 Plant Designer","Screening area of selected screen":"\u041f\u043b\u043e\u0449\u0430\u0434\u044c \u0433\u0440\u043e\u0445\u043e\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u043e\u0445\u043e\u0442\u0430","m\u00b2":"\u043c\u00b2","Minimum width":"\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430","m":"\u043c","Min. screening area":"\u041c\u0438\u043d. \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u0433\u0440\u043e\u0445\u043e\u0447\u0435\u043d\u0438\u044f","Overflow and underflow volumes per deck (mtph)":"\u041d\u0430\u0434\u0440\u0435\u0448\u0435\u0442\u043d\u044b\u0439 \u0438 \u043f\u043e\u0434\u0440\u0435\u0448\u0435\u0442\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043d\u0430 \u0434\u0435\u043a\u0443 (\u0442\u043e\u043d\u043d\/\u0447\u0430\u0441)","Deck":"\u0414\u0435\u043a\u0430","Over":"\u0421\u0432\u0435\u0440\u0445\u0443","Through":"\u0427\u0435\u0440\u0435\u0437"}};
\ No newline at end of file
diff --git a/js/project.js b/js/project.js
new file mode 100644 (file)
index 0000000..9388d67
--- /dev/null
@@ -0,0 +1,113 @@
+var APPNAME = 'ScreenSelectionGuide';
+
+// var DEV_INIT_VALUES = {
+//     'max_feed_size': 25,
+//     'separation_deck_1': 25,
+//     'bulk_density': 2,
+//     'importance_wear_protection': 2,
+//     'importance_misplaced_particles': 2,
+//     'importance_available_height': 2,
+//     'importance_tolc': 2,
+//     'screen_type_choice': 'SL|Adjustability, screening efficiency, maintenance friendly, installation height, less sensible for blinding (linear stroke, high g-force)/horizontal|Slightly inclined screen, always 2 mech. arrangement, modular desing',
+//     //'screen_type_choice': 'SA|Widely used type, economy, less sensible for pegging (circular stroke)|Inclined screen, one mech. arrangement, not suitable for heavy duty applications, only side tensioned screening media arrangements applicable',
+//     'decks': 2,
+//     'feed_capacity': 300,
+//     'separation_deck_2': 25,
+//     'separation_deck_3': 0,
+//     'separation_deck_4': 0,
+//     'pct_deck_1': 50,
+//     'pct_deck_2': 25,
+//     'pct_deck_3': 0,
+//     'pct_deck_4': 0,
+// };
+
+var DEV_INIT_VALUES = {
+    'max_feed_size': 300,
+    'separation_deck_1': 80,
+    'bulk_density': 1.7,
+    'importance_wear_protection': 4,
+    'importance_misplaced_particles': 4,
+    'importance_available_height': 3,
+    'importance_tolc': 2,
+    //'screen_type_choice': 'SL|Adjustability, screening efficiency, maintenance friendly, installation requires a low space in the height direction, less sensible for blinding (linear stroke, high g-force)|Horizontal or slightly inclined installation, always double mechanism arrangement, modular screening deck design, suitable for all mining and construction duty applications',
+    // 'screen_type_choice': 'SJ|Widely used type, high capacity, less sensible for pegging (circular stroke)|Inclined screen, mainly one mech. Arrangement, modular desing, suitable for heavy duty quarry and medium duty mining applications',
+    'screen_type_choice': 'SA|Widely used type, low investment cost, less sensible for pegging (circular stroke)|Inclined screen, single mechanism arrangement, suitable for medium duty quarry applications, only side tensioned screening media arrangements applicable',
+    'decks': 2,
+    'feed_capacity': 800,
+    'separation_deck_2': 50,
+    'separation_deck_3': 0,
+    'separation_deck_4': 0,
+    'pct_deck_1': 80,
+    'pct_deck_2': 40,
+    'pct_deck_3': 0,
+    'pct_deck_4': 0,
+};
+
+var RESULT_TITLE = 'Recommended media';
+
+function getResultsContents() {
+    var res = '<div id="results"><h2 data-l10n="Preliminary selection"></h2><h3">(<span data-l10n="For final selection, use Plant Designer"></span>)</h3>';
+    res += '<div class="tile">' + $screen_type + ' ' + $SCREEN.MEDIA + '</div>';
+    res += '<table class="variables">';
+    res += '<tr><td data-l10n="Screening area of selected screen"></td><td>' + round($SCREEN.AREA, 1) + ' <span data-l10n="m²"></span></td></tr>';
+    res += '<tr><td data-l10n="Minimum width"></td><td>' + round($width_min, 1) + ' <span data-l10n="m"></span></td></tr>';
+    res += '<tr><td data-l10n="Min. screening area"></td><td>' + round($AREA, 1) + ' <span data-l10n="m²"></span></td></tr>';
+    res += '</table>';
+
+    var decks = {
+        1: getTranslation('1st'),
+        2: getTranslation('2nd'),
+        3: getTranslation('3rd'),
+        4: getTranslation('4th')
+    };
+
+    res += '<div class="decks">';
+    res += '<h3 data-l10n="Overflow and underflow volumes per deck (mtph)"></h3>';
+    res += '<table class="decks">';
+    res += '<tr><td data-l10n="Deck"></td><td data-l10n="Over"></td><td data-l10n="Through"></td></tr>';
+    for (var i = 1; i <= $decks; i++) {
+        res += '<tr><td data-l10n="' + decks[i] + '"></td><td>' + round(window['$D' + i + '_OVER'], 0) + '</td><td>' + round(window['$D' + i + '_THROUGH'], 0) + '</td></tr>';
+    }
+    res += '</table>';
+    res += '</div>';
+    res += '</div>';
+    return res;
+}
+
+function findScreeningMedia($column) {
+    var table = parsePipeTable($column, true);
+    var filteredTable = [];
+    var max = 0;
+    var maxmodel = 0;
+    $.each(table, function (k, line) {
+        if (line[0] != $decks) {
+            return;
+        }
+
+        line[3] = Math.abs(line[1] - $AREA)
+        filteredTable.push(line);
+        max = Math.max(line[1], max);
+        maxmodel = Math.max(line[2], maxmodel);
+    });
+
+    filteredTable.sort(function (a, b) {
+        return a[3] - b[3];
+    });
+
+    console.log($AREA, filteredTable);
+
+    var mw = ($width_min * 1000);
+    var ERROR = false;
+    while (true) {
+        if (filteredTable.length === 0) {
+            ERROR = true;
+            break;
+        }
+        var i = filteredTable.shift();
+        if (i[2] < mw) {
+            continue;
+        }
+        break;
+    }
+    return {AREA: i[1], MEDIA: i[2], LARGE_ERROR: ($AREA > max), MODEL_ERROR: ERROR};
+}
\ No newline at end of file
diff --git a/js/script.js b/js/script.js
new file mode 100644 (file)
index 0000000..d79578a
--- /dev/null
@@ -0,0 +1,798 @@
+window.updateFormAgain = false;
+DEV = false;
+
+$(function () {
+    parseData();
+
+    $("section").addClass('hidden');
+    $("section:eq(0)").removeClass('hidden').addClass('visible');
+
+    $(window).on('resize', function () {
+        calculator_resize();
+    });
+
+    updateForm(DEV ? DEV_INIT_VALUES : undefined);
+
+    calculator_resize();
+    for (var i = 0; i <= 4; i++) {
+        setTimeout(function () {
+            calculator_resize();
+        }, 1500 * i);
+    }
+
+    $(document).on('change', 'input[type="number"][min][max]', function () {
+        $(this).val(Math.max($(this).attr('min'), Math.min($(this).attr('max'), $(this).val())));
+    })
+
+    $(document).on('change', 'select,input,.select2', function () {
+        updateForm();
+    });
+
+    showHide('#calculator', function () {
+    });
+
+
+    $(document).on('click', 'a.back', function () {
+        showHide('#calculator', function () {
+            calculator_resize();
+        });
+    });
+});
+
+function calculator_resize() {
+    var f = $("footer img").get(0).getBoundingClientRect();
+    var h = $("#holder").get(0).getBoundingClientRect();
+    var top = Math.max($(window).outerHeight() - f.height, h.height + 20);
+    $("footer img").css('top', top);
+}
+
+function parseData() {
+    FIELDS = [];
+    SHEETS = {};
+
+    $.each(DATA, function (sheet, table) {
+        parseTable(table, sheet);
+    });
+}
+
+function parseTable(table, sheet) {
+    SHEETS[sheet] = {lines: []};
+    for (var i = 2; i < table.length; i++) {
+        SHEETS[sheet].lines.push(i);
+    }
+    $.each(table[0], function (k, v) {
+        if (v === null) {
+            return;
+        }
+        var f = {id: sheet + '_' + k, label: '', sheet: sheet};
+        $.each(v.split("\n"), function (kk, vv) {
+            var e = vv.split(':');
+            var a = e.shift();
+            f[a] = e.join(':');
+        });
+        if (table[1][k] !== null) {
+            f.label = table[1][k];
+        }
+        f.options = parseOptions(table, k, f);
+        if (f.var !== undefined) {
+            f.id = f.var;
+        }
+        if (f.prevent_ignore === undefined) {
+            f.prevent_ignore = '0';
+        }
+        f.prevent_ignore = f.prevent_ignore === '1';
+        f.isNumber = f.type === 'float' || f.type === 'integer';
+        f.isInput = f.isNumber || f.type === 'select2' || f.type === 'select' || f.type === 'factor' || f.type === 'mdfactor';
+        f.hasOptions = f.type === 'select' || f.type === 'select2' || f.type === 'table' || f.type === 'factor' || f.type === 'mdfactor';
+        f.isTable = f.type === 'table' || f.table_secondary_var !== undefined;
+        f.range = f.range === '1';
+        f.isFilter = f.hasOptions || ((f.type === 'float' || f.type === 'integer') && f.range);
+        f.hidden = f.hidden === '1';
+        f.orderby = f.orderby === undefined ? 'label' : f.orderby;
+        f.orderway = f.orderway === undefined ? 'asc' : f.orderway;
+        f.exact_boundaries = f.exact_boundaries === '1';
+        f.block = f.block !== '0';
+        FIELDS.push(f);
+    });
+}
+
+function parseOptions(table, k, f) {
+    var res = {};
+    for (var i = 2; i < table.length; i++) {
+        if (f.type === 'select' && (table[i][k] === null || table[i][k] === '')) {
+            table[i][k] = '-NA-';
+        }
+        if (table[i][k] === null) {
+            continue;
+        }
+
+        var allValues = table[i][k].toString();
+        if (f.type === 'function') {
+            var n = 'l_' + i;
+            res[n] = {lines: [i], label: allValues};
+            continue;
+        }
+        var values = allValues.split("\n");
+        $.each(values, function (kkk, vvv) {
+            vvv = vvv.toString();
+            if(vvv===''){
+                return;
+            }
+            if (f.table_secondary_var !== undefined) {
+                var e = vvv.split(':');
+                var o = e[0];
+                var l = e[1].split(',');
+                if (res[o] === undefined) {
+                    res[o] = {label: o, lines: []};
+                }
+                $.each(l, function (k, v) {
+                    if (f.range) {
+                        v = rangeVal(v);
+                    }
+                    res[o].lines.push({line: i, name: f.table_secondary_var, value: v});
+                });
+            } else {
+                if (res[vvv] === undefined) {
+                    res[vvv] = {label: vvv, lines: []};
+                    if (f.range) {
+                        res[vvv].range = rangeVal(vvv);
+                    }
+                }
+                res[vvv].lines.push(i);
+            }
+        });
+    }
+    return res;
+}
+
+function rangeVal(v) {
+    var res = v.split('-');
+    res[0] = parseFloat(res[0]);
+    res[1] = parseFloat(res[1]);
+    return res;
+}
+
+function updateForm(initValues) {
+    var hasInitValues = true;
+    if (initValues === undefined) {
+        initValues = {};
+        hasInitValues = false;
+    }
+    updateFormAgain = false;
+    INPUT = {
+        fields: {},
+        sheets: clone(SHEETS),
+        lineVariables: {},
+        product_model: '',
+        currentSheet: 'S0',
+        result_disclaimer: ''
+    };
+    var end = false;
+    $("#fields .error").remove();
+    $.each(FIELDS, function (k, f) {
+        var s = $("#c_" + f.id);
+        if (end || !fieldIsUsed(f)) {
+            s.remove();
+            return;
+        }
+
+        if (s.length > 0 || initValues[f.id] !== undefined) {
+            var v;
+            if (s.length === 0) {
+                v = initValues[f.id];
+            } else {
+                v = $('#f_' + f.id).val();
+                if (v === undefined) {
+                    v = INPUT.fields[f.id];
+                }
+            }
+            if (addField(f, v)) {
+                end = true;
+                return;
+            }
+            if (f.isInput && v === '') {
+                end = true;
+                return;
+            }
+
+            setInputValue(f.id, v);
+            if (f.isFilter) {
+                filterLinesOfCurrentSheet();
+                if (INPUT.sheets[INPUT.currentSheet].lines.length === 0) {
+                    addError(getTranslation('No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.'));
+                    end = true;
+                    return;
+                }
+            }
+        } else {
+            var fend = addField(f);
+            if (f.isInput) {
+                end = true;
+                return;
+            }
+            if (fend) {
+                addError(getTranslation('No matching products found. Please try searching using different criteria or if your application falls outside the limits, please contact your local Sandvik product support.'));
+                end = true;
+                return;
+            }
+        }
+    });
+    calculator_resize();
+    setTranslations();
+    if (updateFormAgain) {
+        updateForm();
+    }
+}
+
+function addError(message, errorClass, force) {
+    if (force === true || $('#fields .error').length === 0) {
+        $("#fields").append('<div class="error ' + errorClass + '">' + getTranslation(message) + '</div>');
+    }
+}
+
+function setInputValue(id, value, float) {
+    if (value === undefined || value === null) {
+        return;
+    }
+    INPUT.fields[id] = value;
+    var p = parseFloat(value);
+    if (isNaN(p)) {
+        p = value;
+    }
+    window['$' + id] = p;
+}
+
+function getFieldById(id) {
+    var res;
+    $.each(FIELDS, function (k, f) {
+        if (f.id === id) {
+            res = f;
+            return false;
+        }
+    });
+    return res;
+}
+
+function filterLinesOfCurrentSheet() {
+    $.each(INPUT.fields, function (id, value) {
+        var f = getFieldById(id);
+        if (!f.isFilter) {
+            return;
+        }
+        if (f.sheet !== INPUT.currentSheet) {
+            return;
+        }
+
+        INPUT.sheets[INPUT.currentSheet].lines = array_intersect(INPUT.sheets[INPUT.currentSheet].lines, getLinesOfOption(f, value));
+    });
+}
+
+
+function getLinesOfOption(f, value) {
+    var res = [];
+    if (f.type === 'factor' || f.type === 'mdfactor') {
+        var baseval = parseFloat(window['$' + f.base]);
+        var seps = f.seps.split(',');
+        var rmin = parseFloat(seps[0]);
+        var rmax;
+        var sepindex;
+
+        for (var i = 1; i < seps.length; i++) {
+            rmax = parseFloat(seps[i]);
+            if (baseval >= rmin && baseval <= rmax) {
+                sepindex = i;
+                break;
+            }
+            rmin = rmax;
+        }
+
+        var factors = f.factors.split(',');
+        var factor = factors[sepindex - 1];
+        var r = factor.split('-');
+        r[0] = parseFloat(r[0]) * baseval;
+        r[1] = parseFloat(r[1]) * baseval;
+
+        if (f.type === 'factor') {
+            $.each(f.options, function (optionKey, option) {
+                var v;
+                if (optionKey.indexOf('-') > 0) {
+                    var e = optionKey.split('-');
+                    v = [parseFloat(e[0]), parseFloat(e[1])];
+                } else {
+                    v = parseFloat(optionKey);
+                }
+                if (equals(optionKey, r, 'floatRange', true)) {
+                    $.each(option.lines, function (k, line) {
+                        res.push(line);
+                    });
+                } else {
+                    console.warn(optionKey, r);
+                }
+            });
+        } else {
+            // Check exact match
+            var exact = false;
+            // $.each(f.options, function (optionKey, option) {
+            //     if (parseFloat(optionKey) === baseval) {
+            //         exact = true
+            //         return false;
+            //     }
+            // });
+            $.each(f.options, function (optionKey, option) {
+                if (optionKey === 'O' || optionKey === 'P' || equals(parseFloat(optionKey), r, 'floatRange', true)) {
+                    $.each(option.lines, function (k, line) {
+                        res.push(line);
+                    });
+                }
+            });
+        }
+    } else if (f.isTable) {
+        if (f.type === 'table') {
+            value = INPUT.fields[f.table_primary_var];
+        }
+        $.each(f.options[value].lines, function (k, line) {
+            if (equals(INPUT.fields[line.name], line.value, f.range ? (f.type === 'integer' ? 'intRange' : 'floatRange') : 'equals', f.exact_boundaries) && res.indexOf(line.line) === -1) {
+                res.push(line.line);
+            }
+        });
+    } else if (f.range) {
+        $.each(f.options, function (optionKey, option) {
+            if (equals(value, option.range, f.type === 'integer' ? 'intRange' : 'floatRange', f.exact_boundaries)) {
+                $.each(option.lines, function (k, line) {
+                    res.push(line);
+                });
+            }
+        });
+    } else {
+        res = f.options[value].lines;
+    }
+    return res;
+
+}
+
+/**
+ * Check if we need to display this field
+ * @param f
+ * @returns {boolean}
+ */
+function fieldIsUsed(f) {
+    if (f.sheet !== INPUT.currentSheet) {
+        return false;
+    }
+    if (f.id === 'deck') {
+        return true;
+    }
+    return true;
+}
+
+function addField(f, value) {
+    var id = 'f_' + f.id;
+    var cid = 'c_' + f.id;
+    var res = '';
+    var input = false;
+    var hidden = false;
+    var c = $("#" + cid);
+
+    if (c.length > 0) {
+        c.remove();
+    }
+
+    if (f.isInput && f.when !== undefined) {
+        if (!evalAndReturn(f.when)) {
+            if (value === undefined) {
+                window.updateFormAgain = true;
+            }
+            value = f.isNumber ? 0 : 'skip';
+            hidden = true;
+        }
+    }
+
+    if (f.type === 'sheet') {
+        var finalLine = INPUT.sheets[INPUT.currentSheet].lines[0];
+        $.each(f.options, function (k, v) {
+            if (v.lines.indexOf(finalLine) !== -1) {
+                res = v.label;
+                INPUT.currentSheet = v.label;
+                return false;
+            }
+        });
+        hidden = true;
+    } else if (f.type === 'select' || f.type === 'select2') {
+        input = true;
+
+        var noptions = 0;
+
+        $.each(f.options, function (label, data) {
+            if (array_intersect(getLinesOfOption(f, data.label), INPUT.sheets[INPUT.currentSheet].lines).length === 0) {
+                return;
+            }
+            noptions++;
+        });
+
+
+        if (f.type === 'select') {
+            res = '<select id="' + id + '">';
+        } else {
+            res = '<div class="select2"><input type="hidden" id="' + id + '"';
+            if (value !== undefined) {
+                res += ' value="' + value + '"';
+            }
+            res += '>';
+        }
+        var options = [];
+        var optionsValues = [];
+        var optionsOrderedKeys = [];
+
+        if (f.orderby === 'appearance') {
+            optionsOrderedKeys = Object.keys(f.options);
+        } else if (f.orderby === "label" || f.orderby === 'numeric') {
+            var cmp;
+            if (f.orderby === 'label') {
+                cmp = function (a, b) {
+                    return a.localeCompare(b)
+                }
+            } else {
+                cmp = function (a, b) {
+                    var exp = /[\/\-,;]+/;
+                    var ca = a.split(exp);
+                    var cb = b.split(exp);
+                    return ca[0] - cb[0];
+                }
+            }
+
+            optionsOrderedKeys = Object.keys(f.options).sort(cmp);
+        } else {
+
+            $.each(f.options, function (k, v) {
+                f.options[k].ordervalue = getValueLineContext(INPUT.currentSheet, v.lines[0], f.orderby);
+            });
+
+            optionsOrderedKeys = Object.keys(f.options).sort(function (a, b) {
+                return f.options[a].ordervalue - f.options[b].ordervalue;
+            });
+
+        }
+
+        if (f.orderway === 'desc') {
+            optionsOrderedKeys = optionsOrderedKeys.reverse();
+        }
+
+        $.each(optionsOrderedKeys, function (i, k) {
+            var data = f.options[k];
+            if (array_intersect(getLinesOfOption(f, data.label), INPUT.sheets[INPUT.currentSheet].lines).length === 0) {
+                return;
+            }
+            var l = data.label;
+            if (f.value_format) {
+                l = format(l, f.value_format);
+            }
+            optionsValues.push(data.label);
+            var selected = (noptions <= 1 && !f.prevent_ignore) || (value !== undefined && data.label == value);
+            var opt;
+            if (f.type === 'select') {
+                selected = selected ? ' selected' : '';
+                opt = '<option value="' + data.label + '"' + selected + '>' + getTranslation(l) + '</option>';
+            } else {
+                var parts = data.label.split('|');
+                opt = '<div class="option" data-value="' + data.label + '">';
+                if (DEV) {
+                    opt += '<div class="score">' + data.ordervalue + '</div>';
+                }
+                $.each(parts, function (k, v) {
+                    opt += '<div class="p-' + k + '">' + getTranslation(v) + '</div>';
+                });
+                opt += '</div>';
+            }
+            options.push(opt);
+        });
+        if ((options.length > 1 || f.prevent_ignore) && f.type === 'select') {
+            options.unshift('<option value="">--</option>');
+        }
+        res += options.join('');
+        if (f.type === 'select') {
+            res += '</select>';
+        } else {
+            res += '</div>';
+        }
+
+
+        if (options.length <= 1 && !f.prevent_ignore) {
+            setInputValue(f.id, optionsValues[0]);
+            if (value !== optionsValues[0]) {
+                window.updateFormAgain = true;
+            }
+        }
+        if (options.length <= 1 && !f.prevent_ignore) {
+            hidden = true;
+        }
+    } else if (f.type === 'float' || f.type === 'integer') {
+        input = true;
+        res = '<input type="number" id="f_' + f.id + '" ';
+        if (f.range) {
+            var min = Number.MAX_VALUE;
+            var max = Number.MIN_VALUE;
+            $.each(INPUT.sheets[INPUT.currentSheet].lines, function (k, lineNumber) {
+                $.each(f.options, function (k, option) {
+                    if (option.lines.indexOf(lineNumber) === -1) {
+                        return;
+                    }
+                    min = Math.min(min, option.range[0]);
+                    max = Math.max(max, option.range[1]);
+                });
+            });
+            res += ' min="' + min + '" max="' + max + '" ';
+        } else {
+            if (f.min) {
+                min = evalAndReturn(f.min);
+                res += ' min="' + min + '"';
+            }
+            if (f.max) {
+                max = evalAndReturn(f.max);
+                res += ' max="' + max + '"';
+            }
+        }
+        if (value !== undefined) {
+            res += ' value="' + value + '"';
+        }
+
+        res += '>';
+        if (f.unit) {
+            res += '<span class="unit">' + getTranslation(f.unit) + '</span>';
+        }
+    } else if (f.type === 'info' || f.type === 'result' || f.type === 'product_model') {
+        var finalLine = INPUT.sheets[INPUT.currentSheet].lines[0];
+        INPUT.finalLine = finalLine;
+        $.each(f.options, function (k, v) {
+            if (v.lines[0] === finalLine || v.lines.indexOf(finalLine) >= 0) {
+                res = getTranslation(v.label);
+                return false;
+            }
+        });
+        if (f.format) {
+            res = sprintf(getTranslation(f.format), res);
+        }
+        if (res === '') {
+            hidden = true;
+        }
+        setTimeout(function () {
+            calculator_resize();
+        }, 500);
+    } else if (f.type === 'result_disclaimer') {
+        hidden = true;
+        if (evalAndReturn(f.when)) {
+            INPUT.result_disclaimer = '<div class="result_disclaimer">' + f.message + '</div>';
+        }
+    } else if (f.type === 'formula') {
+        hidden = true;
+        var formulares = evalAndReturn(f.formula);
+        setInputValue(f.id, formulares);
+
+        if (f.storewhen) {
+            var e = f.storewhen.split(':');
+            var store = e.shift();
+            var condition = e.join(':');
+            if (evalAndReturn(condition)) {
+                setInputValue(store, formulares);
+            }
+        }
+
+        if (DEV) {
+            hidden = false;
+            res = formulares;
+        }
+    } else if (f.type === 'formulacol') {
+        hidden = true;
+        $.each(INPUT.sheets[INPUT.currentSheet].lines, function (k, lineNumber) {
+            window.$column = 0;
+            $.each(f.options, function (k, v) {
+                if (v.lines.indexOf(lineNumber) >= 0) {
+                    window.$column = parseFloat(v.label);
+                    return true;
+                }
+            });
+            resolveLineVariables(INPUT.currentSheet, lineNumber);
+            setValueLineContext(INPUT.currentSheet, lineNumber, f.id, evalAndReturn(f.formula));
+        });
+    } else if (f.type === 'error') {
+        hidden = true;
+        if (evalAndReturn(f.when)) {
+            addError(f.message, f.class, false);
+            if (f.block) {
+            return true;
+        }
+        }
+    } else if (f.type === 'table') {
+        hidden = true;
+    } else if (f.type === 'var') {
+        var $column = 0;
+        $.each(INPUT.sheets[INPUT.currentSheet].lines, function (k, lineNumber) {
+            $.each(f.options, function (k, v) {
+                if (v.lines.indexOf(lineNumber) >= 0) {
+                    $column = v.label;
+                    if (f.vartype === 'number') {
+                        $column = parseFloat($column);
+                    }
+                    return true;
+                }
+            });
+
+            resolveLineVariables(INPUT.currentSheet, lineNumber);
+            setValueLineContext(INPUT.currentSheet, lineNumber, f.id, $column);
+        });
+        hidden = true;
+        var formulares = getValueLineContext(INPUT.currentSheet, INPUT.sheets[INPUT.currentSheet].lines[0], f.id);
+
+        setInputValue(f.id, formulares);
+        if (DEV) {
+            hidden = false;
+            res = formulares;
+        }
+    } else if (f.type === 'function') {
+        hidden = true;
+        $.each(INPUT.sheets[INPUT.currentSheet].lines, function (k, lineNumber) {
+            $.each(f.options, function (k, v) {
+                if (v.lines.indexOf(lineNumber) >= 0) {
+                    $column = v.label;
+                    if (f.vartype === 'number') {
+                        $column = parseFloat($column);
+                    }
+                    return true;
+                }
+            });
+            resolveLineVariables(INPUT.currentSheet, lineNumber);
+        });
+        res = window[f.function].call(window, $column);
+        setInputValue(f.id, res);
+        if (DEV) {
+            hidden = false;
+            res = JSON.stringify(res);
+        }
+    } else if (f.type === 'factor' || f.type === 'mdfactor') {
+        setInputValue(f.id, ':)');
+        if (value === undefined) {
+            window.updateFormAgain = true;
+        }
+        res = '<input type="" id="f_' + f.id + '" value=":)" />';
+        hidden = true;
+    } else {
+        console.log('???', f);
+    }
+
+    if (f.hidden) {
+        hidden = true;
+    }
+
+    if (f.type === 'product_model') {
+        if (res !== '') {
+            INPUT.product_model = res;
+        }
+    }
+
+    var label = getTranslation(f.label);
+    if (f.hint) {
+        label += '<div class="hint">' + formatHint(f, {'$min': min, '$max': max}) + '</div>';
+    }
+
+    if (f.type === 'result') {
+        hidden=false;
+        var c;
+        if (f.function !== undefined) {
+            c = window[f.function].call();
+        } else {
+            c = '<h2 data-l10n="' + RESULT_TITLE + '"></h2><div class="resholder"><div class="product_model">' + INPUT.product_model + '</div><div class="res">' + res + '</div></div>';
+        }
+        res = '<div class="label ' + f.type + '">' + getTranslation(c) + '</div>';
+    } else if (input) {
+        res = '<label for="' + id + '"><div class="label">' + label + '</div>' + res + '</label>';
+    } else {
+        res = '<div class="label ' + f.type + '">' + label + ': ' + res + '</div>';
+    }
+
+
+
+    var fclass = '';
+    if (hidden) {
+        fclass += ' hidden';
+    }
+    res = '<div class="field' + fclass + '" id="' + cid + '" data-type="' + f.type + '">' + res + '</div>';
+    $("#fields").append(res);
+
+    addLinkToResult('.tile');
+
+    $(".select2").select2();
+
+    return false;
+}
+
+function evalAndReturn(e) {
+    try {
+        var code = 'var res=' + e + ';';
+        eval(code);
+        return res;
+    } catch (e) {
+        console.error(e);
+        console.info(code);
+    }
+}
+
+function initLineContext(sheet, lineNumber) {
+    if (INPUT.lineVariables[sheet] === undefined) {
+        INPUT.lineVariables[sheet] = {};
+    }
+    if (INPUT.lineVariables[sheet][lineNumber] === undefined) {
+        INPUT.lineVariables[sheet][lineNumber] = {};
+    }
+}
+
+function setValueLineContext(sheet, lineNumber, varname, value) {
+    initLineContext(sheet, lineNumber);
+    INPUT.lineVariables[sheet][lineNumber][varname] = value;
+}
+
+function getValueLineContext(sheet, lineNumber, varname) {
+    initLineContext(sheet, lineNumber);
+    return INPUT.lineVariables[sheet][lineNumber][varname];
+}
+
+function resolveLineVariables(sheet, lineNumber) {
+    initLineContext(sheet, lineNumber);
+    $.each(INPUT.lineVariables[sheet][lineNumber], function (varname, value) {
+        window['$' + varname] = value;
+    });
+}
+
+
+function formatHint(f, data) {
+    if (f.hint === undefined) {
+        return '';
+    }
+    var hint = getTranslation(f.hint);
+    $.each(data, function (k, v) {
+        hint = hint.replace(k, v);
+    });
+    hint = hint.replace('0-', '≤');
+    return hint;
+}
+
+function equals(val, compareWith, type, exact) {
+    var res;
+    if (type === 'floatRange') {
+        if (val instanceof Array) {
+            res = val[0] >= compareWith[0] || val[1] <= compareWith[1];
+        } else {
+            if (exact) {
+                res = val >= compareWith[0] && val <= compareWith[1];
+            } else {
+                res = val > compareWith[0] && val <= compareWith[1];
+            }
+        }
+    } else if (type === 'intRange') {
+        res = val >= compareWith[0] && val <= compareWith[1];
+    } else {
+        res = val === compareWith;
+    }
+    return res;
+}
+
+function parsePipeTable(t, numbers) {
+    if (numbers === undefined) {
+        numbers = false;
+    }
+    var res = [];
+    $.each(t.split("\n"), function (k, v) {
+        if (v === '') {
+            return;
+        }
+        var s = v.split('|');
+        if (numbers) {
+            for (var i = 0; i < s.length; i++) s[i] = parseFloat(s[i]);
+        }
+        res.push(s);
+    });
+    return res;
+}
+
+function round(value, digits) {
+    var e = Math.pow(10, digits);
+    return (Math.round(value * e) / e).toFixed(digits);
+}
diff --git a/js/select2.js b/js/select2.js
new file mode 100644 (file)
index 0000000..e4b0773
--- /dev/null
@@ -0,0 +1,66 @@
+(function ($) {
+    function JQselect2(element) {
+        this.element = element;
+        this.init();
+    }
+
+    JQselect2.prototype = {
+        init: function () {
+            var $this = this;
+
+            $(this.element).on('click', '.option', function () {
+                $this.checkOption($(this), true);
+            });
+
+            $(this.element).find('.option:eq(0)').addClass('first');
+
+            var val = $(this.element).find('input[type=hidden]').val();
+            if (val == undefined || val === 'undefined' || val === '') {
+
+            } else {
+                this.checkOption($(this.element).find('.option[data-value="' + val + '"]'));
+            }
+
+            $this.element.attr('data-ok', '1');
+        },
+
+        checkOption: function (o, trigger) {
+            if (trigger === undefined) {
+                trigger = true;
+            }
+            var $this = this;
+            this.element.find('.option').not(o).each(function () {
+                $this.uncheckOption($(this));
+            });
+
+            $(o).addClass('checked');
+            var h = $(this.element).find('input[type=hidden]');
+            var v = $(o).data('value');
+            if ($(h).val() === v) {
+                return;
+            }
+
+            $(h).val(v);
+            if (trigger) {
+                setTimeout(function () {
+                    $($this.element).trigger('change');
+                }, 200);
+            }
+
+        },
+
+        uncheckOption: function (o) {
+            $(o).removeClass('checked');
+        }
+    };
+
+    jQuery.fn.select2 = function () {
+        return this.each(function () {
+            var $this = $(this);
+            if ($(this).data('select2') === undefined) {
+                $(this).data('select2', new JQselect2($this));
+            }
+        })
+    };
+})(jQuery);
+
diff --git a/js/sprintf.min.js b/js/sprintf.min.js
new file mode 100644 (file)
index 0000000..a3196b8
--- /dev/null
@@ -0,0 +1,3 @@
+/*! sprintf-js v1.1.2 | Copyright (c) 2007-present, Alexandru Mărășteanu <hello@alexei.ro> | BSD-3-Clause */
+!function(){"use strict";var g={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function y(e){return function(e,t){var r,n,i,s,a,o,p,c,l,u=1,f=e.length,d="";for(n=0;n<f;n++)if("string"==typeof e[n])d+=e[n];else if("object"==typeof e[n]){if((s=e[n]).keys)for(r=t[u],i=0;i<s.keys.length;i++){if(null==r)throw new Error(y('[sprintf] Cannot access property "%s" of undefined value "%s"',s.keys[i],s.keys[i-1]));r=r[s.keys[i]]}else r=s.param_no?t[s.param_no]:t[u++];if(g.not_type.test(s.type)&&g.not_primitive.test(s.type)&&r instanceof Function&&(r=r()),g.numeric_arg.test(s.type)&&"number"!=typeof r&&isNaN(r))throw new TypeError(y("[sprintf] expecting number but found %T",r));switch(g.number.test(s.type)&&(c=0<=r),s.type){case"b":r=parseInt(r,10).toString(2);break;case"c":r=String.fromCharCode(parseInt(r,10));break;case"d":case"i":r=parseInt(r,10);break;case"j":r=JSON.stringify(r,null,s.width?parseInt(s.width):0);break;case"e":r=s.precision?parseFloat(r).toExponential(s.precision):parseFloat(r).toExponential();break;case"f":r=s.precision?parseFloat(r).toFixed(s.precision):parseFloat(r);break;case"g":r=s.precision?String(Number(r.toPrecision(s.precision))):parseFloat(r);break;case"o":r=(parseInt(r,10)>>>0).toString(8);break;case"s":r=String(r),r=s.precision?r.substring(0,s.precision):r;break;case"t":r=String(!!r),r=s.precision?r.substring(0,s.precision):r;break;case"T":r=Object.prototype.toString.call(r).slice(8,-1).toLowerCase(),r=s.precision?r.substring(0,s.precision):r;break;case"u":r=parseInt(r,10)>>>0;break;case"v":r=r.valueOf(),r=s.precision?r.substring(0,s.precision):r;break;case"x":r=(parseInt(r,10)>>>0).toString(16);break;case"X":r=(parseInt(r,10)>>>0).toString(16).toUpperCase()}g.json.test(s.type)?d+=r:(!g.number.test(s.type)||c&&!s.sign?l="":(l=c?"+":"-",r=r.toString().replace(g.sign,"")),o=s.pad_char?"0"===s.pad_char?"0":s.pad_char.charAt(1):" ",p=s.width-(l+r).length,a=s.width&&0<p?o.repeat(p):"",d+=s.align?l+r+a:"0"===o?l+a+r:a+l+r)}return d}(function(e){if(p[e])return p[e];var t,r=e,n=[],i=0;for(;r;){if(null!==(t=g.text.exec(r)))n.push(t[0]);else if(null!==(t=g.modulo.exec(r)))n.push("%");else{if(null===(t=g.placeholder.exec(r)))throw new SyntaxError("[sprintf] unexpected placeholder");if(t[2]){i|=1;var s=[],a=t[2],o=[];if(null===(o=g.key.exec(a)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(s.push(o[1]);""!==(a=a.substring(o[0].length));)if(null!==(o=g.key_access.exec(a)))s.push(o[1]);else{if(null===(o=g.index_access.exec(a)))throw new SyntaxError("[sprintf] failed to parse named argument key");s.push(o[1])}t[2]=s}else i|=2;if(3===i)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");n.push({placeholder:t[0],param_no:t[1],keys:t[2],sign:t[3],pad_char:t[4],align:t[5],width:t[6],precision:t[7],type:t[8]})}r=r.substring(t[0].length)}return p[e]=n}(e),arguments)}function e(e,t){return y.apply(null,[e].concat(t||[]))}var p=Object.create(null);"undefined"!=typeof exports&&(exports.sprintf=y,exports.vsprintf=e),"undefined"!=typeof window&&(window.sprintf=y,window.vsprintf=e,"function"==typeof define&&define.amd&&define(function(){return{sprintf:y,vsprintf:e}}))}();
+//# sourceMappingURL=sprintf.min.js.map
diff --git a/style.less b/style.less
new file mode 100644 (file)
index 0000000..c5f9394
--- /dev/null
@@ -0,0 +1,483 @@
+@font-family: "Aktiv Grotesk", Helvetica, Arial, sans-serif;
+
+@font-face {
+  font-family: "Aktiv Grotesk";
+  font-weight: 300;
+  src: url("fonts/AktivGrotesk_W_Lt.woff");
+}
+
+@font-face {
+  font-family: "Aktiv Grotesk";
+  font-weight: 400;
+  src: url("fonts/AktivGrotesk_W_Rg.woff");
+}
+
+@mm: ~"(max-width:1400px)";
+@mms: ~"(max-width:1000px)";
+@mmxs: ~"(max-device-width:600px)";
+@mmxxs: ~"(max-device-width:400px)";
+@mmxxxs: ~"(max-device-width:300px)";
+@mmxxxxs: ~"(max-device-width:200px)";
+
+html {
+  font-size: 10px;
+
+  &.showell {
+    font-size: 4px;
+  }
+
+  @media @mm {
+    font-size: 8px;
+  }
+
+  @media @mms {
+    font-size: 6px;
+  }
+
+  @media @mmxs {
+    font-size: 5px;
+  }
+  @media @mmxxs {
+    font-size: 4px;
+  }
+  @media @mmxxxs {
+    font-size: 3px;
+  }
+  @media @mmxxxxs {
+    font-size: 2px;
+  }
+}
+
+.displaynone {
+  display: none;
+}
+
+#holder {
+  max-width: 192rem;
+  @media @mm {
+    padding: 2rem;
+  }
+  @media @mms {
+    padding: 1rem;
+  }
+  padding: 5rem;
+  width: 100%;
+  margin: 0 auto;
+  font-family: @font-family;
+}
+
+body {
+  font-family: @font-family;
+  padding: 0;
+  margin: 0;
+  background-color: #0099ff;
+  color: #fff;
+}
+
+header {
+  position: absolute;
+  top: 0;
+  left: 0;
+  height: 18rem;
+  background-color: #0099ff;
+  width: 100%;
+  z-index: 10;
+  font-size: 3rem;
+}
+
+.lines {
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  height: auto;
+  width: 100%;
+}
+
+#back_header {
+  position: absolute;
+  top: 3rem;
+  left: 3rem;
+  text-transform: uppercase;
+  font-size: 3rem;
+  display: none;
+
+  a {
+    &:before {
+      content: '';
+      display: inline-block;
+      width: 1.5rem;
+      height: 2.2rem;
+      margin-right: 1.7rem;
+
+
+      background-image: url("images/back-arrow.svg");
+      background-position: 0 0;
+      background-size: 100% 100%;
+    }
+
+    color: #fff;
+  }
+}
+
+
+* {
+  padding: 0;
+  margin: 0;
+  box-sizing: border-box;
+  font-weight: 300;
+  font-family: @font-family;
+  text-decoration: none;
+}
+
+/// -- ///
+
+h2 {
+  text-transform: uppercase;
+  font-size: 7rem;
+  margin-bottom: 3.4rem;
+  margin-top: 15rem;
+  text-align: center;
+}
+
+h3 {
+  font-size: 3rem;
+  font-style: italic;
+  text-align: center;
+  font-weight: 600;
+}
+
+
+.logo {
+  display: block;
+  width: 100%;
+  margin: 7rem auto 0;
+  position: absolute;
+  z-index: 11;
+  text-align: center;
+
+  img {
+    width: 25rem;
+  }
+}
+
+#calculator_locale_selector {
+  position: absolute;
+  right: 3rem;
+  top: 3rem;
+
+  img {
+    height: 3.4rem;
+  }
+
+  #openLocaleMenu {
+    text-decoration: none;
+  }
+
+  #calculator_locale_select_holder {
+    display: none;
+  }
+
+  #current_locale {
+    text-transform: uppercase;
+    color: #ffffff;
+    text-decoration: none;
+    display: inline-block;
+    font-size: 3rem;
+    vertical-align: top;
+    margin-left: .5rem;
+    font-weight: 300;
+    margin-top: 0rem;
+  }
+}
+
+section#locale {
+  opacity: 0;
+  pointer-events: none;
+  transition: opacity 500ms;
+  margin: 0 auto;
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  color: #fff;
+  background-color: #0099ff;
+  z-index: 2;
+  min-height: 100%;
+  overflow: auto;
+
+  &.hidden {
+    display: none;
+  }
+
+  &.visible {
+    display: block;
+    opacity: 1;
+    pointer-events: auto;
+  }
+
+  padding: 0;
+  display: none;
+
+  ul {
+    padding-top: 18rem;
+
+    li {
+      text-align: center;
+      text-transform: uppercase;
+      font-size: 4.5rem;
+      border-bottom: 1px solid #fff;
+      padding: 2.5rem;
+      list-style: none;
+      cursor: pointer;
+
+      &:hover, &.active {
+        background-color: rgba(255, 255, 255, 0.3);
+      }
+    }
+  }
+}
+
+section {
+  padding: 5rem 4rem;
+  opacity: 0;
+  pointer-events: none;
+  transition: opacity 500ms;
+  margin: 0 auto;
+
+  &.hidden {
+    display: none;
+  }
+
+  &.visible {
+    opacity: 1;
+    pointer-events: auto;
+  }
+}
+
+#results {
+  .tile {
+    width: 100%;
+    margin: 2rem;
+    border: 1px solid #fff;
+    padding: 4rem;
+    font-size: 6rem;
+    text-align: center;
+    display: inline-block;
+    a{
+      color:#fff;
+    }
+  }
+
+  .decks {
+    h3 {
+      font-style: normal;
+      font-weight: 300;
+      font-size: 4rem;
+      margin: 4rem 0 2rem;
+      text-align: left;
+    }
+  }
+
+
+  table {
+    text-align: left;
+    width: 100%;
+
+    &.decks {
+      margin-bottom: 20rem;
+    }
+
+    td {
+      padding: 1rem 0;
+      text-align: left;
+    }
+
+    &.variables {
+      margin-top: 4rem;
+    }
+
+    &.decks {
+      border-collapse: collapse;
+
+      td {
+        padding: 1rem;
+        margin: 0;
+        width: 33.33%;
+        border: 1px solid #fff;
+      }
+    }
+  }
+}
+
+#fields {
+  width: 50%;
+  margin: 10rem auto;
+  font-size: 4rem;
+
+  @media @mm {
+    width: 75%;
+  }
+
+  @media @mms {
+    width: 90%;
+  }
+
+  @media @mmxs {
+    width: 90%;
+  }
+
+
+  .error {
+    color: #a00;
+    text-align: center;
+    font-weight: 700;
+
+    &.info {
+      color: #fff;
+    }
+  }
+
+  .field {
+    position: relative;
+    margin-bottom: 6rem;
+
+    .hint {
+      font-size: 60%;
+    }
+
+    &.hidden {
+      display: none;
+    }
+
+    .unit {
+      position: absolute;
+      right: 20px;
+      bottom: 2rem;
+      pointer-events: none;
+    }
+
+    &[data-type="select"]:after {
+      display: block;
+      content: "";
+      position: absolute;
+      right: 3rem;
+      bottom: 3rem;
+      width: 3rem;
+      height: 1.4rem;
+      background-image: url("images/select-arrow.svg");
+      background-size: 100% 100%;
+      background-repeat: no-repeat;
+      pointer-events: none;
+    }
+
+    .select2 {
+      input {
+        position: absolute;
+        visibility: hidden;
+      }
+
+      .option {
+        background-color: #0099ff;
+        border: 2px solid rgba(255, 255, 255, 0.75);
+        text-align: center;
+        padding: 40px;
+        margin: 40px 0;
+        color: rgba(255, 255, 255, 0.75);
+        cursor: pointer;
+
+        &.first {
+          border-width: 5px;
+          .p-0,.p-1,.p-2{
+            font-weight: 500;
+          }
+        }
+
+        &.checked {
+          border-color:#fff;
+          color: #fff;
+        }
+
+        .p-0 {
+          font-size: 140%;
+        }
+
+        .p-1 {
+          margin: 40px 0;
+        }
+
+        .p-2 {
+          font-size: 60%;
+        }
+      }
+    }
+
+    select, input[type=text], input[type=number] {
+      background-color: #0099ff;
+      border: 2px solid #fff;
+      color: #fff;
+      height: 8.5rem;
+      padding: 2rem;
+      display: inline-block;
+      width: 100%;
+      margin-top: 1rem;
+      border-radius: 0;
+      box-shadow: none !important;
+      font-size: 3.5rem;
+      -moz-appearance: none;
+      -webkit-appearance: none;
+      -ms-appearance: none;
+      appearance: none;
+
+      .empty {
+        font-style: italic;
+      }
+    }
+
+
+    .info, .product_model {
+      text-align: right;
+      font-style: italic;
+    }
+
+    .result {
+      font-weight: 700;
+      text-align: center;
+
+      h2 {
+        text-transform: uppercase;
+      }
+
+      .resholder {
+        border: 1px solid #fff;
+        width: 50%;
+        margin: 0 auto;
+        padding: 2rem;
+      }
+
+      .product_model {
+        font-size: 90%;
+        text-align: center;
+        font-style: normal;
+      }
+
+      .res {
+        font-size: 110%;
+        font-weight: 400;
+        margin-top: 1rem;
+      }
+    }
+
+    input::-webkit-outer-spin-button,
+    input::-webkit-inner-spin-button {
+      /* display: none; <- Crashes Chrome on hover */
+      -webkit-appearance: none;
+      margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
+    }
+
+    input[type=number] {
+      -moz-appearance: textfield; /* Firefox */
+    }
+
+  }
+}
\ No newline at end of file
diff --git a/tools/common.php b/tools/common.php
new file mode 100644 (file)
index 0000000..8875205
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+function postFiles($url, $file, $var = 'file')
+{
+    $boundary = '--------------------------' . microtime(true);
+    $header = 'Content-Type: multipart/form-data; boundary=' . $boundary;
+    $content = '--' . $boundary . "\r\n" .
+        'Content-Disposition: form-data; name="' . $var . '"; filename="' . basename($file) . "\"\r\n" .
+        "Content-Type: application/octet-stream\r\n\r\n" .
+        file_get_contents($file) . "\r\n";
+    $content .= '--' . $boundary . "--\r\n";
+    $context = stream_context_create(array(
+        'http' => array(
+            'method' => 'POST',
+            'header' => $header,
+            'content' => $content,
+        )
+    ));
+    return file_get_contents($url, false, $context);
+
+}
\ No newline at end of file
diff --git a/tools/importtranslations.php b/tools/importtranslations.php
new file mode 100644 (file)
index 0000000..0a604c9
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+require_once 'common.php';
+
+$root = __DIR__ . '/../';
+$js = $root . 'js/locales.js';
+$xlsx = $root . '/_doc/translations.xlsx';
+$data = json_decode(postFiles('https://extranet.cubedesigners.com/tools/convertXlsxToJson', $xlsx, 'file'), true);
+
+$locales = [];
+foreach ($data as $sheet) {
+    $l0 = $sheet[0];
+
+    for ($i = 1, $iMax = count($sheet); $i < $iMax; $i++) {
+        $line = $sheet[$i];
+
+        if (null === $line[0] || !$line[0]) {
+            continue;
+        }
+
+        foreach ($l0 as $col => $locale) {
+            if (null === $locale || !$locale) {
+                break;
+            }
+            if (!isset($locales[$locale])) {
+                $locales[$locale] = ['_name' => getName($locale)];
+            }
+            $locales[$locale][$line[0]] = $line[$col];
+        }
+    }
+    break;
+}
+
+file_put_contents($js, 'var LOCALES=' . json_encode($locales) . ';');
+header('Location: ../');
+
+
+function getName($locale)
+{
+    $names = ['en' => 'English',
+        'fr' => 'Français',
+        'de' => 'Deutsch',
+        'es' => 'Español',
+        'fi' => 'Suomi',
+        'sv' => 'Svenska',
+        'pt' => 'Portuguese',
+        'ru' => '',
+        'zh' => ''];
+    return $names[$locale];
+}
+
diff --git a/tools/refreshdata.php b/tools/refreshdata.php
new file mode 100644 (file)
index 0000000..b2b08e5
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+
+require_once 'common.php';
+$root = __DIR__ . '/../';
+$js = $root . 'js/data.js';
+$xlsx = $root . '/_doc/screenselection.xlsx';
+$data = postFiles('https://extranet.cubedesigners.com/tools/convertXlsxToJson', $xlsx, 'file');
+file_put_contents($js, 'DATA=' . $data . ';');
+header('Location: ../');
\ No newline at end of file