From e6c0fee1294f22cd0172a7726c00c22566353256 Mon Sep 17 00:00:00 2001 From: molant Date: Wed, 24 Jul 2013 19:16:32 -0700 Subject: [PATCH] Modern.IE static code scan goes Open Source! --- .gitignore | 3 + Gruntfile.js | 68 + LICENSE | 12 + README.md | 56 + cvlists.json | 1 + lib/checks/check-browser-detection.js | 144 + lib/checks/check-compatlist.js | 64 + lib/checks/check-cssprefixes.js | 162 + lib/checks/check-doctype.js | 116 + lib/checks/check-ie10favicon.js | 46 + lib/checks/check-libs.js | 204 + lib/checks/check-pluginfree.js | 115 + lib/checks/check-responsive.js | 190 + lib/checks/check-touch.js | 137 + lib/checks/compatlist.js | 208 + lib/checks/loadchecks.js | 31 + lib/checks/loadcss.js | 153 + lib/checks/loadjs.js | 97 + lib/index.html | 182 + lib/service.js | 193 + package.json | 51 + static/auth-1.html | 11 + static/auth-2.html | 12 + static/auth-3.html | 12 + static/auth-4.html | 13 + static/auth-server.js | 34 + static/buglist-1.html | 11 + static/compat-1.html | 11 + static/compat-10.html | 12 + static/compat-11.html | 12 + static/compat-12.html | 12 + static/compat-13.html | 12 + static/compat-14.html | 12 + static/compat-15.html | 12 + static/compat-16.html | 12 + static/compat-2.html | 12 + static/compat-3.html | 12 + static/compat-4.html | 12 + static/compat-5.html | 12 + static/compat-6.html | 12 + static/compat-7.html | 12 + static/compat-8.html | 12 + static/compat-9.html | 12 + static/css/animations.css | 8 + static/css/duplicateWidths.css | 40 + static/css/gradients.css | 17 + static/css/importSingle.css | 1 + static/css/importUrlDouble.css | 1 + static/css/maxWidth.css | 19 + static/css/maxWidthComplexSpectrum.css | 33 + static/css/minMaxWidth.css | 33 + static/css/minMaxWidth2.css | 33 + static/css/minMaxWidthEM.css | 33 + static/css/minWidth.css | 19 + static/css/minWidthComplexSpectrum.css | 33 + static/css/minWidthComplexSpectrum2.css | 33 + static/css/missingAnimations.css | 4 + static/css/missingGradients.css | 14 + static/css/missingTransforms.css | 3 + static/css/missingTransitions.css | 34 + static/css/msTouch.css | 13 + static/css/scrollSnap.css | 13 + static/css/simpleStyle.css | 12 + static/css/transforms.css | 11 + static/css/transitions.css | 39 + static/css/unprefixed.css | 5 + static/cssprefixes-1.html | 11 + static/cssprefixes-10.html | 12 + static/cssprefixes-11.html | 12 + static/cssprefixes-12.html | 12 + static/cssprefixes-13.html | 13 + static/cssprefixes-14.html | 13 + static/cssprefixes-15.html | 20 + static/cssprefixes-16.html | 17 + static/cssprefixes-17.html | 14 + static/cssprefixes-18.html | 12 + static/cssprefixes-19.html | 12 + static/cssprefixes-2.html | 12 + static/cssprefixes-3.html | 12 + static/cssprefixes-4.html | 13 + static/cssprefixes-5.html | 12 + static/cssprefixes-6.html | 12 + static/cssprefixes-7.html | 12 + static/cssprefixes-8.html | 12 + static/cssprefixes-9.html | 12 + static/favicon-1.html | 12 + static/favicon-2.html | 13 + static/favicon-3.html | 13 + static/favicon-4.html | 14 + static/favicon-5.html | 13 + static/favicon-6.html | 14 + static/js/dojo-1.7.0.js | 15 + static/js/dojo-1.8.0.js | 15 + static/js/dojo-1.8.3.js | 15 + static/js/jquery-1.4.2.min.js | 154 + static/js/jquery-1.9.0.min.js | 4 + static/js/jquery-1.9.1.min.js | 5 + static/js/jquery-ui-1.10.2.custom.js | 14955 ++++++++++++++++++++++ static/js/jquery-ui-1.9.0.js | 14742 +++++++++++++++++++++ static/js/jquery-ui-1.9.0.min.js | 5 + static/js/mspointers.js | 15 + static/libs-1.html | 13 + static/libs-10.html | 15 + static/libs-2.html | 14 + static/libs-3.html | 14 + static/libs-4.html | 13 + static/libs-5.html | 13 + static/libs-6.html | 13 + static/libs-7.html | 13 + static/libs-8.html | 14 + static/libs-9.html | 15 + static/plugin-1.html | 11 + static/plugin-10.html | 12 + static/plugin-11.html | 15 + static/plugin-12.html | 16 + static/plugin-2.html | 14 + static/plugin-3.html | 14 + static/plugin-4.html | 15 + static/plugin-5.html | 29 + static/plugin-6.html | 25 + static/plugin-7.html | 12 + static/plugin-8.html | 12 + static/plugin-9.html | 12 + static/rwd-1.html | 11 + static/rwd-10.html | 12 + static/rwd-11.html | 12 + static/rwd-12.html | 12 + static/rwd-13.html | 13 + static/rwd-14.html | 13 + static/rwd-2.html | 12 + static/rwd-3.html | 12 + static/rwd-4.html | 12 + static/rwd-5.html | 12 + static/rwd-6.html | 12 + static/rwd-7.html | 12 + static/rwd-8.html | 13 + static/rwd-9.html | 27 + static/test-server.js | 37 + static/touch-1.html | 11 + static/touch-2.html | 12 + static/touch-3.html | 12 + static/touch-4.html | 20 + static/touch-5.html | 12 + static/touch-6.html | 28 + test/auth_test.js | 76 + test/checklibs_test.js | 145 + test/compatlist_test.js | 128 + test/cssprefixes_test.js | 86 + test/doctype_test.js | 109 + test/ie10favicon_test.js | 96 + test/pluginfree_test.js | 94 + test/responsive_test.js | 133 + test/touch_test.js | 90 + 153 files changed, 34815 insertions(+) create mode 100644 .gitignore create mode 100644 Gruntfile.js create mode 100644 LICENSE create mode 100644 README.md create mode 100644 cvlists.json create mode 100644 lib/checks/check-browser-detection.js create mode 100644 lib/checks/check-compatlist.js create mode 100644 lib/checks/check-cssprefixes.js create mode 100644 lib/checks/check-doctype.js create mode 100644 lib/checks/check-ie10favicon.js create mode 100644 lib/checks/check-libs.js create mode 100644 lib/checks/check-pluginfree.js create mode 100644 lib/checks/check-responsive.js create mode 100644 lib/checks/check-touch.js create mode 100644 lib/checks/compatlist.js create mode 100644 lib/checks/loadchecks.js create mode 100644 lib/checks/loadcss.js create mode 100644 lib/checks/loadjs.js create mode 100644 lib/index.html create mode 100644 lib/service.js create mode 100644 package.json create mode 100644 static/auth-1.html create mode 100644 static/auth-2.html create mode 100644 static/auth-3.html create mode 100644 static/auth-4.html create mode 100644 static/auth-server.js create mode 100644 static/buglist-1.html create mode 100644 static/compat-1.html create mode 100644 static/compat-10.html create mode 100644 static/compat-11.html create mode 100644 static/compat-12.html create mode 100644 static/compat-13.html create mode 100644 static/compat-14.html create mode 100644 static/compat-15.html create mode 100644 static/compat-16.html create mode 100644 static/compat-2.html create mode 100644 static/compat-3.html create mode 100644 static/compat-4.html create mode 100644 static/compat-5.html create mode 100644 static/compat-6.html create mode 100644 static/compat-7.html create mode 100644 static/compat-8.html create mode 100644 static/compat-9.html create mode 100644 static/css/animations.css create mode 100644 static/css/duplicateWidths.css create mode 100644 static/css/gradients.css create mode 100644 static/css/importSingle.css create mode 100644 static/css/importUrlDouble.css create mode 100644 static/css/maxWidth.css create mode 100644 static/css/maxWidthComplexSpectrum.css create mode 100644 static/css/minMaxWidth.css create mode 100644 static/css/minMaxWidth2.css create mode 100644 static/css/minMaxWidthEM.css create mode 100644 static/css/minWidth.css create mode 100644 static/css/minWidthComplexSpectrum.css create mode 100644 static/css/minWidthComplexSpectrum2.css create mode 100644 static/css/missingAnimations.css create mode 100644 static/css/missingGradients.css create mode 100644 static/css/missingTransforms.css create mode 100644 static/css/missingTransitions.css create mode 100644 static/css/msTouch.css create mode 100644 static/css/scrollSnap.css create mode 100644 static/css/simpleStyle.css create mode 100644 static/css/transforms.css create mode 100644 static/css/transitions.css create mode 100644 static/css/unprefixed.css create mode 100644 static/cssprefixes-1.html create mode 100644 static/cssprefixes-10.html create mode 100644 static/cssprefixes-11.html create mode 100644 static/cssprefixes-12.html create mode 100644 static/cssprefixes-13.html create mode 100644 static/cssprefixes-14.html create mode 100644 static/cssprefixes-15.html create mode 100644 static/cssprefixes-16.html create mode 100644 static/cssprefixes-17.html create mode 100644 static/cssprefixes-18.html create mode 100644 static/cssprefixes-19.html create mode 100644 static/cssprefixes-2.html create mode 100644 static/cssprefixes-3.html create mode 100644 static/cssprefixes-4.html create mode 100644 static/cssprefixes-5.html create mode 100644 static/cssprefixes-6.html create mode 100644 static/cssprefixes-7.html create mode 100644 static/cssprefixes-8.html create mode 100644 static/cssprefixes-9.html create mode 100644 static/favicon-1.html create mode 100644 static/favicon-2.html create mode 100644 static/favicon-3.html create mode 100644 static/favicon-4.html create mode 100644 static/favicon-5.html create mode 100644 static/favicon-6.html create mode 100644 static/js/dojo-1.7.0.js create mode 100644 static/js/dojo-1.8.0.js create mode 100644 static/js/dojo-1.8.3.js create mode 100644 static/js/jquery-1.4.2.min.js create mode 100644 static/js/jquery-1.9.0.min.js create mode 100644 static/js/jquery-1.9.1.min.js create mode 100644 static/js/jquery-ui-1.10.2.custom.js create mode 100644 static/js/jquery-ui-1.9.0.js create mode 100644 static/js/jquery-ui-1.9.0.min.js create mode 100644 static/js/mspointers.js create mode 100644 static/libs-1.html create mode 100644 static/libs-10.html create mode 100644 static/libs-2.html create mode 100644 static/libs-3.html create mode 100644 static/libs-4.html create mode 100644 static/libs-5.html create mode 100644 static/libs-6.html create mode 100644 static/libs-7.html create mode 100644 static/libs-8.html create mode 100644 static/libs-9.html create mode 100644 static/plugin-1.html create mode 100644 static/plugin-10.html create mode 100644 static/plugin-11.html create mode 100644 static/plugin-12.html create mode 100644 static/plugin-2.html create mode 100644 static/plugin-3.html create mode 100644 static/plugin-4.html create mode 100644 static/plugin-5.html create mode 100644 static/plugin-6.html create mode 100644 static/plugin-7.html create mode 100644 static/plugin-8.html create mode 100644 static/plugin-9.html create mode 100644 static/rwd-1.html create mode 100644 static/rwd-10.html create mode 100644 static/rwd-11.html create mode 100644 static/rwd-12.html create mode 100644 static/rwd-13.html create mode 100644 static/rwd-14.html create mode 100644 static/rwd-2.html create mode 100644 static/rwd-3.html create mode 100644 static/rwd-4.html create mode 100644 static/rwd-5.html create mode 100644 static/rwd-6.html create mode 100644 static/rwd-7.html create mode 100644 static/rwd-8.html create mode 100644 static/rwd-9.html create mode 100644 static/test-server.js create mode 100644 static/touch-1.html create mode 100644 static/touch-2.html create mode 100644 static/touch-3.html create mode 100644 static/touch-4.html create mode 100644 static/touch-5.html create mode 100644 static/touch-6.html create mode 100644 test/auth_test.js create mode 100644 test/checklibs_test.js create mode 100644 test/compatlist_test.js create mode 100644 test/cssprefixes_test.js create mode 100644 test/doctype_test.js create mode 100644 test/ie10favicon_test.js create mode 100644 test/pluginfree_test.js create mode 100644 test/responsive_test.js create mode 100644 test/touch_test.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f57bc44 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/node_modules/ +/.idea/ +/lib/cvlists.json \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..fb5d40c --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,68 @@ +/* + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + module.exports = function (grunt) { + "use strict"; + + // Project configuration. + grunt.initConfig({ + pkg:grunt.file.readJSON('package.json'), + nodeunit:{ + all:['test/**/*.js'], + libs:['test/**/checklibs*.js'], + compat:['test/**/compatlist*.js'], + cssprefixes:['test/**/cssprefixes*.js'], + doctype:['test/**/doctype*.js'], + favicon:['test/**/ie10favicon*.js'], + pluginfree:['test/**/pluginfree*.js'], + rwd:['test/**/responsive*.js'], + touch:['test/**/touch*.js'], + auth:['test/**/auth*.js'] + }, + watch:{ + files:'<%= lint.files %>', + tasks:'jshint' + }, + jshint:{ + files: [ + 'grunt.js', + 'lib/**/*.js', + 'test/**/*.js' + ], + options:{ + strict: false, + curly:true, + eqeqeq:true, + immed:true, + latedef:true, + newcap:true, + noarg:true, + sub:true, + undef:true, + boss:true, + eqnull:true, + node: true, + globals: { + setImmediate: true, + exports:true + } + }, + } + }); + grunt.loadNpmTasks('grunt-contrib-nodeunit'); + grunt.loadNpmTasks("grunt-contrib-watch"); + grunt.loadNpmTasks("grunt-contrib-jshint"); + // Default task. + grunt.registerTask('default', ['jshint', 'nodeunit']); +}; diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3558a58 --- /dev/null +++ b/LICENSE @@ -0,0 +1,12 @@ +Copyright (c) Microsoft Corporation; All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this +file except in compliance with the License. You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER +EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS +OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..ad8bdbf --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# Modern.ie + +The Modern.ie scan analyzes the HTML, CSS, and JavaScript of a site or application to +determine whether it is using good development practices. +It warns about practices such as incomplete specification of CSS properties, invalid or incorrect +doctypes, and obsolete versions of popular JavaScript libraries. + +It's easiest to use Modern.ie by going to the [Modern.ie site](http://Modern.ie) +and entering the URL to scan there. To customize the scan, or to use the scan +to process files behind a firewall, you can clone and build the files from this repo +and run the scan locally. + +## How it works + +The Modern.ie local scan runs on a system behind your firewall; that system must have +access to the internal web site or application that is to be scanned. +Once the files have been analyzed, the analysis results are sent back to the Modern.ie +site to generate a complete formatted report that includes advice on remediating any issues. +The report generation code and formatted pages from the Modern.IE site are not included in this repo. + +Since the local scan generates JSON output, you can alternatively use it as a standalone scanner +or incorporate it into a project's build process by processing the JSON with a local script. + +The main service for the scan is in the `lib/service.js` file; it acts as an HTTP server. +It loads the contents of the web page and calls the individual tests, located in `/lib/checks/`. +Once all the checks have completed, it responds with a JSON object representing the results. + +## Installation and configuration + +* [Install node.js](https://github.com/joyent/node/wiki/Installation). You can use a [pre-compiled Windows executable](https://github.com/joyent/node/wiki/Installation#installing-on-windows) if desired. Version 0.10 or higher is required. +* [Install git](http://git-scm.com/downloads). You can choose [GitHub for Windows](http://windows.github.com/) instead if you prefer. +* Clone this repository. +* Install dependencies. From the Modern.ie subdirectory, type: `npm install` +* If desired, set an environment variable `PORT` to define the port the service will listen on. By default the port number is 1337. The Windows command to set the port to 8181 would be: `set PORT=8181` +* Start the scan service: From the Modern.ie subdirectory, type: `node lib/service.js` and the service should respond with a status message containing the port number it is using. +* Run a browser and go to the service's URL; assuming you are using the default port and are on the same computer, the URL would be: `http://localhost:1337/` +* Follow the instructions on the page. + +## Testing + +The project contains a set of unit tests in the `/test/` directory. To run the unit tests, type `grunt nodeunit`. + +## JSON output + +Once the scan completes, it produces a set of scan results in JSON format: +```js +{ + "testName" : { + "testName": "Short description of the test", + "passed" : true/false, + "data": { /* optional data describing the results found */ } + } +} +``` + +The `data` property will vary depending on the test, but will generally provide further detail about any issues found. diff --git a/cvlists.json b/cvlists.json new file mode 100644 index 0000000..fac7336 --- /dev/null +++ b/cvlists.json @@ -0,0 +1 @@ +{"blogs.adobe.com":{"docMode":"EmulateIE10"},"dpw.state.pa.us":{"docMode":"EmulateIE10"},"job.icbc.com.cn":{"docMode":"EmulateIE10"},"labs.adobe.com":{"docMode":"EmulateIE10"},"pbank.psbc.com":{"docMode":"EmulateIE10"},"yn.yninfo.com":{"docMode":"EmulateIE10"},"aladin.co.kr":{"docMode":"EmulateIE7","featureSwitch":"requiresActiveX:true"},"1ting.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"auction.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"axa.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"bccard.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"buienradar.nl":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"busanbank.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"ccb.com.cn":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"cjmall.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"cmbchina.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"cyb.koreanair.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"dgb.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"dnshop.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"ebsi.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"e_himart.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"ei.go.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"epost.go.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"ergodaum.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"flyasiana.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"fsb.or.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"gmarket.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"gozoomin.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"hangame.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"hkbank.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"hyundaihmall.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"icbc.com.cn":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"iros.go.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"jbbank.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"kdb.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"kfcc.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"kjbank.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"korail.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"koreanair.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"megastudy.net":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"meritzfire.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"minwon.go.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"netmarble.net":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"nonghyup.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"nps.or.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"plaync.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"pmang.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"rai.tv":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"s.sohu.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"samsungcard.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"sharebox.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"spdb.com.cn":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"standardchartered.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"tworld.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"wedisk.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","featureSwitch":"requiresActiveX:true"},"indypcr.org":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","uaStringAlt":"7"},"inglife.co.kr":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","uaStringAlt":"7"},"lakeshorehospital.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","uaStringAlt":"7"},"oncorstreetlight.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","uaStringAlt":"7"},"triencon.com":{"docMode":"EmulateIE7","versionVector":"7","uaString":"7","uaStringAlt":"7"},"17u.cn":{"docMode":"EmulateIE7"},"33across.com":{"docMode":"EmulateIE7"},"d_link.com":{"docMode":"EmulateIE7"},"qvc.com":{"docMode":"EmulateIE7"},"seoul.co.kr":{"docMode":"EmulateIE7"},"tdameritrade.com":{"docMode":"EmulateIE7"},"tiexue.net":{"docMode":"EmulateIE7"},"www.winner.co.il":{"docMode":"EmulateIE7"},"bandinlunis.com":{"docMode":"EmulateIE8","featureSwitch":"requiresActiveX:true"},"hanaskcard.co.kr":{"docMode":"EmulateIE8","featureSwitch":"requiresActiveX:true"},"hanaskcard.com":{"docMode":"EmulateIE8","featureSwitch":"requiresActiveX:true"},"jyskenetbank.dk":{"docMode":"EmulateIE8","featureSwitch":"requiresActiveX:true"},"kbs.co.kr":{"docMode":"EmulateIE8","featureSwitch":"requiresActiveX:true"},"keb.co.kr":{"docMode":"EmulateIE8","featureSwitch":"requiresActiveX:true"},"lotte.com":{"docMode":"EmulateIE8","featureSwitch":"requiresActiveX:true"},"yescard.co.kr":{"docMode":"EmulateIE8","featureSwitch":"requiresActiveX:true"},"yescard.com":{"docMode":"EmulateIE8","featureSwitch":"requiresActiveX:true"},"hanabank.co.kr":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8","featureSwitch":"requiresActiveX:true"},"hanabank.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8","featureSwitch":"requiresActiveX:true"},"hometax.go.kr":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8","featureSwitch":"requiresActiveX:true"},"kbstar.co.kr":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8","featureSwitch":"requiresActiveX:true"},"kbstar.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8","featureSwitch":"requiresActiveX:true"},"lottecard.co.kr":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8","featureSwitch":"requiresActiveX:true"},"mall.shinsegae.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8","featureSwitch":"requiresActiveX:true"},"bankofamerica.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"bioglan.com.au":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"caixa.gov.br":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"filmweb.pl":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"forbesmillsteakhouse.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"fredmeyer.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"immowelt.de":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"mobil.dkv.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"railtourismindia.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"realore.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"santander.com.mx":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"thomson.co.uk":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"unigro.be":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"wellsfargo.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"zhcw.com":{"docMode":"EmulateIE8","versionVector":"8","uaString":"8"},"12306.cn":{"docMode":"EmulateIE8"},"21cbh.com":{"docMode":"EmulateIE8"},"3145.com":{"docMode":"EmulateIE8"},"7999.com":{"docMode":"EmulateIE8"},"8684.cn":{"docMode":"EmulateIE8"},"a9vg.com":{"docMode":"EmulateIE8"},"adp.com":{"docMode":"EmulateIE8"},"aircel.com":{"docMode":"EmulateIE8"},"allinpay.com":{"docMode":"EmulateIE8"},"allosponsor.com":{"docMode":"EmulateIE8"},"america.infobae.com":{"docMode":"EmulateIE8"},"babylon.com":{"docMode":"EmulateIE8"},"baomihua.com":{"docMode":"EmulateIE8"},"blackbookmag.com":{"docMode":"EmulateIE8"},"blackrock.com":{"docMode":"EmulateIE8"},"blikk.hu":{"docMode":"EmulateIE8"},"blog.okcupid.com":{"docMode":"EmulateIE8"},"bluefly.com":{"docMode":"EmulateIE8"},"bmo.com":{"docMode":"EmulateIE8"},"bmwseattle.com":{"docMode":"EmulateIE8"},"brooksbrothers.com":{"docMode":"EmulateIE8"},"budgetair.nl":{"docMode":"EmulateIE8"},"bupa.co.uk":{"docMode":"EmulateIE8"},"bursamalaysia.com":{"docMode":"EmulateIE8"},"cardekho.com":{"docMode":"EmulateIE8"},"careers.telstra.com":{"docMode":"EmulateIE8"},"carrefour.fr":{"docMode":"EmulateIE8"},"casualcollective.com":{"docMode":"EmulateIE8"},"celtickane.com":{"docMode":"EmulateIE8"},"cnfol.com":{"docMode":"EmulateIE8"},"concierge.apple.com":{"docMode":"EmulateIE8"},"cosmosbank.com.tw":{"docMode":"EmulateIE8"},"credit_agricole.fr":{"docMode":"EmulateIE8"},"crowdstar.com":{"docMode":"EmulateIE8"},"cthouse.com.tw":{"docMode":"EmulateIE8"},"deloitte.com":{"docMode":"EmulateIE8"},"dexia.be":{"docMode":"EmulateIE8"},"dillards.com":{"docMode":"EmulateIE8"},"djurslandsbank.dk":{"docMode":"EmulateIE8"},"dongbuhappy.com":{"docMode":"EmulateIE8"},"ea.indiaresults.com":{"docMode":"EmulateIE8"},"edy.jp":{"docMode":"EmulateIE8"},"elcorteingles.es":{"docMode":"EmulateIE8"},"elsevier.com":{"docMode":"EmulateIE8"},"eol.cn":{"docMode":"EmulateIE8"},"etrade.co.kr":{"docMode":"EmulateIE8"},"euronetpolska.pl":{"docMode":"EmulateIE8"},"familjeliv.se":{"docMode":"EmulateIE8"},"family.com.tw":{"docMode":"EmulateIE8"},"finanse.wp.pl":{"docMode":"EmulateIE8"},"firstchoice.co.uk":{"docMode":"EmulateIE8"},"fjordbank.dk":{"docMode":"EmulateIE8"},"folha.uol.com.br":{"docMode":"EmulateIE8"},"forums.drom.ru":{"docMode":"EmulateIE8"},"frankfurter_sparkasse.de":{"docMode":"EmulateIE8"},"fxtrader.dowjones.com":{"docMode":"EmulateIE8"},"game321.com":{"docMode":"EmulateIE8"},"garanti.com.tr":{"docMode":"EmulateIE8"},"gersolutions.com":{"docMode":"EmulateIE8"},"guardian.co.uk":{"docMode":"EmulateIE8"},"gulfnews.com":{"docMode":"EmulateIE8"},"hansolbank.co.kr":{"docMode":"EmulateIE8"},"hemnet.se":{"docMode":"EmulateIE8"},"htspor.com":{"docMode":"EmulateIE8"},"ibnlive.in.com":{"docMode":"EmulateIE8"},"ifeng.com":{"docMode":"EmulateIE8"},"ificandream.com":{"docMode":"EmulateIE8"},"ikala.tv":{"docMode":"EmulateIE8"},"indiaglitz.com":{"docMode":"EmulateIE8"},"indowebster.com":{"docMode":"EmulateIE8"},"ing.nl":{"docMode":"EmulateIE8"},"ipart.cn":{"docMode":"EmulateIE8"},"janitos.de":{"docMode":"EmulateIE8"},"lastminute.com":{"docMode":"EmulateIE8"},"liverpoolfc.tv":{"docMode":"EmulateIE8"},"look.tw":{"docMode":"EmulateIE8"},"luster_sparebank.no":{"docMode":"EmulateIE8"},"made_in-china.com":{"docMode":"EmulateIE8"},"maroczik.com":{"docMode":"EmulateIE8"},"mathletics.co.za":{"docMode":"EmulateIE8"},"maybank2u.com.my":{"docMode":"EmulateIE8"},"mec.gov.br":{"docMode":"EmulateIE8"},"mfile.co.kr":{"docMode":"EmulateIE8"},"mk.co.kr":{"docMode":"EmulateIE8"},"mobifiesta.com":{"docMode":"EmulateIE8"},"mof.go.jp":{"docMode":"EmulateIE8"},"movistar.com.mx":{"docMode":"EmulateIE8"},"mthai.com":{"docMode":"EmulateIE8"},"musicmazaa.com":{"docMode":"EmulateIE8"},"nate.com":{"docMode":"EmulateIE8"},"news24.com":{"docMode":"EmulateIE8"},"newspulse.cnn.com":{"docMode":"EmulateIE8"},"nordlandsbanken.no":{"docMode":"EmulateIE8"},"nowec.com":{"docMode":"EmulateIE8"},"nrsbank.dk":{"docMode":"EmulateIE8"},"oest.no":{"docMode":"EmulateIE8"},"orange.es":{"docMode":"EmulateIE8"},"orf.at":{"docMode":"EmulateIE8"},"osen.mt.co.kr":{"docMode":"EmulateIE8"},"patagonia.com":{"docMode":"EmulateIE8"},"peakgames.net":{"docMode":"EmulateIE8"},"playpark.net":{"docMode":"EmulateIE8"},"pogo.com":{"docMode":"EmulateIE8"},"portalbank.dk":{"docMode":"EmulateIE8"},"programme_tv.net":{"docMode":"EmulateIE8"},"pudelek.pl":{"docMode":"EmulateIE8"},"raditha.com":{"docMode":"EmulateIE8"},"rolandgarros.com":{"docMode":"EmulateIE8"},"sachsen_anhalt.de":{"docMode":"EmulateIE8"},"safeway.com":{"docMode":"EmulateIE8"},"sfgate.com":{"docMode":"EmulateIE8"},"sh.cn":{"docMode":"EmulateIE8"},"share_links.biz":{"docMode":"EmulateIE8"},"sky.it":{"docMode":"EmulateIE8"},"societegenerale.com":{"docMode":"EmulateIE8"},"solidsignal.com":{"docMode":"EmulateIE8"},"soroban.com":{"docMode":"EmulateIE8"},"sparkasse_chemnitz.de":{"docMode":"EmulateIE8"},"sparkasse_mol.de":{"docMode":"EmulateIE8"},"sport1.de":{"docMode":"EmulateIE8"},"sports.ru":{"docMode":"EmulateIE8"},"spray.se":{"docMode":"EmulateIE8"},"squidoo.com":{"docMode":"EmulateIE8"},"starbucks.com.tw":{"docMode":"EmulateIE8"},"stigasoft.com":{"docMode":"EmulateIE8"},"stsky.com":{"docMode":"EmulateIE8"},"temple.dinamalar.com":{"docMode":"EmulateIE8"},"terra.cl":{"docMode":"EmulateIE8"},"thedubaimall.com":{"docMode":"EmulateIE8"},"the_social-list.com":{"docMode":"EmulateIE8"},"thinkfree.com":{"docMode":"EmulateIE8"},"troublemanunlimited.com":{"docMode":"EmulateIE8"},"tsutaya.co.jp":{"docMode":"EmulateIE8"},"unam.mx":{"docMode":"EmulateIE8"},"union001.com":{"docMode":"EmulateIE8"},"us.fotolia.com":{"docMode":"EmulateIE8"},"uscis.gov":{"docMode":"EmulateIE8"},"v.17guagua.com":{"docMode":"EmulateIE8"},"vekselbanken.no":{"docMode":"EmulateIE8"},"verizon.com":{"docMode":"EmulateIE8"},"voila.fr":{"docMode":"EmulateIE8"},"worldpay.com":{"docMode":"EmulateIE8"},"wsj.com":{"docMode":"EmulateIE8"},"xx007.cn":{"docMode":"EmulateIE8"},"zhenai.com":{"docMode":"EmulateIE8"},"zoompanel.com":{"docMode":"EmulateIE8"},"fundro.com":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"giro.kr":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"giro.or.kr":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"homeplus.co.kr":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"hyundaicard.com":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"interpark.com":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"jobkorea.co.kr":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"libro.co.kr":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"nhic.or.kr":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"njoyny.com":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"sbs.co.kr":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"smartmiraeasset.com":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"yeoin.com":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"yes24.com":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"zumm.co.kr":{"docMode":"EmulateIE9","featureSwitch":"requiresActiveX:true"},"verizonwireless.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"createElementWithMarkup:false"},"citibank.co.kr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"cu.co.kr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"hanwhalife.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"ibk.co.kr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"imbc.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"lottecinema.co.kr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"melon.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"olleh.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"ticketmonster.co.kr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"yesone.go.kr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"apollolibrary.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","uaStringAlt":"9"},"content.interskill.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","uaStringAlt":"9"},"hdox.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","uaStringAlt":"9"},"myportal.brother.co.jp":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9","uaStringAlt":"9"},"0101.co.jp":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"11880.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"123greetings.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"1sttech.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"2345.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"360buy.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"365mc.co.kr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"4game.ru":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"4maps.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"5173.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"881903.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"abbak.biz":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"abbyy.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"aboutmyvote.co.uk":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"acer.com.tw":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"adjug.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"adobe.com\r\n \r\n ":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"adpower.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"advertiser.cubics.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"akhbarak.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"akilli.tv":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"akinator.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"aktuality.sk":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"alamo.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"alaskaair.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"alionu.skillport.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"anchorfree.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"angieslist.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"apmex.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"appealing.at.webry.info":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"appserver.lenovo.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"araba.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ask_us.cpf.gov.sg":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"baby.sina.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bankmassad.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"beanfun.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"behance.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bestiz.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bigotires.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bigpondsport.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"blinkbox.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"blog.pandora.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bmfsfj.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bop.com.tw":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bradescori.com.br":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bravotv.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"britishgas.co.uk":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"btplc.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"buenastareas.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"burlingtoncoatfactory.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"buy.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bwcinema.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bwin.it":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ca.nexon.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"caisse_epargne.fr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"canada.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"canadiantire.ca":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"carbonmotors.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"care.dlservice.microsoft.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"carnival.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"carsales.com.au":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"catalunyacaixa.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"cb.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"cc.porsche.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"centurylink.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"chick_fil-a.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"chosun.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"cifras.com.br\r\n \r\n ":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"city.china.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"cityu.edu":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"cleverbot.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"clickintext.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"club.china.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"club.wjw.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"cn.bab.la":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"cnzz.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"commbank.com.au":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"comment5.news.sina.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"connectorride.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"copart.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"costcoauto.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"couponsinc.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"cqnews.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"crateandbarrel.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"creativecommons.org":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"crn.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"currys.co.uk":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"dan.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"dealer.xgo.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"dealsea.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"debeka.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"delish.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"dell.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"deloittelas.intellinex.com\r\n \r\n ":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"deloittemce.intellinex.com\r\n \r\n ":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"deloitteonline.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"deltavacations.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"dennys.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"destatis.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"doc88.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"docmorris.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"dongao.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"dostor.org":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"downloadhelper.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"drapt.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"dreambox.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"drjays.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"easytrip.ie":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"egloos.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ehr.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"eldan.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"elightbulbs.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"e_lotto.be":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"enbac.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"energyguide.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"epaper.worldjournal.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"erc.enwisen.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"espemporium.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"europa.eu":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"expo.nabshow.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"f2h.nana10.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"farecompare.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"feedstitch.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ferrariofseattle.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"finance.khoj.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"flightaware.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"flix.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"fnx.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"foodily.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"forex.se":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"friendster.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"fubon.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"game.vn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"gameloft.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"gamesgames.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"gamestop.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"gap.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"glamourmagazine.co.uk":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"globaltakeoff.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"go_etc.ddo.jp":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"gortrip.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"greyhound.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"guiadasemana.com.br":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"gulliver.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"gumtree.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"gunpartscorp.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"hi5.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"holidaycheck.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"hollywood.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"homebase.co.uk":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"hondafinancialservices.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"hotfrog.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"hotnewhiphop.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"hubspot.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"hurriyetemlak.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"hyundai.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ibank.tcbank.com.tw":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ica.se":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"i_forum.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ilbank.gov.tr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ilibrary.isuppli.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"infowebpop.deloitte.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"inter.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ipeen.com.tw":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"irs.gov":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"isbank.com.tr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"israelpost.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"isrotel.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"item.taobao.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ja.impressholdings.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"jango.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"jezebel.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"jnj.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"johnlscott.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"juegosdechicas.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"k12.fl.us":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"kariyer.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"kele8.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"klasselotteriet.dk":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"korcham.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"koule.cz":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"kraloyun.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"krq.tao123.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"kuaiyankanshu.org":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"laredoute.be":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"leaan.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"lenovo.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"lev.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"lexus.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"life.pingan.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"linkedin.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"lotto.be":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"mail.india.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"majorschampionships.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"mako.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"maplin.co.uk":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"mapview.naver.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"masterlink.com.tw":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"me2day.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"meb.gov.tr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"media.nk.pl":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"mediclinic.co.za":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"menudecannes.ru.msn.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"minecraftforum.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"mint.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"mlb.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"mobile.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"mod.gov.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"moliyo.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"msgpluslive.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"msnbc.msn.com\r\n \r\n \r\n ":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"mvdis.gov.tw":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"myfoxny.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"mytoys.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"myvue.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"myway.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"myxer.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"myzon.pt":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"naspa.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"nationalcar.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"navimedix.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"netbk.co.jp":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"netlog.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"new.livestream.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"news.piao.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"newscenter.verizon.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"next.co.uk":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"nextdirect.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"nrj12.fr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"nydailynews.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"nytimes.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"olx.ru":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"onelifefitness.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"online.appdev.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"online_translator.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"onlive.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"onvertise.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"optus.custhelp.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"oriflame.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"panerabread.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"parentsconnect.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"payments.kingcounty.gov":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"petango.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"pg.dacom.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"play.bet007.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"polaris.com.tw":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"polarpersonaltrainer.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"polycom.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"polyvore.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"portal.idc.ac.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"postcalc.usps.gov":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"powersports.honda.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"pricegrabber.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"prisjakt.nu":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"privalia.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"proboards.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"proclub.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"psbc.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"qingdaonews.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"qqgames.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"quicinc.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"quizlet.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"rapid7.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"rayli.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"readnovel.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"realtor.ca":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"realtor.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"redfin.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"redtram.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"reelnewmedia.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"reliancelife.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"reservations.directwithhotels.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"rewards_insiders.marriott.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ricardoeletro.com.br":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"rubiconproject.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ryanair.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"sbi.co.in":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"scholastic.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"scn.sap.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"se.naver.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"sears.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"seattle.gov":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"seattleexecutivelimos.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"secondlife.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"secure.us.venteprivee.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"senabluetooth.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"seret.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"sfacg.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"sf_express.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"shop.17173.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"shopping.msn.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"siamphone.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"signon.org":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"siliconvalley.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"skis.com.tw":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"slide.news.sina.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"slide.tech.sina.com.cn":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"snagajob.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"snapfish.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"social.ford.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"softcoin.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"software.informer.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"solarmovie.eu":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"sonyericsson_shop.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"sorel.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"southparkstudios.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"sozlukspot.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"sparkasse_osnabrueck.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"spibund.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"spiceglobal.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"spielaffe.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ssoportal.neohrex.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"starwoodhotels.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"state.pa.us":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"stayfriends.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"steampowered.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"stern.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"store.ovi.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"store.stevenspass.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"suhyup_bank.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"supershuttle.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"svt.se":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"sympatico.ca":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"taiwan.citicards.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tam.com.br":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tapuz.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tataindicom.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tbs.co.jp":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tcbbank.com.tw":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"team_blacksheep.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"telelistas.net":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"thebodyshop_usa.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"thegreatcourses.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"thenewsmarket.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"thethirdmedia.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"threadless.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"thueringen.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ticketline.pt":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ticketmaster.co.uk":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ticketmaster.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"timescapes.org":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tires.costco.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tires2.costco.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"t_mobile.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"toadworld.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"toolon.co.kr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"touchcommerce.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tournament.travian.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"training.partner.microsoft.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ttdsevaonline.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tube.bankoftaipei.com.tw":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tvguide.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"tw.meetgee.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"ubi.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"uploaded.to":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"usk.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"usps.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"vagalume.com.br":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"vancouversun.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"vanguard.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"vbox7.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"veetle.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"vh1.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"viddler.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"vimeo.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"visitkorea.or.kr":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"webstuff.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"wehkamp.nl":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"whatsapp.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"wiki.answers.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"wipro.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"wonga.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"wordpress.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"wowjobs.ca":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"xda_developers.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"xe.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"yad2.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"yesplanet.co.il":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"zappos.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"zc.91.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"zoll.de":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"zone.msn.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"zoosk.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9"},"bgr.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9L"},"ilmeteo.it":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9L"},"mediafire.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"9L"},"mcgraw_hill.com":{"docMode":"EmulateIE9","versionVector":"9","uaString":"IE9Win7"},"123musiq.com":{"docMode":"EmulateIE9"},"12999.com":{"docMode":"EmulateIE9"},"1und1.de":{"docMode":"EmulateIE9"},"5566.net":{"docMode":"EmulateIE9"},"58xs.com":{"docMode":"EmulateIE9"},"6park.com":{"docMode":"EmulateIE9"},"aadvantageeshopping.com":{"docMode":"EmulateIE9"},"abs.ch":{"docMode":"EmulateIE9"},"adbrite.com":{"docMode":"EmulateIE9"},"albummania.co.kr":{"docMode":"EmulateIE9"},"aldia.cr":{"docMode":"EmulateIE9"},"alipay.com":{"docMode":"EmulateIE9"},"amazon.co.uk":{"docMode":"EmulateIE9"},"amazon.com":{"docMode":"EmulateIE9"},"amazon.de":{"docMode":"EmulateIE9"},"amazon.fr":{"docMode":"EmulateIE9"},"annualcreditreport.com":{"docMode":"EmulateIE9"},"applefile.com":{"docMode":"EmulateIE9"},"avisosdeocasion.com":{"docMode":"EmulateIE9"},"babyhome.com.tw":{"docMode":"EmulateIE9"},"backup.brighthorizons.com":{"docMode":"EmulateIE9"},"bankofbaroda.com":{"docMode":"EmulateIE9"},"bbs.hongxiu.com":{"docMode":"EmulateIE9"},"bedbathandbeyond.com":{"docMode":"EmulateIE9"},"beta.update.microsoft.com":{"docMode":"EmulateIE9"},"bhel.com":{"docMode":"EmulateIE9"},"bing.search.daum.net":{"docMode":"EmulateIE9"},"bjpta.gov.cn":{"docMode":"EmulateIE9"},"bluehawaiian.com":{"docMode":"EmulateIE9"},"blueidea.com":{"docMode":"EmulateIE9"},"bol.com":{"docMode":"EmulateIE9"},"broadway.com":{"docMode":"EmulateIE9"},"bsnl.co.in":{"docMode":"EmulateIE9"},"buy.lh.or.kr":{"docMode":"EmulateIE9"},"cafe.netimo.net":{"docMode":"EmulateIE9"},"card.gz.gov.cn":{"docMode":"EmulateIE9"},"casadamusica.com":{"docMode":"EmulateIE9"},"ceair.com":{"docMode":"EmulateIE9"},"cei.gov.cn":{"docMode":"EmulateIE9"},"cfi.cn":{"docMode":"EmulateIE9"},"cfi.net.cn":{"docMode":"EmulateIE9"},"checkm8.com":{"docMode":"EmulateIE9"},"china_airlines.com":{"docMode":"EmulateIE9"},"chinaiiss.com":{"docMode":"EmulateIE9"},"clasicooo.com":{"docMode":"EmulateIE9"},"cmengines.com":{"docMode":"EmulateIE9"},"cnet.com":{"docMode":"EmulateIE9"},"collabedit.com":{"docMode":"EmulateIE9"},"community.compuserve.com":{"docMode":"EmulateIE9"},"condenaststore.com":{"docMode":"EmulateIE9"},"cosmopolitan.com":{"docMode":"EmulateIE9"},"coupons.com":{"docMode":"EmulateIE9"},"coursera.org":{"docMode":"EmulateIE9"},"cq.gov.cn":{"docMode":"EmulateIE9"},"credit.kohls.com":{"docMode":"EmulateIE9"},"crystalaudiovideo.com":{"docMode":"EmulateIE9"},"cyber.kepco.co.kr":{"docMode":"EmulateIE9"},"cybozu.com":{"docMode":"EmulateIE9"},"denabank.com":{"docMode":"EmulateIE9"},"druginfo.co.kr":{"docMode":"EmulateIE9"},"dtdc.in":{"docMode":"EmulateIE9"},"dtiserv.com":{"docMode":"EmulateIE9"},"dws.de":{"docMode":"EmulateIE9"},"ea.com":{"docMode":"EmulateIE9"},"earthquake.usgs.gov":{"docMode":"EmulateIE9"},"e_frontier.co.jp":{"docMode":"EmulateIE9"},"elo7.com.br":{"docMode":"EmulateIE9"},"elsword.nexon.com":{"docMode":"EmulateIE9"},"emissiontestwa.com":{"docMode":"EmulateIE9"},"eo.st":{"docMode":"EmulateIE9"},"eurokidsindia.com":{"docMode":"EmulateIE9"},"evaair.com":{"docMode":"EmulateIE9"},"eximbank.gov.tr":{"docMode":"EmulateIE9"},"faloo.com":{"docMode":"EmulateIE9"},"farolatino.com":{"docMode":"EmulateIE9"},"fdisk.co.kr":{"docMode":"EmulateIE9"},"fileham.com":{"docMode":"EmulateIE9"},"finansbank.com.tr":{"docMode":"EmulateIE9"},"foundertech.com":{"docMode":"EmulateIE9"},"france3.fr":{"docMode":"EmulateIE9"},"freeware.co.il":{"docMode":"EmulateIE9"},"ftsi.com.tw":{"docMode":"EmulateIE9"},"fubon_ebroker.com":{"docMode":"EmulateIE9"},"gejfa.net":{"docMode":"EmulateIE9"},"girlsgogames.com":{"docMode":"EmulateIE9"},"gns.co.il":{"docMode":"EmulateIE9"},"goreyguardian.newspaperdirect.com":{"docMode":"EmulateIE9"},"gretchensshoebox.com":{"docMode":"EmulateIE9"},"halfclub.shinsegae.com":{"docMode":"EmulateIE9"},"hankyung.com":{"docMode":"EmulateIE9"},"healthclubs.com":{"docMode":"EmulateIE9"},"healthmedi.net":{"docMode":"EmulateIE9"},"hidisk.com":{"docMode":"EmulateIE9"},"hk.centamap.com":{"docMode":"EmulateIE9"},"hnrb.hinews.cn":{"docMode":"EmulateIE9"},"hobby.idnes.cz":{"docMode":"EmulateIE9"},"honda.com":{"docMode":"EmulateIE9"},"hosting.blueboard.cz":{"docMode":"EmulateIE9"},"hsbc.com.mx":{"docMode":"EmulateIE9"},"iddaa.com":{"docMode":"EmulateIE9"},"i_gamer.net":{"docMode":"EmulateIE9"},"imsidesign.com":{"docMode":"EmulateIE9"},"indianpolice.net":{"docMode":"EmulateIE9"},"insites.eu":{"docMode":"EmulateIE9"},"interiordigs.com":{"docMode":"EmulateIE9"},"intesasanpaolo.com":{"docMode":"EmulateIE9"},"islamicfinder.org":{"docMode":"EmulateIE9"},"jackhenry.com":{"docMode":"EmulateIE9"},"jeevansathi.com":{"docMode":"EmulateIE9"},"jian.com":{"docMode":"EmulateIE9"},"jihsun.com.tw":{"docMode":"EmulateIE9"},"jjwxc.cn":{"docMode":"EmulateIE9"},"jlchina.cn":{"docMode":"EmulateIE9"},"job110.cn":{"docMode":"EmulateIE9"},"klbs.org":{"docMode":"EmulateIE9"},"knuddels.de":{"docMode":"EmulateIE9"},"kuaiwan.com":{"docMode":"EmulateIE9"},"kukudm.com":{"docMode":"EmulateIE9"},"lady8844.com":{"docMode":"EmulateIE9"},"lanacion.com.ar":{"docMode":"EmulateIE9"},"liberation.fr":{"docMode":"EmulateIE9"},"linea.davivienda.com":{"docMode":"EmulateIE9"},"lingoware.com":{"docMode":"EmulateIE9"},"lingvosoft.com":{"docMode":"EmulateIE9"},"lo.st":{"docMode":"EmulateIE9"},"mannheimer.de":{"docMode":"EmulateIE9"},"manoramaonline.com":{"docMode":"EmulateIE9"},"marines.mil":{"docMode":"EmulateIE9"},"mawada.net":{"docMode":"EmulateIE9"},"meetic.es":{"docMode":"EmulateIE9"},"mercurynews.com":{"docMode":"EmulateIE9"},"milanuncios.com":{"docMode":"EmulateIE9"},"milllissa.beon.ru":{"docMode":"EmulateIE9"},"miss_no1.com":{"docMode":"EmulateIE9"},"missyusa.com":{"docMode":"EmulateIE9"},"mlxchange.com":{"docMode":"EmulateIE9"},"mo.gov":{"docMode":"EmulateIE9"},"moonfruit.com":{"docMode":"EmulateIE9"},"mps.it":{"docMode":"EmulateIE9"},"msn.careerbuilder.ch":{"docMode":"EmulateIE9"},"mutualfundsindia.com":{"docMode":"EmulateIE9"},"my.cnki.net":{"docMode":"EmulateIE9"},"myjobs.classifiedpost.com":{"docMode":"EmulateIE9"},"myl2.com":{"docMode":"EmulateIE9"},"myuhc.com":{"docMode":"EmulateIE9"},"natureair.com":{"docMode":"EmulateIE9"},"nbc.com":{"docMode":"EmulateIE9"},"netsuite.com":{"docMode":"EmulateIE9"},"news.sportbox.ru":{"docMode":"EmulateIE9"},"newyorker.com":{"docMode":"EmulateIE9"},"nigma.ru":{"docMode":"EmulateIE9"},"npicp.com":{"docMode":"EmulateIE9"},"ntvmsnbc.com":{"docMode":"EmulateIE9"},"nyse.com":{"docMode":"EmulateIE9"},"nysegov.com":{"docMode":"EmulateIE9"},"ocj.com.cn":{"docMode":"EmulateIE9"},"okcupid.com":{"docMode":"EmulateIE9"},"optimum.net":{"docMode":"EmulateIE9"},"oracle.com":{"docMode":"EmulateIE9"},"osmania.ac.in":{"docMode":"EmulateIE9"},"passportindia.gov.in":{"docMode":"EmulateIE9"},"pitchfork.com":{"docMode":"EmulateIE9"},"police.gujarat.gov.in":{"docMode":"EmulateIE9"},"powershellmagazine.com":{"docMode":"EmulateIE9"},"pravo.novinky.cz":{"docMode":"EmulateIE9"},"pressdisplay.com":{"docMode":"EmulateIE9"},"primarygames.com":{"docMode":"EmulateIE9"},"products.proflowers.com":{"docMode":"EmulateIE9"},"provantage.com":{"docMode":"EmulateIE9"},"qdown.com":{"docMode":"EmulateIE9"},"quickverse.com":{"docMode":"EmulateIE9"},"reliancecapital.co.in":{"docMode":"EmulateIE9"},"rightmove.co.uk":{"docMode":"EmulateIE9"},"rising.net.cn":{"docMode":"EmulateIE9"},"romian.co.kr":{"docMode":"EmulateIE9"},"rtl.nl":{"docMode":"EmulateIE9"},"ruv.de":{"docMode":"EmulateIE9"},"rzd.ru":{"docMode":"EmulateIE9"},"safefamilies.net":{"docMode":"EmulateIE9"},"sdb.com.cn":{"docMode":"EmulateIE9"},"seafair.com":{"docMode":"EmulateIE9"},"seattle.usa.rigpa.org":{"docMode":"EmulateIE9"},"senac.br":{"docMode":"EmulateIE9"},"shenzhenair.com":{"docMode":"EmulateIE9"},"shgjj.com":{"docMode":"EmulateIE9"},"sinaimg.cn":{"docMode":"EmulateIE9"},"socket.io":{"docMode":"EmulateIE9"},"sonara.net":{"docMode":"EmulateIE9"},"spicei2i.com":{"docMode":"EmulateIE9"},"squarefoot.com.hk":{"docMode":"EmulateIE9"},"srsbooking.com":{"docMode":"EmulateIE9"},"store.apple.com":{"docMode":"EmulateIE9"},"strawberrynet.com":{"docMode":"EmulateIE9"},"synnex.com.tw":{"docMode":"EmulateIE9"},"taipower.com.tw":{"docMode":"EmulateIE9"},"thairath.co.th":{"docMode":"EmulateIE9"},"theknot.com":{"docMode":"EmulateIE9"},"therapute.com":{"docMode":"EmulateIE9"},"theroyalroomseattle.com":{"docMode":"EmulateIE9"},"thomann.de":{"docMode":"EmulateIE9"},"tiffany.com":{"docMode":"EmulateIE9"},"tomgroup.com":{"docMode":"EmulateIE9"},"traffic.accesskenya.com":{"docMode":"EmulateIE9"},"turbocad.com":{"docMode":"EmulateIE9"},"tv.nrk.no":{"docMode":"EmulateIE9"},"tw.sony_asia.com":{"docMode":"EmulateIE9"},"twitterfeed.com":{"docMode":"EmulateIE9"},"udngroup.com":{"docMode":"EmulateIE9"},"unitedtile.com":{"docMode":"EmulateIE9"},"ups.com":{"docMode":"EmulateIE9"},"upsc.gov.in":{"docMode":"EmulateIE9"},"vb_decompiler.org":{"docMode":"EmulateIE9"},"verkkopankki.sampopankki.fi":{"docMode":"EmulateIE9"},"video.enorth.com.cn":{"docMode":"EmulateIE9"},"videosearch.rediff.com":{"docMode":"EmulateIE9"},"vmmc.iqhealth.com":{"docMode":"EmulateIE9"},"watchtv.com":{"docMode":"EmulateIE9"},"webs.com":{"docMode":"EmulateIE9"},"wikimapia.org":{"docMode":"EmulateIE9"},"wix.com":{"docMode":"EmulateIE9"},"worldcollege.net":{"docMode":"EmulateIE9"},"wsdot.wa.gov":{"docMode":"EmulateIE9"},"wvec.com":{"docMode":"EmulateIE9"},"xunlei.com":{"docMode":"EmulateIE9"},"yam.com":{"docMode":"EmulateIE9"},"ynet.co.il":{"docMode":"EmulateIE9"},"zapak.com":{"docMode":"EmulateIE9"},"zenmoney.com":{"docMode":"EmulateIE9"},"zimbra.com":{"docMode":"EmulateIE9"},"zing.vn":{"docMode":"EmulateIE9"},"zipcar.com":{"docMode":"EmulateIE9"},"netbank.danskebank.dk":{"docMode":"IE8","versionVector":"9","uaString":"9","featureSwitch":"requiresActiveX:true"},"calc5.com":{"docMode":"IE9"},"feelings.jonobr1.com":{"docMode":"IE9"},"nerget.com":{"docMode":"IE9"},"nihilogic.dk":{"docMode":"IE9"},"onaluf.org":{"docMode":"IE9"},"scripting.com":{"docMode":"IE9"},"state.nj.us\r\n \r\n ":{"docMode":"IE9"},"att.com":{"featureSwitch":"createElementWithMarkup:false"},"bettycrocker.com":{"featureSwitch":"createElementWithMarkup:false"},"dwarikas.com":{"featureSwitch":"createElementWithMarkup:false"},"ec.europa.eu":{"featureSwitch":"createElementWithMarkup:false"},"irc.w3.org":{"featureSwitch":"createElementWithMarkup:false"},"isic.com.pl":{"featureSwitch":"createElementWithMarkup:false"},"optimeios.com":{"featureSwitch":"createElementWithMarkup:false"},"plirt.ru":{"featureSwitch":"createElementWithMarkup:false"},"seattle.bibliocommons.com":{"featureSwitch":"createElementWithMarkup:false"},"thetimes.co.uk":{"featureSwitch":"createElementWithMarkup:false"},"tuffshed.com":{"featureSwitch":"createElementWithMarkup:false"},"veoh.com":{"featureSwitch":"createElementWithMarkup:false"},"vkmag.com":{"featureSwitch":"createElementWithMarkup:false"},"11st.co.kr":{"featureSwitch":"requiresActiveX:true"},"1tv.ru":{"featureSwitch":"requiresActiveX:true"},"23tv.co.il":{"featureSwitch":"requiresActiveX:true"},"afreeca.com":{"featureSwitch":"requiresActiveX:true"},"akmall.com":{"featureSwitch":"requiresActiveX:true"},"alba.co.kr":{"featureSwitch":"requiresActiveX:true"},"albamon.com":{"featureSwitch":"requiresActiveX:true"},"altools.co.kr":{"featureSwitch":"requiresActiveX:true"},"autogestion.personal.com.ar":{"featureSwitch":"requiresActiveX:true"},"bancopopular.es":{"featureSwitch":"requiresActiveX:true"},"bandinlunis.co.kr":{"featureSwitch":"requiresActiveX:true"},"banking.shinhan.com":{"featureSwitch":"requiresActiveX:true"},"bbva.es":{"featureSwitch":"requiresActiveX:true"},"blogs.office.com":{"featureSwitch":"requiresActiveX:true"},"bot.com.tw":{"featureSwitch":"requiresActiveX:true"},"bugs.co.kr":{"featureSwitch":"requiresActiveX:true"},"bwin.fr":{"featureSwitch":"requiresActiveX:true"},"cardrotax.or.kr":{"featureSwitch":"requiresActiveX:true"},"career.co.kr":{"featureSwitch":"requiresActiveX:true"},"cgv.co.kr":{"featureSwitch":"requiresActiveX:true"},"childschool.mest.go.kr":{"featureSwitch":"requiresActiveX:true"},"coupang.com":{"featureSwitch":"requiresActiveX:true"},"danskebank.dk":{"featureSwitch":"requiresActiveX:true"},"danskespil.dk":{"featureSwitch":"requiresActiveX:true"},"elster.de":{"featureSwitch":"requiresActiveX:true"},"emart.com":{"featureSwitch":"requiresActiveX:true"},"enviedeplus.femmes.fr.msn.com":{"featureSwitch":"requiresActiveX:true"},"eplay.etnews.com":{"featureSwitch":"requiresActiveX:true"},"epostbank.co.kr":{"featureSwitch":"requiresActiveX:true"},"epostbank.go.kr":{"featureSwitch":"requiresActiveX:true"},"ergodaumdirect.co.kr":{"featureSwitch":"requiresActiveX:true"},"e_travelmanagement2.amadeus.com":{"featureSwitch":"requiresActiveX:true"},"excard.co.kr":{"featureSwitch":"requiresActiveX:true"},"galleria.co.kr":{"featureSwitch":"requiresActiveX:true"},"gameyarou.jp":{"featureSwitch":"requiresActiveX:true"},"gold_eagle.com":{"featureSwitch":"requiresActiveX:true"},"gomtv.com":{"featureSwitch":"requiresActiveX:true"},"groupon.kr":{"featureSwitch":"requiresActiveX:true"},"gsshop.com":{"featureSwitch":"requiresActiveX:true"},"hi.co.kr":{"featureSwitch":"requiresActiveX:true"},"hkjc.com":{"featureSwitch":"requiresActiveX:true"},"hsb.co.kr":{"featureSwitch":"requiresActiveX:true"},"hsbc.co.kr":{"featureSwitch":"requiresActiveX:true"},"iehouse.co.kr":{"featureSwitch":"requiresActiveX:true"},"incometaxindia.gov.in":{"featureSwitch":"requiresActiveX:true"},"incruit.com":{"featureSwitch":"requiresActiveX:true"},"i_pin.kisa.or.kr":{"featureSwitch":"requiresActiveX:true"},"itaupersonnalite.com.br":{"featureSwitch":"requiresActiveX:true"},"itauuniclass.com.br":{"featureSwitch":"requiresActiveX:true"},"joinsmsn.com":{"featureSwitch":"requiresActiveX:true"},"kbcard.com":{"featureSwitch":"requiresActiveX:true"},"kcp.co.kr":{"featureSwitch":"requiresActiveX:true"},"kiwoom.com":{"featureSwitch":"requiresActiveX:true"},"knbank.co.kr":{"featureSwitch":"requiresActiveX:true"},"kpn.com":{"featureSwitch":"requiresActiveX:true"},"kultur.gov.tr":{"featureSwitch":"requiresActiveX:true"},"kyobobook.co.kr":{"featureSwitch":"requiresActiveX:true"},"lassurance_maladie-recrute.com":{"featureSwitch":"requiresActiveX:true"},"life.miraeasset.com":{"featureSwitch":"requiresActiveX:true"},"lig.co.kr":{"featureSwitch":"requiresActiveX:true"},"liveradio.fr":{"featureSwitch":"requiresActiveX:true"},"lotteimall.com":{"featureSwitch":"requiresActiveX:true"},"lroc.asu.edu":{"featureSwitch":"requiresActiveX:true"},"maliye.gov.tr":{"featureSwitch":"requiresActiveX:true"},"marvel.com":{"featureSwitch":"requiresActiveX:true"},"mediaset.it":{"featureSwitch":"requiresActiveX:true"},"megabox.co.kr":{"featureSwitch":"requiresActiveX:true"},"mgoon.com":{"featureSwitch":"requiresActiveX:true"},"miniclip.com":{"featureSwitch":"requiresActiveX:true"},"ministeriolaluz.com":{"featureSwitch":"requiresActiveX:true"},"mma.go.kr":{"featureSwitch":"requiresActiveX:true"},"myangel.co.kr":{"featureSwitch":"requiresActiveX:true"},"myanycar.co.kr":{"featureSwitch":"requiresActiveX:true"},"myanycar.com":{"featureSwitch":"requiresActiveX:true"},"myasset.com":{"featureSwitch":"requiresActiveX:true"},"my_health-info.health.msn.com":{"featureSwitch":"requiresActiveX:true"},"nateonweb.nate.com":{"featureSwitch":"requiresActiveX:true"},"nexon.com":{"featureSwitch":"requiresActiveX:true"},"nykredit.dk":{"featureSwitch":"requiresActiveX:true"},"ondisk.co.kr":{"featureSwitch":"requiresActiveX:true"},"pcrevue.sk":{"featureSwitch":"requiresActiveX:true"},"planetradiocity.com":{"featureSwitch":"requiresActiveX:true"},"plaync.com":{"featureSwitch":"requiresActiveX:true"},"poombuy.com":{"featureSwitch":"requiresActiveX:true"},"pptv.com":{"featureSwitch":"requiresActiveX:true"},"samsunglife.com":{"featureSwitch":"requiresActiveX:true"},"santandernet.com.br":{"featureSwitch":"requiresActiveX:true"},"seoul.go.kr":{"featureSwitch":"requiresActiveX:true"},"shareholder.com":{"featureSwitch":"requiresActiveX:true"},"shinhancard.com":{"featureSwitch":"requiresActiveX:true"},"shockwave.com":{"featureSwitch":"requiresActiveX:true"},"shop.danawa.com":{"featureSwitch":"requiresActiveX:true"},"showroom.orange.fr":{"featureSwitch":"requiresActiveX:true"},"sky.com":{"featureSwitch":"requiresActiveX:true"},"sky.de":{"featureSwitch":"requiresActiveX:true"},"taxsave.go.kr":{"featureSwitch":"requiresActiveX:true"},"teleformula.com.mx":{"featureSwitch":"requiresActiveX:true"},"thomson.com":{"featureSwitch":"requiresActiveX:true"},"ti.eventshopper.com":{"featureSwitch":"requiresActiveX:true"},"total.kcomwel.or.kr":{"featureSwitch":"requiresActiveX:true"},"tstore.co.kr":{"featureSwitch":"requiresActiveX:true"},"tvpot.daum.net":{"featureSwitch":"requiresActiveX:true"},"tvthek.orf.at":{"featureSwitch":"requiresActiveX:true"},"update.nprotect.net":{"featureSwitch":"requiresActiveX:true"},"v.ifeng.com":{"featureSwitch":"requiresActiveX:true"},"video.foxnews.com":{"featureSwitch":"requiresActiveX:true"},"video.itworldcanada.com":{"featureSwitch":"requiresActiveX:true"},"video.sina.com.cn":{"featureSwitch":"requiresActiveX:true"},"video.watch.impress.co.jp":{"featureSwitch":"requiresActiveX:true"},"videos.tf1.fr":{"featureSwitch":"requiresActiveX:true"},"villagevoice.com":{"featureSwitch":"requiresActiveX:true"},"wemakeprice.com":{"featureSwitch":"requiresActiveX:true"},"wizwid.com":{"featureSwitch":"requiresActiveX:true"},"wyspagier.pl":{"featureSwitch":"requiresActiveX:true"},"xinhuanet.com":{"featureSwitch":"requiresActiveX:true"},"yoville.com":{"featureSwitch":"requiresActiveX:true"},"act.shop.xunlei.com":{"uaString":"9"},"acurafinancialservices.com":{"uaString":"9"},"boltbus.com":{"uaString":"9"},"comcast.com":{"uaString":"9"},"dantri.com.vn":{"uaString":"9"},"ladwp.com":{"uaString":"9"},"maccabi_health.co.il":{"uaString":"9"},"marketplace.xbox.com":{"uaString":"9"},"mckinseyquarterly.com":{"uaString":"9"},"mkm.haifanet.org.il":{"uaString":"9"},"motoactv.com":{"uaString":"9"},"my.clevelandclinic.org":{"uaString":"9"},"rewards.applegreen.ie":{"uaString":"9"},"syncmyride.com":{"uaString":"9"},"web5.seattle.gov":{"uaString":"9"},"rome2rio.com":{"uaString":"9L"},"astonmartin.com":{"uaString":"Chrome 12"},"easy_designs.net":{"uaString":"Chrome 12"},"indiapost.gov.in":{"uaString":"Chrome 12"},"suntrust.com":{"uaString":"Chrome 12"},"cathaypacific.com":{"uaString":"Firefox 5"},"finance.tochka.net":{"uaString":"Firefox 5"},"job.ru":{"uaString":"Firefox 5"},"franklincovey.com":{"uaString":"IE9Custom"},"rei.com":{"uaString":"IE9Custom"},"tv.slashgear.com":{"uaStringAlt":"Firefox 5"},"audimax.de":{"uaStringAlt":"iPad"},"global.cyworld.com":{"uaStringAlt":"iPad"},"pcactual.com":{"uaStringAlt":"iPad"},"tested.com":{"uaStringAlt":"iPad"},"thedailybeast.com":{"uaStringAlt":"iPad"},"webtv.hegnar.no":{"uaStringAlt":"iPad"},"104.com.tw":{},"115.com":{},"118114.cn":{},"17k.com":{},"2144.cn":{},"2212.net":{},"234next.com":{},"24h.com.vn":{},"263.com":{},"51job.com":{},"5251.net":{},"58.com":{},"750g.com":{},"7m.cn":{},"91kk.com":{},"95559.com.cn":{},"99114.com":{},"99166.com":{},"9ku.com":{},"aastocks.com":{},"ab1.tv":{},"abchina.com":{},"abisource.com":{},"about.co.kr":{},"about.zappos.com":{},"accounts.conduit.com":{},"adhood.com":{},"adrive.co.kr":{},"aeroplan.com":{},"affiliate-b.com":{},"aika.hanbiton.com":{},"airasia.com":{},"aiting.com":{},"algeria.dubizzle.com":{},"allianzbanque.fr":{},"americanexpress.com":{},"ana.co.jp":{},"answerbag.com":{},"answers.com":{},"apinpai.com":{},"armorgames.com":{},"asahi.com":{},"asb.co.nz":{},"asiae.co.kr":{},"asus.com":{},"at.ua":{},"atrapalo.com":{},"automotive.com":{},"autoscout24.de":{},"autoscout24.it":{},"autoslash.com":{},"avs4you.com":{},"aweb.com.cn":{},"axa.de":{},"axisbank.co.in":{},"babynamesworld.parentsconnect.com":{},"babytree.com":{},"baidu.com":{},"bamf.de":{},"bancobpi.pt":{},"banesconline.com":{},"banesto.es":{},"banif.pt":{},"bankcomm.com":{},"bankmillennium.pl":{},"banksinopac.com.tw":{},"banquepopulaire.fr":{},"bayliner.com":{},"bbb.org":{},"bbs.moneta.co.kr":{},"benefitaccess.com":{},"benq.com.cn":{},"bes.pt":{},"bigpond.com":{},"bjjtgl.gov.cn":{},"blackberry.com":{},"blackplanet.com":{},"blancheporte.fr":{},"blinkx.com":{},"blogad.com.tw":{},"blogia.com":{},"blogs.elmercurio.com":{},"blogtv.com":{},"bloomberg.com":{},"blsk.de":{},"bluedart.com":{},"bm.scs.gov.cn":{},"bmi.ir":{},"bnpparibas.be":{},"bnpparibas.net":{},"boattrader.com":{},"bobaedream.co.kr":{},"boc.cn":{},"boi-bol.com":{},"bokee.com":{},"books.com.tw":{},"boostmobile.com":{},"borsa.doviz.com":{},"borsaitaliana.it":{},"bresnan.net":{},"bresnansupport.custhelp.com":{},"bridgetrack.com":{},"bsmotoring.com":{},"btcha.com":{},"bubblestat.com":{},"bundesbank.de":{},"buscacep.correios.com.br":{},"cabal.co.kr":{},"ca-egypt.com":{},"cafe.naver.com":{},"calsacenter.com":{},"caprendizaje.sena.edu.co":{},"caracoltv.com":{},"carview.co.jp":{},"ccsa.org.cn":{},"cebbank.com":{},"cetizen.com":{},"cgportal.global.standardchartered.com":{},"chinamobile.com":{},"cib.com.cn":{},"cine.ados.fr":{},"cineplex.com":{},"cinesunidos.com":{},"cio.com":{},"citibank.co.jp":{},"citibank.co.uk":{},"citibank.pl":{},"citizensbank.com":{},"citroen.it":{},"classesinternational.com":{},"cm.k366.com":{},"cmbc.com.cn":{},"cnbc.com":{},"cnblogs.com":{},"cngold.org":{},"cnr.cn":{},"cnstock.com":{},"combined.de":{},"comcel.com":{},"commercialtrucktrader.com":{},"commerzbanking.de":{},"comtradcables.com":{},"contest.albamon.com":{},"corporate.yellowbook.com":{},"correios.com.br":{},"costco.ca":{},"cotabank.com.tw":{},"cox.com":{},"cozi.com":{},"cri.cn":{},"crosscountrytrains.co.uk":{},"cs.unipune.ernet.in":{},"cyworld.com":{},"dafont.com":{},"dardarkom.com":{},"datehookup.com":{},"dbv.de":{},"dcinside.com":{},"dct.dhl.com":{},"dealextreme.com":{},"debenhams.com":{},"deccanchronicle.com":{},"delamaison.fr":{},"dict.cc":{},"dioe.pr.gov.br":{},"dipan.com":{},"disneystore.com":{},"dlink.com":{},"donga.com":{},"download.zdnet.co.kr":{},"downs.co.kr":{},"dreamcam.com.br":{},"drmlicense.one.microsoft.com":{},"drugstore.com":{},"dublinbus.ie":{},"duowan.com":{},"eastmoney.com":{},"easysearch.ilikeclick.com":{},"ebank.hwataibank.com.tw":{},"ebay.auction.co.kr":{},"ebs.co.kr":{},"ebslang.co.kr":{},"ecampus.phoenix.edu":{},"economy.okezone.com":{},"eflow.ie":{},"eio.com":{},"eksisozluk.com":{},"elempleo.com":{},"elmundo.es":{},"elpais.com.co":{},"emploi.lepost.fr":{},"eng.gamecentrix.com":{},"enuri.com":{},"equipmenttraderonline.com":{},"ergodirekt.de":{},"esf.fangqq.com":{},"eshop.ccb.com":{},"esmas.com":{},"e-tjanster.lansstyrelsen.se":{},"etkinlik.tr.msn.com":{},"evz.ro":{},"extranet.sfqc.co.uk":{},"fafsa.ed.gov":{},"fenbei.com":{},"fibi.co.il":{},"filei.co.kr":{},"film.com":{},"finanzcenter.sparkasse-bremen.de":{},"firsttechcu.com":{},"flightnetwork.com":{},"flyordie.com":{},"focusnet.co.il":{},"forum-auto.com":{},"fotosearch.com":{},"fram.fr":{},"freenet.de":{},"fresheye.com":{},"friends.tok2.com":{},"frontierairlines.com":{},"fudbalstat.net":{},"fund.entiebank.com.tw":{},"fx120.net":{},"g9g.com":{},"gadu-gadu.pl":{},"game.com.cn":{},"gamebase.com.tw":{},"gamehouse.com":{},"gencat.cat":{},"genuine.com":{},"getprice.com.au":{},"gib.gov.tr":{},"giovani.it":{},"glamglowmud.com":{},"glamour.com":{},"global.theknot.com":{},"globalhotel.elong.com":{},"go4mumbai.com":{},"gogobox.com.tw":{},"goo.ne.jp":{},"goodreads.com":{},"gougou.com":{},"gov.tw":{},"governor.state.tx.us":{},"greatwall.cn":{},"greentube.com":{},"grippo.com":{},"groupbuy.525j.com.cn":{},"groupcard.com":{},"grupobanif.pt":{},"gsc.com.my":{},"gsn.com":{},"gtm.com":{},"gtsctmsuat.cloudapp.net":{},"guiadasemana.com":{},"gutefrage.net":{},"haber7.com":{},"haberler.com":{},"hadran.co.il":{},"haganenet.co.il":{},"haier.net":{},"halfclub.com":{},"hankooki.com":{},"haoting.com":{},"hardware.no":{},"hd.cnstock.com":{},"hdnw.com":{},"health.nih.gov":{},"hebnews.cn":{},"hexun.com":{},"hi.woniu.com":{},"hiapk.com":{},"hidemyass.com":{},"hidoc.co.kr":{},"hindustanpetroleum.com":{},"hinet.net":{},"hipchat.com":{},"hk.centadata.com":{},"hnair.com":{},"hncb.com.tw":{},"home.bwin.it":{},"home.co.ke":{},"horoscope.com":{},"hotel.mapbar.com":{},"hotfrog.co.uk":{},"hp.com":{},"hrsaccount.com":{},"hs.fi":{},"huanqiu.com":{},"hyderabadhouse.com":{},"ibc168.com":{},"icicibank.co.in":{},"icicibank.com":{},"icicilombard.com":{},"ico.ooopic.com":{},"iddaa.com.tr":{},"igirlsgames.com":{},"imrg.org":{},"india-forums.com":{},"indusind.com":{},"inquirer.net":{},"intel.sg":{},"investments.citi.com":{},"invisionfree.com":{},"issaquah.wednet.edu":{},"itsec.gov.cn":{},"ixigo.com":{},"jalaramonline.org":{},"java.com":{},"jerusalem.muni.il":{},"jeux.fr":{},"jihsunbank.com.tw":{},"jjwxc.net":{},"jma.go.jp":{},"job5156.com":{},"jobs.bizoo.ro":{},"joycity.com":{},"joyfile.co.kr":{},"jp.reuters.com":{},"jssearch.net":{},"juiceadv.com":{},"juno.com":{},"jus.br":{},"jx.cn":{},"k366.com":{},"kalahari.com":{},"kan-naim.co.il":{},"kavim-t.co.il":{},"kelkoo.nl":{},"kepco.co.kr":{},"key.com":{},"keywordblocks.com":{},"kickasstorrents.com":{},"kieskeurig.nl":{},"kin.naver.com":{},"kirkland.merchanttransact.com":{},"klicktel.de":{},"kreissparkasse-heinsberg.de":{},"kremlin.ru":{},"ksk-saarlouis.de":{},"kugou.com":{},"kuwo.cn":{},"kvb.bund.de":{},"kwick.de":{},"lachainemeteo.com":{},"landofnod.com":{},"lawtime.cn":{},"learning.microsoft.com":{},"legislation.gov.uk":{},"lequipe.fr":{},"lgdacom.net":{},"lingd.net":{},"link.com":{},"linkws.com":{},"livenation.com":{},"livetv.ru":{},"lloydstsb.com":{},"locator.standardbank.co.za":{},"login.tagged.com":{},"looksmart.com":{},"luaukalamaku.com":{},"macrumors.com":{},"mail.163.com":{},"mail.comcast.net":{},"map.cmbchina.com":{},"maplestory.nexon.com":{},"mappy.com":{},"marketplace.secondlife.com":{},"mars.jpl.nasa.gov":{},"maudeandtilda.com":{},"mbna.ie":{},"megabank.com.tw":{},"meimingteng.com":{},"mercurial.selenic.com":{},"millenniumbcp.pt":{},"mister-wong.de":{},"mivzakon.co.il":{},"mofile.com":{},"moh.gov.cn":{},"mondo.rs":{},"moneysupermarket.com":{},"monternet.com":{},"motorola.com":{},"mouthshut.com":{},"movieberry.com":{},"movies.nytimes.com":{},"mp3music.co.il":{},"msofbi.travelport.com":{},"mspoll.valterasurveys.com":{},"mtvtop.net":{},"multiply.com":{},"muonline.co.kr":{},"my.zaq.ne.jp":{},"mydrivers.com":{},"myplaycity.com":{},"myswitzerland.com":{},"myvideo.at":{},"nat.gov.tw":{},"natega.moe.gov.eg":{},"nationalskillsregistry.com":{},"nationwidew.co.uk":{},"naukri.com":{},"nav.com.cn":{},"nchsoftware.com":{},"ndtv.com":{},"neoseeker.com":{},"netaxle.com":{},"netbk.co.":{},"netshop2.tallink.com":{},"netzero.net":{},"new.pts.org.tw":{},"new.yes.com":{},"newcastle.k12.ca.us":{},"newlook.com":{},"news.cga.com.cn":{},"news.e21.cn":{},"news.sznews.com":{},"newsgator.com":{},"newsroom.sprint.com":{},"nextbus.com":{},"ngrguardiannews.com":{},"nhs.net":{},"nic.in":{},"nissen.co.jp":{},"nmec.org.cn":{},"nol.hu":{},"norsk-tipping.no":{},"nrk.no":{},"nwmls.com":{},"ohmynews.com":{},"oi.com.br":{},"ojogo.pt":{},"oklink.net":{},"omniture.com":{},"onestat.com":{},"open24.ie":{},"orange.fr":{},"orange.pl":{},"orientaltrading.com":{},"ourgame.com":{},"paginasamarillas.com.pe":{},"partytentcity.com":{},"pastel.diplomatie.gouv.fr":{},"pay.neowiz.com":{},"payless.com":{},"pcbaby.com.cn":{},"peoplefinders.com":{},"petfinder.com":{},"phoenix.edu":{},"piao6.net":{},"pic.xdf.cn":{},"pijama.sozlukspot.com":{},"pinole.patch.com":{},"pipi.cn":{},"planejamento.mg.gov.br":{},"play.com":{},"playstation.com":{},"plaza.fi":{},"plus.pl":{},"pm2012.printmaster.com":{},"point.nexon.co.jp":{},"pole-emploi.fr":{},"poliisi.fi":{},"polla.cl":{},"popular.com":{},"portal.infonavit.org.mx":{},"portalbank.no":{},"post.gov.tw":{},"powersupportusa.com":{},"pps.tv":{},"pr.gov.br":{},"prehackshub.com":{},"pressroom.meetic.fr":{},"priberam.pt":{},"purepeople.com":{},"qcv.vom":{},"qianbao.chinabank.com.cn":{},"quickenbillpay.com":{},"r114.co.kr":{},"radisson.com":{},"railtime.be":{},"rakuten-bank.co.jp":{},"randomous.com":{},"razor.tv":{},"rbi.org.in":{},"realmadrid.com":{},"realpage.com":{},"redir.hinet.net":{},"reg.knowledgeadventure.com":{},"relianceglobalcall.com":{},"reliancemoney.com":{},"renault.fr":{},"renault.nl":{},"rentalcgi.com":{},"replays.net":{},"reportingitc.apple.com":{},"rfgrid.gridcdn.com":{},"riji.seedit.com":{},"riverisland.com":{},"roblox.com":{},"rsarabia.com":{},"rtvslo.si":{},"ru.4game.com":{},"rueducommerce.fr":{},"runsky.com":{},"sabb.com":{},"sakshi.com":{},"santander.co.uk":{},"santander.com.br":{},"sat.gob.mx":{},"sbrf.ru":{},"scottrade.com":{},"scrumy.com":{},"search-results.com":{},"secure.autoscout24.de":{},"secure.dolnet.gr":{},"secure.opinionlab.com":{},"secure.rohan.co.kr":{},"segye.com":{},"selenic.com":{},"services.inquirer.net":{},"servicetick.com":{},"sgk.gov.tr":{},"sheknows.com":{},"shinhan.com":{},"shop.comedycentral.com":{},"shop.orange.ch":{},"shopathome.com":{},"shopperreports.com":{},"shopping.hp.com":{},"shopping.tomshw.it":{},"showroom.ford.com":{},"siberalem.com":{},"simfile.uplusbox.co.kr":{},"sina.com":{},"siren24.pandora.tv":{},"skandia-life.co.uk":{},"skbank.com.tw":{},"skoost.com":{},"slate.com":{},"smartbill.co.kr":{},"smn.gov.ar":{},"socgen.com":{},"softwareupdater.com":{},"sohu.com":{},"soso.com":{},"southcn.com":{},"sparda-b.de":{},"sparda-m.de":{},"sparda-n.de":{},"sparda-west.de":{},"sparkasse.at":{},"sparkasse-bottrop.de":{},"speedbank.co.kr":{},"spesoft.ourtoolbar.com":{},"sport.be":{},"sport-express.ru":{},"sports.newssc.org":{},"sports.sina.com.cn":{},"sports.walla.co.il":{},"sportsdirect.com":{},"sporttery.cn":{},"sprint.com":{},"square.gogle.cn":{},"st701.com":{},"staging.sfqc.co.uk":{},"state.gov":{},"statebankofindia.com":{},"station.ru":{},"stmartinusvvag.de":{},"strato.de":{},"superdown.co.kr":{},"superhry.cz":{},"surugabank.co.jp":{},"symantec.com":{},"sz.net.cn":{},"szxx.beijing.gov.cn":{},"tagged.com":{},"taiwanlottery.com.tw":{},"tata.com":{},"tatamotors.com":{},"te3p.com":{},"techflash.com":{},"teennick.com":{},"telenor.hu":{},"telkom.net":{},"telusmobility.com":{},"theamericanfilmcompany.com":{},"thefind.com":{},"thepostgame.com":{},"t-home.hu":{},"timesplus.co.uk":{},"tistory.com":{},"tongfangpc.com":{},"topic.csdn.net":{},"torrentreactor.net":{},"torrents.net":{},"totaljobs.com":{},"toyota.com":{},"tradeking.com":{},"tradingpost.com.au":{},"traffic.com":{},"trainenquiry.com":{},"travelocity.com":{},"tv.orange.es":{},"tv24.ee":{},"tvazteca.com":{},"tv-guide.ten.com.au":{},"twipple.jp":{},"txtbook.com.cn":{},"u9u8.com":{},"uaeec.com":{},"uludagsozluk.com":{},"umovietv.com":{},"unilag.edu.ng":{},"upc.ie":{},"urssaf.fr":{},"us.hsbc.com":{},"utamap.com":{},"uusee.com":{},"v.emoney.cn":{},"v.pps.tv":{},"vb-mittelhessen.de":{},"vestjyskbank.dk":{},"viadeo.com":{},"video.jsoftj.com":{},"video.wetteronline.de":{},"videos.leparisien.fr":{},"virginmedia.com":{},"vnet.cn":{},"vodafone.co.uk":{},"vodafone.com.eg":{},"volksfuersorge.de":{},"voyager.jpl.nasa.gov":{},"vr-web.de":{},"vuze.com":{},"walletpop.com":{},"walmart.ca":{},"way2sms.com":{},"weather.fox.com":{},"weather.weatherbug.com":{},"webmail.colombia.com":{},"webmail.virgilio.it":{},"webmailhelp.peoplepc.com":{},"webslovnik.zoznam.sk":{},"weightwatchers.com":{},"wk.39.net":{},"wohngeldantrag.de":{},"woopie.jp":{},"worldwide.blackberry.com":{},"wrzuta.pl":{},"wsv.de":{},"www2.dasoertliche.de":{},"www212.americanexpress.com":{},"www9.nhk.or.jp":{},"www-ssl.futureshop.ca":{},"xcar.com.cn":{},"xiangshu.com":{},"xmfish.com":{},"xso.nate.com":{},"xxsy.net":{},"xyj.duowan.com":{},"yes.com":{},"yescardacs.keb.co.kr":{},"yingyong.so":{},"yjbys.com":{},"ymap.ynet.co.il":{},"ynet.com":{},"yninfo.com":{},"yoka.com":{},"yoox.com":{},"yourshapecenter.au.ubi.com":{},"youxi123.com":{},"yuanta.com.tw":{},"yunoo.nl":{},"yyets.com":{},"z8games.com":{},"zfxxgk.beijing.gov.cn":{},"zhidao.ikaka.com":{},"zhuoku.com":{},"zoosnet.net":{},"aardman.com":{"noFlash":true},"briggs_riley.com":{"noFlash":true},"bubblepix.com":{"noFlash":true},"fr_online.de":{"noFlash":true},"m6replay.fr":{"noFlash":true},"news24.jp":{"noFlash":true},"on24.com":{"noFlash":true},"tnt_online.ru":{"noFlash":true},"webinato.com":{"noFlash":true}} \ No newline at end of file diff --git a/lib/checks/check-browser-detection.js b/lib/checks/check-browser-detection.js new file mode 100644 index 0000000..c085183 --- /dev/null +++ b/lib/checks/check-browser-detection.js @@ -0,0 +1,144 @@ +/** + * Description: Checks if a website is using browser sniffing in its JavaScript. + * To determine this we look for known patterns (like navigator.userAgent). + * We only look for JavaScript files in the same domain that the website. + * If a website www.domain.com embeds scripts from www.domain.com, script.domain.com + * and ad.server.com, only those in www.domain.com will be analyzed. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var Deferred = require('promised-io').Deferred, + Promise = require('promised-io/promise'), + request = require('request'), + url = require('url'), + rules = [ + "navigator.userAgent", + "navigator.appVersion", + "navigator.appName", + "navigator.product", + "navigator.vendor", + "$.browser", + "Browser." + ], + exceptions = [ + "ajax.googleapis.com", + "ajax.aspnetcdn.com", + "ajax.microsoft.com", + "jquery", + "mootools", + "prototype", + "protoaculous" + ]; + +request = request.defaults({ + jar: false, + headers: { + 'Accept-Language': 'en-US,en;q=0.5', + 'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)'} +}); + +function checkScript(url) { + var deferred = new Deferred(); + //TODO: we should be using the predownloaded JS + request(url, function (error, res, body) { + // See if this script has any of our known libraries + var scriptText = body || "", + browserDetectionPassed = true, + ruleIndex, + lineNumber; + if (error) { + deferred.resolve({ + passed: false, + pattern: 'Error parsing', + lineNumber: -1, + url: url + }); + } else { + for (var i = 0; i < rules.length; i++) { + ruleIndex = scriptText.indexOf(rules[i]); + if (ruleIndex !== -1) { + browserDetectionPassed = false; + lineNumber = scriptText.substr(0, ruleIndex).split('\n').length; + break; + } + } + + if (!browserDetectionPassed) { + deferred.resolve({ + passed: false, + pattern: rules[i], + lineNumber: lineNumber, + url: res.request.href + }); + } else { + deferred.resolve({ + passed: true, + url: res.request.href + }); + } + } + }); + return deferred; +} + +var check = function (website) { + var needsToBeProcessed = true; + + var scripts = website.$("script"), + scriptPromises = [], src; + + for (var i = 0; i < scripts.length; i++) { + src = scripts.eq(i).attr("src"); + needsToBeProcessed = true; + //check if it is local, cdn or library + if (src) { + if (src.indexOf('http') === -1 && src.indexOf('//') === -1) { + src = url.resolve(website.url, src); + for (var j = 0; j < exceptions.length; j++) { + if (src.indexOf(exceptions[j]) !== -1) { + needsToBeProcessed = false; + break; + } + } + + if (needsToBeProcessed) { + scriptPromises.push(checkScript(src)); + } + } + } + } + + return Promise.all(scriptPromises).then(function (promises) { + var test = { + testName: "browserDetection", + passed: true, + data: [] + }; + + for (var a = 0; a < promises.length; a++) { + var pm = promises[a]; + if (!pm.passed) { + test.passed = false; + } + test.data.push(pm); + } + + return test; + }); +}; + +module.exports.check = check; \ No newline at end of file diff --git a/lib/checks/check-compatlist.js b/lib/checks/check-compatlist.js new file mode 100644 index 0000000..af94761 --- /dev/null +++ b/lib/checks/check-compatlist.js @@ -0,0 +1,64 @@ +/** + * Description: This check looks for the X-UA-Compatible meta tag in the HTML, + * and also checks whether/why the site is on the Microsoft CV list. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var cvlist = require('./compatlist.js'), + Deferred = require('promised-io').Deferred; + +var initiate = function (website) { + var deferred = new Deferred(), + test = { + testName: "cvlist", + passed: true, + data: {} + }; + + //TODO: The compat tag may not be recognized if it is "too far down" the page; detect this. + var compatTag = website.$('meta[http-equiv]').filter(function(){ + return this[0].attribs['http-equiv'].toLowerCase() === 'x-ua-compatible'; + }); + + if (compatTag.length > 0) { + if (compatTag[0].attribs.content) { + var mode = compatTag[0].attribs.content.toLowerCase(); + if (mode.indexOf("edge") === -1) { + test.passed = false; + test.data = { source: 'tag', mode: mode}; + deferred.resolve(test); + return deferred.promise; + } + } + } + + cvlist.getList().then(function (list) { + var resultWebsite = list[website.url.hostname.replace('-', '_').replace('www.', '')]; + if (resultWebsite && (resultWebsite.docMode || resultWebsite.uaString || Object.keys(resultWebsite).length === 0)) { + test.passed = false; + test.data = {source: 'cvlist', mode: resultWebsite.docMode}; + } + + deferred.resolve(test); + }, function () { + deferred.reject(); + }); + + return deferred.promise; +}; + +module.exports.check = initiate; \ No newline at end of file diff --git a/lib/checks/check-cssprefixes.js b/lib/checks/check-cssprefixes.js new file mode 100644 index 0000000..0bd4742 --- /dev/null +++ b/lib/checks/check-cssprefixes.js @@ -0,0 +1,162 @@ +/** + * Description: This check looks for any missing vendor prefix (-webkit-, -moz-, -o-, -ms-) for the following CSS rules: + * transform, animation, transition-property, transition-duration, transition-timing-function, transition-delay, transition, + * linear-gradient, radial-gradient, gradient + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +// NB: PropMap/ExprMap information from caniuse.com + +var Deferred = require('promised-io').Deferred, + vendorPrefixMatcher = /^(-\w+-)?((\w+)[\w\-]*)/, + // Properties may have following `-terms` (e.g., transition-delay) + prefixedPropMap = { + "animation": "-webkit-", + "perspective": "-ms- -webkit-", + "transform": "-ms- -webkit-", + "transition": "-webkit-" + }, + // Expression terms are the entire name with optional prefix + prefixedExprMap = { + "linear-gradient": "-webkit-", + "radial-gradient": "-webkit-" + }; + +function htmlEncode(encodedHtml) { + if (typeof encodedHtml === 'undefined') { + return; + } + return encodedHtml.replace(/\//g, "%2F") + .replace(/\?/g, "%3F") + .replace(/\=/g, "%3D") + .replace(/&/g, "%26") + .replace(/@/g, "%40") + .replace(//g, ""); +} + +function checkPrefixes(list, matcher, prefixMap, selector, add) { + var prefixList = {}, + problems = []; + + for ( var i = 0; i < list.length; i++ ) { + var item = list[i], + match = matcher.exec(item) || [], + unprefixed = match[2], + prefixesLeft = prefixList[unprefixed], + prefixesNeeded = prefixMap[unprefixed] || match[3] && prefixMap[match[3]]; + + if ( prefixesNeeded ) { + // We want to track prefixing for this property + if ( prefixesLeft === undefined ) { + // First time we've seen this property in the rule + prefixesLeft = prefixList[unprefixed] = prefixesNeeded + " " + unprefixed; + } + // Remove this prefix (or unprefixed value) if it is a required one + prefixList[unprefixed] = prefixesLeft.replace(new RegExp(match[1] || "\\b" + unprefixed + "\\b"), ""); + } + } + // See if any rules are missing prefixed equivalents or vice-versa + for ( var p in prefixList ) { + // Use the full prefixed property name for reporting + // e.g. in: " -ms- transform", out: "-ms-transform transform" + var needed = prefixList[p].replace(/-(\s|$)/g, "-" + p + " ").trim().replace(/\s+/g, " "); + + if ( needed ) { + add(selector, needed); + } + } + return problems; +} + +function checkRules(css) { + var rules = css.css.cssRules, + report = { + cssFile: css.cssUrl, + selectors: [] + }, + start = 0, + // Function to add a problem report for this rule + addProblem = function(selector, missing) { + report.selectors.push({ + selector: htmlEncode(selector), + styles: missing.split(" "), + lineNumber: css.cssBody.substr(0, start).split('\n').length + }); + }; + + // Process each rule in the sheet: `selectors { prop: expr; ... }` + for ( var r=0; r < rules.length; r++ ) { + // CSSStyleDeclaration + var decls = rules[r].style || []; + + // Set the starting character point for this declaration in the sheet + start = decls.__starts || 1; + + // Check for prefixes on all the properties + checkPrefixes( + decls, + vendorPrefixMatcher, + prefixedPropMap, + rules[r].selectorText, + addProblem + ); + + // Check for prefixes on expressions in non-prefixed properties; see loadcss.js for + // details on how we are saving duplicate declarations using ~prop. + for ( var p = 0; p < decls.length; p++ ) { + var prop = decls[p]; + if ( !/^-/.test(prop) ) { + checkPrefixes( + decls["~"+prop] || [ decls[prop] || "" ], + vendorPrefixMatcher, + prefixedExprMap, + rules[r].selectorText, + addProblem + ); + } + } + } + return report; +} + +function check(website) { + var deferred = new Deferred(); + + // Let the main loop run before we do this work + setImmediate(function() { + var test = { + testName: "cssprefixes", + passed: true, + data: [] + }; + + for ( var i = 0; i < website.css.length; i++ ) { + var result = checkRules(website.css[i]); + if ( result.selectors.length ) { + test.passed = false; + test.data.push(result); + } + } + + deferred.resolve(test); + }); + + return deferred.promise; +} + +module.exports.check = check; \ No newline at end of file diff --git a/lib/checks/check-doctype.js b/lib/checks/check-doctype.js new file mode 100644 index 0000000..c9c587b --- /dev/null +++ b/lib/checks/check-doctype.js @@ -0,0 +1,116 @@ +/** + * Description: Checks the doctype of website to see if the site is in Quirks mode. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var Deferred = require('promised-io').Deferred; + +// Comments or newlines before doctype are allowed, as well as an xml header for XHTML docs. +// IE6 will always quirk out on an XML header but let's assume everyone is past that. +// SEE http://msdn.microsoft.com/en-us/library/ie/ms535242(v=vs.85).aspx + +var spaces = '[\\s\\r\\n]*', + comment = '(?:' + spaces + ')*', + xmltag = '(?:)?', + doctype = ']*)>', + // _, doctype-innards + headRE = new RegExp('^' + comment + spaces + xmltag + spaces + doctype), + // _, public|system, "public identifier", "system identifier"? + pubsysRE = new RegExp('^(public|system)' + spaces + '"([^"]*)"' + spaces + '("[^"]*")?'), + // _, (x)html, version, variant (e.g., "transitional") + pubidRE = new RegExp('-//w3c//dtd (x?html)\\S*\\s*([\\d\\.]+)?\\s*(\\w+)?//en'), + // Literal pubids that pass standards + pubidMap = { + "iso/iec 15445:1999//dtd hypertext markup language//en": true, + "iso/iec 15445:1999//dtd html//en": true, + "-//ietf//dtd html i18n//en": true, + "-//unknown//en": true + }; + +var check = function (website) { + var deferred = new Deferred(), + // Don't waste time looking through the whole doc; the doctype should be early + head = website.content.slice(0, 2000).trim().toLowerCase(), + dt = headRE.exec(head), + result = { + testName: "doctype", + passed: false, + data: { + lineNumber: -1, + mode : [ "No doctype" ] + } + }; + + if (dt) { + // Since the regexp matched this should succeed as well + result.data.lineNumber = head.substr(0,head.indexOf(" (plain old html5 doctype without any following junk) + result.passed = true; + result.data.mode = [ "html5" ]; + } else { + // Assume failure for simplicity + result.data.mode = [ "Invalid or Quirks doctype" ]; + + // Should have PUBLIC or SYSTEM plus identifier(s) + var pubsys = pubsysRE.exec(dt[1]) || [], + puborsys = pubsys[1], + pubid = pubsys[2], + sysid = pubsys[3]; + + if ( puborsys === "system" ) { + // Any SYSTEM doctypes are considered to be standards mode + result.passed = true; + result.data.mode = [ "html (system)" ]; + } else if ( pubid === "" && sysid === undefined ) { + // is standards mode + result.passed = true; + result.data.mode = [ "html5 (long form)" ]; + } else if ( pubidMap[pubid] ) { + // One of the "OMG standards mode" bizarro doctypes + result.passed = true; + result.data.mode = [ "html standards" ]; + } else if ( pubsys.length && pubid ) { + // Drill into the pubid to see if it's standards mode + var pubdata = pubidRE.exec(pubid) || [], + htmltype = pubdata[1], + version = pubdata[2], + variant = pubdata[3], + standards = pubdata.length > 0; + + if ( htmltype === "html" ) { + if ( +version < 4.0 ) { + // Anything less than HTML4 is not standards + standards = false; + } else if ( version === "4.0" || version === "4.01" ) { + // HTML4 is only standards for frameset/transitional if a system id is provided + if ( /frameset|transitional/.test(variant) && !sysid ) { + standards = false; + } + } + } + result.passed = standards; + result.data.mode = [(htmltype + " " + version + " " + variant).trim()]; + } + } + } + + deferred.resolve(result); + return deferred.promise; +}; + +module.exports.check = check; \ No newline at end of file diff --git a/lib/checks/check-ie10favicon.js b/lib/checks/check-ie10favicon.js new file mode 100644 index 0000000..c33027d --- /dev/null +++ b/lib/checks/check-ie10favicon.js @@ -0,0 +1,46 @@ +/** + * Description: Look for the presence of a tile meta tag for IE10 and Win8. + * Note if a Retina icon for iOS devices has been specified so it can be reused. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var Deferred = require('promised-io').Deferred; +var check = function (website) { + var deferred = new Deferred(); + + var tile = website.$('meta[name="msapplication-TileImage"]'), + iOS = website.$('link[rel*="apple-touch-icon"]'), + test = { + testName:"ie10favicon", + passed:false, + data: {iOS : false} + + }; + if (tile.length > 0) { + test.passed = true; + } + + if(iOS.length > 0){ + test.data.iOS = true; + } + + deferred.resolve(test); + + return deferred.promise; +}; + +module.exports.check = check; \ No newline at end of file diff --git a/lib/checks/check-libs.js b/lib/checks/check-libs.js new file mode 100644 index 0000000..744a884 --- /dev/null +++ b/lib/checks/check-libs.js @@ -0,0 +1,204 @@ +/** + * Description: Check for most common libraries and frameworks to verify site is + * using a version without known compatibility issues with IE9/10. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var Deferred = require('promised-io').Deferred; + +function checkVersion(library, version) { + var vinfo = { + name: library.name, + needsUpdate: true, + minVersion: library.minVersions[0].major + library.minVersions[0].minor, + version: version + }; + if (library.patchOptional) { + // If lib can have an implied ".0", add it when needed + // match 1.17, 1.17b2, 1.17-beta2; not 1.17.0, 1.17.2, 1.17b2 + var parts = version.match(/(\d+\.\d+)([^\d\.](.*))$/); + if (parts) { + version = parts[1] + ".0" + parts[2]; + } + } + for (var i = 0; i < library.minVersions.length; i++) { + var gv = library.minVersions[i]; + if (version.indexOf(gv.major) === 0) { + vinfo.minVersion = gv.major + gv.minor; + vinfo.needsUpdate = +version.slice(gv.major.length) < +gv.minor; + break; + } + } + + return vinfo; +} + +var libraries = [ + { + name: "jQuery", + minVersions: [ + { major: "1.6.", minor: "4" }, + { major: "1.7.", minor: "2" }, + { major: "1.8.", minor: "2" }, + { major: "1.9.", minor: "1" }, + { major: "1.10.", minor: "2" }, + { major: "2.0.", minor: "3" } + ], + patchOptional: true, + check: function (scriptText) { + var version = scriptText.match(/jquery:\s*"([^"]+)/); + return version && checkVersion(this, version[1]); + } + }, + { + name: "jQuery UI", + minVersions: [ + { major: "1.8.", minor: "24" }, + { major: "1.9.", minor: "2" }, + { major: "1.10.", minor: "3" } + ], + check: function (scriptText) { + var version = scriptText.match(/\.ui,[\s\r\n]*\{[\s\r\n]*version:\s*"([^"]+)/m); + return version && checkVersion(this, version[1]); + } + }, + { + name: "Prototype", + minVersions: [ + { major: "1.7.", minor: "1" } + ], + check: function (scriptText) { + var version = scriptText.match(/Prototype JavaScript framework, version (\d+\.\d+\.\d+)/m); + return version && checkVersion(this, version[1]); + } + }, + { + name: "Dojo", + minVersions: [ + { major: "1.5.", minor: "2" }, + { major: "1.6.", minor: "1" }, + { major: "1.7.", minor: "3" }, + { major: "1.8.", minor: "0" } + ], + check: function (scriptText) { + var version = scriptText.match(/\.version\s*=\s*\{\s*major:\s*(\d+)\D+(\d+)\D+(\d+)/m); + return version && checkVersion(this, version[1] + "." + version[2] + "." + version[3]); + } + }, + { + name: "Mootools", + minVersions: [ + { major: "1.2.", minor: "6" }, + { major: "1.4.", minor: "5" } + ], + check: function (scriptText) { + var version = scriptText.match(/this.MooTools\s*=\s*\{version:\s*'(\d+\.\d+\.d+)/m); + return version && checkVersion(this, version[1]); + } + }, + { + name: "SWFObject", + minVersions: [ + { major: "2.", minor: "2" } + ], + check: function (scriptText) { + var version = scriptText.match(/\*\s+SWFObject v(\d+\.\d+)/m); + return version && checkVersion(this, version[1]); + } + }, + { + name: "jQuery Form Plugin", + minVersions: [ + { major: "3.", minor: "22" } + ], + check: function (scriptText) { + var version = scriptText.match(/Form Plugin\s+\*\s+version: (\d+\.\d+)/m); + return version && checkVersion(this, version[1]); + } + }, + { + name: "Modernizr", + minVersions: [ + { major: "2.5.", minor: "2" }, + { major: "2.6.", minor: "2" } + ], + check: function (scriptText) { + // Static analysis. :( The version is set as a local variable, far from + // where Modernizr._version is set. Just see if we have a commment header. + // ALT: look for /VAR="1.2.3"/ then for /._version=VAR/ ... ugh. + var version = scriptText.match(/\*\s*Modernizr\s+(\d+\.\d+\.d+)/m); + return version && checkVersion(this, version[1]); + } + } +]; + +function checkScript(js, website) { + var status = { + passed: true, + data: null + }; + + // See if this script has any of our known libraries + for (var i = 0; i < libraries.length; i++) { + var lib = libraries[i], + result; + + if ( js.jsUrl !== "embed" ) { + result = lib.check.call(lib, js.code || ""); + if ( result && result.needsUpdate ) { + var pos = website.content.indexOf(js.href), + lineNumber = website.content.substr(0, pos).split('\n').length; + result.url = js.finalUrl; + result.lineNumber = lineNumber; + status.data = result; + status.passed = false; + break; + } + } + } + return status; +} + +var check = function (website) { + var deferred = new Deferred(); + + // Let the main loop run before we do this work + setImmediate(function() { + var test = { + testName: "jslibs", + url: website.url.href, + passed: true, + data: [] + }, + result; + + for (var i = 0; i < website.js.length; i++) { + result = checkScript(website.js[i], website); + + if ( !result.passed ) { + test.passed = false; + test.data.push(result.data); + } + } + + deferred.resolve(test); + }); + + return deferred.promise; +}; + +module.exports.check = check; diff --git a/lib/checks/check-pluginfree.js b/lib/checks/check-pluginfree.js new file mode 100644 index 0000000..5c3e993 --- /dev/null +++ b/lib/checks/check-pluginfree.js @@ -0,0 +1,115 @@ +/** + * Description: Looks for: + * 1) Compatibility issues related to ActiveX plugins in the CV lists + * 2) Any plugin or ActiveX control different than Flash or SVG + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var cvlist = require('./compatlist.js'), + Deferred = require('promised-io').Deferred, + $ = require('cheerio'); + +var initiate = function (website) { + var deferred = new Deferred(), + test = { + testName: "pluginfree", + passed: true, + data: [] + }; + + function removeItems(original, itemsToRemove) { + var cleaned = [], + remove; + for (var i = 0; i < original.length; i++) { + remove = true; + for (var j = 0; j < itemsToRemove.length; j++) { + if (original[i] === itemsToRemove[j]) { + remove = false; + break; + } + } + if (remove) { + cleaned.push(original[i]); + } + } + + return cleaned; + } + + cvlist.getList().then(function (list) { + var resultWebsite = list[website.url.hostname.replace('-', '_').replace('www.', '')]; + if (resultWebsite && (resultWebsite.noFlash || (resultWebsite.featureSwitch && resultWebsite.featureSwitch === "requiresActiveX:true"))) { + test.passed = false; + test.data = {activex: !resultWebsite.noFlash , cvlist: true}; + } else { + var $objects = website.$('object'), + $embeds = website.$('embed'), + $objectParams = website.$('object param[value*=swf]'), + $objectSWFparams = website.$('object[data*=swf]'), + $objectSVGparams = website.$('object[data*=svg]'), + $embedsSWF = website.$('embed[src*=swf]'), + $embedsSVG = website.$('embed[src*=svg]'); + + var activeXcontrols = $objects.length - $objectParams.length - $objectSWFparams.length - $objectSVGparams.length + $embeds.length - $embedsSWF.length - $embedsSVG.length; + if (activeXcontrols > 0) { + var endPoint, lines, + objectsToRemove = $objectParams.toArray().concat($objectSWFparams.toArray(), $objectSVGparams.toArray()), + embedsToRemove = $embedsSWF.toArray().concat($embedsSVG.toArray()), + uniqueObjects = removeItems($objects, objectsToRemove), + uniqueEmbeds = removeItems($embeds, embedsToRemove), + objectHtml = $.html($(uniqueObjects[0])), + embedHtml = $.html($(uniqueEmbeds[0])), + objectRegex = new RegExp(objectHtml, "gi"), + embedRegex = new RegExp(embedHtml, "gi"), + matches; + + if (objectHtml !== "") { + matches = objectRegex.exec(website.content); + if (matches && matches.length > 0) { + endPoint = website.content.indexOf(matches[0]); + } + } else { + if (embedHtml !== "") { + matches = embedRegex.exec(website.content); + if (matches && matches.length > 0) { + endPoint = website.content.indexOf(matches[0]); + } + } + } + + lines = website.content.substr(0, endPoint) + .split('\n').length; + + test.passed = false; + test.data = {activex: true, cvlist: false, lineNumber: lines}; + } + } + + deferred.resolve(test); + }, + function + () { + deferred.reject(); + } + ) + ; + + return deferred.promise; + } + ; + +module.exports.check = initiate; \ No newline at end of file diff --git a/lib/checks/check-responsive.js b/lib/checks/check-responsive.js new file mode 100644 index 0000000..0244710 --- /dev/null +++ b/lib/checks/check-responsive.js @@ -0,0 +1,190 @@ +/** + * Description: Look for known patterns used for RWD. Files added dynamically are not analyzed. + * 1) Look for media queries related to the size of the screen (min-width and max-width). + * If the website doesn't have any then the test is not passed. + * 2) If the website has CSS media queries, look for the min/max break points in those. + * Compare the website's breakpoints to the sizes 320, 480, 640 and 768 +- 25%. + * If any resolution doesn't have any breakpoint within the margin, flag a possible issue + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var Deferred = require('promised-io').Deferred, + checklist = [320, 480, 640, 768, 960], + percentage = 0.25, + checklistMinPercentage = [], + checklistMaxPercentage = [], + maxWidth = /max-width\s*:\s*(.*)\).*/i, + minWidth = /min-width\s*:\s*(.*)\).*/i; + +for (var i = 0; i < checklist.length; i++) { + checklistMinPercentage.push(checklist[i] * (1 - percentage)); +} + +for (i = 0; i < checklist.length; i++) { + checklistMaxPercentage.push(checklist[i] * (1 + percentage)); +} + +function analyzeMediaQuery(media, test) { + var regexResult = minWidth.exec(media), + value = 0; + if (regexResult) { + if (regexResult[1].indexOf('px') !== -1) { + value = parseFloat(regexResult[1].replace('px', '')); + } else if (regexResult[1].indexOf('em') !== -1) { + value = parseFloat(regexResult[1].replace('em', '')) * 16; + } + + test.data.minBreakPoints.push(value); + } + + regexResult = maxWidth.exec(media); + if (regexResult) { + if (regexResult[1].indexOf('px') !== -1) { + value = parseFloat(regexResult[1].replace('px', '')); + } else if (regexResult[1].indexOf('em') !== -1) { + value = parseFloat(regexResult[1].replace('em', '')) * 16; + } + test.data.maxBreakPoints.push(value); + } +} + +function checkCSS(css, test) { + var found = false; + for (var i = 0; i < css.length; i++) { + if (css[i].media) { + for (var j = 0; j < css[i].media.length; j++) { + if (css[i].media[j].indexOf('min-width') !== -1 || css[i].media[j].indexOf('max-width') !== -1) { + found = true; + analyzeMediaQuery(css[i].media[j], test); + } + } + } + } + return found; +} + +function sort(a, b) { + return a - b; +} + +function removeDuplicates(list) { + for (i = list.length; i > 0; i--) { + if (list[i - 1] === list[i]) { + list.splice(i, 1); + } + } +} + +function consolidate(tempSpectrum) { + var spectrum = []; + spectrum.push(tempSpectrum[0]); + for (var i = 1, j = 0; i < tempSpectrum.length; i++) { + if (tempSpectrum[i] && tempSpectrum[i].start <= spectrum[j].end) { + spectrum[j].end = Math.max(tempSpectrum[i].end, spectrum[j].end); + } else { + spectrum.push(tempSpectrum[i]); + j++; + } + } + return spectrum; +} + +function mergeSpectrums(spectrum1, spectrum2) { + var tempSpectrum = spectrum1.concat(spectrum2); + + tempSpectrum.sort(function (a, b) { + return a.start - b.start; + }); + + return consolidate(tempSpectrum); +} + +function createSpectrum(test) { + var minBreakPoints = test.data.minBreakPoints, + maxBreakPoints = test.data.maxBreakPoints, + spectrumMin = [], + spectrumMax = []; + + for (var i = 0; i < minBreakPoints.length; i++) { + spectrumMin.push({ + start: minBreakPoints[i], + end: minBreakPoints[i] * (1 + percentage) + }); + } + + for (i = 0; i < maxBreakPoints.length; i++) { + spectrumMax.push({ + start: maxBreakPoints[i] * (1 - percentage), + end: maxBreakPoints[i] + }); + } + + return mergeSpectrums(spectrumMin, spectrumMax); +} + +function analyzeBreakPoints(test) { + test.data.minBreakPoints.sort(sort); + test.data.maxBreakPoints.sort(sort); + + removeDuplicates(test.data.minBreakPoints); + removeDuplicates(test.data.maxBreakPoints); + test.data.spectrum = createSpectrum(test); +} + + +function check(website) { + var deferred = new Deferred(); + + // Let the main loop run before we do this work + setImmediate(function() { + var test = { + testName: "responsive", + passed: false, + data: { + minBreakPoints: [], + maxBreakPoints: [], + spectrum: [] + } + }, + passed; + + for (var i = 0; i < website.css.length; i++) { + //CSS files can be included indicating directly the media. We check first for that: + //Ex: + var media = website.css[i].media; + if (media && (media.indexOf('min-width') !== -1 || media.indexOf('max-width') !== -1)) { + test.passed = true; + analyzeMediaQuery(media, test); + } else { + passed = checkCSS(website.css[i].css.cssRules, test); + if (passed && !test.passed) { + test.passed = true; + } + } + } + + if (test.data.minBreakPoints.length > 0 || test.data.maxBreakPoints.length > 0) { + analyzeBreakPoints(test); + } + + deferred.resolve(test); + }); + + return deferred.promise; +} + +module.exports.check = check; diff --git a/lib/checks/check-touch.js b/lib/checks/check-touch.js new file mode 100644 index 0000000..a53363d --- /dev/null +++ b/lib/checks/check-touch.js @@ -0,0 +1,137 @@ + /** + * Description: Look for known patterns of use for the Pointers API in CSS and JS files. + * (Keep in mind that files added dynamically are not analyzed.) + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var Deferred = require('promised-io').Deferred, + cssRules = ['-ms-touch-action', + '-ms-scroll-snap-points-x', + '-ms-scroll-snap-points-y', + '-ms-scroll-snap-type', + '-ms-scroll-snap-x', + '-ms-scroll-snap-y', + '-ms-scroll-chaining', + '-ms-content-zooming', + '-ms-content-zoom-limit', + '-ms-content-zoom-limit-max', + '-ms-content-zoom-limit-min', + '-ms-content-zoom-chaining', + '-ms-content-zoom-snap-points', + '-ms-content-zoom-snap-type', + '-ms-content-zoom-snap'], + jsRules = [/MSgesture/g, + /MSPointer/g, + /msContentZoomFactor/g, + /navigator.msPointerEnabled/g, + /navigator.msMaxTouchPoints/g]; + +function checkCSS(css) { + var selectors = css.css.cssRules, + styleToCheck, + styleChecking, + selectorStyles, + currentStyle, + containsRule, + touchImplemented = false; + + for (var selectorIndex = 0; selectorIndex < selectors.length; selectorIndex++) { + //if the selector is a media it will not have the property style + //it will have another array of cssRules but they selectors should be + //also in the common cssRules + if (touchImplemented) { + break; + } + + if (selectors[selectorIndex].style) { + selectorStyles = selectors[selectorIndex].style; + + for (var selectorStylesIndex = 0; selectorStylesIndex < selectorStyles.length; selectorStylesIndex++) { + if (touchImplemented) { + break; + } + currentStyle = selectorStyles[selectorStylesIndex]; + + for (var cssRuleIndex = 0; cssRuleIndex < cssRules.length; cssRuleIndex++) { + styleToCheck = cssRules[cssRuleIndex]; + styleChecking = selectorStyles[currentStyle]; + + containsRule = currentStyle.indexOf(styleToCheck); + if (containsRule !== -1) { + touchImplemented = true; + break; + } + } + } + } + } + return touchImplemented; +} + +function checkJS(js) { + var touchImplemented = false; + for (var i = 0; i < jsRules.length; i++) { + touchImplemented = jsRules[i].test(js.code); + if (touchImplemented) { + break; + } + } + + return touchImplemented; +} + + +function check(website) { + var deferred = new Deferred(), + result = []; + + var test = { + testName: "touch", + passed: false + }; + + for (var i = 0; i < website.css.length; i++) { + result.push(checkCSS(website.css[i])); + } + + for (i = 0; i < result.length; i++) { + if (result[i]) { + test.passed = true; + break; + } + } + + if (!test.passed) { + for (i = 0; i < website.js.length; i++) { + result.push(checkJS(website.js[i])); + } + + for (i = 0; i < result.length; i++) { + if (result[i]) { + test.passed = true; + break; + } + } + } + + deferred.resolve(test); + + + return deferred.promise; +} + +module.exports.check = check; \ No newline at end of file diff --git a/lib/checks/compatlist.js b/lib/checks/compatlist.js new file mode 100644 index 0000000..c557371 --- /dev/null +++ b/lib/checks/compatlist.js @@ -0,0 +1,208 @@ +/** + * Description: Downloads the Microsoft CV lists, which we query during testing to see + * if a website has to be run in compat mode or has any ActiveX/Flash issues. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var compatListUrlIE10 = "https://iecvlist.microsoft.com/ie10/1152921505002013023/iecompatviewlist.xml", + compatListUrlIE9 = "http://ie9cvlist.ie.microsoft.com/ie9CompatViewList.xml", + fs = require('fs'), + request = require('request'), + xml2js = require('xml2js'), + parser = new xml2js.Parser(), + Deferred = require('promised-io').Deferred, + ready, + cvlist = {}, + cvlistFile = 'cvlists.json', + creationStamp, + expiration = 86400000; //1 day in milliseconds + +request = request.defaults({ + jar: false, + headers: { + 'Accept-Language': 'en-US,en;q=0.5', + 'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)'}}); + +function saveCVList() { + var deferred = new Deferred(); + fs.writeFile(cvlistFile, JSON.stringify(cvlist), function(err) { + if (err) { + console.log(err); + deferred.reject(err); + } else { + deferred.resolve(); + } + }); + return deferred.promise; +} + +function getCompatListUrl(ieversion) { + var cvlistUrl; + switch (ieversion) { + case 'ie10': + cvlistUrl = compatListUrlIE10; + break; + case 'ie9': + cvlistUrl = compatListUrlIE9; + break; + default: + cvlistUrl = compatListUrlIE9; + break; + } + return cvlistUrl; +} + +function addExplicitFlashBlockedSites(result) { + var array, + domain; + if (result.iecompatlistdescription && result.iecompatlistdescription.NoFlash) { + array = result.iecompatlistdescription.NoFlash[0].domain; + for (var i = 0; i < array.length; i++) { + domain = array[i]._ || array[i]; + if (domain) { + domain = domain.trim().replace('-', '_'); + if (cvlist[domain]) { + cvlist[domain].noFlash = true; + } else { + cvlist[domain] = { + noFlash: true + }; + } + } + } + } +} + +function addExplicitFlashApprovalSites(result) { + var array, + domain; + if (result.iecompatlistdescription && result.iecompatlistdescription.Flash) { + array = result.iecompatlistdescription.Flash[0].domain; + for (var i = 0; i < array.length; i++) { + domain = array[i]._ || array[i]; + if (domain) { + domain = domain.trim().replace('-', '_'); + if (cvlist[domain]) { + cvlist[domain].flash = true; + } else { + cvlist[domain] = { + flash: true + }; + } + } + } + } +} + +function addCompatSites(ieversion, result) { + var array = ieversion.indexOf('1') !== -1 ? result.iecompatlistdescription.domain : result.ie9compatlistdescription.domain; + + for (var i = 0; i < array.length; i++) { + if (array[i]._) { + cvlist[array[i]._.replace('-', '_')] = array[i].$; + } else { + cvlist[array[i]] = {}; + } + } +} + +function downloadCVlist(ieversion) { + var deferred = new Deferred(), + cvlistUrl = getCompatListUrl(ieversion); + + request(cvlistUrl, function(error, response, body) { + if (!error && response.statusCode === 200) { + parser.parseString(body, function(err, result) { + if (err) { + deferred.reject(err); + return; + } + + addCompatSites(ieversion, result); + addExplicitFlashApprovalSites(result); + addExplicitFlashBlockedSites(result); + + deferred.resolve(cvlist); + }); + } else { + deferred.reject(error); + } + }); + + return deferred.promise; +} + +function downloadCVlists() { + var deferred = new Deferred(); + + downloadCVlist('ie10') + .then(function() { + downloadCVlist('ie9'); + }) + .then(saveCVList).then(function() { + deferred.resolve(); + }); + + return deferred.promise; +} + +function getList() { + var deferred = new Deferred(); + ready = false; + + if (typeof cvlist === "object" && Object.keys(cvlist).length > 0 && Date.now() - creationStamp < expiration) { + deferred.resolve(cvlist); + } else { + fs.exists(cvlistFile, function(exists) { + if (exists) { + fs.stat(cvlistFile, function(err, stats) { + if (err) { + deferred.reject(err); + } else { + if (Date.now() - stats.mtime.getTime() > expiration) { + downloadCVlists().then(function() { + deferred.resolve(cvlist); + }, function(err) { + deferred.reject(err); + }); + } else { + cvlist = fs.readFile(cvlistFile, function(err, data) { + if (err) { + cvlist = {}; + deferred.reject(err); + } + + cvlist = JSON.parse(data); + deferred.resolve(cvlist); + }); + } + } + }); + } else { + downloadCVlists().then(function() { + deferred.resolve(cvlist); + }, function(err) { + deferred.reject(err); + }); + } + }); + } + + return deferred.promise; +} + +module.exports.getList = getList; \ No newline at end of file diff --git a/lib/checks/loadchecks.js b/lib/checks/loadchecks.js new file mode 100644 index 0000000..76f1f46 --- /dev/null +++ b/lib/checks/loadchecks.js @@ -0,0 +1,31 @@ + /** + * Description: Load all the tests ("checks") that are to be done in the scan. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var fs = require('fs'), + tests = [], + path = require('path'); + + //path = process.cwd().indexOf('lib') !== -1 ? './checks/' : './lib/checks/'; +fs.readdirSync(__dirname).forEach(function (file) { + if (file.indexOf('check') === 0) { + tests.push(require(path.join(__dirname, file))); + } +}); + +module.exports.tests = tests; \ No newline at end of file diff --git a/lib/checks/loadcss.js b/lib/checks/loadcss.js new file mode 100644 index 0000000..afedc88 --- /dev/null +++ b/lib/checks/loadcss.js @@ -0,0 +1,153 @@ +/** + * Description: Load the external CSS files and embedded CSS to make them available + * for further analysis. Files added dynamically are not analyzed. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var request = require('request'), + cssom = require('cssom'), + promised = require("promised-io/promise"), + Deferred = require('promised-io').Deferred, + url = require('url'), + cssPromises; + +request = request.defaults({ + jar: false, + headers: { + 'Accept-Language': 'en-US,en;q=0.5', + 'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)'}}); + +/* + * CSSOM normally eliminates duplicate declarations in a rule, accepting only the last. + * In our case we want to analyze _all_ declarations; this patch allows us to see dups. + * See https://github.com/NV/CSSOM/issues/16 + */ +(function(){ + var oldSet = cssom.CSSStyleDeclaration.prototype.setProperty; + cssom.CSSStyleDeclaration.prototype.setProperty = function(name, value, priority) { + // When there are multiple props, save their values in an array prefixed by '~' + if ( this[name] ) { + if ( !this["~" + name] ) { + this["~" + name] = []; + } + this["~" + name].push(value); + } + return oldSet.apply(this, arguments); + }; +})(); + +// parseCSS and parseCSSfromUrl call each other so we tell jshint to cool it +/*jshint latedef: false*/ + +function parseCSSfromUrl(cssUrl, media, auth) { + var deferred = new Deferred(), + params = { + uri: cssUrl, + headers: {'Accept': 'text/html, application/xhtml+xml, */*'} + }; + if ( auth ) { + params.auth = auth; + } + request(params, function (error, response, body) { + if (!error && response.statusCode === 200) { + parseCSS(body, cssUrl, media, false, auth).then(function(results){ + deferred.resolve(results); + }); + } else { + console.warn("Request for " + cssUrl + " returned " + error); + // Silently skip the troublesome file + deferred.resolve([]); + } + } + ); + + return deferred.promise; +} + +function parseCSS(text, cssUrl, media, isInline, auth) { + var sheet, + deferred = new Deferred(), + imports = []; + try { + // Treat the current text as a resolved promise in our imports list + sheet = cssom.parse(text); + imports.push({cssUrl: isInline? "embed" : cssUrl, css: sheet, media: media, cssBody: text}); + // Find @import statements in the rules + for ( var i=0; i < sheet.cssRules.length; i++ ) { + var rule = sheet.cssRules[i]; + if ( rule.type === 3 && rule.href ) { + // http://www.w3.org/TR/CSS21/syndata.html#uri + // "For CSS style sheets, the base URI is that of the style sheet..." + imports.push(parseCSSfromUrl(url.resolve(cssUrl, rule.href), rule.media.mediaText, auth)); + } + } + promised.all(imports).then(function(results){ + // Results may be different because @imports may have @imported other files (ad nauseum); + // the .concat() will flatten one level of nested arrays which is all we need + deferred.resolve([].concat.apply([], results)); + }); + } catch(ex) { + console.warn("CSS from " + cssUrl + " threw " + ex); + // Silently skip the troublesome CSS + deferred.resolve([]); + } + return deferred.promise; +} + +function check(website) { + var deferred = new Deferred(), + cssLinks = website.$('link[rel="stylesheet"]'), + cssHref, + cssUrl, + cssTags; + + cssPromises = []; + + for (var i = 0; i < cssLinks.length; i++) { + cssHref = cssLinks[i].attribs.href; + + // If the attributes don't have a space then the library doesn't parse it correctly. + if (cssHref) { + cssUrl = url.resolve(website.url, cssHref); + cssPromises.push(parseCSSfromUrl(url.resolve(website.url, cssUrl), cssLinks[i].attribs.media, website.auth)); + } + } + + cssTags = website.$('style'); + for (i = 0; i < cssTags.length; i++) { + if (cssTags[i].children && cssTags[i].children.length > 0 && cssTags[i].children[0].data) { + cssPromises.push(parseCSS(cssTags[i].children[0].data, website.url, cssTags[i].attribs.media, true, website.auth)); + } + } + + if (cssPromises.length > 0) { + promised.all(cssPromises).then(function (array) { + // Flatten the nested arrays + array = [].concat.apply([], array); + deferred.resolve(array); + }, function () { + deferred.reject(); + }); + } else { + // No style sheets + deferred.resolve([]); + } + + return deferred.promise; +} + +module.exports.loadCssFiles = check; \ No newline at end of file diff --git a/lib/checks/loadjs.js b/lib/checks/loadjs.js new file mode 100644 index 0000000..c8c3f33 --- /dev/null +++ b/lib/checks/loadjs.js @@ -0,0 +1,97 @@ +/** + * Description: Load the external JavaScript files and embedded script blocks to make + * them available for further analysis. Files added dynamically are not analyzed. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var request = require('request'), + promised = require("promised-io/promise"), + Deferred = require('promised-io').Deferred, + url = require('url'), + jsPromises; + +request = request.defaults({ + jar: false, + headers: { + 'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)'}}); + +function downloadJS(jsUrl, jsHref, auth) { + var jsDeferred = new Deferred(), + parameters = {uri: jsUrl, + headers: { + 'Accept': 'text/html, application/xhtml+xml, */*'}}; + + if (auth) { + parameters.auth = auth; + } + + request(parameters, function (error, response, body) { + if (!error && response.statusCode === 200) { + response.on('error', function (e) { + console.log('loading CSS' + e); + }); + jsDeferred.resolve({url: url, href: jsHref, finalUrl: response.request.href, code: body}); + } else { + jsDeferred.resolve({}); + } + }); + + return jsDeferred.promise; +} + +function check(website) { + var deferred = new Deferred(), + js = []; + + var jsLinks = website.$('script'); + jsPromises = []; + + for (var i = 0; i < jsLinks.length; i++) { + var jsHref = jsLinks[i].attribs.src, + jsUrl; + + if (jsHref) { + if (jsHref) { + jsUrl = url.resolve(website.url, jsHref); + jsPromises.push(downloadJS(jsUrl, jsHref, website.auth)); + } + } else if (jsLinks[i].children[0] && jsLinks[i].children[0].data) { + // Some + + + + +

Modern.ie Local Scan

+ +
+

Scan a page

+ +

Enter the URL of the page to be scanned. If the page requires authentication for access, enter the username and password; otherwise leave those fields blank. (HTTP Basic and Digest authentication methods are supported.)

+ +
+ +
+ +
+

Generate report

+ +

+ The scan is complete and the report is ready to be generated. + Press the button below to submit the scan data to the Modern.ie site and create the report. +

+ +
+ + +
+ +

See what will be submitted

+

+
+	
+ +
+
+ + + diff --git a/lib/service.js b/lib/service.js new file mode 100644 index 0000000..8d0a7c4 --- /dev/null +++ b/lib/service.js @@ -0,0 +1,193 @@ +/* + * Modern.IE main service; runs under node.js. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var url = require('url'), + fs = require('fs'), + port = process.env.PORT || 1337, + request = require('request'), + cheerio = require('cheerio'), + promises = require('promised-io/promise'), + Deferred = require('promised-io').Deferred, + cssLoader = require('./checks/loadcss.js'), + jsLoader = require('./checks/loadjs.js'), + tests = require('./checks/loadchecks.js').tests, + http = require('http'), + path = require('path'), + zlib = require('zlib'), + sanitize = require('validator').sanitize, + charset = 'utf-8', + querystring = require('querystring'), + request = request.defaults({followAllRedirects: true, + encoding: null, + jar: false, + //proxy: 'http://localhost:8888', + headers: { + 'Accept': 'text/html, application/xhtml+xml, */*', + 'Accept-Encoding': 'gzip,deflate', + 'Accept-Language': 'en-US,en;q=0.5', + 'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)'}}); + +/* + * Since several tests need HTML/JS/CSS content, fetch it all at once + * before calling any of the tests. Note that the tests still could + * retrieve additional content async, since they return a promise. + */ +function analyze(data, body, res) { + var results = {}; + + var website = { + url: url.parse(data.uri), + auth: data.auth, + content: body, + $: cheerio.load(body, { lowerCaseTags: true, lowerCaseAttributeNames: true }) + }; + + cssLoader.loadCssFiles(website).then(function (css) { + website.css = css; + + jsLoader.loadjsFiles(website).then(function (js) { + var promisesTests = []; + website.js = js; + + for (var i = 0; i < tests.length; i++) { + // Call each test and save its returned promise + promisesTests.push(tests[i].check(website)); + } + + promises.all(promisesTests).then(function (array) { + // Generate final results and send back the response + for (var i = 0; i < array.length; i++) { + results[array[i].testName] = array[i]; + } + res.writeHeader(200, {"Content-Type": "application/json", + "X-Content-Type-Options": "nosniff" }); + res.write(JSON.stringify({url: data, results: results})); + res.end(); + }); + }); + + }, function (error) { + res.writeHeader(500, {"Content-Type": "text/plain"}); + res.write(JSON.stringify(error) + '\n'); + res.end(); + }); +} + +function remoteErrorResponse(response, statusCode, message) { + response.writeHead(200, {"Content-Type": "application/json"}); + response.write(JSON.stringify({statusCode: statusCode, message: message})); + response.end(); +} + +function returnMainPage(req, response) { + fs.readFile(path.join(__dirname, "index.html"), function (err, data) { + if (!err) { + response.writeHeader(200, {"Content-Type": "text/html"}); + + } else { + response.writeHeader(500, {"Content-Type": "text/plain"}); + data = "Server error: " + err + "\n"; + } + response.write(data); + response.end(); + }); +} + +function getBody(res, body) { + var deferred = new Deferred(); + if (res.headers['content-encoding']) { + if (res.headers['content-encoding'] === 'gzip') { + zlib.gunzip(body, function (err, data) { + if (!err) { + deferred.resolve(data.toString(charset)); + } else { + deferred.reject('Error found: can\'t gunzip content ' + err); + } + }); + } else if (res.headers['content-encoding'] === 'deflate') { + zlib.inflate(body, function (err, data) { + if (!err) { + deferred.resolve(data.toString(charset)); + } else { + deferred.reject('Error found: can\'t deflate content' + err); + } + }); + } else { + deferred.reject("Unknown content encoding: "+res.headers['content-encoding']); + } + } else { + if (body) { + deferred.resolve(body.toString(charset)); + } else { + deferred.reject('Error found: Empty body'); + } + } + return deferred.promise; +} + +function processResponse(response, auth) { + return function (err, res, body) { + if (!err && res.statusCode === 200) { + getBody(res, body).then(function (result) { + analyze({uri: res.request.href, auth: auth}, result, response); + }, + function (error) { + remoteErrorResponse(response, res.statusCode, error); + }); + } else { + remoteErrorResponse(response, res ? res.statusCode : 'No response', 'Error found: ' + err); + } + }; +} + +function handleRequest(req, response) { + if (req.url === '/') { + // Return the "local scan" page + returnMainPage(req, response); + return; + } + + var requestUrl = url.parse(req.url), + parameters = querystring.parse(requestUrl.query), + urlToAnalyze = sanitize(decodeURIComponent(parameters.url)).xss(), + user = sanitize(decodeURIComponent(parameters.user)).xss(), + password = sanitize(decodeURIComponent(parameters.password)).xss(), + auth; + + // If the request gave a user/pass, send it along. Wait for 401 response before sending passwords. + if (user !== "undefined" && password !== "undefined") { + auth = { + 'user': user, + 'pass': password, + 'sendImmediately': false + }; + request(urlToAnalyze, + {auth: auth}, + processResponse(response, auth)); + } else { + request(urlToAnalyze, processResponse(response)); + } +} + +http.createServer(handleRequest).listen(port); + +console.log('Server started on port ' + port); +console.log('To scan a private url go to http://localhost:' + port + '/ and follow the instructions'); + +module.exports.port = port; \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..8791cc1 --- /dev/null +++ b/package.json @@ -0,0 +1,51 @@ +{ + "name": "Modern.ie", + "description": "Modern.ie will analyze a website and give hints on how to be more standards compliant", + "version": "0.3.0", + "homepage": "https://github.com/InternetExplorer/modern.IE-static-code-scan", + "author": { + "name": "Microsoft" + }, + "repository": { + "type": "git", + "url": "https://github.com/InternetExplorer/modern.IE-static-code-scan.git" + }, + "bugs": { + "url": "https://github.com/InternetExplorer/modern.IE-static-code-scan/issues" + }, + "licenses": [ + { + "type": "Apache v2 License", + "url": "https://github.com/InternetExplorer/modern.IE-static-code-scan/blob/master/LICENSE" + } + ], + "main": "modernie", + "engines": { + "node": "0.10.x", + "npm": "1.2.x" + }, + "scripts": { + "start": "node lib/service.js", + "test": "grunt test" + }, + "dependencies": { + "cheerio": ">=0.10.1", + "request": "2.20.x", + "promised-io": ">=0.3.0", + "xml2js": ">=0.2.0", + "cssom": ">=0.2.5", + "jsdom": "~0.2.19", + "ya-csv": "~0.9.2", + "validator": "~0.4.22", + "http-agent": ">=0.1.2", + "hyperquest": "~0.1.4" + }, + "devDependencies": { + "grunt": "~0.4.1", + "grunt-contrib-nodeunit": "~0.1.2", + "grunt-contrib-watch": "~0.3.1", + "grunt-contrib-jshint": "~0.2.0", + "express": "~3.2.4" + }, + "keywords": [] +} diff --git a/static/auth-1.html b/static/auth-1.html new file mode 100644 index 0000000..eed66e9 --- /dev/null +++ b/static/auth-1.html @@ -0,0 +1,11 @@ + + + + + + + +

Simple page with basic auth

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/auth-2.html b/static/auth-2.html new file mode 100644 index 0000000..92fd7b2 --- /dev/null +++ b/static/auth-2.html @@ -0,0 +1,12 @@ + + + + + + + + +

Page with resources and basic auth

+

Expected result: Fails js version

+ + \ No newline at end of file diff --git a/static/auth-3.html b/static/auth-3.html new file mode 100644 index 0000000..8a836fe --- /dev/null +++ b/static/auth-3.html @@ -0,0 +1,12 @@ + + + + + + + + +

Page with resources and basic auth

+

Expected result: Passes Touch

+ + \ No newline at end of file diff --git a/static/auth-4.html b/static/auth-4.html new file mode 100644 index 0000000..1db15c5 --- /dev/null +++ b/static/auth-4.html @@ -0,0 +1,13 @@ + + + + + + + + + +

Page with resources and basic auth

+

Expected result: Passes Touch, fails js libs

+ + \ No newline at end of file diff --git a/static/auth-server.js b/static/auth-server.js new file mode 100644 index 0000000..f105acc --- /dev/null +++ b/static/auth-server.js @@ -0,0 +1,34 @@ +/** + * Description: Test that local scans can use authenticated (user/password) pages. + * At the moment, only supports Basic and Digest auth courtesy of node.js request. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var express = require('express'), + app = express(), + port = process.env.PORT || 1000; + +// Authenticator +app.use(express.basicAuth(function (user, pass) { + return user === "user" && pass === "password"; +})); + +app.use("/", express.static(__dirname + "/")); + +app.listen(port); + +module.exports.port = port; \ No newline at end of file diff --git a/static/buglist-1.html b/static/buglist-1.html new file mode 100644 index 0000000..789f961 --- /dev/null +++ b/static/buglist-1.html @@ -0,0 +1,11 @@ + + + + + + + +

Not in bug list

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/compat-1.html b/static/compat-1.html new file mode 100644 index 0000000..9ec20ee --- /dev/null +++ b/static/compat-1.html @@ -0,0 +1,11 @@ + + + + + + + +

No compat tag

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/compat-10.html b/static/compat-10.html new file mode 100644 index 0000000..9e358c9 --- /dev/null +++ b/static/compat-10.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=8,edge

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/compat-11.html b/static/compat-11.html new file mode 100644 index 0000000..9c206ff --- /dev/null +++ b/static/compat-11.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=EmulateIE9,edge

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/compat-12.html b/static/compat-12.html new file mode 100644 index 0000000..47a3506 --- /dev/null +++ b/static/compat-12.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=chrome=1

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-13.html b/static/compat-13.html new file mode 100644 index 0000000..38cb58e --- /dev/null +++ b/static/compat-13.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=EmulateIE10

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-14.html b/static/compat-14.html new file mode 100644 index 0000000..62cd6b1 --- /dev/null +++ b/static/compat-14.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=EmulateIE8 lower case

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-15.html b/static/compat-15.html new file mode 100644 index 0000000..df5a7db --- /dev/null +++ b/static/compat-15.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=EmulateIE8 bizarre case

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-16.html b/static/compat-16.html new file mode 100644 index 0000000..4ff7a4b --- /dev/null +++ b/static/compat-16.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=edge bizarre case

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/compat-2.html b/static/compat-2.html new file mode 100644 index 0000000..70a0989 --- /dev/null +++ b/static/compat-2.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=5

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-3.html b/static/compat-3.html new file mode 100644 index 0000000..9d5a1fc --- /dev/null +++ b/static/compat-3.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=EmulateIE7

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-4.html b/static/compat-4.html new file mode 100644 index 0000000..7c092b8 --- /dev/null +++ b/static/compat-4.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=7

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-5.html b/static/compat-5.html new file mode 100644 index 0000000..1823819 --- /dev/null +++ b/static/compat-5.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=EmulateIE8

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-6.html b/static/compat-6.html new file mode 100644 index 0000000..affb3b7 --- /dev/null +++ b/static/compat-6.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=8

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-7.html b/static/compat-7.html new file mode 100644 index 0000000..d68f70c --- /dev/null +++ b/static/compat-7.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=EmulateIE9

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-8.html b/static/compat-8.html new file mode 100644 index 0000000..1926f36 --- /dev/null +++ b/static/compat-8.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=9

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/compat-9.html b/static/compat-9.html new file mode 100644 index 0000000..8d46261 --- /dev/null +++ b/static/compat-9.html @@ -0,0 +1,12 @@ + + + + + + + + +

IE=edge

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/css/animations.css b/static/css/animations.css new file mode 100644 index 0000000..d5edb31 --- /dev/null +++ b/static/css/animations.css @@ -0,0 +1,8 @@ +div +{ + -webkit-animation: myfirst 5s; + -moz-animation: myfirst 5s; + -o-animation: myfirst 5s; + -ms-animation: myfirst 5s; + animation: myfirst 5s; +} \ No newline at end of file diff --git a/static/css/duplicateWidths.css b/static/css/duplicateWidths.css new file mode 100644 index 0000000..0e8cbcb --- /dev/null +++ b/static/css/duplicateWidths.css @@ -0,0 +1,40 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; +} + +@media only screen and (min-width: 780px) { + #id{ + width: 650px; + background-color: #F0F0F0; + } +} + +@media only screen and (min-width: 480px) { + #id{ + width: 600px; + background-color: #00FF00; + } +} + +@media only screen and (max-width: 479px) { + #id{ + width: 200px; + background-color: #0000FF; + } +} + +@media only screen and (min-width: 480px) { + #id{ + width: 480px; + background-color: #00FF00; + } +} \ No newline at end of file diff --git a/static/css/gradients.css b/static/css/gradients.css new file mode 100644 index 0000000..2abe86e --- /dev/null +++ b/static/css/gradients.css @@ -0,0 +1,17 @@ +.linearGradient{ + background: -moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* IE10+ */ + background: linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* W3C */ +} + +.radialGradient{ + background: -moz-radial-gradient(center, ellipse cover, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%); /* FF3.6+ */ + background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8)); /* Chrome,Safari4+ */ + background: -webkit-radial-gradient(center, ellipse cover, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Chrome10+,Safari5.1+ */ + background: -o-radial-gradient(center, ellipse cover, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Opera 12+ */ + background: -ms-radial-gradient(center, ellipse cover, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* IE10+ */ + background: radial-gradient(ellipse at center, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* W3C */ +} \ No newline at end of file diff --git a/static/css/importSingle.css b/static/css/importSingle.css new file mode 100644 index 0000000..face445 --- /dev/null +++ b/static/css/importSingle.css @@ -0,0 +1 @@ +@import 'unprefixed.css'; /* relative to this file */ \ No newline at end of file diff --git a/static/css/importUrlDouble.css b/static/css/importUrlDouble.css new file mode 100644 index 0000000..61b3bf9 --- /dev/null +++ b/static/css/importUrlDouble.css @@ -0,0 +1 @@ +@import url("unprefixed.css"); /* relative to this file */ \ No newline at end of file diff --git a/static/css/maxWidth.css b/static/css/maxWidth.css new file mode 100644 index 0000000..31d99d8 --- /dev/null +++ b/static/css/maxWidth.css @@ -0,0 +1,19 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; +} + +@media only screen and (max-width: 480px) { + #id{ + width: 200px; + background-color: #0000FF; + } +} \ No newline at end of file diff --git a/static/css/maxWidthComplexSpectrum.css b/static/css/maxWidthComplexSpectrum.css new file mode 100644 index 0000000..8a2e20a --- /dev/null +++ b/static/css/maxWidthComplexSpectrum.css @@ -0,0 +1,33 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; +} + +@media only screen and (max-width: 440px) { + #id{ + width: 600px; + background-color: #00FF00; + } +} + +@media only screen and (max-width: 360px) { + #id{ + width: 300px; + background-color: #00FF00; + } +} + +@media only screen and (max-width: 720px) { + #id{ + width: 700px; + background-color: #00FF00; + } +} \ No newline at end of file diff --git a/static/css/minMaxWidth.css b/static/css/minMaxWidth.css new file mode 100644 index 0000000..34684d2 --- /dev/null +++ b/static/css/minMaxWidth.css @@ -0,0 +1,33 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; +} + +@media only screen and (min-width: 480px) { + #id{ + width: 600px; + background-color: #00FF00; + } +} + +@media only screen and (min-width: 780px) { + #id{ + width: 650px; + background-color: #F0F0F0; + } +} + +@media only screen and (max-width: 479px) { + #id{ + width: 200px; + background-color: #0000FF; + } +} \ No newline at end of file diff --git a/static/css/minMaxWidth2.css b/static/css/minMaxWidth2.css new file mode 100644 index 0000000..c0d9ccc --- /dev/null +++ b/static/css/minMaxWidth2.css @@ -0,0 +1,33 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; +} + +@media only screen and (min-width: 780px) { + #id{ + width: 650px; + background-color: #F0F0F0; + } +} + +@media only screen and (min-width: 480px) { + #id{ + width: 600px; + background-color: #00FF00; + } +} + +@media only screen and (max-width: 479px) { + #id{ + width: 200px; + background-color: #0000FF; + } +} \ No newline at end of file diff --git a/static/css/minMaxWidthEM.css b/static/css/minMaxWidthEM.css new file mode 100644 index 0000000..3d29233 --- /dev/null +++ b/static/css/minMaxWidthEM.css @@ -0,0 +1,33 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; +} + +@media only screen and (min-width: 30em) { + #id{ + width: 600px; + background-color: #00FF00; + } +} + +@media only screen and (min-width: 48.75em) { + #id{ + width: 650px; + background-color: #F0F0F0; + } +} + +@media only screen and (max-width: 30em) { + #id{ + width: 200px; + background-color: #0000FF; + } +} \ No newline at end of file diff --git a/static/css/minWidth.css b/static/css/minWidth.css new file mode 100644 index 0000000..38b1ca3 --- /dev/null +++ b/static/css/minWidth.css @@ -0,0 +1,19 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; +} + +@media only screen and (min-width: 480px) { + #id{ + width: 600px; + background-color: #00FF00; + } +} \ No newline at end of file diff --git a/static/css/minWidthComplexSpectrum.css b/static/css/minWidthComplexSpectrum.css new file mode 100644 index 0000000..f219674 --- /dev/null +++ b/static/css/minWidthComplexSpectrum.css @@ -0,0 +1,33 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; +} + +@media only screen and (min-width: 440px) { + #id{ + width: 600px; + background-color: #00FF00; + } +} + +@media only screen and (min-width: 360px) { + #id{ + width: 300px; + background-color: #00FF00; + } +} + +@media only screen and (min-width: 720px) { + #id{ + width: 700px; + background-color: #00FF00; + } +} \ No newline at end of file diff --git a/static/css/minWidthComplexSpectrum2.css b/static/css/minWidthComplexSpectrum2.css new file mode 100644 index 0000000..e3fbc8b --- /dev/null +++ b/static/css/minWidthComplexSpectrum2.css @@ -0,0 +1,33 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; +} + +@media only screen and (min-width: 100px) { + #id{ + width: 600px; + background-color: #00FF00; + } +} + +@media only screen and (min-width: 550px) { + #id{ + width: 300px; + background-color: #00FF00; + } +} + +@media only screen and (min-width: 1120px) { + #id{ + width: 700px; + background-color: #00FF00; + } +} \ No newline at end of file diff --git a/static/css/missingAnimations.css b/static/css/missingAnimations.css new file mode 100644 index 0000000..7002d72 --- /dev/null +++ b/static/css/missingAnimations.css @@ -0,0 +1,4 @@ +div +{ + animation: myfirst 5s; +} \ No newline at end of file diff --git a/static/css/missingGradients.css b/static/css/missingGradients.css new file mode 100644 index 0000000..006543f --- /dev/null +++ b/static/css/missingGradients.css @@ -0,0 +1,14 @@ +/* + * This comment is here to add some lines before the CSS rules. + */ +.linearGradient{ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8)); /* Chrome,Safari4+ */ +/* background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); IE10+ */ + background: linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* W3C */ +} + +.radialGradient{ + background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8)); /* Chrome,Safari4+ */ +/* background: -ms-radial-gradient(center, ellipse cover, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* IE10+ */ + background: radial-gradient(ellipse at center, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* W3C */ +} \ No newline at end of file diff --git a/static/css/missingTransforms.css b/static/css/missingTransforms.css new file mode 100644 index 0000000..4850be0 --- /dev/null +++ b/static/css/missingTransforms.css @@ -0,0 +1,3 @@ +div{ + -webkit-transform: matrix3d(0.359127, -0.469472, 0.806613, 0, 0.190951, 0.882948, 0.428884, 0, -0.913545, 0, 0.406737, 0, 0, 0, 0, 1); +} \ No newline at end of file diff --git a/static/css/missingTransitions.css b/static/css/missingTransitions.css new file mode 100644 index 0000000..3175a73 --- /dev/null +++ b/static/css/missingTransitions.css @@ -0,0 +1,34 @@ +div { + -webkit-transition: all 1s ease-in-out; + -moz-transition: all 1s ease-in-out; + -o-transition: all 1s ease-in-out; + -ms-transition: all 1s ease-in-out; +} + +.property { + -webkit-transition-property: top, left; + -o-transition-property: top, left; + -ms-transition-property: top, left; + transition-property: top, left; +} + +.duration { + -moz-transition-duration: 1s, 1s; + -o-transition-duration: 1s, 1s; + -ms-transition-duration: 1s, 1s; + transition-duration: 1s, 1s; +} + +.delay { + -webkit-transition-delay: 0s, 1s; + -moz-transition-delay: 0s, 1s; + -o-transition-delay: 0s, 1s; + transition-delay: 0s, 1s; +} + +.timing { + -webkit-timing-function: linear; + -moz-timing-function: linear; + -ms-timing-function: linear; + timing-function: linear; +} \ No newline at end of file diff --git a/static/css/msTouch.css b/static/css/msTouch.css new file mode 100644 index 0000000..c1f4895 --- /dev/null +++ b/static/css/msTouch.css @@ -0,0 +1,13 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; + -ms-touch-action: none; +} \ No newline at end of file diff --git a/static/css/scrollSnap.css b/static/css/scrollSnap.css new file mode 100644 index 0000000..6c1659d --- /dev/null +++ b/static/css/scrollSnap.css @@ -0,0 +1,13 @@ +body { + width: 800px; + font-family: 'Segoe UI'; + font-size: 16px; +} + +#id { + float: left; + width: 300px; + height: 200px; + background-color: #FF0000; + -ms-scroll-snap-points-x: snapList(100%, 200%, 300%); +} \ No newline at end of file diff --git a/static/css/simpleStyle.css b/static/css/simpleStyle.css new file mode 100644 index 0000000..b1e957f --- /dev/null +++ b/static/css/simpleStyle.css @@ -0,0 +1,12 @@ +body { + width:800px; + font-family:'Segoe UI'; + font-size: 16px; +} + +#id { + float:left; + width:300px; + height:200px; + background-color: #FF0000; +} \ No newline at end of file diff --git a/static/css/transforms.css b/static/css/transforms.css new file mode 100644 index 0000000..32836a7 --- /dev/null +++ b/static/css/transforms.css @@ -0,0 +1,11 @@ + + +/* comment and extra newlines above */ + +div{ + -webkit-transform: matrix3d(0.359127, -0.469472, 0.806613, 0, 0.190951, 0.882948, 0.428884, 0, -0.913545, 0, 0.406737, 0, 0, 0, 0, 1); + -moz-transform:matrix3d(0.359127, -0.469472, 0.806613, 0, 0.190951, 0.882948, 0.428884, 0, -0.913545, 0, 0.406737, 0, 0, 0, 0, 1); + -o-transform:matrix3d(0.359127, -0.469472, 0.806613, 0, 0.190951, 0.882948, 0.428884, 0, -0.913545, 0, 0.406737, 0, 0, 0, 0, 1); + -ms-transform:matrix3d(0.359127, -0.469472, 0.806613, 0, 0.190951, 0.882948, 0.428884, 0, -0.913545, 0, 0.406737, 0, 0, 0, 0, 1); + transform:matrix3d(0.359127, -0.469472, 0.806613, 0, 0.190951, 0.882948, 0.428884, 0, -0.913545, 0, 0.406737, 0, 0, 0, 0, 1); +} \ No newline at end of file diff --git a/static/css/transitions.css b/static/css/transitions.css new file mode 100644 index 0000000..9c76a70 --- /dev/null +++ b/static/css/transitions.css @@ -0,0 +1,39 @@ +div { + -webkit-transition: all 1s ease-in-out; + -moz-transition: all 1s ease-in-out; + -o-transition: all 1s ease-in-out; + -ms-transition: all 1s ease-in-out; + transition: all 1s ease-in-out; +} + +.property { + -webkit-transition-property: top, left; + -moz-transition-property: top, left; + -o-transition-property: top, left; + -ms-transition-property: top, left; + transition-property: top, left; +} + +.duration { + -webkit-transition-duration: 1s, 1s; + -moz-transition-duration: 1s, 1s; + -o-transition-duration: 1s, 1s; + -ms-transition-duration: 1s, 1s; + transition-duration: 1s, 1s; +} + +.delay { + -webkit-transition-delay: 0s, 1s; + -moz-transition-delay: 0s, 1s; + -o-transition-delay: 0s, 1s; + -ms-transition-delay: 0s, 1s; + transition-delay: 0s, 1s; +} + +.timing { + -webkit-timing-function: linear; + -moz-timing-function: linear; + -o-timing-function: linear; + -ms-timing-function: linear; + timing-function: linear; +} \ No newline at end of file diff --git a/static/css/unprefixed.css b/static/css/unprefixed.css new file mode 100644 index 0000000..21a0b11 --- /dev/null +++ b/static/css/unprefixed.css @@ -0,0 +1,5 @@ +div{ + transform: matrix3d(0.359127, -0.469472, 0.806613, 0, 0.190951, 0.882948, 0.428884, 0, -0.913545, 0, 0.406737, 0, 0, 0, 0, 1); + animation: myAnimation 3s ease-out -1s 2 normal; + transition: opacity 5s linear 1s, background-color 2s ease; +} \ No newline at end of file diff --git a/static/cssprefixes-1.html b/static/cssprefixes-1.html new file mode 100644 index 0000000..0c6fd11 --- /dev/null +++ b/static/cssprefixes-1.html @@ -0,0 +1,11 @@ + + + + + + + +

No CSS

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/cssprefixes-10.html b/static/cssprefixes-10.html new file mode 100644 index 0000000..cb6b3f1 --- /dev/null +++ b/static/cssprefixes-10.html @@ -0,0 +1,12 @@ + + + + + + + + +

Missing Transitions CSS

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/cssprefixes-11.html b/static/cssprefixes-11.html new file mode 100644 index 0000000..bd7e920 --- /dev/null +++ b/static/cssprefixes-11.html @@ -0,0 +1,12 @@ + + + + + + + + +

Missing Gradients CSS

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/cssprefixes-12.html b/static/cssprefixes-12.html new file mode 100644 index 0000000..1d72820 --- /dev/null +++ b/static/cssprefixes-12.html @@ -0,0 +1,12 @@ + + + + + + + + +

Missing Animations CSS

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/cssprefixes-13.html b/static/cssprefixes-13.html new file mode 100644 index 0000000..7df96b7 --- /dev/null +++ b/static/cssprefixes-13.html @@ -0,0 +1,13 @@ + + + + + + + + + +

Gradients + Transforms

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/cssprefixes-14.html b/static/cssprefixes-14.html new file mode 100644 index 0000000..71be15f --- /dev/null +++ b/static/cssprefixes-14.html @@ -0,0 +1,13 @@ + + + + + + + + + +

Gradients + Missing Transforms

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/cssprefixes-15.html b/static/cssprefixes-15.html new file mode 100644 index 0000000..da26fec --- /dev/null +++ b/static/cssprefixes-15.html @@ -0,0 +1,20 @@ + + + + + + + + +

Embed Transform

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/cssprefixes-16.html b/static/cssprefixes-16.html new file mode 100644 index 0000000..1662fcb --- /dev/null +++ b/static/cssprefixes-16.html @@ -0,0 +1,17 @@ + + + + + + + + +

Embed Missing Transform

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/cssprefixes-17.html b/static/cssprefixes-17.html new file mode 100644 index 0000000..14936c8 --- /dev/null +++ b/static/cssprefixes-17.html @@ -0,0 +1,14 @@ + + + + + + + + +

CSS imported with @import url()

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/cssprefixes-18.html b/static/cssprefixes-18.html new file mode 100644 index 0000000..96792fa --- /dev/null +++ b/static/cssprefixes-18.html @@ -0,0 +1,12 @@ + + + + + + + + +

CSS imported with @import 'url'

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/cssprefixes-19.html b/static/cssprefixes-19.html new file mode 100644 index 0000000..415aa80 --- /dev/null +++ b/static/cssprefixes-19.html @@ -0,0 +1,12 @@ + + + + + + + + +

CSS imported with @import url("url");

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/cssprefixes-2.html b/static/cssprefixes-2.html new file mode 100644 index 0000000..d61d4fe --- /dev/null +++ b/static/cssprefixes-2.html @@ -0,0 +1,12 @@ + + + + + + + + +

Simple CSS with no CSS3

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/cssprefixes-3.html b/static/cssprefixes-3.html new file mode 100644 index 0000000..dca237e --- /dev/null +++ b/static/cssprefixes-3.html @@ -0,0 +1,12 @@ + + + + + + + + +

Simple CSS with Unprefixed CSS3 properties

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/cssprefixes-4.html b/static/cssprefixes-4.html new file mode 100644 index 0000000..7564ba0 --- /dev/null +++ b/static/cssprefixes-4.html @@ -0,0 +1,13 @@ + + + + + + + + + +

Simple CSS with no CSS3

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/cssprefixes-5.html b/static/cssprefixes-5.html new file mode 100644 index 0000000..a8f50af --- /dev/null +++ b/static/cssprefixes-5.html @@ -0,0 +1,12 @@ + + + + + + + + +

Transform

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/cssprefixes-6.html b/static/cssprefixes-6.html new file mode 100644 index 0000000..374db5b --- /dev/null +++ b/static/cssprefixes-6.html @@ -0,0 +1,12 @@ + + + + + + + + +

Transitions CSS

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/cssprefixes-7.html b/static/cssprefixes-7.html new file mode 100644 index 0000000..3bc0077 --- /dev/null +++ b/static/cssprefixes-7.html @@ -0,0 +1,12 @@ + + + + + + + + +

Gradients CSS

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/cssprefixes-8.html b/static/cssprefixes-8.html new file mode 100644 index 0000000..6cdd6a0 --- /dev/null +++ b/static/cssprefixes-8.html @@ -0,0 +1,12 @@ + + + + + + + + +

Animations CSS

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/cssprefixes-9.html b/static/cssprefixes-9.html new file mode 100644 index 0000000..4e43596 --- /dev/null +++ b/static/cssprefixes-9.html @@ -0,0 +1,12 @@ + + + + + + + + +

Missing Transforms

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/favicon-1.html b/static/favicon-1.html new file mode 100644 index 0000000..f84cad4 --- /dev/null +++ b/static/favicon-1.html @@ -0,0 +1,12 @@ + + + + + + + + +

No high resolution favicon and no Apple Touch Icon

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/favicon-2.html b/static/favicon-2.html new file mode 100644 index 0000000..0f38cca --- /dev/null +++ b/static/favicon-2.html @@ -0,0 +1,13 @@ + + + + + + + + + +

High resolution favicon

+

Expected result: Passes

+ + \ No newline at end of file diff --git a/static/favicon-3.html b/static/favicon-3.html new file mode 100644 index 0000000..4194870 --- /dev/null +++ b/static/favicon-3.html @@ -0,0 +1,13 @@ + + + + + + + + + +

No favicon but Apple Touch Icon Precomposed

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/favicon-4.html b/static/favicon-4.html new file mode 100644 index 0000000..7effbba --- /dev/null +++ b/static/favicon-4.html @@ -0,0 +1,14 @@ + + + + + + + + + + +

Favicon & Apple Touch Icon Precomposed

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/favicon-5.html b/static/favicon-5.html new file mode 100644 index 0000000..c13b1bc --- /dev/null +++ b/static/favicon-5.html @@ -0,0 +1,13 @@ + + + + + + + + + +

No favicon but Apple Touch Icon

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/favicon-6.html b/static/favicon-6.html new file mode 100644 index 0000000..e7e5850 --- /dev/null +++ b/static/favicon-6.html @@ -0,0 +1,14 @@ + + + + + + + + + + +

Favicon & Apple Touch Icon

+

Expected result: Fails

+ + \ No newline at end of file diff --git a/static/js/dojo-1.7.0.js b/static/js/dojo-1.7.0.js new file mode 100644 index 0000000..8fa545c --- /dev/null +++ b/static/js/dojo-1.7.0.js @@ -0,0 +1,15 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + +/* + This is an optimized version of Dojo, built for deployment and not for + development. To get sources and documentation, please visit: + + http://dojotoolkit.org +*/ + +//>>built +(function(_1,_2){var _3=function(){},_4=function(it){for(var p in it){return 0;}return 1;},_5={}.toString,_6=function(it){return _5.call(it)=="[object Function]";},_7=function(it){return _5.call(it)=="[object String]";},_8=function(it){return _5.call(it)=="[object Array]";},_9=function(_a,_b){if(_a){for(var i=0;i<_a.length;){_b(_a[i++]);}}},_c=function(_d,_e){for(var p in _e){_d[p]=_e[p];}return _d;},_f=function(_10,_11){return _c(new Error(_10),{src:"dojoLoader",info:_11});},_12=1,uid=function(){return "_"+_12++;},req=function(_13,_14,_15){return _16(_13,_14,_15,0,req);},_17=this,doc=_17.document,_18=doc&&doc.createElement("DiV"),has=req.has=function(_19){return _1a[_19]=_6(_1a[_19])?_1a[_19](_17,doc,_18):_1a[_19];},_1a=has.cache=_2.hasCache;has.add=function(_1b,_1c,now,_1d){(_1a[_1b]===undefined||_1d)&&(_1a[_1b]=_1c);return now&&has(_1b);};false&&has.add("host-node",typeof process=="object"&&/node(\.exe)?$/.test(process.execPath));if(0){require("./_base/configNode.js").config(_2);_2.loaderPatch.nodeRequire=require;}false&&has.add("host-rhino",typeof load=="function"&&(typeof Packages=="function"||typeof Packages=="object"));if(0){for(var _1e=_1.baseUrl||".",arg,_1f=this.arguments,i=0;i<_1f.length;){arg=(_1f[i++]+"").split("=");if(arg[0]=="baseUrl"){_1e=arg[1];break;}}load(_1e+"/_base/configRhino.js");rhinoDojoConfig(_2,_1e,_1f);}for(var p in _1.has){has.add(p,_1.has[p],0,1);}var _20=1,_21=2,_22=3,_23=4,_24=5;if(0){_20="requested";_21="arrived";_22="not-a-module";_23="executing";_24="executed";}var _25=0,_26="sync",xd="xd",_27=[],_28=0,_29=_3,_2a=_3,_2b;if(1){req.isXdUrl=_3;req.initSyncLoader=function(_2c,_2d,_2e,_2f){if(!_28){_28=_2c;_29=_2d;_2a=_2e;req.isXdUrl=_2f;}return {sync:_26,xd:xd,arrived:_21,nonmodule:_22,executing:_23,executed:_24,syncExecStack:_27,modules:_30,execQ:_31,getModule:_32,injectModule:_33,setArrived:_34,signal:_35,finishExec:_36,execModule:_37,dojoRequirePlugin:_28,getLegacyMode:function(){return _25;},holdIdle:function(){_70++;},releaseIdle:function(){_38();}};};if(1){true||has.add("dojo-xhr-factory",1);has.add("dojo-force-activex-xhr",1&&!doc.addEventListener&&window.location.protocol=="file:");has.add("native-xhr",typeof XMLHttpRequest!="undefined");if(has("native-xhr")&&!has("dojo-force-activex-xhr")){_2b=function(){return new XMLHttpRequest();};}else{for(var _39=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],_3a,i=0;i<3;){try{_3a=_39[i++];if(new ActiveXObject(_3a)){break;}}catch(e){}}_2b=function(){return new ActiveXObject(_3a);};}req.getXhr=_2b;has.add("dojo-gettext-api",1);req.getText=function(url,_3b,_3c){var xhr=_2b();xhr.open("GET",_3d(url),false);xhr.send(null);if(xhr.status==200||(!location.host&&!xhr.status)){if(_3c){_3c(xhr.responseText,_3b);}}else{throw _f("xhrFailed",xhr.status);}return xhr.responseText;};}}else{req.async=1;}var _3e=new Function("__text","return eval(__text);");req.eval=function(_3f,_40){return _3e(_3f+"\r\n////@ sourceURL="+_40);};var _41={},_42="error",_35=req.signal=function(_43,_44){var _45=_41[_43];_9(_45&&_45.slice(0),function(_46){_46.apply(null,_8(_44)?_44:[_44]);});},on=req.on=function(_47,_48){var _49=_41[_47]||(_41[_47]=[]);_49.push(_48);return {remove:function(){for(var i=0;i<_49.length;i++){if(_49[i]===_48){_49.splice(i,1);return;}}}};};var _4a=[],_4b={},_4c=[],_4d={},_4e={},_4f=[],_30={},_50="",_51={},_52={},_53={};if(1){var _54=function(_55){for(var p in _52){var _56=p.match(/^url\:(.+)/);if(_56){_51[_57(_56[1],_55)]=_52[p];}else{if(p!="*noref"){_51[_58(p,_55).mid]=_52[p];}}}_52={};},_59=function(map,_5a,_5b){_5a.splice(0,_5a.length);var p,i,_5c,_5d=0;for(p in map){_5a.push([p,map[p]]);if(map[p]==_5b){_5d=p;}}_5a.sort(function(lhs,rhs){return rhs[0].length-lhs[0].length;});for(i=0;i<_5a.length;){_5c=_5a[i++];_5c[2]=new RegExp("^"+_5c[0].replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(c){return "\\"+c;})+"(/|$)");_5c[3]=_5c[0].length+1;}return _5d;},_5e=function(_5f,_60){var _61=_5f.name;if(!_61){_61=_5f;_5f={name:_61};}_5f=_c({main:"main",mapProg:[]},_5f);_5f.location=(_60||"")+(_5f.location?_5f.location:_61);_5f.reverseName=_59(_5f.packageMap,_5f.mapProg,_61);if(!_5f.main.indexOf("./")){_5f.main=_5f.main.substring(2);}_c(_4b,_5f.paths);_4d[_61]=_5f;_4e[_61]=_61;},_62=function(_63,_64){for(var p in _63){if(p=="waitSeconds"){req.waitms=(_63[p]||0)*1000;}if(p=="cacheBust"){_50=_63[p]?(_7(_63[p])?_63[p]:(new Date()).getTime()+""):"";}if(p=="baseUrl"||p=="combo"){req[p]=_63[p];}if(1&&p=="async"){var _65=_63[p];req.legacyMode=_25=(_7(_65)&&/sync|legacyAsync/.test(_65)?_65:(!_65?"sync":false));req.async=!_25;}if(_63[p]!==_1a){req.rawConfig[p]=_63[p];p!="has"&&has.add("config-"+p,_63[p],0,_64);}}if(!req.baseUrl){req.baseUrl="./";}if(!/\/$/.test(req.baseUrl)){req.baseUrl+="/";}for(p in _63.has){has.add(p,_63.has[p],0,_64);}_9(_63.packages,_5e);for(_1e in _63.packagePaths){_9(_63.packagePaths[_1e],function(_66){_5e(_66,_1e+"/");});}_59(_c(_4b,_63.paths),_4c);_9(_63.aliases,function(_67){if(_7(_67[0])){_67[0]=new RegExp("^"+_67[0].replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(c){return "\\"+c;})+"$");}_4a.push(_67);});_59(_c(_4e,_63.packageMap),_4f);if(_63.cache){_54();_52=_63.cache;if(_63.cache["*noref"]){_54();}}_35("config",[_63,req.rawConfig]);};if(1){for(var src,_68,_69=doc.getElementsByTagName("script"),i=0;i<_69.length&&!_68;i++){if((src=_69[i].getAttribute("src"))&&(_68=src.match(/(.*)\/?dojo\.js(\W|$)/i))){_1.baseUrl=_1.baseUrl||_2.baseUrl||_68[1];src=(_69[i].getAttribute("data-dojo-config")||_69[i].getAttribute("djConfig"));if(src){_53=req.eval("({ "+src+" })","data-dojo-config");}if(0){var _6a=_69[i].getAttribute("data-main");if(_6a){_53.deps=_53.deps||[_6a];}}}}}if(0){try{if(window.parent!=window&&window.parent.require){var doh=window.parent.require("doh");doh&&_c(_53,doh.testConfig);}}catch(e){}}req.rawConfig={};_62(_2,1);_62(_1,1);_62(_53,1);}else{_4b=_2.paths;_4c=_2.pathsMapProg;_4d=_2.packs;_4a=_2.aliases;_4e=_2.packageMap;_4f=_2.packageMapProg;_30=_2.modules;_51=_2.cache;_50=_2.cacheBust;req.rawConfig=_2;}if(0){req.combo=req.combo||{add:_3};var _6b=0,_6c=[],_6d=null;}var _6e=function(_6f){_70++;_9(_6f.deps,_33);if(0&&_6b&&!_6d){_6d=setTimeout(function(){_6b=0;_6d=null;req.combo.done(function(_71,url){var _72=function(){_73(0,_71);_74();};_6c.push(_71);_75=_71;req.injectUrl(url,_72,_71);_75=0;},req);},0);}_38();},_16=function(a1,a2,a3,_76,_77){var _78,_79;if(_7(a1)){_78=_32(a1,_76,true);if(_78&&_78.executed){return _78.result;}throw _f("undefinedModule",a1);}if(!_8(a1)){_62(a1);a1=a2;a2=a3;}if(_8(a1)){_79="require*"+uid();for(var mid,_7a=[],i=0;i_a2){_a3=_6(_a4[1])?mid.replace(_a4[0],_a4[1]):_a4[1];}});if(_a3){return _91(_a3,0,_93,_94,_95,_96,_97,_98);}_9e=_94[mid];if(_9e){return _98?_7b(_9e.pid,_9e.mid,_9e.pack,_9e.url,_a1):_94[mid];}}_9c=_88(mid,_97);if(_9c){url=_9c[1]+mid.substring(_9c[3]-1);}else{if(pid){url=_99.location+"/"+_9a;}else{if(has("config-tlmSiblingOfDojo")){url="../"+mid;}else{url=mid;}}}if(!(/(^\/)|(\:)/.test(url))){url=_95+url;}url+=".js";return _7b(pid,mid,_99,_8a(url),_a1);},_58=function(mid,_a6){return _91(mid,_a6,_4d,_30,req.baseUrl,_4f,_4c);},_a7=function(_a8,_a9,_aa){return _a8.normalize?_a8.normalize(_a9,function(mid){return _ab(mid,_aa);}):_ab(_a9,_aa);},_ac=0,_32=function(mid,_ad,_ae){var _af,_b0,_b1,_b2;_af=mid.match(/^(.+?)\!(.*)$/);if(_af){_b0=_32(_af[1],_ad,_ae);if(1&&_25==_26&&!_b0.executed){_33(_b0);if(_b0.injected===_21&&!_b0.executed){_70++;_37(_b0);_38();}if(_b0.executed){_b3(_b0);}else{_31.unshift(_b0);}}if(_b0.executed===_24&&!_b0.load){_b3(_b0);}if(_b0.load){_b1=_a7(_b0,_af[2],_ad);mid=(_b0.mid+"!"+(_b0.dynamic?++_ac+"!":"")+_b1);}else{_b1=_af[2];mid=_b0.mid+"!"+(++_ac)+"!waitingForPlugin";}_b2={plugin:_b0,mid:mid,req:_7d(_ad),prid:_b1};}else{_b2=_58(mid,_ad);}return _30[_b2.mid]||(!_ae&&(_30[_b2.mid]=_b2));},_ab=req.toAbsMid=function(mid,_b4){return _58(mid,_b4).mid;},_57=req.toUrl=function(_b5,_b6){var _b7=_b5.match(/(.+)(\.[^\/\.]+?)$/),_b8=(_b7&&_b7[1])||_b5,ext=(_b7&&_b7[2])||"",_b9=_58(_b8,_b6),url=_b9.url;url=typeof _b9.pid=="string"?url.substring(0,url.length-3):url;return _3d(url+ext);},_ba={injected:_21,executed:_24,def:_22,result:_22},_bb=function(mid){return _30[mid]=_c({mid:mid},_ba);},_bc=_bb("require"),_bd=_bb("exports"),_be=_bb("module"),_bf=function(_c0,_c1){req.trace("loader-run-factory",[_c0.mid]);var _c2=_c0.def,_c3;1&&_27.unshift(_c0);if(has("config-dojo-loader-catches")){try{_c3=_6(_c2)?_c2.apply(null,_c1):_c2;}catch(e){_35(_42,_c0.result=_f("factoryThrew",[_c0,e]));}}else{_c3=_6(_c2)?_c2.apply(null,_c1):_c2;}_c0.result=_c3===undefined&&_c0.cjs?_c0.cjs.exports:_c3;1&&_27.shift(_c0);},_c4={},_c5=0,_b3=function(_c6){var _c7=_c6.result;_c6.dynamic=_c7.dynamic;_c6.normalize=_c7.normalize;_c6.load=_c7.load;return _c6;},_c8=function(_c9){var map={};_9(_c9.loadQ,function(_ca){var _cb=_ca.mid,_cc=_a7(_c9,_ca.prid,_ca.req.module),mid=_c9.dynamic?_ca.mid.replace(/waitingForPlugin$/,_cc):(_c9.mid+"!"+_cc),_cd=_c(_c({},_ca),{mid:mid,prid:_cc,injected:0});if(!_30[mid]){_de(_30[mid]=_cd);}map[_ca.mid]=_30[mid];_34(_ca);delete _30[_ca.mid];});_c9.loadQ=0;var _ce=function(_cf){for(var _d0,_d1=_cf.deps||[],i=0;i<_d1.length;i++){_d0=map[_d1[i].mid];if(_d0){_d1[i]=_d0;}}};for(var p in _30){_ce(_30[p]);}_9(_31,_ce);},_36=function(_d2){req.trace("loader-finish-exec",[_d2.mid]);_d2.executed=_24;_d2.defOrder=_c5++;1&&_9(_d2.provides,function(cb){cb();});if(_d2.loadQ){_b3(_d2);_c8(_d2);}for(i=0;i<_31.length;){if(_31[i]===_d2){_31.splice(i,1);}else{i++;}}},_d3=[],_37=function(_d4,_d5){if(_d4.executed===_23){req.trace("loader-circular-dependency",[_d3.concat(mid).join("->")]);return (!_d4.def||_d5)?_c4:(_d4.cjs&&_d4.cjs.exports);}if(!_d4.executed){if(!_d4.def){return _c4;}var mid=_d4.mid,_d6=_d4.deps||[],arg,_d7,_d8=[],i=0;if(0){_d3.push(mid);req.trace("loader-exec-module",["exec",_d3.length,mid]);}_d4.executed=_23;while(i<_d6.length){arg=_d6[i++];_d7=((arg===_bc)?_7d(_d4):((arg===_bd)?_d4.cjs.exports:((arg===_be)?_d4.cjs:_37(arg,_d5))));if(_d7===_c4){_d4.executed=0;req.trace("loader-exec-module",["abort",mid]);0&&_d3.pop();return _c4;}_d8.push(_d7);}_bf(_d4,_d8);_36(_d4);}0&&_d3.pop();return _d4.result;},_70=0,_74=function(){if(_70){return;}_70++;_29();for(var _d9,_da,i=0;i<_31.length;){_d9=_c5;_da=_31[i];_37(_da);if(_d9!=_c5){_29();i=0;}else{i++;}}_38();},_38=function(){_70--;if(_87()){_35("idle",[]);}};if(0){req.undef=function(_db,_dc){var _dd=_32(_db,_dc);_34(_dd);delete _30[_dd.mid];};}if(1){var _3d=function(url){url+="";return url+(_50?((/\?/.test(url)?"&":"?")+_50):"");},_de=function(_df){var _e0=_df.plugin;if(_e0.executed===_24&&!_e0.load){_b3(_e0);}var _e1=function(def){_df.result=def;_34(_df);_36(_df);_74();};_83(_df);if(_e0.load){_e0.load(_df.prid,_df.req,_e1);}else{if(_e0.loadQ){_e0.loadQ.push(_df);}else{_31.unshift(_e0);_33(_e0);if(_e0.load){_e0.load(_df.prid,_df.req,_e1);}else{_e0.loadQ=[_df];}}}},_e2=0,_75=0,_e3=0,_e4=function(_e5,_e6){_e3=1;if(has("config-dojo-loader-catches")){try{if(_e5===_e2){_e2.call(null);}else{req.eval(_e5,_e6.mid);}}catch(e){_35(_42,_f("evalModuleThrew",_e6));}}else{if(_e5===_e2){_e2.call(null);}else{req.eval(_e5,_e6.mid);}}_e3=0;},_33=function(_e7){var mid=_e7.mid,url=_e7.url;if(_e7.executed||_e7.injected||_82[mid]||(_e7.url&&((_e7.pack&&_82[_e7.url]===_e7.pack)||_82[_e7.url]==1))){return;}if(0){var _e8=0;if(_e7.plugin&&_e7.plugin.isCombo){req.combo.add(_e7.plugin.mid,_e7.prid,0,req);_e8=1;}else{if(!_e7.plugin){_e8=req.combo.add(0,_e7.mid,_e7.url,req);}}if(_e8){_83(_e7);_6b=1;return;}}if(_e7.plugin){_de(_e7);return;}_83(_e7);var _e9=function(){_73(_e7);if(_e7.injected!==_21){_34(_e7);_c(_e7,_ba);}if(1&&_25){!_27.length&&_74();}else{_74();}};_e2=_51[mid]||_51[_e7.cacheId];if(_e2){req.trace("loader-inject",["cache",_e7.mid,url]);_e4(_e2,_e7);_e9();return;}if(1&&_25){if(_e7.isXd){_25==_26&&(_25=xd);}else{if(_e7.isAmd&&_25!=_26){}else{var _ea=function(_eb){if(_25==_26){_27.unshift(_e7);_e4(_eb,_e7);_27.shift();_73(_e7);if(!_e7.cjs){_34(_e7);_36(_e7);}if(_e7.finish){var _ec=mid+"*finish",_ed=_e7.finish;delete _e7.finish;def(_ec,["dojo",("dojo/require!"+_ed.join(",")).replace(/\./g,"/")],function(_ee){_9(_ed,function(mid){_ee.require(mid);});});_31.unshift(_32(_ec));}_e9();}else{_eb=_2a(_e7,_eb);if(_eb){_e4(_eb,_e7);_e9();}else{_75=_e7;req.injectUrl(_3d(url),_e9,_e7);_75=0;}}};req.trace("loader-inject",["xhr",_e7.mid,url,_25!=_26]);if(has("config-dojo-loader-catches")){try{req.getText(url,_25!=_26,_ea);}catch(e){_35(_42,_f("xhrInjectFailed",[_e7,e]));}}else{req.getText(url,_25!=_26,_ea);}return;}}}req.trace("loader-inject",["script",_e7.mid,url]);_75=_e7;req.injectUrl(_3d(url),_e9,_e7);_75=0;},_ef=function(_f0,_f1,def){req.trace("loader-define-module",[_f0.mid,_f1]);if(0&&_f0.plugin&&_f0.plugin.isCombo){_f0.result=_6(def)?def():def;_34(_f0);_36(_f0);return _f0;}var mid=_f0.mid;if(_f0.injected===_21){_35(_42,_f("multipleDefine",_f0));return _f0;}_c(_f0,{deps:_f1,def:def,cjs:{id:_f0.mid,uri:_f0.url,exports:(_f0.result={}),setExports:function(_f2){_f0.cjs.exports=_f2;}}});for(var i=0;i<_f1.length;i++){_f1[i]=_32(_f1[i],_f0);}if(1&&_25&&!_82[mid]){_6e(_f0);_31.push(_f0);_74();}_34(_f0);if(!_6(def)&&!_f1.length){_f0.result=def;_36(_f0);}return _f0;},_73=function(_f3,_f4){_54(_f3);var _f5=[],_f6,_f7;while(_81.length){_f7=_81.shift();_f4&&(_f7[0]=_f4.shift());_f6=_f7[0]&&_32(_f7[0])||_f3;_f5.push(_ef(_f6,_f7[1],_f7[2]));}_9(_f5,_6e);};}var _f8=0,_86=_3,_f9=_3;if(1){_86=function(){_f8&&clearTimeout(_f8);_f8=0;},_f9=function(){_86();req.waitms&&(_f8=setTimeout(function(){_86();_35(_42,_f("timeout",_82));},req.waitms));};}if(1){has.add("ie-event-behavior",doc.attachEvent&&(typeof opera==="undefined"||opera.toString()!="[object Opera]"));}if(1&&(1||1)){var _fa=function(_fb,_fc,_fd,_fe){if(!has("ie-event-behavior")){_fb.addEventListener(_fc,_fe,false);return function(){_fb.removeEventListener(_fc,_fe,false);};}else{_fb.attachEvent(_fd,_fe);return function(){_fb.detachEvent(_fd,_fe);};}},_ff=_fa(window,"load","onload",function(){req.pageLoaded=1;doc.readyState!="complete"&&(doc.readyState="complete");_ff();});if(1){var _100=doc.getElementsByTagName("script")[0],_101=_100.parentNode;req.injectUrl=function(url,_102,_103){_f9();var node=_103.node=doc.createElement("script"),_104=function(e){e=e||window.event;var node=e.target||e.srcElement;if(e.type==="load"||/complete|loaded/.test(node.readyState)){_105();_102&&_102();}},_105=_fa(node,"load","onreadystatechange",_104);node.type="text/javascript";node.charset="utf-8";node.src=url;_101.insertBefore(node,_100);return node;};}}if(1){req.log=function(){try{for(var i=0;i0){_120._delayTimer=setTimeout(_121,de);return _120;}_121();return _120;},_play:function(_122){var _123=this;if(_123._delayTimer){_123._clearTimer();}_123._startTime=new Date().valueOf();if(_123._paused){_123._startTime-=_123.duration*_123._percent;}_123._active=true;_123._paused=false;var _124=_123.curve.getValue(_123._getStep());if(!_123._percent){if(!_123._startRepeatCount){_123._startRepeatCount=_123.repeat;}_123._fire("onBegin",[_124]);}_123._fire("onPlay",[_124]);_123._cycle();return _123;},pause:function(){var _125=this;if(_125._delayTimer){_125._clearTimer();}_125._stopTimer();if(!_125._active){return _125;}_125._paused=true;_125._fire("onPause",[_125.curve.getValue(_125._getStep())]);return _125;},gotoPercent:function(_126,_127){var _128=this;_128._stopTimer();_128._active=_128._paused=true;_128._percent=_126;if(_127){_128.play();}return _128;},stop:function(_129){var _12a=this;if(_12a._delayTimer){_12a._clearTimer();}if(!_12a._timer){return _12a;}_12a._stopTimer();if(_129){_12a._percent=1;}_12a._fire("onStop",[_12a.curve.getValue(_12a._getStep())]);_12a._active=_12a._paused=false;return _12a;},status:function(){if(this._active){return this._paused?"paused":"playing";}return "stopped";},_cycle:function(){var _12b=this;if(_12b._active){var curr=new Date().valueOf();var step=(curr-_12b._startTime)/(_12b.duration);if(step>=1){step=1;}_12b._percent=step;if(_12b.easing){step=_12b.easing(step);}_12b._fire("onAnimate",[_12b.curve.getValue(step)]);if(_12b._percent<1){_12b._startTimer();}else{_12b._active=false;if(_12b.repeat>0){_12b.repeat--;_12b.play(null,true);}else{if(_12b.repeat==-1){_12b.play(null,true);}else{if(_12b._startRepeatCount){_12b.repeat=_12b._startRepeatCount;_12b._startRepeatCount=0;}}}_12b._percent=0;_12b._fire("onEnd",[_12b.node]);!_12b.repeat&&_12b._stopTimer();}}return _12b;},_clearTimer:function(){clearTimeout(this._delayTimer);delete this._delayTimer;}});var ctr=0,_12c=null,_12d={run:function(){}};lang.extend(dojo.Animation,{_startTimer:function(){if(!this._timer){this._timer=_118.connect(_12d,"run",this,"_cycle");ctr++;}if(!_12c){_12c=setInterval(lang.hitch(_12d,"run"),this.rate);}},_stopTimer:function(){if(this._timer){_118.disconnect(this._timer);this._timer=null;ctr--;}if(ctr<=0){clearInterval(_12c);_12c=null;ctr=0;}}});var _12e=has("ie")?function(node){var ns=node.style;if(!ns.width.length&&_119.get(node,"width")=="auto"){ns.width="auto";}}:function(){};dojo._fade=function(args){args.node=dom.byId(args.node);var _12f=_11a({properties:{}},args),_130=(_12f.properties.opacity={});_130.start=!("start" in _12f)?function(){return +_119.get(_12f.node,"opacity")||0;}:_12f.start;_130.end=_12f.end;var anim=dojo.animateProperty(_12f);_118.connect(anim,"beforeBegin",lang.partial(_12e,_12f.node));return anim;};dojo.fadeIn=function(args){return dojo._fade(_11a({end:1},args));};dojo.fadeOut=function(args){return dojo._fade(_11a({end:0},args));};dojo._defaultEasing=function(n){return 0.5+((Math.sin((n+1.5)*Math.PI))/2);};var _131=function(_132){this._properties=_132;for(var p in _132){var prop=_132[p];if(prop.start instanceof _117){prop.tempColor=new _117();}}};_131.prototype.getValue=function(r){var ret={};for(var p in this._properties){var prop=this._properties[p],_133=prop.start;if(_133 instanceof _117){ret[p]=_117.blendColors(_133,prop.end,r,prop.tempColor).toCss();}else{if(!lang.isArray(_133)){ret[p]=((prop.end-_133)*r)+_133+(p!="opacity"?prop.units||"px":0);}}}return ret;};dojo.animateProperty=function(args){var n=args.node=dom.byId(args.node);if(!args.easing){args.easing=dojo._defaultEasing;}var anim=new dojo.Animation(args);_118.connect(anim,"beforeBegin",anim,function(){var pm={};for(var p in this.properties){if(p=="width"||p=="height"){this.node.display="block";}var prop=this.properties[p];if(lang.isFunction(prop)){prop=prop(n);}prop=pm[p]=_11a({},(lang.isObject(prop)?prop:{end:prop}));if(lang.isFunction(prop.start)){prop.start=prop.start(n);}if(lang.isFunction(prop.end)){prop.end=prop.end(n);}var _134=(p.toLowerCase().indexOf("color")>=0);function _135(node,p){var v={height:node.offsetHeight,width:node.offsetWidth}[p];if(v!==undefined){return v;}v=_119.get(node,p);return (p=="opacity")?+v:(_134?v:parseFloat(v));};if(!("end" in prop)){prop.end=_135(n,p);}else{if(!("start" in prop)){prop.start=_135(n,p);}}if(_134){prop.start=new _117(prop.start);prop.end=new _117(prop.end);}else{prop.start=(p=="opacity")?+prop.start:parseFloat(prop.start);}}this.curve=new _131(pm);});_118.connect(anim,"onAnimate",lang.hitch(dojo,"style",anim.node));return anim;};dojo.anim=function(node,_136,_137,_138,_139,_13a){return dojo.animateProperty({node:node,duration:_137||dojo.Animation.prototype.duration,properties:_136,easing:_138,onEnd:_139}).play(_13a||0);};return {_Line:dojo._Line,Animation:dojo.Animation,_fade:dojo._fade,fadeIn:dojo.fadeIn,fadeOut:dojo.fadeOut,_defaultEasing:dojo._defaultEasing,animateProperty:dojo.animateProperty,anim:dojo.anim};});},"dojo/dom-form":function(){define("dojo/dom-form",["./_base/lang","./dom","./io-query","./json"],function(lang,dom,ioq,json){function _13b(obj,name,_13c){if(_13c===null){return;}var val=obj[name];if(typeof val=="string"){obj[name]=[val,_13c];}else{if(lang.isArray(val)){val.push(_13c);}else{obj[name]=_13c;}}};var _13d="file|submit|image|reset|button";var form={fieldToObject:function fieldToObject(_13e){var ret=null;_13e=dom.byId(_13e);if(_13e){var _13f=_13e.name,type=(_13e.type||"").toLowerCase();if(_13f&&type&&!_13e.disabled){if(type=="radio"||type=="checkbox"){if(_13e.checked){ret=_13e.value;}}else{if(_13e.multiple){ret=[];var _140=[_13e.firstChild];while(_140.length){for(var node=_140.pop();node;node=node.nextSibling){if(node.nodeType==1&&node.tagName.toLowerCase()=="option"){if(node.selected){ret.push(node.value);}}else{if(node.nextSibling){_140.push(node.nextSibling);}if(node.firstChild){_140.push(node.firstChild);}break;}}}}else{ret=_13e.value;}}}}return ret;},toObject:function formToObject(_141){var ret={},_142=dom.byId(_141).elements;for(var i=0,l=_142.length;i=0;i--){var node=(_19d?this._cloneNode(ary[i]):ary[i]);if(ary._runParse&&dojo.parser&&dojo.parser.parse){if(!_19f){_19f=_19e.ownerDocument.createElement("div");}_19f.appendChild(node);dojo.parser.parse(_19f);node=_19f.firstChild;while(_19f.firstChild){_19f.removeChild(_19f.firstChild);}}if(i==_1a0-1){_18d.place(node,_19e,_19c);}else{_19e.parentNode.insertBefore(node,_19e);}_19e=node;}},attr:awc(_194(_18f),_191),style:awc(_194(_190),_191),addClass:aafe(_18c.add),removeClass:aafe(_18c.remove),replaceClass:aafe(_18c.replace),toggleClass:aafe(_18c.toggle),empty:aafe(_18d.empty),removeAttr:aafe(_18f.remove),position:aam(_18e.position),marginBox:aam(_18e.getMarginBox),place:function(_1a1,_1a2){var item=_18a(_1a1)[0];return this.forEach(function(node){_18d.place(node,item,_1a2);});},orphan:function(_1a3){return (_1a3?_18a._filterResult(this,_1a3):this).forEach(_192);},adopt:function(_1a4,_1a5){return _18a(_1a4).place(this[0],_1a5)._stash(this);},query:function(_1a6){if(!_1a6){return this;}var ret=new _193;this.map(function(node){_18a(_1a6,node).forEach(function(_1a7){if(_1a7!==undefined){ret.push(_1a7);}});});return ret._stash(this);},filter:function(_1a8){var a=arguments,_1a9=this,_1aa=0;if(typeof _1a8=="string"){_1a9=_18a._filterResult(this,a[0]);if(a.length==1){return _1a9._stash(this);}_1aa=1;}return this._wrap(_18b.filter(_1a9,a[_1aa],a[_1aa+1]),this);},addContent:function(_1ab,_1ac){_1ab=this._normalize(_1ab,this[0]);for(var i=0,node;(node=this[i]);i++){this._place(_1ab,node,_1ac,i>0);}return this;}});return _193;});},"dojo/query":function(){define(["./_base/kernel","./has","./on","./_base/array","./_base/lang","./selector/_loader","./selector/_loader!default"],function(dojo,has,on,_1ad,lang,_1ae,_1af){"use strict";has.add("array-extensible",function(){return lang.delegate([],{length:1}).length==1&&!has("bug-for-in-skips-shadowed");});var ap=Array.prototype,aps=ap.slice,apc=ap.concat,_1b0=_1ad.forEach;var tnl=function(a,_1b1,_1b2){var _1b3=new (_1b2||this._NodeListCtor||nl)(a);return _1b1?_1b3._stash(_1b1):_1b3;};var _1b4=function(f,a,o){a=[0].concat(aps.call(a,0));o=o||dojo.global;return function(node){a[0]=node;return f.apply(o,a);};};var _1b5=function(f,o){return function(){this.forEach(_1b4(f,arguments,o));return this;};};var _1b6=function(f,o){return function(){return this.map(_1b4(f,arguments,o));};};var _1b7=function(f,o){return function(){return this.filter(_1b4(f,arguments,o));};};var _1b8=function(f,g,o){return function(){var a=arguments,body=_1b4(f,a,o);if(g.call(o||dojo.global,a)){return this.map(body);}this.forEach(body);return this;};};var _1b9=function(_1ba){var _1bb=this instanceof nl&&has("array-extensible");if(typeof _1ba=="number"){_1ba=Array(_1ba);}var _1bc=(_1ba&&"length" in _1ba)?_1ba:arguments;if(_1bb||!_1bc.sort){var _1bd=_1bb?this:[],l=_1bd.length=_1bc.length;for(var i=0;i0;};_1ce.filter=_1cc.filter||function(_1d2,_1d3,root){return _1ce(_1d3,root).filter(function(node){return dojo.indexOf(_1d2,node)>-1;});};if(typeof _1cc!="function"){var _1d4=_1cc.search;_1cc=function(_1d5,root){return _1d4(root||document,_1d5);};}return _1ce;};var _1c8=_1cb(_1af,_1b9);dojo.query=_1cb(_1af,function(_1d6){return _1b9(_1d6);});_1c8.load=function(id,_1d7,_1d8,_1d9){_1ae.load(id,_1d7,function(_1da){_1d8(_1cb(_1da,_1b9));});};dojo._filterQueryResult=_1c8._filterResult=function(_1db,_1dc,root){return new _1b9(_1c8.filter(_1db,_1dc,root));};dojo.NodeList=_1c8.NodeList=_1b9;return _1c8;});},"dojo/has":function(){define(["require"],function(_1dd){var has=_1dd.has||function(){};if(!1){var _1de=typeof window!="undefined"&&typeof location!="undefined"&&typeof document!="undefined"&&window.location==location&&window.document==document,_1df=this,doc=_1de&&document,_1e0=doc&&doc.createElement("DiV"),_1e1={};has=function(name){return _1e1[name]=typeof _1e1[name]=="function"?_1e1[name](_1df,doc,_1e0):_1e1[name];};has.cache=_1e1;has.add=function(name,test,now,_1e2){(typeof _1e1[name]=="undefined"||_1e2)&&(_1e1[name]=test);return now&&has(name);};true||has.add("host-browser",_1de);true||has.add("dom",_1de);true||has.add("dojo-dom-ready-api",1);true||has.add("dojo-sniff",1);}if(1){var _1e3=navigator.userAgent;has.add("dom-addeventlistener",!!document.addEventListener);has.add("touch","ontouchstart" in document);has.add("device-width",screen.availWidth||innerWidth);has.add("agent-ios",!!_1e3.match(/iPhone|iP[ao]d/));has.add("agent-android",_1e3.indexOf("android")>1);}has.clearElement=function(_1e4){_1e4.innerHTML="";return _1e4;};has.normalize=function(id,_1e5){var _1e6=id.match(/[\?:]|[^:\?]*/g),i=0,get=function(skip){var term=_1e6[i++];if(term==":"){return 0;}else{if(_1e6[i++]=="?"){if(!skip&&has(term)){return get();}else{get(true);return get(skip);}}return term||0;}};id=get();return id&&_1e5(id);};has.load=function(id,_1e7,_1e8){if(id){_1e7([id],_1e8);}else{_1e8();}};return has;});},"dojo/_base/loader":function(){define(["./kernel","../has","require","module","./json","./lang","./array"],function(dojo,has,_1e9,_1ea,json,lang,_1eb){if(!1){console.error("cannot load the Dojo v1.x loader with a foreign loader");return 0;}var _1ec=function(){return 0;};if(1){var _1ed=location.protocol,_1ee=location.host,_1ef=!_1ee;_1ec=function(url){if(_1ef||/^\./.test(url)){return false;}if(/^\/\//.test(url)){return true;}var _1f0=url.match(/^([^\/\:]+\:)\/\/([^\/]+)/);return _1f0&&(_1f0[1]!=_1ed||_1f0[2]!=_1ee);};}var _1f1=function(id){return {src:_1ea.id,id:id};},_1f2=function(name){return name.replace(/\./g,"/");},_1f3=/\/\/>>built/,_1f4=[],_1f5=[],_1f6=function(mid,_1f7,_1f8){_1f4.push(_1f8);_1eb.forEach(mid.split(","),function(mid){var _1f9=_1fa(mid,_1f7.module);_1f5.push(_1f9);_1fb(_1f9);});_1fc();},_1fc=function(){_1f5=_1eb.filter(_1f5,function(_1fd){return _1fd.injected!==_228&&!_1fd.executed;});if(!_1f5.length){_1ff.holdIdle();var _1fe=_1f4;_1f4=[];_1eb.forEach(_1fe,function(cb){cb(1);});_1ff.releaseIdle();}},_200=function(mid,_201,_202){_201([mid],function(_203){_201(_203.names,function(){for(var _204="",args=[],i=0;i=0;--j){_25f=lin[j].prototype;if(!_25f.hasOwnProperty("declaredClass")){_25f.declaredClass="uniqName_"+(_256++);}name=_25f.declaredClass;if(!_25d.hasOwnProperty(name)){_25d[name]={count:0,refs:[],cls:lin[j]};++_25e;}rec=_25d[name];if(top&&top!==rec){rec.refs.push(top);++top.count;}top=rec;}++top.count;_25c[0].refs.push(top);}while(_25c.length){top=_25c.pop();_25b.push(top.cls);--_25e;while(refs=top.refs,refs.length==1){top=refs[0];if(!top||--top.count){top=0;break;}_25b.push(top.cls);--_25e;}if(top){for(i=0,l=refs.length;i=0;--i){f=_277[i];m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,_279?_279[i]:a);}}f=this.postscript;if(f){f.apply(this,args);}};};function _27b(ctor,_27c){return function(){var a=arguments,t=a,a0=a[0],f;if(!(this instanceof a.callee)){return _27a(a);}if(_27c){if(a0){f=a0.preamble;if(f){t=f.apply(this,t)||t;}}f=this.preamble;if(f){f.apply(this,t);}}if(ctor){ctor.apply(this,a);}f=this.postscript;if(f){f.apply(this,a);}};};function _27d(_27e){return function(){var a=arguments,i=0,f,m;if(!(this instanceof a.callee)){return _27a(a);}for(;f=_27e[i];++i){m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,a);break;}}f=this.postscript;if(f){f.apply(this,a);}};};function _27f(name,_280,_281){return function(){var b,m,f,i=0,step=1;if(_281){i=_280.length-1;step=-1;}for(;b=_280[i];i+=step){m=b._meta;f=(m?m.hidden:b.prototype)[name];if(f){f.apply(this,arguments);}}};};function _282(ctor){xtor.prototype=ctor.prototype;var t=new xtor;xtor.prototype=null;return t;};function _27a(args){var ctor=args.callee,t=_282(ctor);ctor.apply(t,args);return t;};function _275(_283,_284,_285){if(typeof _283!="string"){_285=_284;_284=_283;_283="";}_285=_285||{};var _286,i,t,ctor,name,_287,_288,_289=1,_28a=_284;if(opts.call(_284)=="[object Array]"){_287=_258(_284,_283);t=_287[0];_289=_287.length-t;_284=_287[_289];}else{_287=[0];if(_284){if(opts.call(_284)=="[object Function]"){t=_284._meta;_287=_287.concat(t?t.bases:_284);}else{err("base class is not a callable constructor.",_283);}}else{if(_284!==null){err("unknown base class. Did you use dojo.require to pull it in?",_283);}}}if(_284){for(i=_289-1;;--i){_286=_282(_284);if(!i){break;}t=_287[i];(t._meta?_26b:mix)(_286,t.prototype);ctor=new Function;ctor.superclass=_284;ctor.prototype=_286;_284=_286.constructor=ctor;}}else{_286={};}_275.safeMixin(_286,_285);t=_285.constructor;if(t!==op.constructor){t.nom=_257;_286.constructor=t;}for(i=_289-1;i;--i){t=_287[i]._meta;if(t&&t.chains){_288=mix(_288||{},t.chains);}}if(_286["-chains-"]){_288=mix(_288||{},_286["-chains-"]);}t=!_288||!_288.hasOwnProperty(_257);_287[0]=ctor=(_288&&_288.constructor==="manual")?_27d(_287):(_287.length==1?_27b(_285.constructor,t):_276(_287,t));ctor._meta={bases:_287,hidden:_285,chains:_288,parents:_28a,ctor:_285.constructor};ctor.superclass=_284&&_284.prototype;ctor.extend=_273;ctor.prototype=_286;_286.constructor=ctor;_286.getInherited=_266;_286.isInstanceOf=_269;_286.inherited=_268;_286.__inherited=_260;if(_283){_286.declaredClass=_283;lang.setObject(_283,ctor);}if(_288){for(name in _288){if(_286[name]&&typeof _288[name]=="string"&&name!=_257){t=_286[name]=_27f(name,_287,_288[name]==="after");t.nom=name;}}}return ctor;};dojo.safeMixin=_275.safeMixin=_26f;dojo.declare=_275;return _275;});},"dojo/dom":function(){define(["./_base/sniff","./_base/lang","./_base/window"],function(has,lang,win){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}var dom={};if(has("ie")){dom.byId=function(id,doc){if(typeof id!="string"){return id;}var _28b=doc||win.doc,te=id&&_28b.getElementById(id);if(te&&(te.attributes.id.value==id||te.id==id)){return te;}else{var eles=_28b.all[id];if(!eles||eles.nodeName){eles=[eles];}var i=0;while((te=eles[i++])){if((te.attributes&&te.attributes.id&&te.attributes.id.value==id)||te.id==id){return te;}}}};}else{dom.byId=function(id,doc){return ((typeof id=="string")?(doc||win.doc).getElementById(id):id)||null;};}dom.isDescendant=function(node,_28c){try{node=dom.byId(node);_28c=dom.byId(_28c);while(node){if(node==_28c){return true;}node=node.parentNode;}}catch(e){}return false;};dom.setSelectable=function(node,_28d){node=dom.byId(node);if(has("mozilla")){node.style.MozUserSelect=_28d?"":"none";}else{if(has("khtml")||has("webkit")){node.style.KhtmlUserSelect=_28d?"auto":"none";}else{if(has("ie")){var v=(node.unselectable=_28d?"":"on"),cs=node.getElementsByTagName("*"),i=0,l=cs.length;for(;i=0){s.width=w+u;}if(h>=0){s.height=h+u;}};function _2ab(node){return node.tagName.toLowerCase()=="button"||node.tagName.toLowerCase()=="input"&&(node.getAttribute("type")||"").toLowerCase()=="button";};function _2ac(node){return geom.boxModel=="border-box"||node.tagName.toLowerCase()=="table"||_2ab(node);};geom.setContentSize=function setContentSize(node,box,_2ad){node=dom.byId(node);var w=box.w,h=box.h;if(_2ac(node)){var pb=geom.getPadBorderExtents(node,_2ad);if(w>=0){w+=pb.w;}if(h>=0){h+=pb.h;}}_2aa(node,NaN,NaN,w,h);};var _2ae={l:0,t:0,w:0,h:0};geom.setMarginBox=function setMarginBox(node,box,_2af){node=dom.byId(node);var s=_2af||_2a3.getComputedStyle(node),w=box.w,h=box.h,pb=_2ac(node)?_2ae:geom.getPadBorderExtents(node,s),mb=geom.getMarginExtents(node,s);if(has("webkit")){if(_2ab(node)){var ns=node.style;if(w>=0&&!ns.width){ns.width="4px";}if(h>=0&&!ns.height){ns.height="4px";}}}if(w>=0){w=Math.max(w-pb.w-mb.w,0);}if(h>=0){h=Math.max(h-pb.h-mb.h,0);}_2aa(node,box.l,box.t,w,h);};geom.isBodyLtr=function isBodyLtr(){return (win.body().dir||win.doc.documentElement.dir||"ltr").toLowerCase()=="ltr";};geom.docScroll=function docScroll(){var node=win.doc.parentWindow||win.doc.defaultView;return "pageXOffset" in node?{x:node.pageXOffset,y:node.pageYOffset}:(node=has("quirks")?win.body():win.doc.documentElement,{x:geom.fixIeBiDiScrollLeft(node.scrollLeft||0),y:node.scrollTop||0});};geom.getIeDocumentElementOffset=function getIeDocumentElementOffset(){var de=win.doc.documentElement;if(has("ie")<8){var r=de.getBoundingClientRect(),l=r.left,t=r.top;if(has("ie")<7){l+=de.clientLeft;t+=de.clientTop;}return {x:l<0?0:l,y:t<0?0:t};}else{return {x:0,y:0};}};geom.fixIeBiDiScrollLeft=function fixIeBiDiScrollLeft(_2b0){var ie=has("ie");if(ie&&!geom.isBodyLtr()){var qk=has("quirks"),de=qk?win.body():win.doc.documentElement;if(ie==6&&!qk&&win.global.frameElement&&de.scrollHeight>de.clientHeight){_2b0+=de.clientLeft;}return (ie<8||qk)?(_2b0+de.clientWidth-de.scrollWidth):-_2b0;}return _2b0;};geom.position=function(node,_2b1){node=dom.byId(node);var db=win.body(),dh=db.parentNode,ret=node.getBoundingClientRect();ret={x:ret.left,y:ret.top,w:ret.right-ret.left,h:ret.bottom-ret.top};if(has("ie")){var _2b2=geom.getIeDocumentElementOffset();ret.x-=_2b2.x+(has("quirks")?db.clientLeft+db.offsetLeft:0);ret.y-=_2b2.y+(has("quirks")?db.clientTop+db.offsetTop:0);}else{if(has("ff")==3){var cs=_2a3.getComputedStyle(dh),px=_2a3.toPixelValue;ret.x-=px(dh,cs.marginLeft)+px(dh,cs.borderLeftWidth);ret.y-=px(dh,cs.marginTop)+px(dh,cs.borderTopWidth);}}if(_2b1){var _2b3=geom.docScroll();ret.x+=_2b3.x;ret.y+=_2b3.y;}return ret;};geom.getMarginSize=function getMarginSize(node,_2b4){node=dom.byId(node);var me=geom.getMarginExtents(node,_2b4||_2a3.getComputedStyle(node));var size=node.getBoundingClientRect();return {w:(size.right-size.left)+me.w,h:(size.bottom-size.top)+me.h};};geom.normalizeEvent=function(_2b5){if(!("layerX" in _2b5)){_2b5.layerX=_2b5.offsetX;_2b5.layerY=_2b5.offsetY;}if(!has("dom-addeventlistener")){var se=_2b5.target;var doc=(se&&se.ownerDocument)||document;var _2b6=has("quirks")?doc.body:doc.documentElement;var _2b7=geom.getIeDocumentElementOffset();_2b5.pageX=_2b5.clientX+geom.fixIeBiDiScrollLeft(_2b6.scrollLeft||0)-_2b7.x;_2b5.pageY=_2b5.clientY+(_2b6.scrollTop||0)-_2b7.y;}};return geom;});},"dojo/dom-prop":function(){define("dojo/dom-prop",["exports","./_base/kernel","./_base/sniff","./_base/lang","./dom","./dom-style","./dom-construct","./_base/connect"],function(_2b8,dojo,has,lang,dom,_2b9,ctr,conn){var _2ba={},_2bb=0,_2bc=dojo._scopeName+"attrid";var _2bd={col:1,colgroup:1,table:1,tbody:1,tfoot:1,thead:1,tr:1,title:1};_2b8.names={"class":"className","for":"htmlFor",tabindex:"tabIndex",readonly:"readOnly",colspan:"colSpan",frameborder:"frameBorder",rowspan:"rowSpan",valuetype:"valueType"};_2b8.get=function getProp(node,name){node=dom.byId(node);var lc=name.toLowerCase(),_2be=_2b8.names[lc]||name;return node[_2be];};_2b8.set=function setProp(node,name,_2bf){node=dom.byId(node);var l=arguments.length;if(l==2&&typeof name!="string"){for(var x in name){_2b8.set(node,x,name[x]);}return node;}var lc=name.toLowerCase(),_2c0=_2b8.names[lc]||name;if(_2c0=="style"&&typeof _2bf!="string"){_2b9.style(node,_2bf);return node;}if(_2c0=="innerHTML"){if(has("ie")&&node.tagName.toLowerCase() in _2bd){ctr.empty(node);node.appendChild(ctr.toDom(_2bf,node.ownerDocument));}else{node[_2c0]=_2bf;}return node;}if(lang.isFunction(_2bf)){var _2c1=node[_2bc];if(!_2c1){_2c1=_2bb++;node[_2bc]=_2c1;}if(!_2ba[_2c1]){_2ba[_2c1]={};}var h=_2ba[_2c1][_2c0];if(h){conn.disconnect(h);}else{try{delete node[_2c0];}catch(e){}}if(_2bf){_2ba[_2c1][_2c0]=conn.connect(node,_2c0,_2bf);}else{node[_2c0]=null;}return node;}node[_2c0]=_2bf;return node;};});},"dojo/dom-attr":function(){define(["exports","./_base/sniff","./_base/lang","./dom","./dom-style","./dom-prop"],function(_2c2,has,lang,dom,_2c3,prop){var _2c4={innerHTML:1,className:1,htmlFor:has("ie"),value:1},_2c5={classname:"class",htmlfor:"for",tabindex:"tabIndex",readonly:"readOnly"};function _2c6(node,name){var attr=node.getAttributeNode&&node.getAttributeNode(name);return attr&&attr.specified;};_2c2.has=function hasAttr(node,name){var lc=name.toLowerCase();return _2c4[prop.names[lc]||name]||_2c6(dom.byId(node),_2c5[lc]||name);};_2c2.get=function getAttr(node,name){node=dom.byId(node);var lc=name.toLowerCase(),_2c7=prop.names[lc]||name,_2c8=_2c4[_2c7];value=node[_2c7];if(_2c8&&typeof value!="undefined"){return value;}if(_2c7!="href"&&(typeof value=="boolean"||lang.isFunction(value))){return value;}var _2c9=_2c5[lc]||name;return _2c6(node,_2c9)?node.getAttribute(_2c9):null;};_2c2.set=function setAttr(node,name,_2ca){node=dom.byId(node);if(arguments.length==2){for(var x in name){_2c2.set(node,x,name[x]);}return node;}var lc=name.toLowerCase(),_2cb=prop.names[lc]||name,_2cc=_2c4[_2cb];if(_2cb=="style"&&typeof _2ca!="string"){_2c3.set(node,_2ca);return node;}if(_2cc||typeof _2ca=="boolean"||lang.isFunction(_2ca)){return prop.set(node,name,_2ca);}node.setAttribute(_2c5[lc]||name,_2ca);return node;};_2c2.remove=function removeAttr(node,name){dom.byId(node).removeAttribute(_2c5[name.toLowerCase()]||name);};_2c2.getNodeProp=function getNodeProp(node,name){node=dom.byId(node);var lc=name.toLowerCase(),_2cd=prop.names[lc]||name;if((_2cd in node)&&_2cd!="href"){return node[_2cd];}var _2ce=_2c5[lc]||name;return _2c6(node,_2ce)?node.getAttribute(_2ce):null;};});},"dojo/dom-construct":function(){define("dojo/dom-construct",["exports","./_base/kernel","./_base/sniff","./_base/window","./dom","./dom-attr","./on"],function(_2cf,dojo,has,win,dom,attr,on){var _2d0={option:["select"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","thead","tr"],legend:["fieldset"],caption:["table"],colgroup:["table"],col:["table","colgroup"],li:["ul"]},_2d1=/<\s*([\w\:]+)/,_2d2={},_2d3=0,_2d4="__"+dojo._scopeName+"ToDomId";for(var _2d5 in _2d0){if(_2d0.hasOwnProperty(_2d5)){var tw=_2d0[_2d5];tw.pre=_2d5=="option"?"":"<"+tw.join("><")+">";tw.post="";}}function _3cd(node,ref){var _3ce=ref.parentNode;if(_3ce){_3ce.insertBefore(node,ref);}};function _3cf(node,ref){var _3d0=ref.parentNode;if(_3d0){if(_3d0.lastChild==ref){_3d0.appendChild(node);}else{_3d0.insertBefore(node,ref.nextSibling);}}};var _3d1=null,_3d2;on(window,"unload",function(){_3d1=null;});_3c6.toDom=function toDom(frag,doc){doc=doc||win.doc;var _3d3=doc[_3cb];if(!_3d3){doc[_3cb]=_3d3=++_3ca+"";_3c9[_3d3]=doc.createElement("div");}frag+="";var _3d4=frag.match(_3c8),tag=_3d4?_3d4[1].toLowerCase():"",_3d5=_3c9[_3d3],wrap,i,fc,df;if(_3d4&&_3c7[tag]){wrap=_3c7[tag];_3d5.innerHTML=wrap.pre+frag+wrap.post;for(i=wrap.length;i;--i){_3d5=_3d5.firstChild;}}else{_3d5.innerHTML=frag;}if(_3d5.childNodes.length==1){return _3d5.removeChild(_3d5.firstChild);}df=doc.createDocumentFragment();while(fc=_3d5.firstChild){df.appendChild(fc);}return df;};_3c6.place=function place(node,_3d6,_3d7){_3d6=dom.byId(_3d6);if(typeof node=="string"){node=/^\s*/im,"");var _402=text.match(/]*>\s*([\s\S]+)\s*<\/body>/im);if(_402){text=_402[1];}}else{text="";}return text;},_403={},_404={};dojo.cache=function(_405,url,_406){var key;if(typeof _405=="string"){if(/\//.test(_405)){key=_405;_406=url;}else{key=_3fe.toUrl(_405.replace(/\./g,"/")+(url?("/"+url):""));}}else{key=_405+"";_406=url;}var val=(_406!=undefined&&typeof _406!="string")?_406.value:_406,_407=_406&&_406.sanitize;if(typeof val=="string"){_400[key]=val;return _407?_401(val):val;}else{if(val===null){delete _400[key];return null;}else{if(!(key in _400)){_3ff(key,true,function(text){_400[key]=text;});}return _407?_401(_400[key]):_400[key];}}};return {dynamic:true,normalize:function(id,_408){var _409=id.split("!"),url=_409[0];return (/^\./.test(url)?_408(url):url)+(_409[1]?"!"+_409[1]:"");},load:function(id,_40a,load){var _40b=id.split("!"),_40c=_40b.length>1,_40d=_40b[0],url=_40a.toUrl(_40b[0]),_40e="url:"+url,text=_403,_40f=function(text){load(_40c?_401(text):text);};if(_40d in _400){text=_400[_40d];}else{if(_40e in _40a.cache){text=_40a.cache[_40e];}else{if(url in _400){text=_400[url];}}}if(text===_403){if(_404[url]){_404[url].push(_40f);}else{var _410=_404[url]=[_40f];_3ff(url,!_40a.async,function(text){_400[_40d]=_400[url]=text;for(var i=0;i<_410.length;){_410[i++](text);}delete _404[url];});}}else{_40f(text);}}};});},"dojo/keys":function(){define("dojo/keys",["./_base/kernel","./sniff"],function(dojo,has){return dojo.keys={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,META:has("webkit")?91:224,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145,UP_DPAD:175,DOWN_DPAD:176,LEFT_DPAD:177,RIGHT_DPAD:178,copyKey:has("mac")&&!has("air")?(has("safari")?91:224):17};});},"dojo/domReady":function(){define(["./has"],function(has){var _411=this,doc=document,_412={"loaded":1,"complete":1},_413=typeof doc.readyState!="string",_414=!!_412[doc.readyState];if(_413){doc.readyState="loading";}if(!_414){var _415=[],_416=[],_417=function(evt){evt=evt||_411.event;if(_414||(evt.type=="readystatechange"&&!_412[doc.readyState])){return;}_414=1;if(_413){doc.readyState="complete";}while(_415.length){(_415.shift())(doc);}},on=function(node,_418){node.addEventListener(_418,_417,false);_415.push(function(){node.removeEventListener(_418,_417,false);});};if(!has("dom-addeventlistener")){on=function(node,_419){_419="on"+_419;node.attachEvent(_419,_417);_415.push(function(){node.detachEvent(_419,_417);});};var div=doc.createElement("div");try{if(div.doScroll&&_411.frameElement===null){_416.push(function(){try{div.doScroll("left");return 1;}catch(e){}});}}catch(e){}}on(doc,"DOMContentLoaded");on(_411,"load");if("onreadystatechange" in doc){on(doc,"readystatechange");}else{if(!_413){_416.push(function(){return _412[doc.readyState];});}}if(_416.length){var _41a=function(){if(_414){return;}var i=_416.length;while(i--){if(_416[i]()){_417("poller");return;}}setTimeout(_41a,30);};_41a();}}function _41b(_41c){if(_414){_41c(doc);}else{_415.push(_41c);}};_41b.load=function(id,req,load){_41b(load);};return _41b;});},"dojo/_base/lang":function(){define("dojo/_base/lang",["./kernel","../has","../sniff"],function(dojo,has){has.add("bug-for-in-skips-shadowed",function(){for(var i in {toString:1}){return 0;}return 1;});var _41d=has("bug-for-in-skips-shadowed")?"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor".split("."):[],_41e=_41d.length,_41f=function(_420,_421,_422){var p,i=0,_423=dojo.global;if(!_422){if(!_420.length){return _423;}else{p=_420[i++];try{_422=dojo.scopeMap[p]&&dojo.scopeMap[p][1];}catch(e){}_422=_422||(p in _423?_423[p]:(_421?_423[p]={}:undefined));}}while(_422&&(p=_420[i++])){_422=(p in _422?_422[p]:(_421?_422[p]={}:undefined));}return _422;},opts=Object.prototype.toString,_424=function(obj,_425,_426){return (_426||[]).concat(Array.prototype.slice.call(obj,_425||0));},_427=/\{([^\}]+)\}/g;var lang={_extraNames:_41d,_mixin:function(dest,_428,_429){var name,s,i,_42a={};for(name in _428){s=_428[name];if(!(name in dest)||(dest[name]!==s&&(!(name in _42a)||_42a[name]!==s))){dest[name]=_429?_429(s):s;}}if(has("bug-for-in-skips-shadowed")){if(_428){for(i=0;i<_41e;++i){name=_41d[i];s=_428[name];if(!(name in dest)||(dest[name]!==s&&(!(name in _42a)||_42a[name]!==s))){dest[name]=_429?_429(s):s;}}}}return dest;},mixin:function(dest,_42b){if(!dest){dest={};}for(var i=1,l=arguments.length;i2){return lang._hitchArgs.apply(dojo,arguments);}if(!_436){_436=_435;_435=null;}if(lang.isString(_436)){_435=_435||dojo.global;if(!_435[_436]){throw (["lang.hitch: scope[\"",_436,"\"] is null (scope=\"",_435,"\")"].join(""));}return function(){return _435[_436].apply(_435,arguments||[]);};}return !_435?_436:function(){return _436.apply(_435,arguments||[]);};},delegate:(function(){function TMP(){};return function(obj,_437){TMP.prototype=obj;var tmp=new TMP();TMP.prototype=null;if(_437){lang._mixin(tmp,_437);}return tmp;};})(),_toArray:has("ie")?(function(){function slow(obj,_438,_439){var arr=_439||[];for(var x=_438||0;x=200&&stat<300)||stat===304||stat===1223||!stat;};});},"dojo/Evented":function(){define("dojo/Evented",["./aspect","./on"],function(_462,on){"use strict";var _463=_462.after;function _464(){};_464.prototype={on:function(type,_465){return on.parse(this,type,_465,function(_466,type){return _463(_466,"on"+type,_465,true);});},emit:function(type,_467){var args=[this];args.push.apply(args,arguments);return on.emit.apply(on,args);}};return _464;});},"dojo/mouse":function(){define("dojo/mouse",["./_base/kernel","./on","./has","./dom","./_base/window"],function(dojo,on,has,dom,win){has.add("dom-quirks",win.doc&&win.doc.compatMode=="BackCompat");has.add("events-mouseenter",win.doc&&"onmouseenter" in win.doc.createElement("div"));has.add("events-mousewheel",win.doc&&"onmousewheel" in win.doc);var _468;if(has("dom-quirks")||!has("dom-addeventlistener")){_468={LEFT:1,MIDDLE:4,RIGHT:2,isButton:function(e,_469){return e.button&_469;},isLeft:function(e){return e.button&1;},isMiddle:function(e){return e.button&4;},isRight:function(e){return e.button&2;}};}else{_468={LEFT:0,MIDDLE:1,RIGHT:2,isButton:function(e,_46a){return e.button==_46a;},isLeft:function(e){return e.button==0;},isMiddle:function(e){return e.button==1;},isRight:function(e){return e.button==2;}};}dojo.mouseButtons=_468;function _46b(type,_46c){var _46d=function(node,_46e){return on(node,type,function(evt){if(_46c){return _46c(evt,_46e);}if(!dom.isDescendant(evt.relatedTarget,node)){return _46e.call(this,evt);}});};_46d.bubble=function(_46f){return _46b(type,function(evt,_470){var _471=_46f(evt.target);var _472=evt.relatedTarget;if(_471&&(_471!=(_472&&_472.nodeType==1&&_46f(_472)))){return _470.call(_471,evt);}});};return _46d;};var _473;if(has("events-mousewheel")){_473="mousewheel";}else{_473=function(node,_474){return on(node,"DOMMouseScroll",function(evt){evt.wheelDelta=-evt.detail;_474.call(this,evt);});};}return {_eventHandler:_46b,enter:_46b("mouseover"),leave:_46b("mouseout"),wheel:_473,isLeft:_468.isLeft,isMiddle:_468.isMiddle,isRight:_468.isRight};});},"dojo/_base/xhr":function(){define("dojo/_base/xhr",["./kernel","./sniff","require","../io-query","../dom","../dom-form","./Deferred","./config","./json","./lang","./array","../on","../aspect","../request/watch","../request/xhr","../request/util"],function(dojo,has,_475,ioq,dom,_476,_477,_478,json,lang,_479,on,_47a,_47b,_47c,util){dojo._xhrObj=_47c._create;var cfg=dojo.config;dojo.objectToQuery=ioq.objectToQuery;dojo.queryToObject=ioq.queryToObject;dojo.fieldToObject=_476.fieldToObject;dojo.formToObject=_476.toObject;dojo.formToQuery=_476.toQuery;dojo.formToJson=_476.toJson;dojo._blockAsync=false;var _47d=dojo._contentHandlers=dojo.contentHandlers={"text":function(xhr){return xhr.responseText;},"json":function(xhr){return json.fromJson(xhr.responseText||null);},"json-comment-filtered":function(xhr){if(!_478.useCommentedJson){console.warn("Consider using the standard mimetype:application/json."+" json-commenting can introduce security issues. To"+" decrease the chances of hijacking, use the standard the 'json' handler and"+" prefix your json with: {}&&\n"+"Use djConfig.useCommentedJson=true to turn off this message.");}var _47e=xhr.responseText;var _47f=_47e.indexOf("/*");var _480=_47e.lastIndexOf("*/");if(_47f==-1||_480==-1){throw new Error("JSON was not comment filtered");}return json.fromJson(_47e.substring(_47f+2,_480));},"javascript":function(xhr){return dojo.eval(xhr.responseText);},"xml":function(xhr){var _481=xhr.responseXML;if(has("ie")){if((!_481||!_481.documentElement)){var ms=function(n){return "MSXML"+n+".DOMDocument";};var dp=["Microsoft.XMLDOM",ms(6),ms(4),ms(3),ms(2)];_479.some(dp,function(p){try{var dom=new ActiveXObject(p);dom.async=false;dom.loadXML(xhr.responseText);_481=dom;}catch(e){return false;}return true;});}}return _481;},"json-comment-optional":function(xhr){if(xhr.responseText&&/^[^{\[]*\/\*/.test(xhr.responseText)){return _47d["json-comment-filtered"](xhr);}else{return _47d["json"](xhr);}}};dojo._ioSetArgs=function(args,_482,_483,_484){var _485={args:args,url:args.url};var _486=null;if(args.form){var form=dom.byId(args.form);var _487=form.getAttributeNode("action");_485.url=_485.url||(_487?_487.value:null);_486=_476.toObject(form);}var _488=[{}];if(_486){_488.push(_486);}if(args.content){_488.push(args.content);}if(args.preventCache){_488.push({"dojo.preventCache":new Date().valueOf()});}_485.query=ioq.objectToQuery(lang.mixin.apply(null,_488));_485.handleAs=args.handleAs||"text";var d=new _477(function(dfd){dfd.canceled=true;_482&&_482(dfd);var err=dfd.ioArgs.error;if(!err){err=new Error("request cancelled");err.dojoType="cancel";dfd.ioArgs.error=err;}return err;});d.addCallback(_483);var ld=args.load;if(ld&&lang.isFunction(ld)){d.addCallback(function(_489){return ld.call(args,_489,_485);});}var err=args.error;if(err&&lang.isFunction(err)){d.addErrback(function(_48a){return err.call(args,_48a,_485);});}var _48b=args.handle;if(_48b&&lang.isFunction(_48b)){d.addBoth(function(_48c){return _48b.call(args,_48c,_485);});}d.addErrback(function(_48d){return _484(_48d,d);});if(cfg.ioPublish&&dojo.publish&&_485.args.ioPublish!==false){d.addCallbacks(function(res){dojo.publish("/dojo/io/load",[d,res]);return res;},function(res){dojo.publish("/dojo/io/error",[d,res]);return res;});d.addBoth(function(res){dojo.publish("/dojo/io/done",[d,res]);return res;});}d.ioArgs=_485;return d;};var _48e=function(dfd){var ret=_47d[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);return ret===undefined?null:ret;};var _48f=function(_490,dfd){if(!dfd.ioArgs.args.failOk){console.error(_490);}return _490;};var _491=function(dfd){if(_492<=0){_492=0;if(cfg.ioPublish&&dojo.publish&&(!dfd||dfd&&dfd.ioArgs.args.ioPublish!==false)){dojo.publish("/dojo/io/stop");}}};var _492=0;_47a.after(_47b,"_onAction",function(){_492-=1;});_47a.after(_47b,"_onInFlight",_491);dojo._ioCancelAll=_47b.cancelAll;dojo._ioNotifyStart=function(dfd){if(cfg.ioPublish&&dojo.publish&&dfd.ioArgs.args.ioPublish!==false){if(!_492){dojo.publish("/dojo/io/start");}_492+=1;dojo.publish("/dojo/io/send",[dfd]);}};dojo._ioWatch=function(dfd,_493,_494,_495){var args=dfd.ioArgs.options=dfd.ioArgs.args;lang.mixin(dfd,{response:dfd.ioArgs,isValid:function(_496){return _493(dfd);},isReady:function(_497){return _494(dfd);},handleResponse:function(_498){return _495(dfd);}});_47b(dfd);_491(dfd);};var _499="application/x-www-form-urlencoded";dojo._ioAddQueryToUrl=function(_49a){if(_49a.query.length){_49a.url+=(_49a.url.indexOf("?")==-1?"?":"&")+_49a.query;_49a.query=null;}};dojo.xhr=function(_49b,args,_49c){var rDfd;var dfd=dojo._ioSetArgs(args,function(dfd){rDfd&&rDfd.cancel();},_48e,_48f);var _49d=dfd.ioArgs;if("postData" in args){_49d.query=args.postData;}else{if("putData" in args){_49d.query=args.putData;}else{if("rawBody" in args){_49d.query=args.rawBody;}else{if((arguments.length>2&&!_49c)||"POST|PUT".indexOf(_49b.toUpperCase())===-1){dojo._ioAddQueryToUrl(_49d);}}}}var _49e={method:_49b,handleAs:"text",timeout:args.timeout,withCredentials:args.withCredentials,ioArgs:_49d};if(typeof args.headers!=="undefined"){_49e.headers=args.headers;}if(typeof args.contentType!=="undefined"){if(!_49e.headers){_49e.headers={};}_49e.headers["Content-Type"]=args.contentType;}if(typeof _49d.query!=="undefined"){_49e.data=_49d.query;}if(typeof args.sync!=="undefined"){_49e.sync=args.sync;}dojo._ioNotifyStart(dfd);try{rDfd=_47c(_49d.url,_49e,true);}catch(e){dfd.cancel();return dfd;}dfd.ioArgs.xhr=rDfd.response.xhr;rDfd.then(function(){dfd.resolve(dfd);}).otherwise(function(_49f){_49d.error=_49f;dfd.reject(_49f);});return dfd;};dojo.xhrGet=function(args){return dojo.xhr("GET",args);};dojo.rawXhrPost=dojo.xhrPost=function(args){return dojo.xhr("POST",args,true);};dojo.rawXhrPut=dojo.xhrPut=function(args){return dojo.xhr("PUT",args,true);};dojo.xhrDelete=function(args){return dojo.xhr("DELETE",args);};dojo._isDocumentOk=function(x){return util.checkStatus(x.status);};dojo._getText=function(url){var _4a0;dojo.xhrGet({url:url,sync:true,load:function(text){_4a0=text;}});return _4a0;};lang.mixin(dojo.xhr,{_xhrObj:dojo._xhrObj,fieldToObject:_476.fieldToObject,formToObject:_476.toObject,objectToQuery:ioq.objectToQuery,formToQuery:_476.toQuery,formToJson:_476.toJson,queryToObject:ioq.queryToObject,contentHandlers:_47d,_ioSetArgs:dojo._ioSetArgs,_ioCancelAll:dojo._ioCancelAll,_ioNotifyStart:dojo._ioNotifyStart,_ioWatch:dojo._ioWatch,_ioAddQueryToUrl:dojo._ioAddQueryToUrl,_isDocumentOk:dojo._isDocumentOk,_getText:dojo._getText,get:dojo.xhrGet,post:dojo.xhrPost,put:dojo.xhrPut,del:dojo.xhrDelete});return dojo.xhr;});},"dojo/topic":function(){define("dojo/topic",["./Evented"],function(_4a1){var hub=new _4a1;return {publish:function(_4a2,_4a3){return hub.emit.apply(hub,arguments);},subscribe:function(_4a4,_4a5){return hub.on.apply(hub,arguments);}};});},"dojo/loadInit":function(){define("dojo/loadInit",["./_base/loader"],function(_4a6){return {dynamic:0,normalize:function(id){return id;},load:_4a6.loadInit};});},"dojo/_base/unload":function(){define(["./kernel","./lang","../on"],function(dojo,lang,on){var win=window;var _4a7={addOnWindowUnload:function(obj,_4a8){if(!dojo.windowUnloaded){on(win,"unload",(dojo.windowUnloaded=function(){}));}on(win,"unload",lang.hitch(obj,_4a8));},addOnUnload:function(obj,_4a9){on(win,"beforeunload",lang.hitch(obj,_4a9));}};dojo.addOnWindowUnload=_4a7.addOnWindowUnload;dojo.addOnUnload=_4a7.addOnUnload;return _4a7;});},"dojo/Deferred":function(){define(["./has","./_base/lang","./errors/CancelError","./promise/Promise","./promise/instrumentation"],function(has,lang,_4aa,_4ab,_4ac){"use strict";var _4ad=0,_4ae=1,_4af=2;var _4b0="This deferred has already been fulfilled.";var _4b1=Object.freeze||function(){};var _4b2=function(_4b3,type,_4b4,_4b5,_4b6){if(1){if(type===_4af&&_4b7.instrumentRejected&&_4b3.length===0){_4b7.instrumentRejected(_4b4,false,_4b5,_4b6);}}for(var i=0;i<_4b3.length;i++){_4b8(_4b3[i],type,_4b4,_4b5);}};var _4b8=function(_4b9,type,_4ba,_4bb){var func=_4b9[type];var _4bc=_4b9.deferred;if(func){try{var _4bd=func(_4ba);if(_4bd&&typeof _4bd.then==="function"){_4b9.cancel=_4bd.cancel;_4bd.then(_4be(_4bc,_4ae),_4be(_4bc,_4af),_4be(_4bc,_4ad));return;}_4bf(_4bc,_4ae,_4bd);}catch(error){_4bf(_4bc,_4af,error);}}else{_4bf(_4bc,type,_4ba);}if(1){if(type===_4af&&_4b7.instrumentRejected){_4b7.instrumentRejected(_4ba,!!func,_4bb,_4bc.promise);}}};var _4be=function(_4c0,type){return function(_4c1){_4bf(_4c0,type,_4c1);};};var _4bf=function(_4c2,type,_4c3){if(!_4c2.isCanceled()){switch(type){case _4ad:_4c2.progress(_4c3);break;case _4ae:_4c2.resolve(_4c3);break;case _4af:_4c2.reject(_4c3);break;}}};var _4b7=function(_4c4){var _4c5=this.promise=new _4ab();var _4c6=this;var _4c7,_4c8,_4c9;var _4ca=false;var _4cb=[];if(1&&Error.captureStackTrace){Error.captureStackTrace(_4c6,_4b7);Error.captureStackTrace(_4c5,_4b7);}this.isResolved=_4c5.isResolved=function(){return _4c7===_4ae;};this.isRejected=_4c5.isRejected=function(){return _4c7===_4af;};this.isFulfilled=_4c5.isFulfilled=function(){return !!_4c7;};this.isCanceled=_4c5.isCanceled=function(){return _4ca;};this.progress=function(_4cc,_4cd){if(!_4c7){_4b2(_4cb,_4ad,_4cc,null,_4c6);return _4c5;}else{if(_4cd===true){throw new Error(_4b0);}else{return _4c5;}}};this.resolve=function(_4ce,_4cf){if(!_4c7){_4b2(_4cb,_4c7=_4ae,_4c8=_4ce,null,_4c6);_4cb=null;return _4c5;}else{if(_4cf===true){throw new Error(_4b0);}else{return _4c5;}}};var _4d0=this.reject=function(_4d1,_4d2){if(!_4c7){if(1&&Error.captureStackTrace){Error.captureStackTrace(_4c9={},_4d0);}_4b2(_4cb,_4c7=_4af,_4c8=_4d1,_4c9,_4c6);_4cb=null;return _4c5;}else{if(_4d2===true){throw new Error(_4b0);}else{return _4c5;}}};this.then=_4c5.then=function(_4d3,_4d4,_4d5){var _4d6=[_4d5,_4d3,_4d4];_4d6.cancel=_4c5.cancel;_4d6.deferred=new _4b7(function(_4d7){return _4d6.cancel&&_4d6.cancel(_4d7);});if(_4c7&&!_4cb){_4b8(_4d6,_4c7,_4c8,_4c9);}else{_4cb.push(_4d6);}return _4d6.deferred.promise;};this.cancel=_4c5.cancel=function(_4d8,_4d9){if(!_4c7){if(_4c4){var _4da=_4c4(_4d8);_4d8=typeof _4da==="undefined"?_4d8:_4da;}_4ca=true;if(!_4c7){if(typeof _4d8==="undefined"){_4d8=new _4aa();}_4d0(_4d8);return _4d8;}else{if(_4c7===_4af&&_4c8===_4d8){return _4d8;}}}else{if(_4d9===true){throw new Error(_4b0);}}};_4b1(_4c5);};_4b7.prototype.toString=function(){return "[object Deferred]";};if(_4ac){_4ac(_4b7);}return _4b7;});},"dojo/_base/NodeList":function(){define("dojo/_base/NodeList",["./kernel","../query","./array","./html","../NodeList-dom"],function(dojo,_4db,_4dc){var _4dd=_4db.NodeList,nlp=_4dd.prototype;nlp.connect=_4dd._adaptAsForEach(function(){return dojo.connect.apply(this,arguments);});nlp.coords=_4dd._adaptAsMap(dojo.coords);_4dd.events=["blur","focus","change","click","error","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","submit"];_4dc.forEach(_4dd.events,function(evt){var _4de="on"+evt;nlp[_4de]=function(a,b){return this.connect(_4de,a,b);};});dojo.NodeList=_4dd;return _4dd;});},"dojo/_base/Color":function(){define(["./kernel","./lang","./array","./config"],function(dojo,lang,_4df,_4e0){var _4e1=dojo.Color=function(_4e2){if(_4e2){this.setColor(_4e2);}};_4e1.named={"black":[0,0,0],"silver":[192,192,192],"gray":[128,128,128],"white":[255,255,255],"maroon":[128,0,0],"red":[255,0,0],"purple":[128,0,128],"fuchsia":[255,0,255],"green":[0,128,0],"lime":[0,255,0],"olive":[128,128,0],"yellow":[255,255,0],"navy":[0,0,128],"blue":[0,0,255],"teal":[0,128,128],"aqua":[0,255,255],"transparent":_4e0.transparentColor||[0,0,0,0]};lang.extend(_4e1,{r:255,g:255,b:255,a:1,_set:function(r,g,b,a){var t=this;t.r=r;t.g=g;t.b=b;t.a=a;},setColor:function(_4e3){if(lang.isString(_4e3)){_4e1.fromString(_4e3,this);}else{if(lang.isArray(_4e3)){_4e1.fromArray(_4e3,this);}else{this._set(_4e3.r,_4e3.g,_4e3.b,_4e3.a);if(!(_4e3 instanceof _4e1)){this.sanitize();}}}return this;},sanitize:function(){return this;},toRgb:function(){var t=this;return [t.r,t.g,t.b];},toRgba:function(){var t=this;return [t.r,t.g,t.b,t.a];},toHex:function(){var arr=_4df.map(["r","g","b"],function(x){var s=this[x].toString(16);return s.length<2?"0"+s:s;},this);return "#"+arr.join("");},toCss:function(_4e4){var t=this,rgb=t.r+", "+t.g+", "+t.b;return (_4e4?"rgba("+rgb+", "+t.a:"rgb("+rgb)+")";},toString:function(){return this.toCss(true);}});_4e1.blendColors=dojo.blendColors=function(_4e5,end,_4e6,obj){var t=obj||new _4e1();_4df.forEach(["r","g","b","a"],function(x){t[x]=_4e5[x]+(end[x]-_4e5[x])*_4e6;if(x!="a"){t[x]=Math.round(t[x]);}});return t.sanitize();};_4e1.fromRgb=dojo.colorFromRgb=function(_4e7,obj){var m=_4e7.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);return m&&_4e1.fromArray(m[1].split(/\s*,\s*/),obj);};_4e1.fromHex=dojo.colorFromHex=function(_4e8,obj){var t=obj||new _4e1(),bits=(_4e8.length==4)?4:8,mask=(1<>=bits;t[x]=bits==4?17*c:c;});t.a=1;return t;};_4e1.fromArray=dojo.colorFromArray=function(a,obj){var t=obj||new _4e1();t._set(Number(a[0]),Number(a[1]),Number(a[2]),Number(a[3]));if(isNaN(t.a)){t.a=1;}return t.sanitize();};_4e1.fromString=dojo.colorFromString=function(str,obj){var a=_4e1.named[str];return a&&_4e1.fromArray(a,obj)||_4e1.fromRgb(str,obj)||_4e1.fromHex(str,obj);};return _4e1;});},"dojo/promise/instrumentation":function(){define(["./tracer","../has","../_base/lang","../_base/array"],function(_4e9,has,lang,_4ea){function _4eb(_4ec,_4ed,_4ee){var _4ef="";if(_4ec&&_4ec.stack){_4ef+=_4ec.stack;}if(_4ed&&_4ed.stack){_4ef+="\n ----------------------------------------\n rejected"+_4ed.stack.split("\n").slice(1).join("\n").replace(/^\s+/," ");}if(_4ee&&_4ee.stack){_4ef+="\n ----------------------------------------\n"+_4ee.stack;}console.error(_4ec,_4ef);};function _4f0(_4f1,_4f2,_4f3,_4f4){if(!_4f2){_4eb(_4f1,_4f3,_4f4);}};var _4f5=[];var _4f6=false;var _4f7=1000;function _4f8(_4f9,_4fa,_4fb,_4fc){if(_4fa){_4ea.some(_4f5,function(obj,ix){if(obj.error===_4f9){_4f5.splice(ix,1);return true;}});}else{if(!_4ea.some(_4f5,function(obj){return obj.error===_4f9;})){_4f5.push({error:_4f9,rejection:_4fb,deferred:_4fc,timestamp:new Date().getTime()});}}if(!_4f6){_4f6=setTimeout(_4fd,_4f7);}};function _4fd(){var now=new Date().getTime();var _4fe=now-_4f7;_4f5=_4ea.filter(_4f5,function(obj){if(obj.timestamp<_4fe){_4eb(obj.error,obj.rejection,obj.deferred);return false;}return true;});if(_4f5.length){_4f6=setTimeout(_4fd,_4f5[0].timestamp+_4f7-now);}};return function(_4ff){var _500=has("config-useDeferredInstrumentation");if(_500){_4e9.on("resolved",lang.hitch(console,"log","resolved"));_4e9.on("rejected",lang.hitch(console,"log","rejected"));_4e9.on("progress",lang.hitch(console,"log","progress"));var args=[];if(typeof _500==="string"){args=_500.split(",");_500=args.shift();}if(_500==="report-rejections"){_4ff.instrumentRejected=_4f0;}else{if(_500==="report-unhandled-rejections"||_500===true||_500===1){_4ff.instrumentRejected=_4f8;_4f7=parseInt(args[0],10)||_4f7;}else{throw new Error("Unsupported instrumentation usage <"+_500+">");}}}};});},"dojo/selector/_loader":function(){define(["../has","require"],function(has,_501){"use strict";var _502=document.createElement("div");has.add("dom-qsa2.1",!!_502.querySelectorAll);has.add("dom-qsa3",function(){try{_502.innerHTML="

";return _502.querySelectorAll(".TEST:empty").length==1;}catch(e){}});var _503;var acme="./acme",lite="./lite";return {load:function(id,_504,_505,_506){var req=_501;id=id=="default"?has("config-selectorEngine")||"css3":id;id=id=="css2"||id=="lite"?lite:id=="css2.1"?has("dom-qsa2.1")?lite:acme:id=="css3"?has("dom-qsa3")?lite:acme:id=="acme"?acme:(req=_504)&&id;if(id.charAt(id.length-1)=="?"){id=id.substring(0,id.length-1);var _507=true;}if(_507&&(has("dom-compliant-qsa")||_503)){return _505(_503);}req([id],function(_508){if(id!="./lite"){_503=_508;}_505(_508);});}};});},"dojo/promise/Promise":function(){define(["../_base/lang"],function(lang){"use strict";function _509(){throw new TypeError("abstract");};return lang.extend(function Promise(){},{then:function(_50a,_50b,_50c){_509();},cancel:function(_50d,_50e){_509();},isResolved:function(){_509();},isRejected:function(){_509();},isFulfilled:function(){_509();},isCanceled:function(){_509();},always:function(_50f){return this.then(_50f,_50f);},otherwise:function(_510){return this.then(null,_510);},trace:function(){return this;},traceRejected:function(){return this;},toString:function(){return "[object Promise]";}});});},"dojo/request/watch":function(){define(["./util","../errors/RequestTimeoutError","../errors/CancelError","../_base/array","../_base/window","../has!host-browser?dom-addeventlistener?:../on:"],function(util,_511,_512,_513,win,on){var _514=null,_515=[];function _516(){var now=+(new Date);for(var i=0,dfd;i<_515.length&&(dfd=_515[i]);i++){var _517=dfd.response,_518=_517.options;if((dfd.isCanceled&&dfd.isCanceled())||(dfd.isValid&&!dfd.isValid(_517))){_515.splice(i--,1);_519._onAction&&_519._onAction();}else{if(dfd.isReady&&dfd.isReady(_517)){_515.splice(i--,1);dfd.handleResponse(_517);_519._onAction&&_519._onAction();}else{if(dfd.startTime){if(dfd.startTime+(_518.timeout||0)-1){var _52e=type.split(/\s*,\s*/);var _52f=[];var i=0;var _530;while(_530=_52e[i++]){_52f.push(_52b(_529,_530,_52a,_52c,_52d));}_52f.remove=function(){for(var i=0;i<_52f.length;i++){_52f[i].remove();}};return _52f;}return _52b(_529,type,_52a,_52c,_52d);};var _531=/^touch/;function _51f(_532,type,_533,_534,_535){var _536=type.match(/(.*):(.*)/);if(_536){type=_536[2];_536=_536[1];return on.selector(_536,type).call(_535,_532,_533);}if(has("touch")){if(_531.test(type)){_533=_537(_533);}if(!has("event-orientationchange")&&(type=="orientationchange")){type="resize";_532=window;_533=_537(_533);}}if(_538){_533=_538(_533);}if(_532.addEventListener){var _539=type in _53a,_53b=_539?_53a[type]:type;_532.addEventListener(_53b,_533,_539);return {remove:function(){_532.removeEventListener(_53b,_533,_539);}};}type="on"+type;if(_53c&&_532.attachEvent){return _53c(_532,type,_533);}throw new Error("Target must be an event emitter");};on.selector=function(_53d,_53e,_53f){return function(_540,_541){var _542=typeof _53d=="function"?{matches:_53d}:this,_543=_53e.bubble;function _544(_545){_542=_542&&_542.matches?_542:dojo.query;while(!_542.matches(_545,_53d,_540)){if(_545==_540||_53f===false||!(_545=_545.parentNode)||_545.nodeType!=1){return;}}return _545;};if(_543){return on(_540,_543(_544),_541);}return on(_540,_53e,function(_546){var _547=_544(_546.target);return _547&&_541.call(_547,_546);});};};function _548(){this.cancelable=false;};function _549(){this.bubbles=false;};var _54a=[].slice,_54b=on.emit=function(_54c,type,_54d){var args=_54a.call(arguments,2);var _54e="on"+type;if("parentNode" in _54c){var _54f=args[0]={};for(var i in _54d){_54f[i]=_54d[i];}_54f.preventDefault=_548;_54f.stopPropagation=_549;_54f.target=_54c;_54f.type=type;_54d=_54f;}do{_54c[_54e]&&_54c[_54e].apply(_54c,args);}while(_54d&&_54d.bubbles&&(_54c=_54c.parentNode));return _54d&&_54d.cancelable&&_54d;};var _53a={};if(!has("event-stopimmediatepropagation")){var _550=function(){this.immediatelyStopped=true;this.modified=true;};var _538=function(_551){return function(_552){if(!_552.immediatelyStopped){_552.stopImmediatePropagation=_550;return _551.apply(this,arguments);}};};}if(has("dom-addeventlistener")){_53a={focusin:"focus",focusout:"blur"};if(has("opera")){_53a.keydown="keypress";}on.emit=function(_553,type,_554){if(_553.dispatchEvent&&document.createEvent){var _555=_553.ownerDocument.createEvent("HTMLEvents");_555.initEvent(type,!!_554.bubbles,!!_554.cancelable);for(var i in _554){var _556=_554[i];if(!(i in _555)){_555[i]=_554[i];}}return _553.dispatchEvent(_555)&&_555;}return _54b.apply(on,arguments);};}else{on._fixEvent=function(evt,_557){if(!evt){var w=_557&&(_557.ownerDocument||_557.document||_557).parentWindow||window;evt=w.event;}if(!evt){return evt;}if(_558&&evt.type==_558.type){evt=_558;}if(!evt.target){evt.target=evt.srcElement;evt.currentTarget=(_557||evt.srcElement);if(evt.type=="mouseover"){evt.relatedTarget=evt.fromElement;}if(evt.type=="mouseout"){evt.relatedTarget=evt.toElement;}if(!evt.stopPropagation){evt.stopPropagation=_559;evt.preventDefault=_55a;}switch(evt.type){case "keypress":var c=("charCode" in evt?evt.charCode:evt.keyCode);if(c==10){c=0;evt.keyCode=13;}else{if(c==13||c==27){c=0;}else{if(c==3){c=99;}}}evt.charCode=c;_55b(evt);break;}}return evt;};var _558,_55c=function(_55d){this.handle=_55d;};_55c.prototype.remove=function(){delete _dojoIEListeners_[this.handle];};var _55e=function(_55f){return function(evt){evt=on._fixEvent(evt,this);var _560=_55f.call(this,evt);if(evt.modified){if(!_558){setTimeout(function(){_558=null;});}_558=evt;}return _560;};};var _53c=function(_561,type,_562){_562=_55e(_562);if(((_561.ownerDocument?_561.ownerDocument.parentWindow:_561.parentWindow||_561.window||window)!=top||has("jscript")<5.8)&&!has("config-_allow_leaks")){if(typeof _dojoIEListeners_=="undefined"){_dojoIEListeners_=[];}var _563=_561[type];if(!_563||!_563.listeners){var _564=_563;_563=Function("event","var callee = arguments.callee; for(var i = 0; i0){return _578.lastIndexOf(a,x,from);}var l=a&&a.length||0,end=up?l+_577:_576,i;if(from===u){i=up?_576:l+_577;}else{if(from<0){i=l+from;if(i<0){i=_576;}}else{i=from>=l?l+_577:from;}}if(l&&typeof a=="string"){a=a.split("");}for(;i!=end;i+=_575){if(a[i]==x){return i;}}return -1;};};var _578={every:_571(false),some:_571(true),indexOf:_574(true),lastIndexOf:_574(false),forEach:function(arr,_579,_57a){var i=0,l=arr&&arr.length||0;if(l&&typeof arr=="string"){arr=arr.split("");}if(typeof _579=="string"){_579=_56f[_579]||_570(_579);}if(_57a){for(;i=0);},add:function addClass(node,_595){node=dom.byId(node);_595=_592(_595);var cls=node[_590],_596;cls=cls?" "+cls+" ":" ";_596=cls.length;for(var i=0,len=_595.length,c;i=0),has.add("khtml",dav.indexOf("Konqueror")>=0?tv:undefined);has.add("webkit",parseFloat(dua.split("WebKit/")[1])||undefined);has.add("chrome",parseFloat(dua.split("Chrome/")[1])||undefined);has.add("safari",dav.indexOf("Safari")>=0&&!has("chrome")?parseFloat(dav.split("Version/")[1]):undefined);has.add("mac",dav.indexOf("Macintosh")>=0);has.add("quirks",document.compatMode=="BackCompat");has.add("ios",/iPhone|iPod|iPad/.test(dua));has.add("android",parseFloat(dua.split("Android ")[1])||undefined);if(!has("webkit")){if(dua.indexOf("Opera")>=0){has.add("opera",tv>=9.8?parseFloat(dua.split("Version/")[1])||tv:tv);}if(dua.indexOf("Gecko")>=0&&!has("khtml")&&!has("webkit")){has.add("mozilla",tv);}if(has("mozilla")){has.add("ff",parseFloat(dua.split("Firefox/")[1]||dua.split("Minefield/")[1])||undefined);}if(document.all&&!has("opera")){var isIE=parseFloat(dav.split("MSIE ")[1])||undefined;var mode=document.documentMode;if(mode&&mode!=5&&Math.floor(isIE)!=mode){isIE=mode;}has.add("ie",isIE);}has.add("wii",typeof opera!="undefined"&&opera.wiiremote);}}return has;});},"dojo/request/handlers":function(){define(["../json","../_base/kernel","../_base/array","../has"],function(JSON,_5aa,_5ab,has){has.add("activex",typeof ActiveXObject!=="undefined");var _5ac;if(has("activex")){var dp=["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML.DOMDocument"];_5ac=function(_5ad){var _5ae=_5ad.data;if(!_5ae||!_5ae.documentElement){var text=_5ad.text;_5ab.some(dp,function(p){try{var dom=new ActiveXObject(p);dom.async=false;dom.loadXML(text);_5ae=dom;}catch(e){return false;}return true;});}return _5ae;};}var _5af={"javascript":function(_5b0){return _5aa.eval(_5b0.text||"");},"json":function(_5b1){return JSON.parse(_5b1.text||null);},"xml":_5ac};function _5b2(_5b3){var _5b4=_5af[_5b3.options.handleAs];_5b3.data=_5b4?_5b4(_5b3):(_5b3.data||_5b3.text);return _5b3;};_5b2.register=function(name,_5b5){_5af[name]=_5b5;};return _5b2;});},"dojo/aspect":function(){define("dojo/aspect",[],function(){"use strict";var _5b6,_5b7=0;function _5b8(_5b9,type,_5ba,_5bb){var _5bc=_5b9[type];var _5bd=type=="around";var _5be;if(_5bd){var _5bf=_5ba(function(){return _5bc.advice(this,arguments);});_5be={remove:function(){_5be.cancelled=true;},advice:function(_5c0,args){return _5be.cancelled?_5bc.advice(_5c0,args):_5bf.apply(_5c0,args);}};}else{_5be={remove:function(){var _5c1=_5be.previous;var next=_5be.next;if(!next&&!_5c1){delete _5b9[type];}else{if(_5c1){_5c1.next=next;}else{_5b9[type]=next;}if(next){next.previous=_5c1;}}},id:_5b7++,advice:_5ba,receiveArguments:_5bb};}if(_5bc&&!_5bd){if(type=="after"){var next=_5bc;while(next){_5bc=next;next=next.next;}_5bc.next=_5be;_5be.previous=_5bc;}else{if(type=="before"){_5b9[type]=_5be;_5be.next=_5bc;_5bc.previous=_5be;}}}else{_5b9[type]=_5be;}return _5be;};function _5c2(type){return function(_5c3,_5c4,_5c5,_5c6){var _5c7=_5c3[_5c4],_5c8;if(!_5c7||_5c7.target!=_5c3){_5c3[_5c4]=_5c8=function(){var _5c9=_5b7;var args=arguments;var _5ca=_5c8.before;while(_5ca){args=_5ca.advice.apply(this,args)||args;_5ca=_5ca.next;}if(_5c8.around){var _5cb=_5c8.around.advice(this,args);}var _5cc=_5c8.after;while(_5cc&&_5cc.id<_5c9){if(_5cc.receiveArguments){var _5cd=_5cc.advice.apply(this,args);_5cb=_5cd===_5b6?_5cb:_5cd;}else{_5cb=_5cc.advice.call(this,_5cb,args);}_5cc=_5cc.next;}return _5cb;};if(_5c7){_5c8.around={advice:function(_5ce,args){return _5c7.apply(_5ce,args);}};}_5c8.target=_5c3;}var _5cf=_5b8((_5c8||_5c7),type,_5c5,_5c6);_5c5=null;return _5cf;};};var _5d0=_5c2("after");var _5d1=_5c2("before");var _5d2=_5c2("around");return {before:_5d1,around:_5d2,after:_5d0};});},"dojo/ready":function(){define("dojo/ready",["./_base/kernel","./has","require","./domReady","./_base/lang"],function(dojo,has,_5d3,_5d4,lang){var _5d5=0,_5d6,_5d7=[],_5d8=0,_5d9=function(){_5d5=1;dojo._postLoad=dojo.config.afterOnLoad=true;if(_5d7.length){_5d6(_5da);}},_5da=function(){if(_5d5&&!_5d8&&_5d7.length){_5d8=1;var f=_5d7.shift();try{f();}finally{_5d8=0;}_5d8=0;if(_5d7.length){_5d6(_5da);}}};_5d3.on("idle",_5da);_5d6=function(){if(_5d3.idle()){_5da();}};var _5db=dojo.ready=dojo.addOnLoad=function(_5dc,_5dd,_5de){var _5df=lang._toArray(arguments);if(typeof _5dc!="number"){_5de=_5dd;_5dd=_5dc;_5dc=1000;}else{_5df.shift();}_5de=_5de?lang.hitch.apply(dojo,_5df):function(){_5dd();};_5de.priority=_5dc;for(var i=0;i<_5d7.length&&_5dc>=_5d7[i].priority;i++){}_5d7.splice(i,0,_5de);_5d6();};1||has.add("dojo-config-addOnLoad",1);if(1){var dca=dojo.config.addOnLoad;if(dca){_5db[(lang.isArray(dca)?"apply":"call")](dojo,dca);}}if(1&&dojo.config.parseOnLoad&&!dojo.isAsync){_5db(99,function(){if(!dojo.parser){dojo.deprecated("Add explicit require(['dojo/parser']);","","2.0");_5d3(["dojo/parser"]);}});}if(1){_5d4(_5d9);}else{_5d9();}return _5db;});},"dojo/_base/connect":function(){define(["./kernel","../on","../topic","../aspect","./event","../mouse","./sniff","./lang","../keys"],function(dojo,on,hub,_5e0,_5e1,_5e2,has,lang){has.add("events-keypress-typed",function(){var _5e3={charCode:0};try{_5e3=document.createEvent("KeyboardEvent");(_5e3.initKeyboardEvent||_5e3.initKeyEvent).call(_5e3,"keypress",true,true,null,false,false,false,false,9,3);}catch(e){}return _5e3.charCode==0&&!has("opera");});function _5e4(obj,_5e5,_5e6,_5e7,_5e8){_5e7=lang.hitch(_5e6,_5e7);if(!obj||!(obj.addEventListener||obj.attachEvent)){return _5e0.after(obj||dojo.global,_5e5,_5e7,true);}if(typeof _5e5=="string"&&_5e5.substring(0,2)=="on"){_5e5=_5e5.substring(2);}if(!obj){obj=dojo.global;}if(!_5e8){switch(_5e5){case "keypress":_5e5=_5e9;break;case "mouseenter":_5e5=_5e2.enter;break;case "mouseleave":_5e5=_5e2.leave;break;}}return on(obj,_5e5,_5e7,_5e8);};var _5ea={106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39,229:113};var _5eb=has("mac")?"metaKey":"ctrlKey";var _5ec=function(evt,_5ed){var faux=lang.mixin({},evt,_5ed);_5ee(faux);faux.preventDefault=function(){evt.preventDefault();};faux.stopPropagation=function(){evt.stopPropagation();};return faux;};function _5ee(evt){evt.keyChar=evt.charCode?String.fromCharCode(evt.charCode):"";evt.charOrCode=evt.keyChar||evt.keyCode;};var _5e9;if(has("events-keypress-typed")){var _5ef=function(e,code){try{return (e.keyCode=code);}catch(e){return 0;}};_5e9=function(_5f0,_5f1){var _5f2=on(_5f0,"keydown",function(evt){var k=evt.keyCode;var _5f3=(k!=13)&&k!=32&&(k!=27||!has("ie"))&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222)&&k!=229;if(_5f3||evt.ctrlKey){var c=_5f3?0:k;if(evt.ctrlKey){if(k==3||k==13){return _5f1.call(evt.currentTarget,evt);}else{if(c>95&&c<106){c-=48;}else{if((!evt.shiftKey)&&(c>=65&&c<=90)){c+=32;}else{c=_5ea[c]||c;}}}}var faux=_5ec(evt,{type:"keypress",faux:true,charCode:c});_5f1.call(evt.currentTarget,faux);if(has("ie")){_5ef(evt,faux.keyCode);}}});var _5f4=on(_5f0,"keypress",function(evt){var c=evt.charCode;c=c>=32?c:0;evt=_5ec(evt,{charCode:c,faux:true});return _5f1.call(this,evt);});return {remove:function(){_5f2.remove();_5f4.remove();}};};}else{if(has("opera")){_5e9=function(_5f5,_5f6){return on(_5f5,"keypress",function(evt){var c=evt.which;if(c==3){c=99;}c=c<32&&!evt.shiftKey?0:c;if(evt.ctrlKey&&!evt.shiftKey&&c>=65&&c<=90){c+=32;}return _5f6.call(this,_5ec(evt,{charCode:c}));});};}else{_5e9=function(_5f7,_5f8){return on(_5f7,"keypress",function(evt){_5ee(evt);return _5f8.call(this,evt);});};}}var _5f9={_keypress:_5e9,connect:function(obj,_5fa,_5fb,_5fc,_5fd){var a=arguments,args=[],i=0;args.push(typeof a[0]=="string"?null:a[i++],a[i++]);var a1=a[i+1];args.push(typeof a1=="string"||typeof a1=="function"?a[i++]:null,a[i++]);for(var l=a.length;i= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + +/* + This is an optimized version of Dojo, built for deployment and not for + development. To get sources and documentation, please visit: + + http://dojotoolkit.org +*/ + +//>>built +(function(_1,_2){var _3=function(){},_4=function(it){for(var p in it){return 0;}return 1;},_5={}.toString,_6=function(it){return _5.call(it)=="[object Function]";},_7=function(it){return _5.call(it)=="[object String]";},_8=function(it){return _5.call(it)=="[object Array]";},_9=function(_a,_b){if(_a){for(var i=0;i<_a.length;){_b(_a[i++]);}}},_c=function(_d,_e){for(var p in _e){_d[p]=_e[p];}return _d;},_f=function(_10,_11){return _c(new Error(_10),{src:"dojoLoader",info:_11});},_12=1,uid=function(){return "_"+_12++;},req=function(_13,_14,_15){return _16(_13,_14,_15,0,req);},_17=this,doc=_17.document,_18=doc&&doc.createElement("DiV"),has=req.has=function(_19){return _6(_1a[_19])?(_1a[_19]=_1a[_19](_17,doc,_18)):_1a[_19];},_1a=has.cache=_2.hasCache;has.add=function(_1b,_1c,now,_1d){(_1a[_1b]===undefined||_1d)&&(_1a[_1b]=_1c);return now&&has(_1b);};0&&has.add("host-node",_1.has&&"host-node" in _1.has?_1.has["host-node"]:(typeof process=="object"&&process.versions&&process.versions.node&&process.versions.v8));if(0){require("./_base/configNode.js").config(_2);_2.loaderPatch.nodeRequire=require;}0&&has.add("host-rhino",_1.has&&"host-rhino" in _1.has?_1.has["host-rhino"]:(typeof load=="function"&&(typeof Packages=="function"||typeof Packages=="object")));if(0){for(var _1e=_1.baseUrl||".",arg,_1f=this.arguments,i=0;i<_1f.length;){arg=(_1f[i++]+"").split("=");if(arg[0]=="baseUrl"){_1e=arg[1];break;}}load(_1e+"/_base/configRhino.js");rhinoDojoConfig(_2,_1e,_1f);}for(var p in _1.has){has.add(p,_1.has[p],0,1);}var _20=1,_21=2,_22=3,_23=4,_24=5;if(0){_20="requested";_21="arrived";_22="not-a-module";_23="executing";_24="executed";}var _25=0,_26="sync",xd="xd",_27=[],_28=0,_29=_3,_2a=_3,_2b;if(1){req.isXdUrl=_3;req.initSyncLoader=function(_2c,_2d,_2e){if(!_28){_28=_2c;_29=_2d;_2a=_2e;}return {sync:_26,requested:_20,arrived:_21,nonmodule:_22,executing:_23,executed:_24,syncExecStack:_27,modules:_2f,execQ:_30,getModule:_31,injectModule:_32,setArrived:_33,signal:_34,finishExec:_35,execModule:_36,dojoRequirePlugin:_28,getLegacyMode:function(){return _25;},guardCheckComplete:_37};};if(1){var _38=location.protocol,_39=location.host;req.isXdUrl=function(url){if(/^\./.test(url)){return false;}if(/^\/\//.test(url)){return true;}var _3a=url.match(/^([^\/\:]+\:)\/+([^\/]+)/);return _3a&&(_3a[1]!=_38||(_39&&_3a[2]!=_39));};1||has.add("dojo-xhr-factory",1);has.add("dojo-force-activex-xhr",1&&!doc.addEventListener&&window.location.protocol=="file:");has.add("native-xhr",typeof XMLHttpRequest!="undefined");if(has("native-xhr")&&!has("dojo-force-activex-xhr")){_2b=function(){return new XMLHttpRequest();};}else{for(var _3b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],_3c,i=0;i<3;){try{_3c=_3b[i++];if(new ActiveXObject(_3c)){break;}}catch(e){}}_2b=function(){return new ActiveXObject(_3c);};}req.getXhr=_2b;has.add("dojo-gettext-api",1);req.getText=function(url,_3d,_3e){var xhr=_2b();xhr.open("GET",_3f(url),false);xhr.send(null);if(xhr.status==200||(!location.host&&!xhr.status)){if(_3e){_3e(xhr.responseText,_3d);}}else{throw _f("xhrFailed",xhr.status);}return xhr.responseText;};}}else{req.async=1;}var _40=new Function("return eval(arguments[0]);");req.eval=function(_41,_42){return _40(_41+"\r\n////@ sourceURL="+_42);};var _43={},_44="error",_34=req.signal=function(_45,_46){var _47=_43[_45];_9(_47&&_47.slice(0),function(_48){_48.apply(null,_8(_46)?_46:[_46]);});},on=req.on=function(_49,_4a){var _4b=_43[_49]||(_43[_49]=[]);_4b.push(_4a);return {remove:function(){for(var i=0;i<_4b.length;i++){if(_4b[i]===_4a){_4b.splice(i,1);return;}}}};};var _4c=[],_4d={},_4e=[],_4f={},map=req.map={},_50=[],_2f={},_51="",_52={},_53="url:",_54={},_55={};if(1){var _56=function(_57){var p,_58,_59,now,m;for(p in _54){_58=_54[p];_59=p.match(/^url\:(.+)/);if(_59){_52[_53+_5a(_59[1],_57)]=_58;}else{if(p=="*now"){now=_58;}else{if(p!="*noref"){m=_5b(p,_57);_52[m.mid]=_52[_53+m.url]=_58;}}}}if(now){now(_5c(_57));}_54={};},_5d=function(s){return s.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(c){return "\\"+c;});},_5e=function(map,_5f){_5f.splice(0,_5f.length);for(var p in map){_5f.push([p,map[p],new RegExp("^"+_5d(p)+"(/|$)"),p.length]);}_5f.sort(function(lhs,rhs){return rhs[3]-lhs[3];});return _5f;},_60=function(_61){var _62=_61.name;if(!_62){_62=_61;_61={name:_62};}_61=_c({main:"main"},_61);_61.location=_61.location?_61.location:_62;if(_61.packageMap){map[_62]=_61.packageMap;}if(!_61.main.indexOf("./")){_61.main=_61.main.substring(2);}_4f[_62]=_61;},_63=[],_64=function(_65,_66,_67){for(var p in _65){if(p=="waitSeconds"){req.waitms=(_65[p]||0)*1000;}if(p=="cacheBust"){_51=_65[p]?(_7(_65[p])?_65[p]:(new Date()).getTime()+""):"";}if(p=="baseUrl"||p=="combo"){req[p]=_65[p];}if(1&&p=="async"){var _68=_65[p];req.legacyMode=_25=(_7(_68)&&/sync|legacyAsync/.test(_68)?_68:(!_68?_26:false));req.async=!_25;}if(_65[p]!==_1a){req.rawConfig[p]=_65[p];p!="has"&&has.add("config-"+p,_65[p],0,_66);}}if(!req.baseUrl){req.baseUrl="./";}if(!/\/$/.test(req.baseUrl)){req.baseUrl+="/";}for(p in _65.has){has.add(p,_65.has[p],0,_66);}_9(_65.packages,_60);for(_1e in _65.packagePaths){_9(_65.packagePaths[_1e],function(_69){var _6a=_1e+"/"+_69;if(_7(_69)){_69={name:_69};}_69.location=_6a;_60(_69);});}_5e(_c(map,_65.map),_50);_9(_50,function(_6b){_6b[1]=_5e(_6b[1],[]);if(_6b[0]=="*"){_50.star=_6b;}});_5e(_c(_4d,_65.paths),_4e);_9(_65.aliases,function(_6c){if(_7(_6c[0])){_6c[0]=new RegExp("^"+_5d(_6c[0])+"$");}_4c.push(_6c);});if(_66){_63.push({config:_65.config});}else{for(p in _65.config){var _6d=_31(p,_67);_6d.config=_c(_6d.config||{},_65.config[p]);}}if(_65.cache){_56();_54=_65.cache;if(_65.cache["*noref"]){_56();}}_34("config",[_65,req.rawConfig]);};if(has("dojo-cdn")||1){var _6e=doc.getElementsByTagName("script"),i=0,_6f,_70,src,_71;while(i<_6e.length){_6f=_6e[i++];if((src=_6f.getAttribute("src"))&&(_71=src.match(/(((.*)\/)|^)dojo\.js(\W|$)/i))){_70=_71[3]||"";_2.baseUrl=_2.baseUrl||_70;src=(_6f.getAttribute("data-dojo-config")||_6f.getAttribute("djConfig"));if(src){_55=req.eval("({ "+src+" })","data-dojo-config");}if(0){var _72=_6f.getAttribute("data-main");if(_72){_55.deps=_55.deps||[_72];}}break;}}}if(0){try{if(window.parent!=window&&window.parent.require){var doh=window.parent.require("doh");doh&&_c(_55,doh.testConfig);}}catch(e){}}req.rawConfig={};_64(_2,1);if(has("dojo-cdn")){_4f.dojo.location=_70;if(_70){_70+="/";}_4f.dijit.location=_70+"../dijit/";_4f.dojox.location=_70+"../dojox/";}_64(_1,1);_64(_55,1);}else{_4d=_2.paths;_4e=_2.pathsMapProg;_4f=_2.packs;_4c=_2.aliases;_50=_2.mapProgs;_2f=_2.modules;_52=_2.cache;_51=_2.cacheBust;req.rawConfig=_2;}if(0){req.combo=req.combo||{add:_3};var _73=0,_74=[],_75=null;}var _76=function(_77){_37(function(){_9(_77.deps,_32);if(0&&_73&&!_75){_75=setTimeout(function(){_73=0;_75=null;req.combo.done(function(_78,url){var _79=function(){_7a(0,_78);_7b();};_74.push(_78);_7c=_78;req.injectUrl(url,_79,_78);_7c=0;},req);},0);}});},_16=function(a1,a2,a3,_7d,_7e){var _7f,_80;if(_7(a1)){_7f=_31(a1,_7d,true);if(_7f&&_7f.executed){return _7f.result;}throw _f("undefinedModule",a1);}if(!_8(a1)){_64(a1,0,_7d);a1=a2;a2=a3;}if(_8(a1)){if(!a1.length){a2&&a2();}else{_80="require*"+uid();for(var mid,_81=[],i=0;i_ab){_ac=_6(_ad[1])?mid.replace(_ad[0],_ad[1]):_ad[1];}});if(_ac){return _9c(_ac,0,_9e,_9f,_a0,_a1,_a2,_a3);}_a8=_9f[mid];if(_a8){return _a3?_82(_a8.pid,_a8.mid,_a8.pack,_a8.url):_9f[mid];}}_a7=_94(mid,_a2);if(_a7){url=_a7[1]+mid.substring(_a7[3]);}else{if(pid){url=_a4.location+"/"+_a5;}else{if(has("config-tlmSiblingOfDojo")){url="../"+mid;}else{url=mid;}}}if(!(/(^\/)|(\:)/.test(url))){url=_a0+url;}url+=".js";return _82(pid,mid,_a4,_96(url));},_5b=function(mid,_af){return _9c(mid,_af,_4f,_2f,req.baseUrl,_50,_4e);},_b0=function(_b1,_b2,_b3){return _b1.normalize?_b1.normalize(_b2,function(mid){return _b4(mid,_b3);}):_b4(_b2,_b3);},_b5=0,_31=function(mid,_b6,_b7){var _b8,_b9,_ba,_bb;_b8=mid.match(/^(.+?)\!(.*)$/);if(_b8){_b9=_31(_b8[1],_b6,_b7);if(1&&_25==_26&&!_b9.executed){_32(_b9);if(_b9.injected===_21&&!_b9.executed){_37(function(){_36(_b9);});}if(_b9.executed){_bc(_b9);}else{_30.unshift(_b9);}}if(_b9.executed===_24&&!_b9.load){_bc(_b9);}if(_b9.load){_ba=_b0(_b9,_b8[2],_b6);mid=(_b9.mid+"!"+(_b9.dynamic?++_b5+"!":"")+_ba);}else{_ba=_b8[2];mid=_b9.mid+"!"+(++_b5)+"!waitingForPlugin";}_bb={plugin:_b9,mid:mid,req:_5c(_b6),prid:_ba};}else{_bb=_5b(mid,_b6);}return _2f[_bb.mid]||(!_b7&&(_2f[_bb.mid]=_bb));},_b4=req.toAbsMid=function(mid,_bd){return _5b(mid,_bd).mid;},_5a=req.toUrl=function(_be,_bf){var _c0=_5b(_be+"/x",_bf),url=_c0.url;return _3f(_c0.pid===0?_be:url.substring(0,url.length-5));},_c1={injected:_21,executed:_24,def:_22,result:_22},_c2=function(mid){return _2f[mid]=_c({mid:mid},_c1);},_c3=_c2("require"),_c4=_c2("exports"),_c5=_c2("module"),_c6=function(_c7,_c8){req.trace("loader-run-factory",[_c7.mid]);var _c9=_c7.def,_ca;1&&_27.unshift(_c7);if(has("config-dojo-loader-catches")){try{_ca=_6(_c9)?_c9.apply(null,_c8):_c9;}catch(e){_34(_44,_c7.result=_f("factoryThrew",[_c7,e]));}}else{_ca=_6(_c9)?_c9.apply(null,_c8):_c9;}_c7.result=_ca===undefined&&_c7.cjs?_c7.cjs.exports:_ca;1&&_27.shift(_c7);},_cb={},_cc=0,_bc=function(_cd){var _ce=_cd.result;_cd.dynamic=_ce.dynamic;_cd.normalize=_ce.normalize;_cd.load=_ce.load;return _cd;},_cf=function(_d0){var map={};_9(_d0.loadQ,function(_d1){var _d2=_b0(_d0,_d1.prid,_d1.req.module),mid=_d0.dynamic?_d1.mid.replace(/waitingForPlugin$/,_d2):(_d0.mid+"!"+_d2),_d3=_c(_c({},_d1),{mid:mid,prid:_d2,injected:0});if(!_2f[mid]){_e5(_2f[mid]=_d3);}map[_d1.mid]=_2f[mid];_33(_d1);delete _2f[_d1.mid];});_d0.loadQ=0;var _d4=function(_d5){for(var _d6,_d7=_d5.deps||[],i=0;i<_d7.length;i++){_d6=map[_d7[i].mid];if(_d6){_d7[i]=_d6;}}};for(var p in _2f){_d4(_2f[p]);}_9(_30,_d4);},_35=function(_d8){req.trace("loader-finish-exec",[_d8.mid]);_d8.executed=_24;_d8.defOrder=_cc++;1&&_9(_d8.provides,function(cb){cb();});if(_d8.loadQ){_bc(_d8);_cf(_d8);}for(i=0;i<_30.length;){if(_30[i]===_d8){_30.splice(i,1);}else{i++;}}if(/^require\*/.test(_d8.mid)){delete _2f[_d8.mid];}},_d9=[],_36=function(_da,_db){if(_da.executed===_23){req.trace("loader-circular-dependency",[_d9.concat(_da.mid).join("->")]);return (!_da.def||_db)?_cb:(_da.cjs&&_da.cjs.exports);}if(!_da.executed){if(!_da.def){return _cb;}var mid=_da.mid,_dc=_da.deps||[],arg,_dd,_de=[],i=0;if(0){_d9.push(mid);req.trace("loader-exec-module",["exec",_d9.length,mid]);}_da.executed=_23;while(i<_dc.length){arg=_dc[i++];_dd=((arg===_c3)?_5c(_da):((arg===_c4)?_da.cjs.exports:((arg===_c5)?_da.cjs:_36(arg,_db))));if(_dd===_cb){_da.executed=0;req.trace("loader-exec-module",["abort",mid]);0&&_d9.pop();return _cb;}_de.push(_dd);}_c6(_da,_de);_35(_da);0&&_d9.pop();}return _da.result;},_84=0,_37=function(_df){try{_84++;_df();}finally{_84--;}if(_93()){_34("idle",[]);}},_7b=function(){if(_84){return;}_37(function(){_29();for(var _e0,_e1,i=0;i<_30.length;){_e0=_cc;_e1=_30[i];_36(_e1);if(_e0!=_cc){_29();i=0;}else{i++;}}});};if(0){req.undef=function(_e2,_e3){var _e4=_31(_e2,_e3);_33(_e4);delete _2f[_e4.mid];};}if(1){if(has("dojo-loader-eval-hint-url")===undefined){has.add("dojo-loader-eval-hint-url",1);}var _3f=function(url){url+="";return url+(_51?((/\?/.test(url)?"&":"?")+_51):"");},_e5=function(_e6){var _e7=_e6.plugin;if(_e7.executed===_24&&!_e7.load){_bc(_e7);}var _e8=function(def){_e6.result=def;_33(_e6);_35(_e6);_7b();};if(_e7.load){_e7.load(_e6.prid,_e6.req,_e8);}else{if(_e7.loadQ){_e7.loadQ.push(_e6);}else{_e7.loadQ=[_e6];_30.unshift(_e7);_32(_e7);}}},_8a=0,_7c=0,_e9=0,_8b=function(_ea,_eb){if(has("config-stripStrict")){_ea=_ea.replace(/"use strict"/g,"");}_e9=1;if(has("config-dojo-loader-catches")){try{if(_ea===_8a){_8a.call(null);}else{req.eval(_ea,has("dojo-loader-eval-hint-url")?_eb.url:_eb.mid);}}catch(e){_34(_44,_f("evalModuleThrew",_eb));}}else{if(_ea===_8a){_8a.call(null);}else{req.eval(_ea,has("dojo-loader-eval-hint-url")?_eb.url:_eb.mid);}}_e9=0;},_32=function(_ec){var mid=_ec.mid,url=_ec.url;if(_ec.executed||_ec.injected||_8d[mid]||(_ec.url&&((_ec.pack&&_8d[_ec.url]===_ec.pack)||_8d[_ec.url]==1))){return;}_8e(_ec);if(0){var _ed=0;if(_ec.plugin&&_ec.plugin.isCombo){req.combo.add(_ec.plugin.mid,_ec.prid,0,req);_ed=1;}else{if(!_ec.plugin){_ed=req.combo.add(0,_ec.mid,_ec.url,req);}}if(_ed){_73=1;return;}}if(_ec.plugin){_e5(_ec);return;}var _ee=function(){_7a(_ec);if(_ec.injected!==_21){_33(_ec);_c(_ec,_c1);req.trace("loader-define-nonmodule",[_ec.url]);}if(1&&_25){!_27.length&&_7b();}else{_7b();}};_8a=_52[mid]||_52[_53+_ec.url];if(_8a){req.trace("loader-inject",["cache",_ec.mid,url]);_8b(_8a,_ec);_ee();return;}if(1&&_25){if(_ec.isXd){_25==_26&&(_25=xd);}else{if(_ec.isAmd&&_25!=_26){}else{var _ef=function(_f0){if(_25==_26){_27.unshift(_ec);_8b(_f0,_ec);_27.shift();_7a(_ec);if(!_ec.cjs){_33(_ec);_35(_ec);}if(_ec.finish){var _f1=mid+"*finish",_f2=_ec.finish;delete _ec.finish;def(_f1,["dojo",("dojo/require!"+_f2.join(",")).replace(/\./g,"/")],function(_f3){_9(_f2,function(mid){_f3.require(mid);});});_30.unshift(_31(_f1));}_ee();}else{_f0=_2a(_ec,_f0);if(_f0){_8b(_f0,_ec);_ee();}else{_7c=_ec;req.injectUrl(_3f(url),_ee,_ec);_7c=0;}}};req.trace("loader-inject",["xhr",_ec.mid,url,_25!=_26]);if(has("config-dojo-loader-catches")){try{req.getText(url,_25!=_26,_ef);}catch(e){_34(_44,_f("xhrInjectFailed",[_ec,e]));}}else{req.getText(url,_25!=_26,_ef);}return;}}}req.trace("loader-inject",["script",_ec.mid,url]);_7c=_ec;req.injectUrl(_3f(url),_ee,_ec);_7c=0;},_f4=function(_f5,_f6,def){req.trace("loader-define-module",[_f5.mid,_f6]);if(0&&_f5.plugin&&_f5.plugin.isCombo){_f5.result=_6(def)?def():def;_33(_f5);_35(_f5);return _f5;}var mid=_f5.mid;if(_f5.injected===_21){_34(_44,_f("multipleDefine",_f5));return _f5;}_c(_f5,{deps:_f6,def:def,cjs:{id:_f5.mid,uri:_f5.url,exports:(_f5.result={}),setExports:function(_f7){_f5.cjs.exports=_f7;},config:function(){return _f5.config;}}});for(var i=0;i<_f6.length;i++){_f6[i]=_31(_f6[i],_f5);}if(1&&_25&&!_8d[mid]){_76(_f5);_30.push(_f5);_7b();}_33(_f5);if(!_6(def)&&!_f6.length){_f5.result=def;_35(_f5);}return _f5;},_7a=function(_f8,_f9){var _fa=[],_fb,_fc;while(_8c.length){_fc=_8c.shift();_f9&&(_fc[0]=_f9.shift());_fb=(_fc[0]&&_31(_fc[0]))||_f8;_fa.push([_fb,_fc[1],_fc[2]]);}_56(_f8);_9(_fa,function(_fd){_76(_f4.apply(null,_fd));});};}var _fe=0,_92=_3,_90=_3;if(1){_92=function(){_fe&&clearTimeout(_fe);_fe=0;},_90=function(){_92();if(req.waitms){_fe=window.setTimeout(function(){_92();_34(_44,_f("timeout",_8d));},req.waitms);}};}if(1){has.add("ie-event-behavior",!!doc.attachEvent&&(typeof opera==="undefined"||opera.toString()!="[object Opera]"));}if(1&&(1||1)){var _ff=function(node,_100,_101,_102){if(!has("ie-event-behavior")){node.addEventListener(_100,_102,false);return function(){node.removeEventListener(_100,_102,false);};}else{node.attachEvent(_101,_102);return function(){node.detachEvent(_101,_102);};}},_103=_ff(window,"load","onload",function(){req.pageLoaded=1;doc.readyState!="complete"&&(doc.readyState="complete");_103();});if(1){var _104=doc.getElementsByTagName("script")[0],_105=_104.parentNode;req.injectUrl=function(url,_106,_107){var node=_107.node=doc.createElement("script"),_108=function(e){e=e||window.event;var node=e.target||e.srcElement;if(e.type==="load"||/complete|loaded/.test(node.readyState)){_109();_10a();_106&&_106();}},_109=_ff(node,"load","onreadystatechange",_108),_10a=_ff(node,"error","onerror",function(e){_109();_10a();_34(_44,_f("scriptError",[url,e]));});node.type="text/javascript";node.charset="utf-8";node.src=url;_105.insertBefore(node,_104);return node;};}}if(1){req.log=function(){try{for(var i=0;i0){_129._delayTimer=setTimeout(_12a,de);return _129;}_12a();return _129;},_play:function(_12b){var _12c=this;if(_12c._delayTimer){_12c._clearTimer();}_12c._startTime=new Date().valueOf();if(_12c._paused){_12c._startTime-=_12c.duration*_12c._percent;}_12c._active=true;_12c._paused=false;var _12d=_12c.curve.getValue(_12c._getStep());if(!_12c._percent){if(!_12c._startRepeatCount){_12c._startRepeatCount=_12c.repeat;}_12c._fire("onBegin",[_12d]);}_12c._fire("onPlay",[_12d]);_12c._cycle();return _12c;},pause:function(){var _12e=this;if(_12e._delayTimer){_12e._clearTimer();}_12e._stopTimer();if(!_12e._active){return _12e;}_12e._paused=true;_12e._fire("onPause",[_12e.curve.getValue(_12e._getStep())]);return _12e;},gotoPercent:function(_12f,_130){var _131=this;_131._stopTimer();_131._active=_131._paused=true;_131._percent=_12f;if(_130){_131.play();}return _131;},stop:function(_132){var _133=this;if(_133._delayTimer){_133._clearTimer();}if(!_133._timer){return _133;}_133._stopTimer();if(_132){_133._percent=1;}_133._fire("onStop",[_133.curve.getValue(_133._getStep())]);_133._active=_133._paused=false;return _133;},status:function(){if(this._active){return this._paused?"paused":"playing";}return "stopped";},_cycle:function(){var _134=this;if(_134._active){var curr=new Date().valueOf();var step=_134.duration===0?1:(curr-_134._startTime)/(_134.duration);if(step>=1){step=1;}_134._percent=step;if(_134.easing){step=_134.easing(step);}_134._fire("onAnimate",[_134.curve.getValue(step)]);if(_134._percent<1){_134._startTimer();}else{_134._active=false;if(_134.repeat>0){_134.repeat--;_134.play(null,true);}else{if(_134.repeat==-1){_134.play(null,true);}else{if(_134._startRepeatCount){_134.repeat=_134._startRepeatCount;_134._startRepeatCount=0;}}}_134._percent=0;_134._fire("onEnd",[_134.node]);!_134.repeat&&_134._stopTimer();}}return _134;},_clearTimer:function(){clearTimeout(this._delayTimer);delete this._delayTimer;}});var ctr=0,_135=null,_136={run:function(){}};lang.extend(_124,{_startTimer:function(){if(!this._timer){this._timer=_11e.connect(_136,"run",this,"_cycle");ctr++;}if(!_135){_135=setInterval(lang.hitch(_136,"run"),this.rate);}},_stopTimer:function(){if(this._timer){_11e.disconnect(this._timer);this._timer=null;ctr--;}if(ctr<=0){clearInterval(_135);_135=null;ctr=0;}}});var _137=has("ie")?function(node){var ns=node.style;if(!ns.width.length&&_11f.get(node,"width")=="auto"){ns.width="auto";}}:function(){};_121._fade=function(args){args.node=dom.byId(args.node);var _138=_120({properties:{}},args),_139=(_138.properties.opacity={});_139.start=!("start" in _138)?function(){return +_11f.get(_138.node,"opacity")||0;}:_138.start;_139.end=_138.end;var anim=_121.animateProperty(_138);_11e.connect(anim,"beforeBegin",lang.partial(_137,_138.node));return anim;};_121.fadeIn=function(args){return _121._fade(_120({end:1},args));};_121.fadeOut=function(args){return _121._fade(_120({end:0},args));};_121._defaultEasing=function(n){return 0.5+((Math.sin((n+1.5)*Math.PI))/2);};var _13a=function(_13b){this._properties=_13b;for(var p in _13b){var prop=_13b[p];if(prop.start instanceof _11d){prop.tempColor=new _11d();}}};_13a.prototype.getValue=function(r){var ret={};for(var p in this._properties){var prop=this._properties[p],_13c=prop.start;if(_13c instanceof _11d){ret[p]=_11d.blendColors(_13c,prop.end,r,prop.tempColor).toCss();}else{if(!lang.isArray(_13c)){ret[p]=((prop.end-_13c)*r)+_13c+(p!="opacity"?prop.units||"px":0);}}}return ret;};_121.animateProperty=function(args){var n=args.node=dom.byId(args.node);if(!args.easing){args.easing=dojo._defaultEasing;}var anim=new _124(args);_11e.connect(anim,"beforeBegin",anim,function(){var pm={};for(var p in this.properties){if(p=="width"||p=="height"){this.node.display="block";}var prop=this.properties[p];if(lang.isFunction(prop)){prop=prop(n);}prop=pm[p]=_120({},(lang.isObject(prop)?prop:{end:prop}));if(lang.isFunction(prop.start)){prop.start=prop.start(n);}if(lang.isFunction(prop.end)){prop.end=prop.end(n);}var _13d=(p.toLowerCase().indexOf("color")>=0);function _13e(node,p){var v={height:node.offsetHeight,width:node.offsetWidth}[p];if(v!==undefined){return v;}v=_11f.get(node,p);return (p=="opacity")?+v:(_13d?v:parseFloat(v));};if(!("end" in prop)){prop.end=_13e(n,p);}else{if(!("start" in prop)){prop.start=_13e(n,p);}}if(_13d){prop.start=new _11d(prop.start);prop.end=new _11d(prop.end);}else{prop.start=(p=="opacity")?+prop.start:parseFloat(prop.start);}}this.curve=new _13a(pm);});_11e.connect(anim,"onAnimate",lang.hitch(_11f,"set",anim.node));return anim;};_121.anim=function(node,_13f,_140,_141,_142,_143){return _121.animateProperty({node:node,duration:_140||_124.prototype.duration,properties:_13f,easing:_141,onEnd:_142}).play(_143||0);};if(1){_120(dojo,_121);dojo._Animation=_124;}return _121;});},"dojo/dom-form":function(){define(["./_base/lang","./dom","./io-query","./json"],function(lang,dom,ioq,json){function _144(obj,name,_145){if(_145===null){return;}var val=obj[name];if(typeof val=="string"){obj[name]=[val,_145];}else{if(lang.isArray(val)){val.push(_145);}else{obj[name]=_145;}}};var _146="file|submit|image|reset|button";var form={fieldToObject:function fieldToObject(_147){var ret=null;_147=dom.byId(_147);if(_147){var _148=_147.name,type=(_147.type||"").toLowerCase();if(_148&&type&&!_147.disabled){if(type=="radio"||type=="checkbox"){if(_147.checked){ret=_147.value;}}else{if(_147.multiple){ret=[];var _149=[_147.firstChild];while(_149.length){for(var node=_149.pop();node;node=node.nextSibling){if(node.nodeType==1&&node.tagName.toLowerCase()=="option"){if(node.selected){ret.push(node.value);}}else{if(node.nextSibling){_149.push(node.nextSibling);}if(node.firstChild){_149.push(node.firstChild);}break;}}}}else{ret=_147.value;}}}}return ret;},toObject:function formToObject(_14a){var ret={},_14b=dom.byId(_14a).elements;for(var i=0,l=_14b.length;i=0){var mid=_18c.replace(/\./g,"/")+"_"+loc;_18a++;_190(mid,function(_197){for(var p in _197){_15d[_150.toAbsMid(p)+"/"+loc]=_197[p];}--_18a;while(!_18a&&_18b.length){load.apply(null,_18b.shift());}});return true;}return false;});};_195();_151.forEach(dojo.config.extraLocale,_195);},_177=function(id,_198,load){if(_18a){_18b.push([id,_198,load]);}return _18a;},_184=function(){};}if(1){var _199={},_19a=new Function("__bundle","__checkForLegacyModules","__mid","__amdValue","var define = function(mid, factory){define.called = 1; __amdValue.result = factory || mid;},"+"\t require = function(){define.called = 1;};"+"try{"+"define.called = 0;"+"eval(__bundle);"+"if(define.called==1)"+"return __amdValue;"+"if((__checkForLegacyModules = __checkForLegacyModules(__mid)))"+"return __checkForLegacyModules;"+"}catch(e){}"+"try{"+"return eval('('+__bundle+')');"+"}catch(e){"+"return e;"+"}"),_19b=function(deps,_19c,_19d){var _19e=[];_151.forEach(deps,function(mid){var url=_19d.toUrl(mid+".js");function load(text){var _19f=_19a(text,_184,mid,_199);if(_19f===_199){_19e.push(_15d[url]=_199.result);}else{if(_19f instanceof Error){console.error("failed to evaluate i18n bundle; url="+url,_19f);_19f={};}_19e.push(_15d[url]=(/nls\/[^\/]+\/[^\/]+$/.test(url)?_19f:{root:_19f,_v1x:1}));}};if(_15d[url]){_19e.push(_15d[url]);}else{var _1a0=_19d.syncLoadNls(mid);if(_1a0){_19e.push(_1a0);}else{if(!xhr){try{_19d.getText(url,true,load);}catch(e){_19e.push(_15d[url]={});}}else{xhr.get({url:url,sync:true,load:load,error:function(){_19e.push(_15d[url]={});}});}}}});_19c&&_19c.apply(null,_19e);};_184=function(_1a1){for(var _1a2,_1a3=_1a1.split("/"),_1a4=dojo.global[_1a3[0]],i=1;_1a4&&i<_1a3.length-1;_1a4=_1a4[_1a3[i++]]){}if(_1a4){_1a2=_1a4[_1a3[i]];if(!_1a2){_1a2=_1a4[_1a3[i].replace(/-/g,"_")];}if(_1a2){_15d[_1a1]=_1a2;}}return _1a2;};_154.getLocalization=function(_1a5,_1a6,_1a7){var _1a8,_1a9=_15e(_1a5,_1a6,_1a7);load(_1a9,(!isXd(_1a9,_150)?function(deps,_1aa){_19b(deps,_1aa,_150);}:_150),function(_1ab){_1a8=_1ab;});return _1a8;};if(has("dojo-unit-tests")){_185.push(function(doh){doh.register("tests.i18n.unit",function(t){var _1ac;_1ac=_19a("{prop:1}",_184,"nonsense",_199);t.is({prop:1},_1ac);t.is(undefined,_1ac[1]);_1ac=_19a("({prop:1})",_184,"nonsense",_199);t.is({prop:1},_1ac);t.is(undefined,_1ac[1]);_1ac=_19a("{'prop-x':1}",_184,"nonsense",_199);t.is({"prop-x":1},_1ac);t.is(undefined,_1ac[1]);_1ac=_19a("({'prop-x':1})",_184,"nonsense",_199);t.is({"prop-x":1},_1ac);t.is(undefined,_1ac[1]);_1ac=_19a("define({'prop-x':1})",_184,"nonsense",_199);t.is(_199,_1ac);t.is({"prop-x":1},_199.result);_1ac=_19a("define('some/module', {'prop-x':1})",_184,"nonsense",_199);t.is(_199,_1ac);t.is({"prop-x":1},_199.result);_1ac=_19a("this is total nonsense and should throw an error",_184,"nonsense",_199);t.is(_1ac instanceof Error,true);});});}}return lang.mixin(_154,{dynamic:true,normalize:_16f,load:load,cache:_15d});});},"dojo/promise/tracer":function(){define(["../_base/lang","./Promise","../Evented"],function(lang,_1ad,_1ae){"use strict";var _1af=new _1ae;var emit=_1af.emit;_1af.emit=null;function _1b0(args){setTimeout(function(){emit.apply(_1af,args);},0);};_1ad.prototype.trace=function(){var args=lang._toArray(arguments);this.then(function(_1b1){_1b0(["resolved",_1b1].concat(args));},function(_1b2){_1b0(["rejected",_1b2].concat(args));},function(_1b3){_1b0(["progress",_1b3].concat(args));});return this;};_1ad.prototype.traceRejected=function(){var args=lang._toArray(arguments);this.otherwise(function(_1b4){_1b0(["rejected",_1b4].concat(args));});return this;};return _1af;});},"dojo/errors/RequestError":function(){define(["./create"],function(_1b5){return _1b5("RequestError",function(_1b6,_1b7){this.response=_1b7;});});},"dojo/_base/html":function(){define("dojo/_base/html",["./kernel","../dom","../dom-style","../dom-attr","../dom-prop","../dom-class","../dom-construct","../dom-geometry"],function(dojo,dom,_1b8,attr,prop,cls,ctr,geom){dojo.byId=dom.byId;dojo.isDescendant=dom.isDescendant;dojo.setSelectable=dom.setSelectable;dojo.getAttr=attr.get;dojo.setAttr=attr.set;dojo.hasAttr=attr.has;dojo.removeAttr=attr.remove;dojo.getNodeProp=attr.getNodeProp;dojo.attr=function(node,name,_1b9){if(arguments.length==2){return attr[typeof name=="string"?"get":"set"](node,name);}return attr.set(node,name,_1b9);};dojo.hasClass=cls.contains;dojo.addClass=cls.add;dojo.removeClass=cls.remove;dojo.toggleClass=cls.toggle;dojo.replaceClass=cls.replace;dojo._toDom=dojo.toDom=ctr.toDom;dojo.place=ctr.place;dojo.create=ctr.create;dojo.empty=function(node){ctr.empty(node);};dojo._destroyElement=dojo.destroy=function(node){ctr.destroy(node);};dojo._getPadExtents=dojo.getPadExtents=geom.getPadExtents;dojo._getBorderExtents=dojo.getBorderExtents=geom.getBorderExtents;dojo._getPadBorderExtents=dojo.getPadBorderExtents=geom.getPadBorderExtents;dojo._getMarginExtents=dojo.getMarginExtents=geom.getMarginExtents;dojo._getMarginSize=dojo.getMarginSize=geom.getMarginSize;dojo._getMarginBox=dojo.getMarginBox=geom.getMarginBox;dojo.setMarginBox=geom.setMarginBox;dojo._getContentBox=dojo.getContentBox=geom.getContentBox;dojo.setContentSize=geom.setContentSize;dojo._isBodyLtr=dojo.isBodyLtr=geom.isBodyLtr;dojo._docScroll=dojo.docScroll=geom.docScroll;dojo._getIeDocumentElementOffset=dojo.getIeDocumentElementOffset=geom.getIeDocumentElementOffset;dojo._fixIeBiDiScrollLeft=dojo.fixIeBiDiScrollLeft=geom.fixIeBiDiScrollLeft;dojo.position=geom.position;dojo.marginBox=function marginBox(node,box){return box?geom.setMarginBox(node,box):geom.getMarginBox(node);};dojo.contentBox=function contentBox(node,box){return box?geom.setContentSize(node,box):geom.getContentBox(node);};dojo.coords=function(node,_1ba){dojo.deprecated("dojo.coords()","Use dojo.position() or dojo.marginBox().");node=dom.byId(node);var s=_1b8.getComputedStyle(node),mb=geom.getMarginBox(node,s);var abs=geom.position(node,_1ba);mb.x=abs.x;mb.y=abs.y;return mb;};dojo.getProp=prop.get;dojo.setProp=prop.set;dojo.prop=function(node,name,_1bb){if(arguments.length==2){return prop[typeof name=="string"?"get":"set"](node,name);}return prop.set(node,name,_1bb);};dojo.getStyle=_1b8.get;dojo.setStyle=_1b8.set;dojo.getComputedStyle=_1b8.getComputedStyle;dojo.__toPixelValue=dojo.toPixelValue=_1b8.toPixelValue;dojo.style=function(node,name,_1bc){switch(arguments.length){case 1:return _1b8.get(node);case 2:return _1b8[typeof name=="string"?"get":"set"](node,name);}return _1b8.set(node,name,_1bc);};return dojo;});},"dojo/_base/kernel":function(){define(["../has","./config","require","module"],function(has,_1bd,_1be,_1bf){var i,p,_1c0={},_1c1={},dojo={config:_1bd,global:this,dijit:_1c0,dojox:_1c1};var _1c2={dojo:["dojo",dojo],dijit:["dijit",_1c0],dojox:["dojox",_1c1]},_1c3=(_1be.map&&_1be.map[_1bf.id.match(/[^\/]+/)[0]]),item;for(p in _1c3){if(_1c2[p]){_1c2[p][0]=_1c3[p];}else{_1c2[p]=[_1c3[p],{}];}}for(p in _1c2){item=_1c2[p];item[1]._scopeName=item[0];if(!_1bd.noGlobals){this[item[0]]=item[1];}}dojo.scopeMap=_1c2;dojo.baseUrl=dojo.config.baseUrl=_1be.baseUrl;dojo.isAsync=!1||_1be.async;dojo.locale=_1bd.locale;var rev="$Rev: 30226 $".match(/\d+/);dojo.version={major:1,minor:8,patch:3,flag:"",revision:rev?+rev[0]:NaN,toString:function(){var v=dojo.version;return v.major+"."+v.minor+"."+v.patch+v.flag+" ("+v.revision+")";}};1||has.add("extend-dojo",1);(Function("d","d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}"))(dojo);if(0){dojo.exit=function(_1c4){quit(_1c4);};}else{dojo.exit=function(){};}1||has.add("dojo-guarantee-console",1);if(1){typeof console!="undefined"||(console={});var cn=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"];var tn;i=0;while((tn=cn[i++])){if(!console[tn]){(function(){var tcn=tn+"";console[tcn]=("log" in console)?function(){var a=Array.apply({},arguments);a.unshift(tcn+":");console["log"](a.join(" "));}:function(){};console[tcn]._fake=true;})();}}}has.add("dojo-debug-messages",!!_1bd.isDebug);dojo.deprecated=dojo.experimental=function(){};if(has("dojo-debug-messages")){dojo.deprecated=function(_1c5,_1c6,_1c7){var _1c8="DEPRECATED: "+_1c5;if(_1c6){_1c8+=" "+_1c6;}if(_1c7){_1c8+=" -- will be removed in version: "+_1c7;}console.warn(_1c8);};dojo.experimental=function(_1c9,_1ca){var _1cb="EXPERIMENTAL: "+_1c9+" -- APIs subject to change without notice.";if(_1ca){_1cb+=" "+_1ca;}console.warn(_1cb);};}1||has.add("dojo-modulePaths",1);if(1){if(_1bd.modulePaths){dojo.deprecated("dojo.modulePaths","use paths configuration");var _1cc={};for(p in _1bd.modulePaths){_1cc[p.replace(/\./g,"/")]=_1bd.modulePaths[p];}_1be({paths:_1cc});}}1||has.add("dojo-moduleUrl",1);if(1){dojo.moduleUrl=function(_1cd,url){dojo.deprecated("dojo.moduleUrl()","use require.toUrl","2.0");var _1ce=null;if(_1cd){_1ce=_1be.toUrl(_1cd.replace(/\./g,"/")+(url?("/"+url):"")+"/*.*").replace(/\/\*\.\*/,"")+(url?"":"/");}return _1ce;};}dojo._hasResource={};return dojo;});},"dojo/io-query":function(){define(["./_base/lang"],function(lang){var _1cf={};return {objectToQuery:function objectToQuery(map){var enc=encodeURIComponent,_1d0=[];for(var name in map){var _1d1=map[name];if(_1d1!=_1cf[name]){var _1d2=enc(name)+"=";if(lang.isArray(_1d1)){for(var i=0,l=_1d1.length;i=0;i--){var node=(_20b?this._cloneNode(ary[i]):ary[i]);if(ary._runParse&&dojo.parser&&dojo.parser.parse){if(!_20d){_20d=_20c.ownerDocument.createElement("div");}_20d.appendChild(node);dojo.parser.parse(_20d);node=_20d.firstChild;while(_20d.firstChild){_20d.removeChild(_20d.firstChild);}}if(i==_20e-1){_1fb.place(node,_20c,_20a);}else{_20c.parentNode.insertBefore(node,_20c);}_20c=node;}},position:aam(_1fc.position),attr:awc(_202(_1fd),_1ff),style:awc(_202(_1fe),_1ff),addClass:aafe(_1fa.add),removeClass:aafe(_1fa.remove),toggleClass:aafe(_1fa.toggle),replaceClass:aafe(_1fa.replace),empty:aafe(_1fb.empty),removeAttr:aafe(_1fd.remove),marginBox:aam(_1fc.getMarginBox),place:function(_20f,_210){var item=_1f8(_20f)[0];return this.forEach(function(node){_1fb.place(node,item,_210);});},orphan:function(_211){return (_211?_1f8._filterResult(this,_211):this).forEach(_200);},adopt:function(_212,_213){return _1f8(_212).place(this[0],_213)._stash(this);},query:function(_214){if(!_214){return this;}var ret=new _201;this.map(function(node){_1f8(_214,node).forEach(function(_215){if(_215!==undefined){ret.push(_215);}});});return ret._stash(this);},filter:function(_216){var a=arguments,_217=this,_218=0;if(typeof _216=="string"){_217=_1f8._filterResult(this,a[0]);if(a.length==1){return _217._stash(this);}_218=1;}return this._wrap(_1f9.filter(_217,a[_218],a[_218+1]),this);},addContent:function(_219,_21a){_219=this._normalize(_219,this[0]);for(var i=0,node;(node=this[i]);i++){this._place(_219,node,_21a,i>0);}return this;}});return _201;});},"dojo/query":function(){define(["./_base/kernel","./has","./dom","./on","./_base/array","./_base/lang","./selector/_loader","./selector/_loader!default"],function(dojo,has,dom,on,_21b,lang,_21c,_21d){"use strict";has.add("array-extensible",function(){return lang.delegate([],{length:1}).length==1&&!has("bug-for-in-skips-shadowed");});var ap=Array.prototype,aps=ap.slice,apc=ap.concat,_21e=_21b.forEach;var tnl=function(a,_21f,_220){var _221=new (_220||this._NodeListCtor||nl)(a);return _21f?_221._stash(_21f):_221;};var _222=function(f,a,o){a=[0].concat(aps.call(a,0));o=o||dojo.global;return function(node){a[0]=node;return f.apply(o,a);};};var _223=function(f,o){return function(){this.forEach(_222(f,arguments,o));return this;};};var _224=function(f,o){return function(){return this.map(_222(f,arguments,o));};};var _225=function(f,o){return function(){return this.filter(_222(f,arguments,o));};};var _226=function(f,g,o){return function(){var a=arguments,body=_222(f,a,o);if(g.call(o||dojo.global,a)){return this.map(body);}this.forEach(body);return this;};};var _227=function(_228){var _229=this instanceof nl&&has("array-extensible");if(typeof _228=="number"){_228=Array(_228);}var _22a=(_228&&"length" in _228)?_228:arguments;if(_229||!_22a.sort){var _22b=_229?this:[],l=_22b.length=_22a.length;for(var i=0;i0;};_23c.filter=_23a.filter||function(_240,_241,root){return _23c(_241,root).filter(function(node){return _21b.indexOf(_240,node)>-1;});};if(typeof _23a!="function"){var _242=_23a.search;_23a=function(_243,root){return _242(root||document,_243);};}return _23c;};var _236=_239(_21d,_227);dojo.query=_239(_21d,function(_244){return _227(_244);});_236.load=function(id,_245,_246){_21c.load(id,_245,function(_247){_246(_239(_247,_227));});};dojo._filterQueryResult=_236._filterResult=function(_248,_249,root){return new _227(_236.filter(_248,_249,root));};dojo.NodeList=_236.NodeList=_227;return _236;});},"dojo/has":function(){define(["require","module"],function(_24a,_24b){var has=_24a.has||function(){};if(!1){var _24c=typeof window!="undefined"&&typeof location!="undefined"&&typeof document!="undefined"&&window.location==location&&window.document==document,_24d=this,doc=_24c&&document,_24e=doc&&doc.createElement("DiV"),_24f=(_24b.config&&_24b.config())||{};has=function(name){return typeof _24f[name]=="function"?(_24f[name]=_24f[name](_24d,doc,_24e)):_24f[name];};has.cache=_24f;has.add=function(name,test,now,_250){(typeof _24f[name]=="undefined"||_250)&&(_24f[name]=test);return now&&has(name);};1||has.add("host-browser",_24c);1||has.add("dom",_24c);1||has.add("dojo-dom-ready-api",1);1||has.add("dojo-sniff",1);}if(1){has.add("dom-addeventlistener",!!document.addEventListener);has.add("touch","ontouchstart" in document);has.add("device-width",screen.availWidth||innerWidth);var form=document.createElement("form");has.add("dom-attributes-explicit",form.attributes.length==0);has.add("dom-attributes-specified-flag",form.attributes.length>0&&form.attributes.length<40);}has.clearElement=function(_251){_251.innerHTML="";return _251;};has.normalize=function(id,_252){var _253=id.match(/[\?:]|[^:\?]*/g),i=0,get=function(skip){var term=_253[i++];if(term==":"){return 0;}else{if(_253[i++]=="?"){if(!skip&&has(term)){return get();}else{get(true);return get(skip);}}return term||0;}};id=get();return id&&_252(id);};has.load=function(id,_254,_255){if(id){_254([id],_255);}else{_255();}};return has;});},"dojo/_base/loader":function(){define(["./kernel","../has","require","module","./json","./lang","./array"],function(dojo,has,_256,_257,json,lang,_258){if(!1){console.error("cannot load the Dojo v1.x loader with a foreign loader");return 0;}1||has.add("dojo-fast-sync-require",1);var _259=function(id){return {src:_257.id,id:id};},_25a=function(name){return name.replace(/\./g,"/");},_25b=/\/\/>>built/,_25c=[],_25d=[],_25e=function(mid,_25f,_260){_25c.push(_260);_258.forEach(mid.split(","),function(mid){var _261=_262(mid,_25f.module);_25d.push(_261);_263(_261);});_264();},_264=(1?function(){var _265,mid;for(mid in _266){_265=_266[mid];if(_265.noReqPluginCheck===undefined){_265.noReqPluginCheck=/loadInit\!/.test(mid)||/require\!/.test(mid)?1:0;}if(!_265.executed&&!_265.noReqPluginCheck&&_265.injected==_267){return;}}_268(function(){var _269=_25c;_25c=[];_258.forEach(_269,function(cb){cb(1);});});}:(function(){var _26a,_26b=function(m){_26a[m.mid]=1;for(var t,_26c,deps=m.deps||[],i=0;i=0;--j){_2ce=lin[j].prototype;if(!_2ce.hasOwnProperty("declaredClass")){_2ce.declaredClass="uniqName_"+(_2c5++);}name=_2ce.declaredClass;if(!_2cc.hasOwnProperty(name)){_2cc[name]={count:0,refs:[],cls:lin[j]};++_2cd;}rec=_2cc[name];if(top&&top!==rec){rec.refs.push(top);++top.count;}top=rec;}++top.count;_2cb[0].refs.push(top);}while(_2cb.length){top=_2cb.pop();_2ca.push(top.cls);--_2cd;while(refs=top.refs,refs.length==1){top=refs[0];if(!top||--top.count){top=0;break;}_2ca.push(top.cls);--_2cd;}if(top){for(i=0,l=refs.length;i=0;--i){f=_2e8[i];m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,_2ea?_2ea[i]:a);}}f=this.postscript;if(f){f.apply(this,args);}};};function _2ec(ctor,_2ed){return function(){var a=arguments,t=a,a0=a[0],f;if(!(this instanceof a.callee)){return _2eb(a);}if(_2ed){if(a0){f=a0.preamble;if(f){t=f.apply(this,t)||t;}}f=this.preamble;if(f){f.apply(this,t);}}if(ctor){ctor.apply(this,a);}f=this.postscript;if(f){f.apply(this,a);}};};function _2ee(_2ef){return function(){var a=arguments,i=0,f,m;if(!(this instanceof a.callee)){return _2eb(a);}for(;f=_2ef[i];++i){m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,a);break;}}f=this.postscript;if(f){f.apply(this,a);}};};function _2f0(name,_2f1,_2f2){return function(){var b,m,f,i=0,step=1;if(_2f2){i=_2f1.length-1;step=-1;}for(;b=_2f1[i];i+=step){m=b._meta;f=(m?m.hidden:b.prototype)[name];if(f){f.apply(this,arguments);}}};};function _2f3(ctor){xtor.prototype=ctor.prototype;var t=new xtor;xtor.prototype=null;return t;};function _2eb(args){var ctor=args.callee,t=_2f3(ctor);ctor.apply(t,args);return t;};function _2e4(_2f4,_2f5,_2f6){if(typeof _2f4!="string"){_2f6=_2f5;_2f5=_2f4;_2f4="";}_2f6=_2f6||{};var _2f7,i,t,ctor,name,_2f8,_2f9,_2fa=1,_2fb=_2f5;if(opts.call(_2f5)=="[object Array]"){_2f8=_2c7(_2f5,_2f4);t=_2f8[0];_2fa=_2f8.length-t;_2f5=_2f8[_2fa];}else{_2f8=[0];if(_2f5){if(opts.call(_2f5)=="[object Function]"){t=_2f5._meta;_2f8=_2f8.concat(t?t.bases:_2f5);}else{err("base class is not a callable constructor.",_2f4);}}else{if(_2f5!==null){err("unknown base class. Did you use dojo.require to pull it in?",_2f4);}}}if(_2f5){for(i=_2fa-1;;--i){_2f7=_2f3(_2f5);if(!i){break;}t=_2f8[i];(t._meta?_2da:mix)(_2f7,t.prototype);ctor=new Function;ctor.superclass=_2f5;ctor.prototype=_2f7;_2f5=_2f7.constructor=ctor;}}else{_2f7={};}_2e4.safeMixin(_2f7,_2f6);t=_2f6.constructor;if(t!==op.constructor){t.nom=_2c6;_2f7.constructor=t;}for(i=_2fa-1;i;--i){t=_2f8[i]._meta;if(t&&t.chains){_2f9=mix(_2f9||{},t.chains);}}if(_2f7["-chains-"]){_2f9=mix(_2f9||{},_2f7["-chains-"]);}t=!_2f9||!_2f9.hasOwnProperty(_2c6);_2f8[0]=ctor=(_2f9&&_2f9.constructor==="manual")?_2ee(_2f8):(_2f8.length==1?_2ec(_2f6.constructor,t):_2e7(_2f8,t));ctor._meta={bases:_2f8,hidden:_2f6,chains:_2f9,parents:_2fb,ctor:_2f6.constructor};ctor.superclass=_2f5&&_2f5.prototype;ctor.extend=_2e2;ctor.createSubclass=_2e5;ctor.prototype=_2f7;_2f7.constructor=ctor;_2f7.getInherited=_2d5;_2f7.isInstanceOf=_2d8;_2f7.inherited=_2d7;_2f7.__inherited=_2cf;if(_2f4){_2f7.declaredClass=_2f4;lang.setObject(_2f4,ctor);}if(_2f9){for(name in _2f9){if(_2f7[name]&&typeof _2f9[name]=="string"&&name!=_2c6){t=_2f7[name]=_2f0(name,_2f8,_2f9[name]==="after");t.nom=name;}}}return ctor;};dojo.safeMixin=_2e4.safeMixin=_2de;dojo.declare=_2e4;return _2e4;});},"dojo/dom":function(){define(["./sniff","./_base/window"],function(has,win){if(has("ie")<=7){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}var dom={};if(has("ie")){dom.byId=function(id,doc){if(typeof id!="string"){return id;}var _2fc=doc||win.doc,te=id&&_2fc.getElementById(id);if(te&&(te.attributes.id.value==id||te.id==id)){return te;}else{var eles=_2fc.all[id];if(!eles||eles.nodeName){eles=[eles];}var i=0;while((te=eles[i++])){if((te.attributes&&te.attributes.id&&te.attributes.id.value==id)||te.id==id){return te;}}}};}else{dom.byId=function(id,doc){return ((typeof id=="string")?(doc||win.doc).getElementById(id):id)||null;};}dom.isDescendant=function(node,_2fd){try{node=dom.byId(node);_2fd=dom.byId(_2fd);while(node){if(node==_2fd){return true;}node=node.parentNode;}}catch(e){}return false;};has.add("css-user-select",function(_2fe,doc,_2ff){if(!_2ff){return false;}var _300=_2ff.style;var _301=["Khtml","O","ms","Moz","Webkit"],i=_301.length,name="userSelect",_302;do{if(typeof _300[name]!=="undefined"){return name;}}while(i--&&(name=_301[i]+"UserSelect"));return false;});var _303=has("css-user-select");dom.setSelectable=_303?function(node,_304){dom.byId(node).style[_303]=_304?"":"none";}:function(node,_305){node=dom.byId(node);var _306=node.getElementsByTagName("*"),i=_306.length;if(_305){node.removeAttribute("unselectable");while(i--){_306[i].removeAttribute("unselectable");}}else{node.setAttribute("unselectable","on");while(i--){_306[i].setAttribute("unselectable","on");}}};return dom;});},"dojo/_base/browser":function(){if(require.has){require.has.add("config-selectorEngine","acme");}define(["../ready","./kernel","./connect","./unload","./window","./event","./html","./NodeList","../query","./xhr","./fx"],function(dojo){return dojo;});},"dojo/selector/acme":function(){define(["../dom","../sniff","../_base/array","../_base/lang","../_base/window"],function(dom,has,_307,lang,win){var trim=lang.trim;var each=_307.forEach;var _308=function(){return win.doc;};var _309=(_308().compatMode)=="BackCompat";var _30a=">~+";var _30b=false;var _30c=function(){return true;};var _30d=function(_30e){if(_30a.indexOf(_30e.slice(-1))>=0){_30e+=" * ";}else{_30e+=" ";}var ts=function(s,e){return trim(_30e.slice(s,e));};var _30f=[];var _310=-1,_311=-1,_312=-1,_313=-1,_314=-1,inId=-1,_315=-1,_316,lc="",cc="",_317;var x=0,ql=_30e.length,_318=null,_319=null;var _31a=function(){if(_315>=0){var tv=(_315==x)?null:ts(_315,x);_318[(_30a.indexOf(tv)<0)?"tag":"oper"]=tv;_315=-1;}};var _31b=function(){if(inId>=0){_318.id=ts(inId,x).replace(/\\/g,"");inId=-1;}};var _31c=function(){if(_314>=0){_318.classes.push(ts(_314+1,x).replace(/\\/g,""));_314=-1;}};var _31d=function(){_31b();_31a();_31c();};var _31e=function(){_31d();if(_313>=0){_318.pseudos.push({name:ts(_313+1,x)});}_318.loops=(_318.pseudos.length||_318.attrs.length||_318.classes.length);_318.oquery=_318.query=ts(_317,x);_318.otag=_318.tag=(_318["oper"])?null:(_318.tag||"*");if(_318.tag){_318.tag=_318.tag.toUpperCase();}if(_30f.length&&(_30f[_30f.length-1].oper)){_318.infixOper=_30f.pop();_318.query=_318.infixOper.query+" "+_318.query;}_30f.push(_318);_318=null;};for(;lc=cc,cc=_30e.charAt(x),x=0){if(cc=="]"){if(!_319.attr){_319.attr=ts(_310+1,x);}else{_319.matchFor=ts((_312||_310+1),x);}var cmf=_319.matchFor;if(cmf){if((cmf.charAt(0)=="\"")||(cmf.charAt(0)=="'")){_319.matchFor=cmf.slice(1,-1);}}if(_319.matchFor){_319.matchFor=_319.matchFor.replace(/\\/g,"");}_318.attrs.push(_319);_319=null;_310=_312=-1;}else{if(cc=="="){var _31f=("|~^$*".indexOf(lc)>=0)?lc:"";_319.type=_31f+cc;_319.attr=ts(_310+1,x-_31f.length);_312=x+1;}}}else{if(_311>=0){if(cc==")"){if(_313>=0){_319.value=ts(_311+1,x);}_313=_311=-1;}}else{if(cc=="#"){_31d();inId=x+1;}else{if(cc=="."){_31d();_314=x;}else{if(cc==":"){_31d();_313=x;}else{if(cc=="["){_31d();_310=x;_319={};}else{if(cc=="("){if(_313>=0){_319={name:ts(_313+1,x),value:null};_318.pseudos.push(_319);}_311=x;}else{if((cc==" ")&&(lc!=cc)){_31e();}}}}}}}}}return _30f;};var _320=function(_321,_322){if(!_321){return _322;}if(!_322){return _321;}return function(){return _321.apply(window,arguments)&&_322.apply(window,arguments);};};var _323=function(i,arr){var r=arr||[];if(i){r.push(i);}return r;};var _324=function(n){return (1==n.nodeType);};var _325="";var _326=function(elem,attr){if(!elem){return _325;}if(attr=="class"){return elem.className||_325;}if(attr=="for"){return elem.htmlFor||_325;}if(attr=="style"){return elem.style.cssText||_325;}return (_30b?elem.getAttribute(attr):elem.getAttribute(attr,2))||_325;};var _327={"*=":function(attr,_328){return function(elem){return (_326(elem,attr).indexOf(_328)>=0);};},"^=":function(attr,_329){return function(elem){return (_326(elem,attr).indexOf(_329)==0);};},"$=":function(attr,_32a){return function(elem){var ea=" "+_326(elem,attr);var _32b=ea.lastIndexOf(_32a);return _32b>-1&&(_32b==(ea.length-_32a.length));};},"~=":function(attr,_32c){var tval=" "+_32c+" ";return function(elem){var ea=" "+_326(elem,attr)+" ";return (ea.indexOf(tval)>=0);};},"|=":function(attr,_32d){var _32e=_32d+"-";return function(elem){var ea=_326(elem,attr);return ((ea==_32d)||(ea.indexOf(_32e)==0));};},"=":function(attr,_32f){return function(elem){return (_326(elem,attr)==_32f);};}};var _330=(typeof _308().firstChild.nextElementSibling=="undefined");var _331=!_330?"nextElementSibling":"nextSibling";var _332=!_330?"previousElementSibling":"previousSibling";var _333=(_330?_324:_30c);var _334=function(node){while(node=node[_332]){if(_333(node)){return false;}}return true;};var _335=function(node){while(node=node[_331]){if(_333(node)){return false;}}return true;};var _336=function(node){var root=node.parentNode;root=root.nodeType!=7?root:root.nextSibling;var i=0,tret=root.children||root.childNodes,ci=(node["_i"]||node.getAttribute("_i")||-1),cl=(root["_l"]||(typeof root.getAttribute!=="undefined"?root.getAttribute("_l"):-1));if(!tret){return -1;}var l=tret.length;if(cl==l&&ci>=0&&cl>=0){return ci;}if(has("ie")&&typeof root.setAttribute!=="undefined"){root.setAttribute("_l",l);}else{root["_l"]=l;}ci=-1;for(var te=root["firstElementChild"]||root["firstChild"];te;te=te[_331]){if(_333(te)){if(has("ie")){te.setAttribute("_i",++i);}else{te["_i"]=++i;}if(node===te){ci=i;}}}return ci;};var _337=function(elem){return !((_336(elem))%2);};var _338=function(elem){return ((_336(elem))%2);};var _339={"checked":function(name,_33a){return function(elem){return !!("checked" in elem?elem.checked:elem.selected);};},"disabled":function(name,_33b){return function(elem){return elem.disabled;};},"enabled":function(name,_33c){return function(elem){return !elem.disabled;};},"first-child":function(){return _334;},"last-child":function(){return _335;},"only-child":function(name,_33d){return function(node){return _334(node)&&_335(node);};},"empty":function(name,_33e){return function(elem){var cn=elem.childNodes;var cnl=elem.childNodes.length;for(var x=cnl-1;x>=0;x--){var nt=cn[x].nodeType;if((nt===1)||(nt==3)){return false;}}return true;};},"contains":function(name,_33f){var cz=_33f.charAt(0);if(cz=="\""||cz=="'"){_33f=_33f.slice(1,-1);}return function(elem){return (elem.innerHTML.indexOf(_33f)>=0);};},"not":function(name,_340){var p=_30d(_340)[0];var _341={el:1};if(p.tag!="*"){_341.tag=1;}if(!p.classes.length){_341.classes=1;}var ntf=_342(p,_341);return function(elem){return (!ntf(elem));};},"nth-child":function(name,_343){var pi=parseInt;if(_343=="odd"){return _338;}else{if(_343=="even"){return _337;}}if(_343.indexOf("n")!=-1){var _344=_343.split("n",2);var pred=_344[0]?((_344[0]=="-")?-1:pi(_344[0])):1;var idx=_344[1]?pi(_344[1]):0;var lb=0,ub=-1;if(pred>0){if(idx<0){idx=(idx%pred)&&(pred+(idx%pred));}else{if(idx>0){if(idx>=pred){lb=idx-idx%pred;}idx=idx%pred;}}}else{if(pred<0){pred*=-1;if(idx>0){ub=idx;idx=idx%pred;}}}if(pred>0){return function(elem){var i=_336(elem);return (i>=lb)&&(ub<0||i<=ub)&&((i%pred)==idx);};}else{_343=idx;}}var _345=pi(_343);return function(elem){return (_336(elem)==_345);};}};var _346=(has("ie")<9||has("ie")==9&&has("quirks"))?function(cond){var clc=cond.toLowerCase();if(clc=="class"){cond="className";}return function(elem){return (_30b?elem.getAttribute(cond):elem[cond]||elem[clc]);};}:function(cond){return function(elem){return (elem&&elem.getAttribute&&elem.hasAttribute(cond));};};var _342=function(_347,_348){if(!_347){return _30c;}_348=_348||{};var ff=null;if(!("el" in _348)){ff=_320(ff,_324);}if(!("tag" in _348)){if(_347.tag!="*"){ff=_320(ff,function(elem){return (elem&&((_30b?elem.tagName:elem.tagName.toUpperCase())==_347.getTag()));});}}if(!("classes" in _348)){each(_347.classes,function(_349,idx,arr){var re=new RegExp("(?:^|\\s)"+_349+"(?:\\s|$)");ff=_320(ff,function(elem){return re.test(elem.className);});ff.count=idx;});}if(!("pseudos" in _348)){each(_347.pseudos,function(_34a){var pn=_34a.name;if(_339[pn]){ff=_320(ff,_339[pn](pn,_34a.value));}});}if(!("attrs" in _348)){each(_347.attrs,function(attr){var _34b;var a=attr.attr;if(attr.type&&_327[attr.type]){_34b=_327[attr.type](a,attr.matchFor);}else{if(a.length){_34b=_346(a);}}if(_34b){ff=_320(ff,_34b);}});}if(!("id" in _348)){if(_347.id){ff=_320(ff,function(elem){return (!!elem&&(elem.id==_347.id));});}}if(!ff){if(!("default" in _348)){ff=_30c;}}return ff;};var _34c=function(_34d){return function(node,ret,bag){while(node=node[_331]){if(_330&&(!_324(node))){continue;}if((!bag||_34e(node,bag))&&_34d(node)){ret.push(node);}break;}return ret;};};var _34f=function(_350){return function(root,ret,bag){var te=root[_331];while(te){if(_333(te)){if(bag&&!_34e(te,bag)){break;}if(_350(te)){ret.push(te);}}te=te[_331];}return ret;};};var _351=function(_352){_352=_352||_30c;return function(root,ret,bag){var te,x=0,tret=root.children||root.childNodes;while(te=tret[x++]){if(_333(te)&&(!bag||_34e(te,bag))&&(_352(te,x))){ret.push(te);}}return ret;};};var _353=function(node,root){var pn=node.parentNode;while(pn){if(pn==root){break;}pn=pn.parentNode;}return !!pn;};var _354={};var _355=function(_356){var _357=_354[_356.query];if(_357){return _357;}var io=_356.infixOper;var oper=(io?io.oper:"");var _358=_342(_356,{el:1});var qt=_356.tag;var _359=("*"==qt);var ecs=_308()["getElementsByClassName"];if(!oper){if(_356.id){_358=(!_356.loops&&_359)?_30c:_342(_356,{el:1,id:1});_357=function(root,arr){var te=dom.byId(_356.id,(root.ownerDocument||root));if(!te||!_358(te)){return;}if(9==root.nodeType){return _323(te,arr);}else{if(_353(te,root)){return _323(te,arr);}}};}else{if(ecs&&/\{\s*\[native code\]\s*\}/.test(String(ecs))&&_356.classes.length&&!_309){_358=_342(_356,{el:1,classes:1,id:1});var _35a=_356.classes.join(" ");_357=function(root,arr,bag){var ret=_323(0,arr),te,x=0;var tret=root.getElementsByClassName(_35a);while((te=tret[x++])){if(_358(te,root)&&_34e(te,bag)){ret.push(te);}}return ret;};}else{if(!_359&&!_356.loops){_357=function(root,arr,bag){var ret=_323(0,arr),te,x=0;var tag=_356.getTag(),tret=tag?root.getElementsByTagName(tag):[];while((te=tret[x++])){if(_34e(te,bag)){ret.push(te);}}return ret;};}else{_358=_342(_356,{el:1,tag:1,id:1});_357=function(root,arr,bag){var ret=_323(0,arr),te,x=0;var tag=_356.getTag(),tret=tag?root.getElementsByTagName(tag):[];while((te=tret[x++])){if(_358(te,root)&&_34e(te,bag)){ret.push(te);}}return ret;};}}}}else{var _35b={el:1};if(_359){_35b.tag=1;}_358=_342(_356,_35b);if("+"==oper){_357=_34c(_358);}else{if("~"==oper){_357=_34f(_358);}else{if(">"==oper){_357=_351(_358);}}}}return _354[_356.query]=_357;};var _35c=function(root,_35d){var _35e=_323(root),qp,x,te,qpl=_35d.length,bag,ret;for(var i=0;i0){bag={};ret.nozip=true;}var gef=_355(qp);for(var j=0;(te=_35e[j]);j++){gef(te,ret,bag);}if(!ret.length){break;}_35e=ret;}return ret;};var _35f={},_360={};var _361=function(_362){var _363=_30d(trim(_362));if(_363.length==1){var tef=_355(_363[0]);return function(root){var r=tef(root,[]);if(r){r.nozip=true;}return r;};}return function(root){return _35c(root,_363);};};var _364=has("ie")?"commentStrip":"nozip";var qsa="querySelectorAll";var _365=!!_308()[qsa];var _366=/\\[>~+]|n\+\d|([^ \\])?([>~+])([^ =])?/g;var _367=function(_368,pre,ch,post){return ch?(pre?pre+" ":"")+ch+(post?" "+post:""):_368;};var _369=/([^[]*)([^\]]*])?/g;var _36a=function(_36b,_36c,att){return _36c.replace(_366,_367)+(att||"");};var _36d=function(_36e,_36f){_36e=_36e.replace(_369,_36a);if(_365){var _370=_360[_36e];if(_370&&!_36f){return _370;}}var _371=_35f[_36e];if(_371){return _371;}var qcz=_36e.charAt(0);var _372=(-1==_36e.indexOf(" "));if((_36e.indexOf("#")>=0)&&(_372)){_36f=true;}var _373=(_365&&(!_36f)&&(_30a.indexOf(qcz)==-1)&&(!has("ie")||(_36e.indexOf(":")==-1))&&(!(_309&&(_36e.indexOf(".")>=0)))&&(_36e.indexOf(":contains")==-1)&&(_36e.indexOf(":checked")==-1)&&(_36e.indexOf("|=")==-1));if(_373){var tq=(_30a.indexOf(_36e.charAt(_36e.length-1))>=0)?(_36e+" *"):_36e;return _360[_36e]=function(root){try{if(!((9==root.nodeType)||_372)){throw "";}var r=root[qsa](tq);r[_364]=true;return r;}catch(e){return _36d(_36e,true)(root);}};}else{var _374=_36e.match(/([^\s,](?:"(?:\\.|[^"])+"|'(?:\\.|[^'])+'|[^,])*)/g);return _35f[_36e]=((_374.length<2)?_361(_36e):function(root){var _375=0,ret=[],tp;while((tp=_374[_375++])){ret=ret.concat(_361(tp)(root));}return ret;});}};var _376=0;var _377=has("ie")?function(node){if(_30b){return (node.getAttribute("_uid")||node.setAttribute("_uid",++_376)||_376);}else{return node.uniqueID;}}:function(node){return (node._uid||(node._uid=++_376));};var _34e=function(node,bag){if(!bag){return 1;}var id=_377(node);if(!bag[id]){return bag[id]=1;}return 0;};var _378="_zipIdx";var _379=function(arr){if(arr&&arr.nozip){return arr;}var ret=[];if(!arr||!arr.length){return ret;}if(arr[0]){ret.push(arr[0]);}if(arr.length<2){return ret;}_376++;var x,te;if(has("ie")&&_30b){var _37a=_376+"";arr[0].setAttribute(_378,_37a);for(x=1;te=arr[x];x++){if(arr[x].getAttribute(_378)!=_37a){ret.push(te);}te.setAttribute(_378,_37a);}}else{if(has("ie")&&arr.commentStrip){try{for(x=1;te=arr[x];x++){if(_324(te)){ret.push(te);}}}catch(e){}}else{if(arr[0]){arr[0][_378]=_376;}for(x=1;te=arr[x];x++){if(arr[x][_378]!=_376){ret.push(te);}te[_378]=_376;}}}return ret;};var _37b=function(_37c,root){root=root||_308();var od=root.ownerDocument||root;_30b=(od.createElement("div").tagName==="div");var r=_36d(_37c)(root);if(r&&r.nozip){return r;}return _379(r);};_37b.filter=function(_37d,_37e,root){var _37f=[],_380=_30d(_37e),_381=(_380.length==1&&!/[^\w#\.]/.test(_37e))?_342(_380[0]):function(node){return _307.indexOf(_37b(_37e,dom.byId(root)),node)!=-1;};for(var x=0,te;te=_37d[x];x++){if(_381(te)){_37f.push(te);}}return _37f;};return _37b;});},"dojo/errors/RequestTimeoutError":function(){define("dojo/errors/RequestTimeoutError",["./create","./RequestError"],function(_382,_383){return _382("RequestTimeoutError",null,_383,{dojoType:"timeout"});});},"dojo/dom-style":function(){define("dojo/dom-style",["./sniff","./dom"],function(has,dom){var _384,_385={};if(has("webkit")){_384=function(node){var s;if(node.nodeType==1){var dv=node.ownerDocument.defaultView;s=dv.getComputedStyle(node,null);if(!s&&node.style){node.style.display="";s=dv.getComputedStyle(node,null);}}return s||{};};}else{if(has("ie")&&(has("ie")<9||has("quirks"))){_384=function(node){return node.nodeType==1&&node.currentStyle?node.currentStyle:{};};}else{_384=function(node){return node.nodeType==1?node.ownerDocument.defaultView.getComputedStyle(node,null):{};};}}_385.getComputedStyle=_384;var _386;if(!has("ie")){_386=function(_387,_388){return parseFloat(_388)||0;};}else{_386=function(_389,_38a){if(!_38a){return 0;}if(_38a=="medium"){return 4;}if(_38a.slice&&_38a.slice(-2)=="px"){return parseFloat(_38a);}var s=_389.style,rs=_389.runtimeStyle,cs=_389.currentStyle,_38b=s.left,_38c=rs.left;rs.left=cs.left;try{s.left=_38a;_38a=s.pixelLeft;}catch(e){_38a=0;}s.left=_38b;rs.left=_38c;return _38a;};}_385.toPixelValue=_386;var astr="DXImageTransform.Microsoft.Alpha";var af=function(n,f){try{return n.filters.item(astr);}catch(e){return f?{}:null;}};var _38d=has("ie")<9||(has("ie")<10&&has("quirks"))?function(node){try{return af(node).Opacity/100;}catch(e){return 1;}}:function(node){return _384(node).opacity;};var _38e=has("ie")<9||(has("ie")<10&&has("quirks"))?function(node,_38f){var ov=_38f*100,_390=_38f==1;node.style.zoom=_390?"":1;if(!af(node)){if(_390){return _38f;}node.style.filter+=" progid:"+astr+"(Opacity="+ov+")";}else{af(node,1).Opacity=ov;}af(node,1).Enabled=!_390;if(node.tagName.toLowerCase()=="tr"){for(var td=node.firstChild;td;td=td.nextSibling){if(td.tagName.toLowerCase()=="td"){_38e(td,_38f);}}}return _38f;}:function(node,_391){return node.style.opacity=_391;};var _392={left:true,top:true};var _393=/margin|padding|width|height|max|min|offset/;function _394(node,type,_395){type=type.toLowerCase();if(has("ie")){if(_395=="auto"){if(type=="height"){return node.offsetHeight;}if(type=="width"){return node.offsetWidth;}}if(type=="fontweight"){switch(_395){case 700:return "bold";case 400:default:return "normal";}}}if(!(type in _392)){_392[type]=_393.test(type);}return _392[type]?_386(node,_395):_395;};var _396=has("ie")?"styleFloat":"cssFloat",_397={"cssFloat":_396,"styleFloat":_396,"float":_396};_385.get=function getStyle(node,name){var n=dom.byId(node),l=arguments.length,op=(name=="opacity");if(l==2&&op){return _38d(n);}name=_397[name]||name;var s=_385.getComputedStyle(n);return (l==1)?s:_394(n,name,s[name]||n.style[name]);};_385.set=function setStyle(node,name,_398){var n=dom.byId(node),l=arguments.length,op=(name=="opacity");name=_397[name]||name;if(l==3){return op?_38e(n,_398):n.style[name]=_398;}for(var x in name){_385.set(node,x,name[x]);}return _385.getComputedStyle(n);};return _385;});},"dojo/dom-geometry":function(){define(["./sniff","./_base/window","./dom","./dom-style"],function(has,win,dom,_399){var geom={};geom.boxModel="content-box";if(has("ie")){geom.boxModel=document.compatMode=="BackCompat"?"border-box":"content-box";}geom.getPadExtents=function getPadExtents(node,_39a){node=dom.byId(node);var s=_39a||_399.getComputedStyle(node),px=_399.toPixelValue,l=px(node,s.paddingLeft),t=px(node,s.paddingTop),r=px(node,s.paddingRight),b=px(node,s.paddingBottom);return {l:l,t:t,r:r,b:b,w:l+r,h:t+b};};var none="none";geom.getBorderExtents=function getBorderExtents(node,_39b){node=dom.byId(node);var px=_399.toPixelValue,s=_39b||_399.getComputedStyle(node),l=s.borderLeftStyle!=none?px(node,s.borderLeftWidth):0,t=s.borderTopStyle!=none?px(node,s.borderTopWidth):0,r=s.borderRightStyle!=none?px(node,s.borderRightWidth):0,b=s.borderBottomStyle!=none?px(node,s.borderBottomWidth):0;return {l:l,t:t,r:r,b:b,w:l+r,h:t+b};};geom.getPadBorderExtents=function getPadBorderExtents(node,_39c){node=dom.byId(node);var s=_39c||_399.getComputedStyle(node),p=geom.getPadExtents(node,s),b=geom.getBorderExtents(node,s);return {l:p.l+b.l,t:p.t+b.t,r:p.r+b.r,b:p.b+b.b,w:p.w+b.w,h:p.h+b.h};};geom.getMarginExtents=function getMarginExtents(node,_39d){node=dom.byId(node);var s=_39d||_399.getComputedStyle(node),px=_399.toPixelValue,l=px(node,s.marginLeft),t=px(node,s.marginTop),r=px(node,s.marginRight),b=px(node,s.marginBottom);return {l:l,t:t,r:r,b:b,w:l+r,h:t+b};};geom.getMarginBox=function getMarginBox(node,_39e){node=dom.byId(node);var s=_39e||_399.getComputedStyle(node),me=geom.getMarginExtents(node,s),l=node.offsetLeft-me.l,t=node.offsetTop-me.t,p=node.parentNode,px=_399.toPixelValue,pcs;if(has("mozilla")){var sl=parseFloat(s.left),st=parseFloat(s.top);if(!isNaN(sl)&&!isNaN(st)){l=sl;t=st;}else{if(p&&p.style){pcs=_399.getComputedStyle(p);if(pcs.overflow!="visible"){l+=pcs.borderLeftStyle!=none?px(node,pcs.borderLeftWidth):0;t+=pcs.borderTopStyle!=none?px(node,pcs.borderTopWidth):0;}}}}else{if(has("opera")||(has("ie")==8&&!has("quirks"))){if(p){pcs=_399.getComputedStyle(p);l-=pcs.borderLeftStyle!=none?px(node,pcs.borderLeftWidth):0;t-=pcs.borderTopStyle!=none?px(node,pcs.borderTopWidth):0;}}}return {l:l,t:t,w:node.offsetWidth+me.w,h:node.offsetHeight+me.h};};geom.getContentBox=function getContentBox(node,_39f){node=dom.byId(node);var s=_39f||_399.getComputedStyle(node),w=node.clientWidth,h,pe=geom.getPadExtents(node,s),be=geom.getBorderExtents(node,s);if(!w){w=node.offsetWidth;h=node.offsetHeight;}else{h=node.clientHeight;be.w=be.h=0;}if(has("opera")){pe.l+=be.l;pe.t+=be.t;}return {l:pe.l,t:pe.t,w:w-pe.w-be.w,h:h-pe.h-be.h};};function _3a0(node,l,t,w,h,u){u=u||"px";var s=node.style;if(!isNaN(l)){s.left=l+u;}if(!isNaN(t)){s.top=t+u;}if(w>=0){s.width=w+u;}if(h>=0){s.height=h+u;}};function _3a1(node){return node.tagName.toLowerCase()=="button"||node.tagName.toLowerCase()=="input"&&(node.getAttribute("type")||"").toLowerCase()=="button";};function _3a2(node){return geom.boxModel=="border-box"||node.tagName.toLowerCase()=="table"||_3a1(node);};geom.setContentSize=function setContentSize(node,box,_3a3){node=dom.byId(node);var w=box.w,h=box.h;if(_3a2(node)){var pb=geom.getPadBorderExtents(node,_3a3);if(w>=0){w+=pb.w;}if(h>=0){h+=pb.h;}}_3a0(node,NaN,NaN,w,h);};var _3a4={l:0,t:0,w:0,h:0};geom.setMarginBox=function setMarginBox(node,box,_3a5){node=dom.byId(node);var s=_3a5||_399.getComputedStyle(node),w=box.w,h=box.h,pb=_3a2(node)?_3a4:geom.getPadBorderExtents(node,s),mb=geom.getMarginExtents(node,s);if(has("webkit")){if(_3a1(node)){var ns=node.style;if(w>=0&&!ns.width){ns.width="4px";}if(h>=0&&!ns.height){ns.height="4px";}}}if(w>=0){w=Math.max(w-pb.w-mb.w,0);}if(h>=0){h=Math.max(h-pb.h-mb.h,0);}_3a0(node,box.l,box.t,w,h);};geom.isBodyLtr=function isBodyLtr(doc){doc=doc||win.doc;return (win.body(doc).dir||doc.documentElement.dir||"ltr").toLowerCase()=="ltr";};geom.docScroll=function docScroll(doc){doc=doc||win.doc;var node=win.doc.parentWindow||win.doc.defaultView;return "pageXOffset" in node?{x:node.pageXOffset,y:node.pageYOffset}:(node=has("quirks")?win.body(doc):doc.documentElement)&&{x:geom.fixIeBiDiScrollLeft(node.scrollLeft||0,doc),y:node.scrollTop||0};};if(has("ie")){geom.getIeDocumentElementOffset=function getIeDocumentElementOffset(doc){doc=doc||win.doc;var de=doc.documentElement;if(has("ie")<8){var r=de.getBoundingClientRect(),l=r.left,t=r.top;if(has("ie")<7){l+=de.clientLeft;t+=de.clientTop;}return {x:l<0?0:l,y:t<0?0:t};}else{return {x:0,y:0};}};}geom.fixIeBiDiScrollLeft=function fixIeBiDiScrollLeft(_3a6,doc){doc=doc||win.doc;var ie=has("ie");if(ie&&!geom.isBodyLtr(doc)){var qk=has("quirks"),de=qk?win.body(doc):doc.documentElement,pwin=win.global;if(ie==6&&!qk&&pwin.frameElement&&de.scrollHeight>de.clientHeight){_3a6+=de.clientLeft;}return (ie<8||qk)?(_3a6+de.clientWidth-de.scrollWidth):-_3a6;}return _3a6;};geom.position=function(node,_3a7){node=dom.byId(node);var db=win.body(node.ownerDocument),ret=node.getBoundingClientRect();ret={x:ret.left,y:ret.top,w:ret.right-ret.left,h:ret.bottom-ret.top};if(has("ie")<9){var _3a8=geom.getIeDocumentElementOffset(node.ownerDocument);ret.x-=_3a8.x+(has("quirks")?db.clientLeft+db.offsetLeft:0);ret.y-=_3a8.y+(has("quirks")?db.clientTop+db.offsetTop:0);}if(_3a7){var _3a9=geom.docScroll(node.ownerDocument);ret.x+=_3a9.x;ret.y+=_3a9.y;}return ret;};geom.getMarginSize=function getMarginSize(node,_3aa){node=dom.byId(node);var me=geom.getMarginExtents(node,_3aa||_399.getComputedStyle(node));var size=node.getBoundingClientRect();return {w:(size.right-size.left)+me.w,h:(size.bottom-size.top)+me.h};};geom.normalizeEvent=function(_3ab){if(!("layerX" in _3ab)){_3ab.layerX=_3ab.offsetX;_3ab.layerY=_3ab.offsetY;}if(!has("dom-addeventlistener")){var se=_3ab.target;var doc=(se&&se.ownerDocument)||document;var _3ac=has("quirks")?doc.body:doc.documentElement;var _3ad=geom.getIeDocumentElementOffset(doc);_3ab.pageX=_3ab.clientX+geom.fixIeBiDiScrollLeft(_3ac.scrollLeft||0,doc)-_3ad.x;_3ab.pageY=_3ab.clientY+(_3ac.scrollTop||0)-_3ad.y;}};return geom;});},"dojo/dom-prop":function(){define(["exports","./_base/kernel","./sniff","./_base/lang","./dom","./dom-style","./dom-construct","./_base/connect"],function(_3ae,dojo,has,lang,dom,_3af,ctr,conn){var _3b0={},_3b1=0,_3b2=dojo._scopeName+"attrid";_3ae.names={"class":"className","for":"htmlFor",tabindex:"tabIndex",readonly:"readOnly",colspan:"colSpan",frameborder:"frameBorder",rowspan:"rowSpan",valuetype:"valueType"};_3ae.get=function getProp(node,name){node=dom.byId(node);var lc=name.toLowerCase(),_3b3=_3ae.names[lc]||name;return node[_3b3];};_3ae.set=function setProp(node,name,_3b4){node=dom.byId(node);var l=arguments.length;if(l==2&&typeof name!="string"){for(var x in name){_3ae.set(node,x,name[x]);}return node;}var lc=name.toLowerCase(),_3b5=_3ae.names[lc]||name;if(_3b5=="style"&&typeof _3b4!="string"){_3af.set(node,_3b4);return node;}if(_3b5=="innerHTML"){if(has("ie")&&node.tagName.toLowerCase() in {col:1,colgroup:1,table:1,tbody:1,tfoot:1,thead:1,tr:1,title:1}){ctr.empty(node);node.appendChild(ctr.toDom(_3b4,node.ownerDocument));}else{node[_3b5]=_3b4;}return node;}if(lang.isFunction(_3b4)){var _3b6=node[_3b2];if(!_3b6){_3b6=_3b1++;node[_3b2]=_3b6;}if(!_3b0[_3b6]){_3b0[_3b6]={};}var h=_3b0[_3b6][_3b5];if(h){conn.disconnect(h);}else{try{delete node[_3b5];}catch(e){}}if(_3b4){_3b0[_3b6][_3b5]=conn.connect(node,_3b5,_3b4);}else{node[_3b5]=null;}return node;}node[_3b5]=_3b4;return node;};});},"dojo/when":function(){define(["./Deferred","./promise/Promise"],function(_3b7,_3b8){"use strict";return function when(_3b9,_3ba,_3bb,_3bc){var _3bd=_3b9&&typeof _3b9.then==="function";var _3be=_3bd&&_3b9 instanceof _3b8;if(!_3bd){if(_3ba){return _3ba(_3b9);}else{return new _3b7().resolve(_3b9);}}else{if(!_3be){var _3bf=new _3b7(_3b9.cancel);_3b9.then(_3bf.resolve,_3bf.reject,_3bf.progress);_3b9=_3bf.promise;}}if(_3ba||_3bb||_3bc){return _3b9.then(_3ba,_3bb,_3bc);}return _3b9;};});},"dojo/dom-attr":function(){define(["exports","./sniff","./_base/lang","./dom","./dom-style","./dom-prop"],function(_3c0,has,lang,dom,_3c1,prop){var _3c2={innerHTML:1,className:1,htmlFor:has("ie"),value:1},_3c3={classname:"class",htmlfor:"for",tabindex:"tabIndex",readonly:"readOnly"};function _3c4(node,name){var attr=node.getAttributeNode&&node.getAttributeNode(name);return attr&&attr.specified;};_3c0.has=function hasAttr(node,name){var lc=name.toLowerCase();return _3c2[prop.names[lc]||name]||_3c4(dom.byId(node),_3c3[lc]||name);};_3c0.get=function getAttr(node,name){node=dom.byId(node);var lc=name.toLowerCase(),_3c5=prop.names[lc]||name,_3c6=_3c2[_3c5],_3c7=node[_3c5];if(_3c6&&typeof _3c7!="undefined"){return _3c7;}if(_3c5!="href"&&(typeof _3c7=="boolean"||lang.isFunction(_3c7))){return _3c7;}var _3c8=_3c3[lc]||name;return _3c4(node,_3c8)?node.getAttribute(_3c8):null;};_3c0.set=function setAttr(node,name,_3c9){node=dom.byId(node);if(arguments.length==2){for(var x in name){_3c0.set(node,x,name[x]);}return node;}var lc=name.toLowerCase(),_3ca=prop.names[lc]||name,_3cb=_3c2[_3ca];if(_3ca=="style"&&typeof _3c9!="string"){_3c1.set(node,_3c9);return node;}if(_3cb||typeof _3c9=="boolean"||lang.isFunction(_3c9)){return prop.set(node,name,_3c9);}node.setAttribute(_3c3[lc]||name,_3c9);return node;};_3c0.remove=function removeAttr(node,name){dom.byId(node).removeAttribute(_3c3[name.toLowerCase()]||name);};_3c0.getNodeProp=function getNodeProp(node,name){node=dom.byId(node);var lc=name.toLowerCase(),_3cc=prop.names[lc]||name;if((_3cc in node)&&_3cc!="href"){return node[_3cc];}var _3cd=_3c3[lc]||name;return _3c4(node,_3cd)?node.getAttribute(_3cd):null;};});},"dojo/dom-construct":function(){define(["exports","./_base/kernel","./sniff","./_base/window","./dom","./dom-attr","./on"],function(_3ce,dojo,has,win,dom,attr,on){var _3cf={option:["select"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","thead","tr"],legend:["fieldset"],caption:["table"],colgroup:["table"],col:["table","colgroup"],li:["ul"]},_3d0=/<\s*([\w\:]+)/,_3d1={},_3d2=0,_3d3="__"+dojo._scopeName+"ToDomId";for(var _3d4 in _3cf){if(_3cf.hasOwnProperty(_3d4)){var tw=_3cf[_3d4];tw.pre=_3d4=="option"?""; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); \ No newline at end of file diff --git a/static/js/jquery-1.9.0.min.js b/static/js/jquery-1.9.0.min.js new file mode 100644 index 0000000..d94aba1 --- /dev/null +++ b/static/js/jquery-1.9.0.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("' : ''); + inst._keyEvent = false; + return html; + }, + + /* Generate the month and year header. */ + _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, + secondary, monthNames, monthNamesShort) { + var changeMonth = this._get(inst, 'changeMonth'); + var changeYear = this._get(inst, 'changeYear'); + var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); + var html = '
'; + var monthHtml = ''; + // month selection + if (secondary || !changeMonth) + monthHtml += '' + monthNames[drawMonth] + ''; + else { + var inMinYear = (minDate && minDate.getFullYear() == drawYear); + var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); + monthHtml += ''; + } + if (!showMonthAfterYear) + html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : ''); + // year selection + if ( !inst.yearshtml ) { + inst.yearshtml = ''; + if (secondary || !changeYear) + html += '' + drawYear + ''; + else { + // determine range of years to display + var years = this._get(inst, 'yearRange').split(':'); + var thisYear = new Date().getFullYear(); + var determineYear = function(value) { + var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) : + (value.match(/[+-].*/) ? thisYear + parseInt(value, 10) : + parseInt(value, 10))); + return (isNaN(year) ? thisYear : year); + }; + var year = determineYear(years[0]); + var endYear = Math.max(year, determineYear(years[1] || '')); + year = (minDate ? Math.max(year, minDate.getFullYear()) : year); + endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); + inst.yearshtml += ''; + + html += inst.yearshtml; + inst.yearshtml = null; + } + } + html += this._get(inst, 'yearSuffix'); + if (showMonthAfterYear) + html += (secondary || !(changeMonth && changeYear) ? ' ' : '') + monthHtml; + html += '
'; // Close datepicker_header + return html; + }, + + /* Adjust one of the date sub-fields. */ + _adjustInstDate: function(inst, offset, period) { + var year = inst.drawYear + (period == 'Y' ? offset : 0); + var month = inst.drawMonth + (period == 'M' ? offset : 0); + var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + + (period == 'D' ? offset : 0); + var date = this._restrictMinMax(inst, + this._daylightSavingAdjust(new Date(year, month, day))); + inst.selectedDay = date.getDate(); + inst.drawMonth = inst.selectedMonth = date.getMonth(); + inst.drawYear = inst.selectedYear = date.getFullYear(); + if (period == 'M' || period == 'Y') + this._notifyChange(inst); + }, + + /* Ensure a date is within any min/max bounds. */ + _restrictMinMax: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + var newDate = (minDate && date < minDate ? minDate : date); + newDate = (maxDate && newDate > maxDate ? maxDate : newDate); + return newDate; + }, + + /* Notify change of month/year. */ + _notifyChange: function(inst) { + var onChange = this._get(inst, 'onChangeMonthYear'); + if (onChange) + onChange.apply((inst.input ? inst.input[0] : null), + [inst.selectedYear, inst.selectedMonth + 1, inst]); + }, + + /* Determine the number of months to show. */ + _getNumberOfMonths: function(inst) { + var numMonths = this._get(inst, 'numberOfMonths'); + return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)); + }, + + /* Determine the current maximum date - ensure no time components are set. */ + _getMinMaxDate: function(inst, minMax) { + return this._determineDate(inst, this._get(inst, minMax + 'Date'), null); + }, + + /* Find the number of days in a given month. */ + _getDaysInMonth: function(year, month) { + return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }, + + /* Find the day of the week of the first of a month. */ + _getFirstDayOfMonth: function(year, month) { + return new Date(year, month, 1).getDay(); + }, + + /* Determines if we should allow a "next/prev" month display change. */ + _canAdjustMonth: function(inst, offset, curYear, curMonth) { + var numMonths = this._getNumberOfMonths(inst); + var date = this._daylightSavingAdjust(new Date(curYear, + curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1)); + if (offset < 0) + date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); + return this._isInRange(inst, date); + }, + + /* Is the given date in the accepted range? */ + _isInRange: function(inst, date) { + var minDate = this._getMinMaxDate(inst, 'min'); + var maxDate = this._getMinMaxDate(inst, 'max'); + return ((!minDate || date.getTime() >= minDate.getTime()) && + (!maxDate || date.getTime() <= maxDate.getTime())); + }, + + /* Provide the configuration settings for formatting/parsing. */ + _getFormatConfig: function(inst) { + var shortYearCutoff = this._get(inst, 'shortYearCutoff'); + shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : + new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); + return {shortYearCutoff: shortYearCutoff, + dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), + monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')}; + }, + + /* Format the given date for display. */ + _formatDate: function(inst, day, month, year) { + if (!day) { + inst.currentDay = inst.selectedDay; + inst.currentMonth = inst.selectedMonth; + inst.currentYear = inst.selectedYear; + } + var date = (day ? (typeof day == 'object' ? day : + this._daylightSavingAdjust(new Date(year, month, day))) : + this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); + return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)); + } +}); + +/* + * Bind hover events for datepicker elements. + * Done via delegate so the binding only occurs once in the lifetime of the parent div. + * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. + */ +function bindHover(dpDiv) { + var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a'; + return dpDiv.delegate(selector, 'mouseout', function() { + $(this).removeClass('ui-state-hover'); + if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); + if (this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover'); + }) + .delegate(selector, 'mouseover', function(){ + if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) { + $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); + $(this).addClass('ui-state-hover'); + if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); + if (this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover'); + } + }); +} + +/* jQuery extend now ignores nulls! */ +function extendRemove(target, props) { + $.extend(target, props); + for (var name in props) + if (props[name] == null || props[name] == undefined) + target[name] = props[name]; + return target; +}; + +/* Invoke the datepicker functionality. + @param options string - a command, optionally followed by additional parameters or + Object - settings for attaching new datepicker functionality + @return jQuery object */ +$.fn.datepicker = function(options){ + + /* Verify an empty collection wasn't passed - Fixes #6976 */ + if ( !this.length ) { + return this; + } + + /* Initialise the date picker. */ + if (!$.datepicker.initialized) { + $(document).mousedown($.datepicker._checkExternalClick). + find(document.body).append($.datepicker.dpDiv); + $.datepicker.initialized = true; + } + + var otherArgs = Array.prototype.slice.call(arguments, 1); + if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget')) + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string') + return $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this[0]].concat(otherArgs)); + return this.each(function() { + typeof options == 'string' ? + $.datepicker['_' + options + 'Datepicker']. + apply($.datepicker, [this].concat(otherArgs)) : + $.datepicker._attachDatepicker(this, options); + }); +}; + +$.datepicker = new Datepicker(); // singleton instance +$.datepicker.initialized = false; +$.datepicker.uuid = new Date().getTime(); +$.datepicker.version = "1.9.0"; + +// Workaround for #4055 +// Add another global to avoid noConflict issues with inline event handlers +window['DP_jQuery_' + dpuuid] = $; + +})(jQuery); + +(function( $, undefined ) { + +var uiDialogClasses = "ui-dialog ui-widget ui-widget-content ui-corner-all ", + sizeRelatedOptions = { + buttons: true, + height: true, + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true, + width: true + }, + resizableRelatedOptions = { + maxHeight: true, + maxWidth: true, + minHeight: true, + minWidth: true + }; + +$.widget("ui.dialog", { + version: "1.9.0", + options: { + autoOpen: true, + buttons: {}, + closeOnEscape: true, + closeText: "close", + dialogClass: "", + draggable: true, + hide: null, + height: "auto", + maxHeight: false, + maxWidth: false, + minHeight: 150, + minWidth: 150, + modal: false, + position: { + my: "center", + at: "center", + of: window, + collision: "fit", + // ensure that the titlebar is never outside the document + using: function( pos ) { + var topOffset = $( this ).css( pos ).offset().top; + if ( topOffset < 0 ) { + $( this ).css( "top", pos.top - topOffset ); + } + } + }, + resizable: true, + show: null, + stack: true, + title: "", + width: 300, + zIndex: 1000 + }, + + _create: function() { + this.originalTitle = this.element.attr( "title" ); + // #5742 - .attr() might return a DOMElement + if ( typeof this.originalTitle !== "string" ) { + this.originalTitle = ""; + } + this.oldPosition = { + parent: this.element.parent(), + index: this.element.parent().children().index( this.element ) + }; + this.options.title = this.options.title || this.originalTitle; + var that = this, + options = this.options, + + title = options.title || " ", + + uiDialog = ( this.uiDialog = $( "
" ) ) + .addClass( uiDialogClasses + options.dialogClass ) + .css({ + display: "none", + outline: 0, // TODO: move to stylesheet + zIndex: options.zIndex + }) + // setting tabIndex makes the div focusable + .attr( "tabIndex", -1) + .keydown(function( event ) { + if ( options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && + event.keyCode === $.ui.keyCode.ESCAPE ) { + that.close( event ); + event.preventDefault(); + } + }) + .mousedown(function( event ) { + that.moveToTop( false, event ); + }) + .appendTo( "body" ), + + uiDialogContent = this.element + .show() + .removeAttr( "title" ) + .addClass( "ui-dialog-content ui-widget-content" ) + .appendTo( uiDialog ), + + uiDialogTitlebar = ( this.uiDialogTitlebar = $( "
" ) ) + .addClass( "ui-dialog-titlebar ui-widget-header " + + "ui-corner-all ui-helper-clearfix" ) + .prependTo( uiDialog ), + + uiDialogTitlebarClose = $( "" ) + .addClass( "ui-dialog-titlebar-close ui-corner-all" ) + .attr( "role", "button" ) + .click(function( event ) { + event.preventDefault(); + that.close( event ); + }) + .appendTo( uiDialogTitlebar ), + + uiDialogTitlebarCloseText = ( this.uiDialogTitlebarCloseText = $( "" ) ) + .addClass( "ui-icon ui-icon-closethick" ) + .text( options.closeText ) + .appendTo( uiDialogTitlebarClose ), + + uiDialogTitle = $( "" ) + .uniqueId() + .addClass( "ui-dialog-title" ) + .html( title ) + .prependTo( uiDialogTitlebar ), + + uiDialogButtonPane = ( this.uiDialogButtonPane = $( "
" ) ) + .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" ), + + uiButtonSet = ( this.uiButtonSet = $( "
" ) ) + .addClass( "ui-dialog-buttonset" ) + .appendTo( uiDialogButtonPane ); + + uiDialog.attr({ + role: "dialog", + "aria-labelledby": uiDialogTitle.attr( "id" ) + }); + + uiDialogTitlebar.find( "*" ).add( uiDialogTitlebar ).disableSelection(); + this._hoverable( uiDialogTitlebarClose ); + this._focusable( uiDialogTitlebarClose ); + + if ( options.draggable && $.fn.draggable ) { + this._makeDraggable(); + } + if ( options.resizable && $.fn.resizable ) { + this._makeResizable(); + } + + this._createButtons( options.buttons ); + this._isOpen = false; + + if ( $.fn.bgiframe ) { + uiDialog.bgiframe(); + } + + // prevent tabbing out of modal dialogs + this._on( uiDialog, { keydown: function( event ) { + if ( !options.modal || event.keyCode !== $.ui.keyCode.TAB ) { + return; + } + + var tabbables = $( ":tabbable", uiDialog ), + first = tabbables.filter( ":first" ), + last = tabbables.filter( ":last" ); + + if ( event.target === last[0] && !event.shiftKey ) { + first.focus( 1 ); + return false; + } else if ( event.target === first[0] && event.shiftKey ) { + last.focus( 1 ); + return false; + } + }}); + }, + + _init: function() { + if ( this.options.autoOpen ) { + this.open(); + } + }, + + _destroy: function() { + var next, + oldPosition = this.oldPosition; + + if ( this.overlay ) { + this.overlay.destroy(); + } + this.uiDialog.hide(); + this.element + .removeClass( "ui-dialog-content ui-widget-content" ) + .hide() + .appendTo( "body" ); + this.uiDialog.remove(); + + if ( this.originalTitle ) { + this.element.attr( "title", this.originalTitle ); + } + + next = oldPosition.parent.children().eq( oldPosition.index ); + // Don't try to place the dialog next to itself (#8613) + if ( next.length && next[ 0 ] !== this.element[ 0 ] ) { + next.before( this.element ); + } else { + oldPosition.parent.append( this.element ); + } + }, + + widget: function() { + return this.uiDialog; + }, + + close: function( event ) { + var that = this, + maxZ, thisZ; + + if ( !this._isOpen ) { + return; + } + + if ( false === this._trigger( "beforeClose", event ) ) { + return; + } + + this._isOpen = false; + + if ( this.overlay ) { + this.overlay.destroy(); + } + + if ( this.options.hide ) { + this.uiDialog.hide( this.options.hide, function() { + that._trigger( "close", event ); + }); + } else { + this.uiDialog.hide(); + this._trigger( "close", event ); + } + + $.ui.dialog.overlay.resize(); + + // adjust the maxZ to allow other modal dialogs to continue to work (see #4309) + if ( this.options.modal ) { + maxZ = 0; + $( ".ui-dialog" ).each(function() { + if ( this !== that.uiDialog[0] ) { + thisZ = $( this ).css( "z-index" ); + if ( !isNaN( thisZ ) ) { + maxZ = Math.max( maxZ, thisZ ); + } + } + }); + $.ui.dialog.maxZ = maxZ; + } + + return this; + }, + + isOpen: function() { + return this._isOpen; + }, + + // the force parameter allows us to move modal dialogs to their correct + // position on open + moveToTop: function( force, event ) { + var options = this.options, + saveScroll; + + if ( ( options.modal && !force ) || + ( !options.stack && !options.modal ) ) { + return this._trigger( "focus", event ); + } + + if ( options.zIndex > $.ui.dialog.maxZ ) { + $.ui.dialog.maxZ = options.zIndex; + } + if ( this.overlay ) { + $.ui.dialog.maxZ += 1; + $.ui.dialog.overlay.maxZ = $.ui.dialog.maxZ; + this.overlay.$el.css( "z-index", $.ui.dialog.overlay.maxZ ); + } + + // Save and then restore scroll + // Opera 9.5+ resets when parent z-index is changed. + // http://bugs.jqueryui.com/ticket/3193 + saveScroll = { + scrollTop: this.element.scrollTop(), + scrollLeft: this.element.scrollLeft() + }; + $.ui.dialog.maxZ += 1; + this.uiDialog.css( "z-index", $.ui.dialog.maxZ ); + this.element.attr( saveScroll ); + this._trigger( "focus", event ); + + return this; + }, + + open: function() { + if ( this._isOpen ) { + return; + } + + var hasFocus, + options = this.options, + uiDialog = this.uiDialog; + + this._size(); + this._position( options.position ); + uiDialog.show( options.show ); + this.overlay = options.modal ? new $.ui.dialog.overlay( this ) : null; + this.moveToTop( true ); + + // set focus to the first tabbable element in the content area or the first button + // if there are no tabbable elements, set focus on the dialog itself + hasFocus = this.element.find( ":tabbable" ); + if ( !hasFocus.length ) { + hasFocus = this.uiDialogButtonPane.find( ":tabbable" ); + if ( !hasFocus.length ) { + hasFocus = uiDialog; + } + } + hasFocus.eq( 0 ).focus(); + + this._isOpen = true; + this._trigger( "open" ); + + return this; + }, + + _createButtons: function( buttons ) { + var uiDialogButtonPane, uiButtonSet, + that = this, + hasButtons = false; + + // if we already have a button pane, remove it + this.uiDialogButtonPane.remove(); + this.uiButtonSet.empty(); + + if ( typeof buttons === "object" && buttons !== null ) { + $.each( buttons, function() { + return !(hasButtons = true); + }); + } + if ( hasButtons ) { + $.each( buttons, function( name, props ) { + props = $.isFunction( props ) ? + { click: props, text: name } : + props; + var button = $( "').addClass(this._triggerClass).html(o==""?s:$("").attr({src:o,alt:s,title:s}))),e[r?"before":"after"](t.trigger),t.trigger.click(function(){return $.datepicker._datepickerShowing&&$.datepicker._lastInput==e[0]?$.datepicker._hideDatepicker():$.datepicker._datepickerShowing&&$.datepicker._lastInput!=e[0]?($.datepicker._hideDatepicker(),$.datepicker._showDatepicker(e[0])):$.datepicker._showDatepicker(e[0]),!1})}},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t=new Date(2009,11,20),n=this._get(e,"dateFormat");if(n.match(/[DM]/)){var r=function(e){var t=0,n=0;for(var r=0;rt&&(t=e[r].length,n=r);return n};t.setMonth(r(this._get(e,n.match(/MM/)?"monthNames":"monthNamesShort"))),t.setDate(r(this._get(e,n.match(/DD/)?"dayNames":"dayNamesShort"))+20-t.getDay())}e.input.attr("size",this._formatDate(e,t).length)}},_inlineDatepicker:function(e,t){var n=$(e);if(n.hasClass(this.markerClassName))return;n.addClass(this.markerClassName).append(t.dpDiv).bind("setData.datepicker",function(e,n,r){t.settings[n]=r}).bind("getData.datepicker",function(e,n){return this._get(t,n)}),$.data(e,PROP_NAME,t),this._setDate(t,this._getDefaultDate(t),!0),this._updateDatepicker(t),this._updateAlternate(t),t.settings.disabled&&this._disableDatepicker(e),t.dpDiv.css("display","block")},_dialogDatepicker:function(e,t,n,r,i){var s=this._dialogInst;if(!s){this.uuid+=1;var o="dp"+this.uuid;this._dialogInput=$(''),this._dialogInput.keydown(this._doKeyDown),$("body").append(this._dialogInput),s=this._dialogInst=this._newInst(this._dialogInput,!1),s.settings={},$.data(this._dialogInput[0],PROP_NAME,s)}extendRemove(s.settings,r||{}),t=t&&t.constructor==Date?this._formatDate(s,t):t,this._dialogInput.val(t),this._pos=i?i.length?i:[i.pageX,i.pageY]:null;if(!this._pos){var u=document.documentElement.clientWidth,a=document.documentElement.clientHeight,f=document.documentElement.scrollLeft||document.body.scrollLeft,l=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[u/2-100+f,a/2-150+l]}return this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),s.settings.onSelect=n,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),$.blockUI&&$.blockUI(this.dpDiv),$.data(this._dialogInput[0],PROP_NAME,s),this},_destroyDatepicker:function(e){var t=$(e),n=$.data(e,PROP_NAME);if(!t.hasClass(this.markerClassName))return;var r=e.nodeName.toLowerCase();$.removeData(e,PROP_NAME),r=="input"?(n.append.remove(),n.trigger.remove(),t.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):(r=="div"||r=="span")&&t.removeClass(this.markerClassName).empty()},_enableDatepicker:function(e){var t=$(e),n=$.data(e,PROP_NAME);if(!t.hasClass(this.markerClassName))return;var r=e.nodeName.toLowerCase();if(r=="input")e.disabled=!1,n.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""});else if(r=="div"||r=="span"){var i=t.children("."+this._inlineClass);i.children().removeClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)}this._disabledInputs=$.map(this._disabledInputs,function(t){return t==e?null:t})},_disableDatepicker:function(e){var t=$(e),n=$.data(e,PROP_NAME);if(!t.hasClass(this.markerClassName))return;var r=e.nodeName.toLowerCase();if(r=="input")e.disabled=!0,n.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"});else if(r=="div"||r=="span"){var i=t.children("."+this._inlineClass);i.children().addClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)}this._disabledInputs=$.map(this._disabledInputs,function(t){return t==e?null:t}),this._disabledInputs[this._disabledInputs.length]=e},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;t-1}},_doKeyUp:function(e){var t=$.datepicker._getInst(e.target);if(t.input.val()!=t.lastVal)try{var n=$.datepicker.parseDate($.datepicker._get(t,"dateFormat"),t.input?t.input.val():null,$.datepicker._getFormatConfig(t));n&&($.datepicker._setDateFromField(t),$.datepicker._updateAlternate(t),$.datepicker._updateDatepicker(t))}catch(r){$.datepicker.log(r)}return!0},_showDatepicker:function(e){e=e.target||e,e.nodeName.toLowerCase()!="input"&&(e=$("input",e.parentNode)[0]);if($.datepicker._isDisabledDatepicker(e)||$.datepicker._lastInput==e)return;var t=$.datepicker._getInst(e);$.datepicker._curInst&&$.datepicker._curInst!=t&&($.datepicker._curInst.dpDiv.stop(!0,!0),t&&$.datepicker._datepickerShowing&&$.datepicker._hideDatepicker($.datepicker._curInst.input[0]));var n=$.datepicker._get(t,"beforeShow"),r=n?n.apply(e,[e,t]):{};if(r===!1)return;extendRemove(t.settings,r),t.lastVal=null,$.datepicker._lastInput=e,$.datepicker._setDateFromField(t),$.datepicker._inDialog&&(e.value=""),$.datepicker._pos||($.datepicker._pos=$.datepicker._findPos(e),$.datepicker._pos[1]+=e.offsetHeight);var i=!1;$(e).parents().each(function(){return i|=$(this).css("position")=="fixed",!i});var s={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null,t.dpDiv.empty(),t.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),$.datepicker._updateDatepicker(t),s=$.datepicker._checkOffset(t,s,i),t.dpDiv.css({position:$.datepicker._inDialog&&$.blockUI?"static":i?"fixed":"absolute",display:"none",left:s.left+"px",top:s.top+"px"});if(!t.inline){var o=$.datepicker._get(t,"showAnim"),u=$.datepicker._get(t,"duration"),a=function(){var e=t.dpDiv.find("iframe.ui-datepicker-cover");if(!!e.length){var n=$.datepicker._getBorders(t.dpDiv);e.css({left:-n[0],top:-n[1],width:t.dpDiv.outerWidth(),height:t.dpDiv.outerHeight()})}};t.dpDiv.zIndex($(e).zIndex()+1),$.datepicker._datepickerShowing=!0,$.effects&&($.effects.effect[o]||$.effects[o])?t.dpDiv.show(o,$.datepicker._get(t,"showOptions"),u,a):t.dpDiv[o||"show"](o?u:null,a),(!o||!u)&&a(),t.input.is(":visible")&&!t.input.is(":disabled")&&t.input.focus(),$.datepicker._curInst=t}},_updateDatepicker:function(e){this.maxRows=4;var t=$.datepicker._getBorders(e.dpDiv);instActive=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var n=e.dpDiv.find("iframe.ui-datepicker-cover");!n.length||n.css({left:-t[0],top:-t[1],width:e.dpDiv.outerWidth(),height:e.dpDiv.outerHeight()}),e.dpDiv.find("."+this._dayOverClass+" a").mouseover();var r=this._getNumberOfMonths(e),i=r[1],s=17;e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),i>1&&e.dpDiv.addClass("ui-datepicker-multi-"+i).css("width",s*i+"em"),e.dpDiv[(r[0]!=1||r[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e==$.datepicker._curInst&&$.datepicker._datepickerShowing&&e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&e.input[0]!=document.activeElement&&e.input.focus();if(e.yearshtml){var o=e.yearshtml;setTimeout(function(){o===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),o=e.yearshtml=null},0)}},_getBorders:function(e){var t=function(e){return{thin:1,medium:2,thick:3}[e]||e};return[parseFloat(t(e.css("border-left-width"))),parseFloat(t(e.css("border-top-width")))]},_checkOffset:function(e,t,n){var r=e.dpDiv.outerWidth(),i=e.dpDiv.outerHeight(),s=e.input?e.input.outerWidth():0,o=e.input?e.input.outerHeight():0,u=document.documentElement.clientWidth+(n?0:$(document).scrollLeft()),a=document.documentElement.clientHeight+(n?0:$(document).scrollTop());return t.left-=this._get(e,"isRTL")?r-s:0,t.left-=n&&t.left==e.input.offset().left?$(document).scrollLeft():0,t.top-=n&&t.top==e.input.offset().top+o?$(document).scrollTop():0,t.left-=Math.min(t.left,t.left+r>u&&u>r?Math.abs(t.left+r-u):0),t.top-=Math.min(t.top,t.top+i>a&&a>i?Math.abs(i+o):0),t},_findPos:function(e){var t=this._getInst(e),n=this._get(t,"isRTL");while(e&&(e.type=="hidden"||e.nodeType!=1||$.expr.filters.hidden(e)))e=e[n?"previousSibling":"nextSibling"];var r=$(e).offset();return[r.left,r.top]},_hideDatepicker:function(e){var t=this._curInst;if(!t||e&&t!=$.data(e,PROP_NAME))return;if(this._datepickerShowing){var n=this._get(t,"showAnim"),r=this._get(t,"duration"),i=function(){$.datepicker._tidyDialog(t)};$.effects&&($.effects.effect[n]||$.effects[n])?t.dpDiv.hide(n,$.datepicker._get(t,"showOptions"),r,i):t.dpDiv[n=="slideDown"?"slideUp":n=="fadeIn"?"fadeOut":"hide"](n?r:null,i),n||i(),this._datepickerShowing=!1;var s=this._get(t,"onClose");s&&s.apply(t.input?t.input[0]:null,[t.input?t.input.val():"",t]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),$.blockUI&&($.unblockUI(),$("body").append(this.dpDiv))),this._inDialog=!1}},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(!$.datepicker._curInst)return;var t=$(e.target),n=$.datepicker._getInst(t[0]);(t[0].id!=$.datepicker._mainDivId&&t.parents("#"+$.datepicker._mainDivId).length==0&&!t.hasClass($.datepicker.markerClassName)&&!t.closest("."+$.datepicker._triggerClass).length&&$.datepicker._datepickerShowing&&(!$.datepicker._inDialog||!$.blockUI)||t.hasClass($.datepicker.markerClassName)&&$.datepicker._curInst!=n)&&$.datepicker._hideDatepicker()},_adjustDate:function(e,t,n){var r=$(e),i=this._getInst(r[0]);if(this._isDisabledDatepicker(r[0]))return;this._adjustInstDate(i,t+(n=="M"?this._get(i,"showCurrentAtPos"):0),n),this._updateDatepicker(i)},_gotoToday:function(e){var t=$(e),n=this._getInst(t[0]);if(this._get(n,"gotoCurrent")&&n.currentDay)n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear;else{var r=new Date;n.selectedDay=r.getDate(),n.drawMonth=n.selectedMonth=r.getMonth(),n.drawYear=n.selectedYear=r.getFullYear()}this._notifyChange(n),this._adjustDate(t)},_selectMonthYear:function(e,t,n){var r=$(e),i=this._getInst(r[0]);i["selected"+(n=="M"?"Month":"Year")]=i["draw"+(n=="M"?"Month":"Year")]=parseInt(t.options[t.selectedIndex].value,10),this._notifyChange(i),this._adjustDate(r)},_selectDay:function(e,t,n,r){var i=$(e);if($(r).hasClass(this._unselectableClass)||this._isDisabledDatepicker(i[0]))return;var s=this._getInst(i[0]);s.selectedDay=s.currentDay=$("a",r).html(),s.selectedMonth=s.currentMonth=t,s.selectedYear=s.currentYear=n,this._selectDate(e,this._formatDate(s,s.currentDay,s.currentMonth,s.currentYear))},_clearDate:function(e){var t=$(e),n=this._getInst(t[0]);this._selectDate(t,"")},_selectDate:function(e,t){var n=$(e),r=this._getInst(n[0]);t=t!=null?t:this._formatDate(r),r.input&&r.input.val(t),this._updateAlternate(r);var i=this._get(r,"onSelect");i?i.apply(r.input?r.input[0]:null,[t,r]):r.input&&r.input.trigger("change"),r.inline?this._updateDatepicker(r):(this._hideDatepicker(),this._lastInput=r.input[0],typeof r.input[0]!="object"&&r.input.focus(),this._lastInput=null)},_updateAlternate:function(e){var t=this._get(e,"altField");if(t){var n=this._get(e,"altFormat")||this._get(e,"dateFormat"),r=this._getDate(e),i=this.formatDate(n,r,this._getFormatConfig(e));$(t).each(function(){$(this).val(i)})}},noWeekends:function(e){var t=e.getDay();return[t>0&&t<6,""]},iso8601Week:function(e){var t=new Date(e.getTime());t.setDate(t.getDate()+4-(t.getDay()||7));var n=t.getTime();return t.setMonth(0),t.setDate(1),Math.floor(Math.round((n-t)/864e5)/7)+1},parseDate:function(e,t,n){if(e==null||t==null)throw"Invalid arguments";t=typeof t=="object"?t.toString():t+"";if(t=="")return null;var r=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff;r=typeof r!="string"?r:(new Date).getFullYear()%100+parseInt(r,10);var i=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,s=(n?n.dayNames:null)||this._defaults.dayNames,o=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,u=(n?n.monthNames:null)||this._defaults.monthNames,a=-1,f=-1,l=-1,c=-1,h=!1,p=function(t){var n=y+1-1){f=1,l=c;do{var E=this._getDaysInMonth(a,f-1);if(l<=E)break;f++,l-=E}while(!0)}var b=this._daylightSavingAdjust(new Date(a,f-1,l));if(b.getFullYear()!=a||b.getMonth()+1!=f||b.getDate()!=l)throw"Invalid date";return b},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1e7,formatDate:function(e,t,n){if(!t)return"";var r=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,i=(n?n.dayNames:null)||this._defaults.dayNames,s=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,o=(n?n.monthNames:null)||this._defaults.monthNames,u=function(t){var n=h+112?e.getHours()+2:0),e):null},_setDate:function(e,t,n){var r=!t,i=e.selectedMonth,s=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),(i!=e.selectedMonth||s!=e.selectedYear)&&!n&&this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(r?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&e.input.val()==""?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(e){var t=this._get(e,"stepMonths"),n="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){window["DP_jQuery_"+dpuuid].datepicker._adjustDate(n,-t,"M")},next:function(){window["DP_jQuery_"+dpuuid].datepicker._adjustDate(n,+t,"M")},hide:function(){window["DP_jQuery_"+dpuuid].datepicker._hideDatepicker()},today:function(){window["DP_jQuery_"+dpuuid].datepicker._gotoToday(n)},selectDay:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectDay(n,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectMonthYear(n,this,"M"),!1},selectYear:function(){return window["DP_jQuery_"+dpuuid].datepicker._selectMonthYear(n,this,"Y"),!1}};$(this).bind(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t=new Date;t=this._daylightSavingAdjust(new Date(t.getFullYear(),t.getMonth(),t.getDate()));var n=this._get(e,"isRTL"),r=this._get(e,"showButtonPanel"),i=this._get(e,"hideIfNoPrevNext"),s=this._get(e,"navigationAsDateFormat"),o=this._getNumberOfMonths(e),u=this._get(e,"showCurrentAtPos"),a=this._get(e,"stepMonths"),f=o[0]!=1||o[1]!=1,l=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),c=this._getMinMaxDate(e,"min"),h=this._getMinMaxDate(e,"max"),p=e.drawMonth-u,d=e.drawYear;p<0&&(p+=12,d--);if(h){var v=this._daylightSavingAdjust(new Date(h.getFullYear(),h.getMonth()-o[0]*o[1]+1,h.getDate()));v=c&&vv)p--,p<0&&(p=11,d--)}e.drawMonth=p,e.drawYear=d;var m=this._get(e,"prevText");m=s?this.formatDate(m,this._daylightSavingAdjust(new Date(d,p-a,1)),this._getFormatConfig(e)):m;var g=this._canAdjustMonth(e,-1,d,p)?''+m+"":i?"":''+m+"",y=this._get(e,"nextText");y=s?this.formatDate(y,this._daylightSavingAdjust(new Date(d,p+a,1)),this._getFormatConfig(e)):y;var b=this._canAdjustMonth(e,1,d,p)?''+y+"":i?"":''+y+"",w=this._get(e,"currentText"),E=this._get(e,"gotoCurrent")&&e.currentDay?l:t;w=s?this.formatDate(w,E,this._getFormatConfig(e)):w;var S=e.inline?"":'",x=r?'
'+(n?S:"")+(this._isInRange(e,E)?'":"")+(n?"":S)+"
":"",T=parseInt(this._get(e,"firstDay"),10);T=isNaN(T)?0:T;var N=this._get(e,"showWeek"),C=this._get(e,"dayNames"),k=this._get(e,"dayNamesShort"),L=this._get(e,"dayNamesMin"),A=this._get(e,"monthNames"),O=this._get(e,"monthNamesShort"),M=this._get(e,"beforeShowDay"),_=this._get(e,"showOtherMonths"),D=this._get(e,"selectOtherMonths"),P=this._get(e,"calculateWeek")||this.iso8601Week,H=this._getDefaultDate(e),B="";for(var j=0;j1)switch(I){case 0:U+=" ui-datepicker-group-first",R=" ui-corner-"+(n?"right":"left");break;case o[1]-1:U+=" ui-datepicker-group-last",R=" ui-corner-"+(n?"left":"right");break;default:U+=" ui-datepicker-group-middle",R=""}U+='">'}U+='
'+(/all|left/.test(R)&&j==0?n?b:g:"")+(/all|right/.test(R)&&j==0?n?g:b:"")+this._generateMonthYearHeader(e,p,d,c,h,j>0||I>0,A,O)+'
'+"";var z=N?'":"";for(var W=0;W<7;W++){var X=(W+T)%7;z+="=5?' class="ui-datepicker-week-end"':"")+">"+''+L[X]+""}U+=z+"";var V=this._getDaysInMonth(d,p);d==e.selectedYear&&p==e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,V));var J=(this._getFirstDayOfMonth(d,p)-T+7)%7,K=Math.ceil((J+V)/7),Q=f?this.maxRows>K?this.maxRows:K:K;this.maxRows=Q;var G=this._daylightSavingAdjust(new Date(d,p,1-J));for(var Y=0;Y";var Z=N?'":"";for(var W=0;W<7;W++){var et=M?M.apply(e.input?e.input[0]:null,[G]):[!0,""],tt=G.getMonth()!=p,nt=tt&&!D||!et[0]||c&&Gh;Z+='",G.setDate(G.getDate()+1),G=this._daylightSavingAdjust(G)}U+=Z+""}p++,p>11&&(p=0,d++),U+="
'+this._get(e,"weekHeader")+"
'+this._get(e,"calculateWeek")(G)+""+(tt&&!_?" ":nt?''+G.getDate()+"":''+G.getDate()+"")+"
"+(f?"
"+(o[0]>0&&I==o[1]-1?'
':""):""),F+=U}B+=F}return B+=x+($.browser.msie&&parseInt($.browser.version,10)<7&&!e.inline?'':""),e._keyEvent=!1,B},_generateMonthYearHeader:function(e,t,n,r,i,s,o,u){var a=this._get(e,"changeMonth"),f=this._get(e,"changeYear"),l=this._get(e,"showMonthAfterYear"),c='
',h="";if(s||!a)h+=''+o[t]+"";else{var p=r&&r.getFullYear()==n,d=i&&i.getFullYear()==n;h+='"}l||(c+=h+(s||!a||!f?" ":""));if(!e.yearshtml){e.yearshtml="";if(s||!f)c+=''+n+"";else{var m=this._get(e,"yearRange").split(":"),g=(new Date).getFullYear(),y=function(e){var t=e.match(/c[+-].*/)?n+parseInt(e.substring(1),10):e.match(/[+-].*/)?g+parseInt(e,10):parseInt(e,10);return isNaN(t)?g:t},b=y(m[0]),w=Math.max(b,y(m[1]||""));b=r?Math.max(b,r.getFullYear()):b,w=i?Math.min(w,i.getFullYear()):w,e.yearshtml+='",c+=e.yearshtml,e.yearshtml=null}}return c+=this._get(e,"yearSuffix"),l&&(c+=(s||!a||!f?" ":"")+h),c+="
",c},_adjustInstDate:function(e,t,n){var r=e.drawYear+(n=="Y"?t:0),i=e.drawMonth+(n=="M"?t:0),s=Math.min(e.selectedDay,this._getDaysInMonth(r,i))+(n=="D"?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(r,i,s)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),(n=="M"||n=="Y")&&this._notifyChange(e)},_restrictMinMax:function(e,t){var n=this._getMinMaxDate(e,"min"),r=this._getMinMaxDate(e,"max"),i=n&&tr?r:i,i},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return t==null?[1,1]:typeof t=="number"?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return(new Date(e,t,1)).getDay()},_canAdjustMonth:function(e,t,n,r){var i=this._getNumberOfMonths(e),s=this._daylightSavingAdjust(new Date(n,r+(t<0?t:i[0]*i[1]),1));return t<0&&s.setDate(this._getDaysInMonth(s.getFullYear(),s.getMonth())),this._isInRange(e,s)},_isInRange:function(e,t){var n=this._getMinMaxDate(e,"min"),r=this._getMinMaxDate(e,"max");return(!n||t.getTime()>=n.getTime())&&(!r||t.getTime()<=r.getTime())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t=typeof t!="string"?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,n,r){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var i=t?typeof t=="object"?t:this._daylightSavingAdjust(new Date(r,n,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),i,this._getFormatConfig(e))}}),$.fn.datepicker=function(e){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find(document.body).append($.datepicker.dpDiv),$.datepicker.initialized=!0);var t=Array.prototype.slice.call(arguments,1);return typeof e!="string"||e!="isDisabled"&&e!="getDate"&&e!="widget"?e=="option"&&arguments.length==2&&typeof arguments[1]=="string"?$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this[0]].concat(t)):this.each(function(){typeof e=="string"?$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this].concat(t)):$.datepicker._attachDatepicker(this,e)}):$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this[0]].concat(t))},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.9.0",window["DP_jQuery_"+dpuuid]=$}(jQuery),function(e,t){var n="ui-dialog ui-widget ui-widget-content ui-corner-all ",r={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};e.widget("ui.dialog",{version:"1.9.0",options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var n=e(this).css(t).offset().top;n<0&&e(this).css("top",t.top-n)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.oldPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.options.title=this.options.title||this.originalTitle;var t=this,r=this.options,i=r.title||" ",s=(this.uiDialog=e("
")).addClass(n+r.dialogClass).css({display:"none",outline:0,zIndex:r.zIndex}).attr("tabIndex",-1).keydown(function(n){r.closeOnEscape&&!n.isDefaultPrevented()&&n.keyCode&&n.keyCode===e.ui.keyCode.ESCAPE&&(t.close(n),n.preventDefault())}).mousedown(function(e){t.moveToTop(!1,e)}).appendTo("body"),o=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(s),u=(this.uiDialogTitlebar=e("
")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(s),a=e("").addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").click(function(e){e.preventDefault(),t.close(e)}).appendTo(u),f=(this.uiDialogTitlebarCloseText=e("")).addClass("ui-icon ui-icon-closethick").text(r.closeText).appendTo(a),l=e("").uniqueId().addClass("ui-dialog-title").html(i).prependTo(u),c=(this.uiDialogButtonPane=e("
")).addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),h=(this.uiButtonSet=e("
")).addClass("ui-dialog-buttonset").appendTo(c);s.attr({role:"dialog","aria-labelledby":l.attr("id")}),u.find("*").add(u).disableSelection(),this._hoverable(a),this._focusable(a),r.draggable&&e.fn.draggable&&this._makeDraggable(),r.resizable&&e.fn.resizable&&this._makeResizable(),this._createButtons(r.buttons),this._isOpen=!1,e.fn.bgiframe&&s.bgiframe(),this._on(s,{keydown:function(t){if(!r.modal||t.keyCode!==e.ui.keyCode.TAB)return;var n=e(":tabbable",s),i=n.filter(":first"),o=n.filter(":last");if(t.target===o[0]&&!t.shiftKey)return i.focus(1),!1;if(t.target===i[0]&&t.shiftKey)return o.focus(1),!1}})},_init:function(){this.options.autoOpen&&this.open()},_destroy:function(){var e,t=this.oldPosition;this.overlay&&this.overlay.destroy(),this.uiDialog.hide(),this.element.removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},close:function(t){var n=this,r,i;if(!this._isOpen)return;if(!1===this._trigger("beforeClose",t))return;return this._isOpen=!1,this.overlay&&this.overlay.destroy(),this.options.hide?this.uiDialog.hide(this.options.hide,function(){n._trigger("close",t)}):(this.uiDialog.hide(),this._trigger("close",t)),e.ui.dialog.overlay.resize(),this.options.modal&&(r=0,e(".ui-dialog").each(function(){this!==n.uiDialog[0]&&(i=e(this).css("z-index"),isNaN(i)||(r=Math.max(r,i)))}),e.ui.dialog.maxZ=r),this},isOpen:function(){return this._isOpen},moveToTop:function(t,n){var r=this.options,i;return r.modal&&!t||!r.stack&&!r.modal?this._trigger("focus",n):(r.zIndex>e.ui.dialog.maxZ&&(e.ui.dialog.maxZ=r.zIndex),this.overlay&&(e.ui.dialog.maxZ+=1,e.ui.dialog.overlay.maxZ=e.ui.dialog.maxZ,this.overlay.$el.css("z-index",e.ui.dialog.overlay.maxZ)),i={scrollTop:this.element.scrollTop(),scrollLeft:this.element.scrollLeft()},e.ui.dialog.maxZ+=1,this.uiDialog.css("z-index",e.ui.dialog.maxZ),this.element.attr(i),this._trigger("focus",n),this)},open:function(){if(this._isOpen)return;var t,n=this.options,r=this.uiDialog;return this._size(),this._position(n.position),r.show(n.show),this.overlay=n.modal?new e.ui.dialog.overlay(this):null,this.moveToTop(!0),t=this.element.find(":tabbable"),t.length||(t=this.uiDialogButtonPane.find(":tabbable"),t.length||(t=r)),t.eq(0).focus(),this._isOpen=!0,this._trigger("open"),this},_createButtons:function(t){var n,r,i=this,s=!1;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),typeof t=="object"&&t!==null&&e.each(t,function(){return!(s=!0)}),s?(e.each(t,function(t,n){n=e.isFunction(n)?{click:n,text:t}:n;var r=e("
").css({position:"absolute",visibility:"visible",left:-p*f,top:-h*l}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:f,height:l,left:d+(u?m*f:0),top:v+(u?g*l:0),opacity:u?0:1}).animate({left:d+(u?0:m*f),top:v+(u?0:g*l),opacity:u?1:0},t.duration||500,t.easing,y)}}}(jQuery),function(e,t){e.effects.effect.fade=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"toggle");r.animate({opacity:i},{queue:!1,duration:t.duration,easing:t.easing,complete:n})}}(jQuery),function(e,t){e.effects.effect.fold=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=s==="hide",a=t.size||15,f=/([0-9]+)%/.exec(a),l=!!t.horizFirst,c=o!==l,h=c?["width","height"]:["height","width"],p=t.duration/2,d,v,m={},g={};e.effects.save(r,i),r.show(),d=e.effects.createWrapper(r).css({overflow:"hidden"}),v=c?[d.width(),d.height()]:[d.height(),d.width()],f&&(a=parseInt(f[1],10)/100*v[u?0:1]),o&&d.css(l?{height:0,width:a}:{height:a,width:0}),m[h[0]]=o?v[0]:a,g[h[1]]=o?v[1]:0,d.animate(m,p,t.easing).animate(g,p,t.easing,function(){u&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()})}}(jQuery),function(e,t){e.effects.effect.highlight=function(t,n){var r=e(this),i=["backgroundImage","backgroundColor","opacity"],s=e.effects.setMode(r,t.mode||"show"),o={backgroundColor:r.css("backgroundColor")};s==="hide"&&(o.opacity=0),e.effects.save(r,i),r.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),n()}})}}(jQuery),function(e,t){e.effects.effect.pulsate=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"show"),s=i==="show",o=i==="hide",u=s||i==="hide",a=(t.times||5)*2+(u?1:0),f=t.duration/a,l=0,c=r.queue(),h=c.length,p;if(s||!r.is(":visible"))r.css("opacity",0).show(),l=1;for(p=1;p1&&c.splice.apply(c,[1,0].concat(c.splice(h,a+1))),r.dequeue()}}(jQuery),function(e,t){e.effects.effect.puff=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"hide"),s=i==="hide",o=parseInt(t.percent,10)||150,u=o/100,a={height:r.height(),width:r.width()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:i,complete:n,percent:s?o:100,from:s?a:{height:a.height*u,width:a.width*u}}),r.effect(t)},e.effects.effect.scale=function(t,n){var r=e(this),i=e.extend(!0,{},t),s=e.effects.setMode(r,t.mode||"effect"),o=parseInt(t.percent,10)||(parseInt(t.percent,10)===0?0:s==="hide"?0:100),u=t.direction||"both",a=t.origin,f={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()},l={y:u!=="horizontal"?o/100:1,x:u!=="vertical"?o/100:1};i.effect="size",i.queue=!1,i.complete=n,s!=="effect"&&(i.origin=a||["middle","center"],i.restore=!0),i.from=t.from||(s==="show"?{height:0,width:0}:f),i.to={height:f.height*l.y,width:f.width*l.x,outerHeight:f.outerHeight*l.y,outerWidth:f.outerWidth*l.x},i.fade&&(s==="show"&&(i.from.opacity=0,i.to.opacity=1),s==="hide"&&(i.from.opacity=1,i.to.opacity=0)),r.effect(i)},e.effects.effect.size=function(t,n){var r=e(this),i=["position","top","bottom","left","right","width","height","overflow","opacity"],s=["position","top","bottom","left","right","overflow","opacity"],o=["width","height","overflow"],u=["fontSize"],a=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],l=e.effects.setMode(r,t.mode||"effect"),c=t.restore||l!=="effect",h=t.scale||"both",p=t.origin||["middle","center"],d,v,m,g=r.css("position");l==="show"&&r.show(),d={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()},r.from=t.from||d,r.to=t.to||d,m={from:{y:r.from.height/d.height,x:r.from.width/d.width},to:{y:r.to.height/d.height,x:r.to.width/d.width}};if(h==="box"||h==="both")m.from.y!==m.to.y&&(i=i.concat(a),r.from=e.effects.setTransition(r,a,m.from.y,r.from),r.to=e.effects.setTransition(r,a,m.to.y,r.to)),m.from.x!==m.to.x&&(i=i.concat(f),r.from=e.effects.setTransition(r,f,m.from.x,r.from),r.to=e.effects.setTransition(r,f,m.to.x,r.to));(h==="content"||h==="both")&&m.from.y!==m.to.y&&(i=i.concat(u),r.from=e.effects.setTransition(r,u,m.from.y,r.from),r.to=e.effects.setTransition(r,u,m.to.y,r.to)),e.effects.save(r,c?i:s),r.show(),e.effects.createWrapper(r),r.css("overflow","hidden").css(r.from),p&&(v=e.effects.getBaseline(p,d),r.from.top=(d.outerHeight-r.outerHeight())*v.y,r.from.left=(d.outerWidth-r.outerWidth())*v.x,r.to.top=(d.outerHeight-r.to.outerHeight)*v.y,r.to.left=(d.outerWidth-r.to.outerWidth)*v.x),r.css(r.from);if(h==="content"||h==="both")a=a.concat(["marginTop","marginBottom"]).concat(u),f=f.concat(["marginLeft","marginRight"]),o=i.concat(a).concat(f),r.find("*[width]").each(function(){var n=e(this),r={height:n.height(),width:n.width()};c&&e.effects.save(n,o),n.from={height:r.height*m.from.y,width:r.width*m.from.x},n.to={height:r.height*m.to.y,width:r.width*m.to.x},m.from.y!==m.to.y&&(n.from=e.effects.setTransition(n,a,m.from.y,n.from),n.to=e.effects.setTransition(n,a,m.to.y,n.to)),m.from.x!==m.to.x&&(n.from=e.effects.setTransition(n,f,m.from.x,n.from),n.to=e.effects.setTransition(n,f,m.to.x,n.to)),n.css(n.from),n.animate(n.to,t.duration,t.easing,function(){c&&e.effects.restore(n,o)})});r.animate(r.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){r.to.opacity===0&&r.css("opacity",r.from.opacity),l==="hide"&&r.hide(),e.effects.restore(r,c?i:s),c||(g==="static"?r.css({position:"relative",top:r.to.top,left:r.to.left}):e.each(["top","left"],function(e,t){r.css(t,function(t,n){var i=parseInt(n,10),s=e?r.to.left:r.to.top;return n==="auto"?s+"px":i+s+"px"})})),e.effects.removeWrapper(r),n()}})}}(jQuery),function(e,t){e.effects.effect.shake=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=t.direction||"left",u=t.distance||20,a=t.times||3,f=a*2+1,l=Math.round(t.duration/f),c=o==="up"||o==="down"?"top":"left",h=o==="up"||o==="left",p={},d={},v={},m,g=r.queue(),y=g.length;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),p[c]=(h?"-=":"+=")+u,d[c]=(h?"+=":"-=")+u*2,v[c]=(h?"-=":"+=")+u*2,r.animate(p,l,t.easing);for(m=1;m1&&g.splice.apply(g,[1,0].concat(g.splice(y,f+1))),r.dequeue()}}(jQuery),function(e,t){e.effects.effect.slide=function(t,n){var r=e(this),i=["position","top","bottom","left","right","width","height"],s=e.effects.setMode(r,t.mode||"show"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left",l,c={};e.effects.save(r,i),r.show(),l=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(r).css({overflow:"hidden"}),o&&r.css(a,f?isNaN(l)?"-"+l:-l:l),c[a]=(o?f?"+=":"-=":f?"-=":"+=")+l,r.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}}(jQuery),function(e,t){e.effects.effect.transfer=function(t,n){var r=e(this),i=e(t.to),s=i.css("position")==="fixed",o=e("body"),u=s?o.scrollTop():0,a=s?o.scrollLeft():0,f=i.offset(),l={top:f.top-u,left:f.left-a,height:i.innerHeight(),width:i.innerWidth()},c=r.offset(),h=e('
').appendTo(document.body).addClass(t.className).css({top:c.top-u,left:c.left-a,height:r.innerHeight(),width:r.innerWidth(),position:s?"fixed":"absolute"}).animate(l,t.duration,t.easing,function(){h.remove(),n()})}}(jQuery),function(e,t){var n=!1;e.widget("ui.menu",{version:"1.9.0",defaultElement:"
    ",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,e.proxy(function(e){this.options.disabled&&e.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(e){e.preventDefault()},"click .ui-state-disabled > a":function(e){e.preventDefault()},"click .ui-menu-item:has(a)":function(t){var r=e(t.target).closest(".ui-menu-item");!n&&r.not(".ui-state-disabled").length&&(n=!0,this.select(t),r.has(".ui-menu").length?this.expand(t):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&this.active.parents(".ui-menu").length===1&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var n=e(t.currentTarget);n.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(t,n)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var n=this.active||this.element.children(".ui-menu-item").eq(0);t||this.focus(e,n)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){e(t.target).closest(".ui-menu").length||this.collapseAll(t),n=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").andSelf().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){function a(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var n,r,i,s,o,u=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:u=!1,r=this.previousFilter||"",i=String.fromCharCode(t.keyCode),s=!1,clearTimeout(this.filterTimer),i===r?s=!0:i=r+i,o=new RegExp("^"+a(i),"i"),n=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())}),n=s&&n.index(this.active.next())!==-1?this.active.nextAll(".ui-menu-item"):n,n.length||(i=String.fromCharCode(t.keyCode),o=new RegExp("^"+a(i),"i"),n=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())})),n.length?(this.focus(t,n),n.length>1?(this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}u&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(e):this.select(e))},refresh:function(){var t,n=this.options.icons.submenu,r=this.element.find(this.options.menus+":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"});t=r.add(this.element),t.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),t.children(":not(.ui-menu-item)").each(function(){var t=e(this);/[^\-—–\s]/.test(t.text())||t.addClass("ui-widget-content ui-menu-divider")}),t.children(".ui-state-disabled").attr("aria-disabled","true"),r.each(function(){var t=e(this),r=t.prev("a"),i=e("").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);r.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",r.attr("id"))}),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},focus:function(e,t){var n,r;this.blur(e,e&&e.type==="focus"),this._scrollIntoView(t),this.active=t.first(),r=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",r.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),e&&e.type==="keydown"?this._close():this.timer=this._delay(function(){this._close()},this.delay),n=t.children(".ui-menu"),n.length&&/^mouse/.test(e.type)&&this._startOpening(n),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var n,r,i,s,o,u;this._hasScroll()&&(n=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,r=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,i=t.offset().top-this.activeMenu.offset().top-n-r,s=this.activeMenu.scrollTop(),o=this.activeMenu.height(),u=t.height(),i<0?this.activeMenu.scrollTop(s+i):i+u>o&&this.activeMenu.scrollTop(s+i-o+u))},blur:function(e,t){t||clearTimeout(this.timer);if(!this.active)return;this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active})},_startOpening:function(e){clearTimeout(this.timer);if(e.attr("aria-hidden")!=="true")return;this.timer=this._delay(function(){this._close(),this._open(e)},this.delay)},_open:function(t){var n=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(n)},collapseAll:function(t,n){clearTimeout(this.timer),this.timer=this._delay(function(){var r=n?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));r.length||(r=this.element),this._close(r),this.blur(t),this.activeMenu=r},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,n){var r;this.active&&(e==="first"||e==="last"?r=this.active[e==="first"?"prevAll":"nextAll"](".ui-menu-item").eq(-1):r=this.active[e+"All"](".ui-menu-item").eq(0));if(!r||!r.length||!this.active)r=this.activeMenu.children(".ui-menu-item")[t]();this.focus(n,r)},nextPage:function(t){var n,r,i;if(!this.active){this.next(t);return}if(this.isLastItem())return;this._hasScroll()?(r=this.active.offset().top,i=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return n=e(this),n.offset().top-r-i<0}),this.focus(t,n)):this.focus(t,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())},previousPage:function(t){var n,r,i;if(!this.active){this.next(t);return}if(this.isFirstItem())return;this._hasScroll()?(r=this.active.offset().top,i=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return n=e(this),n.offset().top-r+i>0}),this.focus(t,n)):this.focus(t,this.activeMenu.children(".ui-menu-item").first())},_hasScroll:function(){return this.element.outerHeight()
"),o=s.children()[0];return e("body").append(s),r=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,r===i&&(i=s[0].clientWidth),s.remove(),n=r-i},getScrollInfo:function(t){var n=t.isWindow?"":t.element.css("overflow-x"),r=t.isWindow?"":t.element.css("overflow-y"),i=n==="scroll"||n==="auto"&&t.width0?"right":"center",vertical:u<0?"top":o>0?"bottom":"middle"};lr(i(o),i(u))?h.important="horizontal":h.important="vertical",t.using.call(this,e,h)}),a.offset(e.extend(C,{using:u}))})},e.ui.position={fit:{left:function(e,t){var n=t.within,i=n.isWindow?n.scrollLeft:n.offset.left,s=n.width,o=e.left-t.collisionPosition.marginLeft,u=i-o,a=o+t.collisionWidth-s-i,f;t.collisionWidth>s?u>0&&a<=0?(f=e.left+u+t.collisionWidth-s-i,e.left+=u-f):a>0&&u<=0?e.left=i:u>a?e.left=i+s-t.collisionWidth:e.left=i:u>0?e.left+=u:a>0?e.left-=a:e.left=r(e.left-o,e.left)},top:function(e,t){var n=t.within,i=n.isWindow?n.scrollTop:n.offset.top,s=t.within.height,o=e.top-t.collisionPosition.marginTop,u=i-o,a=o+t.collisionHeight-s-i,f;t.collisionHeight>s?u>0&&a<=0?(f=e.top+u+t.collisionHeight-s-i,e.top+=u-f):a>0&&u<=0?e.top=i:u>a?e.top=i+s-t.collisionHeight:e.top=i:u>0?e.top+=u:a>0?e.top-=a:e.top=r(e.top-o,e.top)}},flip:{left:function(e,t){var n=t.within,r=n.offset.left+n.scrollLeft,s=n.width,o=n.isWindow?n.scrollLeft:n.offset.left,u=e.left-t.collisionPosition.marginLeft,a=u-o,f=u+t.collisionWidth-s-o,l=t.my[0]==="left"?-t.elemWidth:t.my[0]==="right"?t.elemWidth:0,c=t.at[0]==="left"?t.targetWidth:t.at[0]==="right"?-t.targetWidth:0,h=-2*t.offset[0],p,d;if(a<0){p=e.left+l+c+h+t.collisionWidth-s-r;if(p<0||p0){d=e.left-t.collisionPosition.marginLeft+l+c+h-o;if(d>0||i(d)a&&(v<0||v0&&(d=e.top-t.collisionPosition.marginTop+c+h+p-o,e.top+c+h+p>f&&(d>0||i(d)10&&i<11,t.innerHTML="",n.removeChild(t)}(),e.uiBackCompat!==!1&&function(e){var n=e.fn.position;e.fn.position=function(r){if(!r||!r.offset)return n.call(this,r);var i=r.offset.split(" "),s=r.at.split(" ");return i.length===1&&(i[1]=i[0]),/^\d/.test(i[0])&&(i[0]="+"+i[0]),/^\d/.test(i[1])&&(i[1]="+"+i[1]),s.length===1&&(/left|center|right/.test(s[0])?s[1]="center":(s[1]=s[0],s[0]="center")),n.call(this,e.extend(r,{at:s[0]+i[0]+" "+s[1]+i[1],offset:t}))}}(jQuery)}(jQuery),function(e,t){e.widget("ui.progressbar",{version:"1.9.0",options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()}),this.valueDiv=e("
").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return e===t?this._value():(this._setOption("value",e),this)},_setOption:function(e,t){e==="value"&&(this.options.value=t,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),this._super(e,t)},_value:function(){var e=this.options.value;return typeof e!="number"&&(e=0),Math.min(this.options.max,Math.max(this.min,e))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var e=this.value(),t=this._percentage();this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),this.valueDiv.toggle(e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(t.toFixed(0)+"%"),this.element.attr("aria-valuenow",e)}})}(jQuery),function(e,t){var n=5;e.widget("ui.slider",e.ui.mouse,{version:"1.9.0",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var t,r=this.options,i=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),s="",o=r.values&&r.values.length||1,u=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(r.disabled?" ui-slider-disabled ui-disabled":"")),this.range=e([]),r.range&&(r.range===!0&&(r.values||(r.values=[this._valueMin(),this._valueMin()]),r.values.length&&r.values.length!==2&&(r.values=[r.values[0],r.values[0]])),this.range=e("
").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(r.range==="min"||r.range==="max"?" ui-slider-range-"+r.range:"")));for(t=i.length;tn&&(i=n,s=e(this),o=t)}),c.range===!0&&this.values(1)===c.min&&(o+=1,s=e(this.handles[o])),u=this._start(t,o),u===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,s.addClass("ui-state-active").focus(),a=s.offset(),f=!e(t.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=f?{left:0,top:0}:{left:t.pageX-a.left-s.width()/2,top:t.pageY-a.top-s.height()/2-(parseInt(s.css("borderTopWidth"),10)||0)-(parseInt(s.css("borderBottomWidth"),10)||0)+(parseInt(s.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,r),this._animateOff=!0,!0))},_mouseStart:function(e){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},n=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,n),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,n,r,i,s;return this.orientation==="horizontal"?(t=this.elementSize.width,n=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,n=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),r=n/t,r>1&&(r=1),r<0&&(r=0),this.orientation==="vertical"&&(r=1-r),i=this._valueMax()-this._valueMin(),s=this._valueMin()+r*i,this._trimAlignValue(s)},_start:function(e,t){var n={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(n.value=this.values(t),n.values=this.values()),this._trigger("start",e,n)},_slide:function(e,t,n){var r,i,s;this.options.values&&this.options.values.length?(r=this.values(t?0:1),this.options.values.length===2&&this.options.range===!0&&(t===0&&n>r||t===1&&n1){this.options.values[t]=this._trimAlignValue(n),this._refreshValue(),this._change(null,t);return}if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();r=this.options.values,i=arguments[0];for(s=0;s=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,n=(e-this._valueMin())%t,r=e-n;return Math.abs(n)*2>=t&&(r+=n>0?t:-t),parseFloat(r.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,n,r,i,s,o=this.options.range,u=this.options,a=this,f=this._animateOff?!1:u.animate,l={};this.options.values&&this.options.values.length?this.handles.each(function(r,i){n=(a.values(r)-a._valueMin())/(a._valueMax()-a._valueMin())*100,l[a.orientation==="horizontal"?"left":"bottom"]=n+"%",e(this).stop(1,1)[f?"animate":"css"](l,u.animate),a.options.range===!0&&(a.orientation==="horizontal"?(r===0&&a.range.stop(1,1)[f?"animate":"css"]({left:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({width:n-t+"%"},{queue:!1,duration:u.animate})):(r===0&&a.range.stop(1,1)[f?"animate":"css"]({bottom:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({height:n-t+"%"},{queue:!1,duration:u.animate}))),t=n}):(r=this.value(),i=this._valueMin(),s=this._valueMax(),n=s!==i?(r-i)/(s-i)*100:0,l[this.orientation==="horizontal"?"left":"bottom"]=n+"%",this.handle.stop(1,1)[f?"animate":"css"](l,u.animate),o==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[f?"animate":"css"]({width:n+"%"},u.animate),o==="max"&&this.orientation==="horizontal"&&this.range[f?"animate":"css"]({width:100-n+"%"},{queue:!1,duration:u.animate}),o==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[f?"animate":"css"]({height:n+"%"},u.animate),o==="max"&&this.orientation==="vertical"&&this.range[f?"animate":"css"]({height:100-n+"%"},{queue:!1,duration:u.animate}))}})}(jQuery),function(e){function t(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.widget("ui.spinner",{version:"1.9.0",defaultElement:"",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},n=this.element;return e.each(["min","max","step"],function(e,r){var i=n.attr(r);i!==undefined&&i.length&&(t[r]=i)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.uiSpinner.addClass("ui-state-active"),this.previous=this.element.val()},blur:function(e){if(this.cancelBlur){delete this.cancelBlur;return}this._refresh(),this.uiSpinner.removeClass("ui-state-active"),this.previous!==this.element.val()&&this._trigger("change",e)},mousewheel:function(e,t){if(!t)return;if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()},"mousedown .ui-spinner-button":function(t){function r(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=n,this._delay(function(){this.previous=n}))}var n;n=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),r.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,r.call(this)});if(this._start(t)===!1)return;this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){if(!e(t.currentTarget).hasClass("ui-state-active"))return;if(this._start(t)===!1)return!1;this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this._hoverable(e),this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(e.height()*.5)&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var n=this.options,r=e.ui.keyCode;switch(t.keyCode){case r.UP:return this._repeat(null,1,t),!0;case r.DOWN:return this._repeat(null,-1,t),!0;case r.PAGE_UP:return this._repeat(null,n.page,t),!0;case r.PAGE_DOWN:return this._repeat(null,-n.page,t),!0}return!1},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""+""+""+""+""},_start:function(e){return!this.spinning&&this._trigger("start",e)===!1?!1:(this.counter||(this.counter=1),this.spinning=!0,!0)},_repeat:function(e,t,n){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,n)},e),this._spin(t*this.options.step,n)},_spin:function(e,t){var n=this.value()||0;this.counter||(this.counter=1),n=this._adjustValue(n+e*this._increment(this.counter));if(!this.spinning||this._trigger("spin",t,{value:n})!==!1)this._value(n),this.counter++},_increment:function(t){var n=this.options.incremental;return n?e.isFunction(n)?n(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return this.options.min!==null&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=e.toString(),n=t.indexOf(".");return n===-1?0:t.length-n-1},_adjustValue:function(e){var t,n,r=this.options;return t=r.min!==null?r.min:0,n=e-t,n=Math.round(n/r.step)*r.step,e=t+n,e=parseFloat(e.toFixed(this._precision())),r.max!==null&&e>r.max?r.max:r.min!==null&&e1&&e.href.replace(r,"")===location.href.replace(r,"")}var n=0,r=/#.*$/;e.widget("ui.tabs",{version:"1.9.0",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var t,n=this,r=this.options,i=r.active;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",r.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs();if(i===null){location.hash&&this.anchors.each(function(e,t){if(t.hash===location.hash)return i=e,!1}),i===null&&(i=this.tabs.filter(".ui-tabs-active").index());if(i===null||i===-1)i=this.tabs.length?0:!1}i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),i===-1&&(i=r.collapsible?!1:0)),r.active=i,!r.collapsible&&r.active===!1&&this.anchors.length&&(r.active=0),e.isArray(r.disabled)&&(r.disabled=e.unique(r.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return n.tabs.index(e)}))).sort()),this.options.active!==!1&&this.anchors.length?this.active=this._findActive(this.options.active):this.active=e(),this._refresh(),this.active.length&&this.load(r.active)},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var n=e(this.document[0].activeElement).closest("li"),r=this.tabs.index(n),i=!0;if(this._handlePageNav(t))return;switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:r++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:i=!1,r--;break;case e.ui.keyCode.END:r=this.anchors.length-1;break;case e.ui.keyCode.HOME:r=0;break;case e.ui.keyCode.SPACE:t.preventDefault(),clearTimeout(this.activating),this._activate(r);return;case e.ui.keyCode.ENTER:t.preventDefault(),clearTimeout(this.activating),this._activate(r===this.options.active?!1:r);return;default:return}t.preventDefault(),clearTimeout(this.activating),r=this._focusNextTab(r,i),t.ctrlKey||(n.attr("aria-selected","false"),this.tabs.eq(r).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",r)},this.delay))},_panelKeydown:function(t){if(this._handlePageNav(t))return;t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){if(t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP)return this._activate(this._focusNextTab(this.options.active-1,!1)),!0;if(t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN)return this._activate(this._focusNextTab(this.options.active+1,!0)),!0},_findNextTab:function(t,n){function i(){return t>r&&(t=0),t<0&&(t=r),t}var r=this.tabs.length-1;while(e.inArray(i(),this.options.disabled)!==-1)t=n?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){if(e==="active"){this._activate(t);return}if(e==="disabled"){this._setupDisabled(t);return}this._super(e,t),e==="collapsible"&&(this.element.toggleClass("ui-tabs-collapsible",t),!t&&this.options.active===!1&&this._activate(0)),e==="event"&&this._setupEvents(t),e==="heightStyle"&&this._setupHeightStyle(t)},_tabId:function(e){return e.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t,n=this.options,r=this.tablist.children(":has(a[href])");n.disabled=e.map(r.filter(".ui-state-disabled"),function(e){return r.index(e)}),this._processTabs(),n.active===!1||!this.anchors.length?(n.active=!1,this.active=e()):this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===n.disabled.length?(n.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,n.active-1),!1)):n.active=this.tabs.index(this.active),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(n,r){var i,o,u,a=e(r).uniqueId().attr("id"),f=e(r).closest("li"),l=f.attr("aria-controls");s(r)?(i=r.hash,o=t.element.find(t._sanitizeSelector(i))):(u=t._tabId(f),i="#"+u,o=t.element.find(i),o.length||(o=t._createPanel(u),o.insertAfter(t.panels[n-1]||t.tablist)),o.attr("aria-live","polite")),o.length&&(t.panels=t.panels.add(o)),l&&f.data("ui-tabs-aria-controls",l),f.attr({"aria-controls":i.substring(1),"aria-labelledby":a}),o.attr("aria-labelledby",a)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("
").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var n=0,r;r=this.tabs[n];n++)t===!0||e.inArray(n,t)!==-1?e(r).addClass("ui-state-disabled").attr("aria-disabled","true"):e(r).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var n={click:function(e){e.preventDefault()}};t&&e.each(t.split(" "),function(e,t){n[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,n),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var n,r,i=this.element.parent();t==="fill"?(e.support.minHeight||(r=i.css("overflow"),i.css("overflow","hidden")),n=i.height(),this.element.siblings(":visible").each(function(){var t=e(this),r=t.css("position");if(r==="absolute"||r==="fixed")return;n-=t.outerHeight(!0)}),r&&i.css("overflow",r),this.element.children().not(this.panels).each(function(){n-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,n-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):t==="auto"&&(n=0,this.panels.each(function(){n=Math.max(n,e(this).height("").height())}).height(n))},_eventHandler:function(t){var n=this.options,r=this.active,i=e(t.currentTarget),s=i.closest("li"),o=s[0]===r[0],u=o&&n.collapsible,a=u?e():this._getPanelForTab(s),f=r.length?this._getPanelForTab(r):e(),l={oldTab:r,oldPanel:f,newTab:u?e():s,newPanel:a};t.preventDefault();if(s.hasClass("ui-state-disabled")||s.hasClass("ui-tabs-loading")||this.running||o&&!n.collapsible||this._trigger("beforeActivate",t,l)===!1)return;n.active=u?!1:this.tabs.index(s),this.active=o?e():s,this.xhr&&this.xhr.abort(),!f.length&&!a.length&&e.error("jQuery UI Tabs: Mismatching fragment identifier."),a.length&&this.load(this.tabs.index(s),t),this._toggle(t,l)},_toggle:function(t,n){function o(){r.running=!1,r._trigger("activate",t,n)}function u(){n.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),i.length&&r.options.show?r._show(i,r.options.show,o):(i.show(),o())}var r=this,i=n.newPanel,s=n.oldPanel;this.running=!0,s.length&&this.options.hide?this._hide(s,this.options.hide,function(){n.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),u()}):(n.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),s.hide(),u()),s.attr({"aria-expanded":"false","aria-hidden":"true"}),n.oldTab.attr("aria-selected","false"),i.length&&s.length?n.oldTab.attr("tabIndex",-1):i.length&&this.tabs.filter(function(){return e(this).attr("tabIndex")===0}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}),n.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(t){var n,r=this._findActive(t);if(r[0]===this.active[0])return;r.length||(r=this.active),n=r.find(".ui-tabs-anchor")[0],this._eventHandler({target:n,currentTarget:n,preventDefault:e.noop})},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return typeof e=="string"&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeData("href.tabs").removeData("load.tabs").removeUniqueId(),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),n=t.data("ui-tabs-aria-controls");n?t.attr("aria-controls",n):t.removeAttr("aria-controls")}),this.options.heightStyle!=="content"&&this.panels.css("height","")},enable:function(n){var r=this.options.disabled;if(r===!1)return;n===t?r=!1:(n=this._getIndex(n),e.isArray(r)?r=e.map(r,function(e){return e!==n?e:null}):r=e.map(this.tabs,function(e,t){return t!==n?t:null})),this._setupDisabled(r)},disable:function(n){var r=this.options.disabled;if(r===!0)return;if(n===t)r=!0;else{n=this._getIndex(n);if(e.inArray(n,r)!==-1)return;e.isArray(r)?r=e.merge([n],r).sort():r=[n]}this._setupDisabled(r)},load:function(t,n){t=this._getIndex(t);var r=this,i=this.tabs.eq(t),o=i.find(".ui-tabs-anchor"),u=this._getPanelForTab(i),a={tab:i,panel:u};if(s(o[0]))return;this.xhr=e.ajax(this._ajaxSettings(o,n,a)),this.xhr&&this.xhr.statusText!=="canceled"&&(i.addClass("ui-tabs-loading"),u.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){u.html(e),r._trigger("load",n,a)},1)}).complete(function(e,t){setTimeout(function(){t==="abort"&&r.panels.stop(!1,!0),i.removeClass("ui-tabs-loading"),u.removeAttr("aria-busy"),e===r.xhr&&delete r.xhr},1)}))},_ajaxSettings:function(t,n,r){var i=this;return{url:t.attr("href"),beforeSend:function(t,s){return i._trigger("beforeLoad",n,e.extend({jqXHR:t,ajaxSettings:s},r))}}},_getPanelForTab:function(t){var n=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+n))}}),e.uiBackCompat!==!1&&(e.ui.tabs.prototype._ui=function(e,t){return{tab:e,panel:t,index:this.anchors.index(e)}},e.widget("ui.tabs",e.ui.tabs,{url:function(e,t){this.anchors.eq(e).attr("href",t)}}),e.widget("ui.tabs",e.ui.tabs,{options:{ajaxOptions:null,cache:!1},_create:function(){this._super();var t=this;this._on({tabsbeforeload:function(n,r){if(e.data(r.tab[0],"cache.tabs")){n.preventDefault();return}r.jqXHR.success(function(){t.options.cache&&e.data(r.tab[0],"cache.tabs",!0)})}})},_ajaxSettings:function(t,n,r){var i=this.options.ajaxOptions;return e.extend({},i,{error:function(e,t,n){try{i.error(e,t,r.tab.closest("li").index(),r.tab[0])}catch(n){}}},this._superApply(arguments))},_setOption:function(e,t){e==="cache"&&t===!1&&this.anchors.removeData("cache.tabs"),this._super(e,t)},_destroy:function(){this.anchors.removeData("cache.tabs"),this._super()},url:function(e,t){this.anchors.eq(e).removeData("cache.tabs"),this._superApply(arguments)}}),e.widget("ui.tabs",e.ui.tabs,{abort:function(){this.xhr&&this.xhr.abort()}}),e.widget("ui.tabs",e.ui.tabs,{options:{spinner:"Loading…"},_create:function(){this._super(),this._on({tabsbeforeload:function(e,t){if(e.target!==this.element[0]||!this.options.spinner)return;var n=t.tab.find("span"),r=n.html();n.html(this.options.spinner),t.jqXHR.complete(function(){n.html(r)})}})}}),e.widget("ui.tabs",e.ui.tabs,{options:{enable:null,disable:null},enable:function(t){var n=this.options,r;if(t&&n.disabled===!0||e.isArray(n.disabled)&&e.inArray(t,n.disabled)!==-1)r=!0;this._superApply(arguments),r&&this._trigger("enable",null,this._ui(this.anchors[t],this.panels[t]))},disable:function(t){var n=this.options,r;if(t&&n.disabled===!1||e.isArray(n.disabled)&&e.inArray(t,n.disabled)===-1)r=!0;this._superApply(arguments),r&&this._trigger("disable",null,this._ui(this.anchors[t],this.panels[t]))}}),e.widget("ui.tabs",e.ui.tabs,{options:{add:null,remove:null,tabTemplate:"
  • #{label}
  • "},add:function(n,r,i){i===t&&(i=this.anchors.length);var s,o,u=this.options,a=e(u.tabTemplate.replace(/#\{href\}/g,n).replace(/#\{label\}/g,r)),f=n.indexOf("#")?this._tabId(a):n.replace("#","");return a.addClass("ui-state-default ui-corner-top").data("ui-tabs-destroy",!0),a.attr("aria-controls",f),s=i>=this.tabs.length,o=this.element.find("#"+f),o.length||(o=this._createPanel(f),s?i>0?o.insertAfter(this.panels.eq(-1)):o.appendTo(this.element):o.insertBefore(this.panels[i])),o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").hide(),s?a.appendTo(this.tablist):a.insertBefore(this.tabs[i]),u.disabled=e.map(u.disabled,function(e){return e>=i?++e:e}),this.refresh(),this.tabs.length===1&&u.active===!1&&this.option("active",0),this._trigger("add",null,this._ui(this.anchors[i],this.panels[i])),this},remove:function(t){t=this._getIndex(t);var n=this.options,r=this.tabs.eq(t).remove(),i=this._getPanelForTab(r).remove();return r.hasClass("ui-tabs-active")&&this.anchors.length>2&&this._activate(t+(t+1=t?--e:e}),this.refresh(),this._trigger("remove",null,this._ui(r.find("a")[0],i[0])),this}}),e.widget("ui.tabs",e.ui.tabs,{length:function(){return this.anchors.length}}),e.widget("ui.tabs",e.ui.tabs,{options:{idPrefix:"ui-tabs-"},_tabId:function(t){var n=t.is("li")?t.find("a[href]"):t;return n=n[0],e(n).closest("li").attr("aria-controls")||n.title&&n.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF\-]/g,"")||this.options.idPrefix+i()}}),e.widget("ui.tabs",e.ui.tabs,{options:{panelTemplate:"
    "},_createPanel:function(t){return e(this.options.panelTemplate).attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)}}),e.widget("ui.tabs",e.ui.tabs,{_create:function(){var e=this.options;e.active===null&&e.selected!==t&&(e.active=e.selected===-1?!1:e.selected),this._super(),e.selected=e.active,e.selected===!1&&(e.selected=-1)},_setOption:function(e,t){if(e!=="selected")return this._super(e,t);var n=this.options;this._super("active",t===-1?!1:t),n.selected=n.active,n.selected===!1&&(n.selected=-1)},_eventHandler:function(e){this._superApply(arguments),this.options.selected=this.options.active,this.options.selected===!1&&(this.options.selected=-1)}}),e.widget("ui.tabs",e.ui.tabs,{options:{show:null,select:null},_create:function(){this._super(),this.options.active!==!1&&this._trigger("show",null,this._ui(this.active.find(".ui-tabs-anchor")[0],this._getPanelForTab(this.active)[0]))},_trigger:function(e,t,n){var r=this._superApply(arguments);return r?(e==="beforeActivate"&&n.newTab.length?r=this._super("select",t,{tab:n.newTab.find(".ui-tabs-anchor")[0],panel:n.newPanel[0],index:n.newTab.closest("li").index()}):e==="activate"&&n.newTab.length&&(r=this._super("show",t,{tab:n.newTab.find(".ui-tabs-anchor")[0],panel:n.newPanel[0],index:n.newTab.closest("li").index()})),r):!1}}),e.widget("ui.tabs",e.ui.tabs,{select:function(e){e=this._getIndex(e);if(e===-1){if(!this.options.collapsible||this.options.selected===-1)return;e=this.options.selected}this.anchors.eq(e).trigger(this.options.event+this.eventNamespace)}}),function(){var t=0;e.widget("ui.tabs",e.ui.tabs,{options:{cookie:null},_create:function(){var e=this.options,t;e.active==null&&e.cookie&&(t=parseInt(this._cookie(),10),t===-1&&(t=!1),e.active=t),this._super()},_cookie:function(n){var r=[this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+ ++t)];return arguments.length&&(r.push(n===!1?-1:n),r.push(this.options.cookie)),e.cookie.apply(null,r)},_refresh:function(){this._super(),this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},_eventHandler:function(e){this._superApply(arguments),this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},_destroy:function(){this._super(),this.options.cookie&&this._cookie(null,this.options.cookie)}})}(),e.widget("ui.tabs",e.ui.tabs,{_trigger:function(t,n,r){var i=e.extend({},r);return t==="load"&&(i.panel=i.panel[0],i.tab=i.tab.find(".ui-tabs-anchor")[0]),this._super(t,n,i)}}),e.widget("ui.tabs",e.ui.tabs,{options:{fx:null},_getFx:function(){var t,n,r=this.options.fx;return r&&(e.isArray(r)?(t=r[0],n=r[1]):t=n=r),r?{show:n,hide:t}:null},_toggle:function(e,t){function o(){n.running=!1,n._trigger("activate",e,t)}function u(){t.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),r.length&&s.show?r.animate(s.show,s.show.duration,function(){o()}):(r.show(),o())}var n=this,r=t.newPanel,i=t.oldPanel,s=this._getFx();if(!s)return this._super(e,t);n.running=!0,i.length&&s.hide?i.animate(s.hide,s.hide.duration,function(){t.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),u()}):(t.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),i.hide(),u())}}))}(jQuery),function(e){function n(t,n){var r=(t.attr("aria-describedby")||"").split(/\s+/);r.push(n),t.data("ui-tooltip-id",n).attr("aria-describedby",e.trim(r.join(" ")))}function r(t){var n=t.data("ui-tooltip-id"),r=(t.attr("aria-describedby")||"").split(/\s+/),i=e.inArray(n,r);i!==-1&&r.splice(i,1),t.removeData("ui-tooltip-id"),r=e.trim(r.join(" ")),r?t.attr("aria-describedby",r):t.removeAttr("aria-describedby")}var t=0;e.widget("ui.tooltip",{version:"1.9.0",options:{content:function(){return e(this).attr("title")},hide:!0,items:"[title]",position:{my:"left+15 center",at:"right center",collision:"flipfit flipfit"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={}},_setOption:function(t,n){var r=this;if(t==="disabled"){this[n?"_disable":"_enable"](),this.options[t]=n;return}this._super(t,n),t==="content"&&e.each(this.tooltips,function(e,t){r._updateContent(t)})},_disable:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0)}),this.element.find(this.options.items).andSelf().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).andSelf().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var n=e(t?t.target:this.element).closest(this.options.items);if(!n.length)return;if(this.options.track&&n.data("ui-tooltip-id")){this._find(n).position(e.extend({of:n},this.options.position)),this._off(this.document,"mousemove");return}n.attr("title")&&n.data("ui-tooltip-title",n.attr("title")),n.data("tooltip-open",!0),this._updateContent(n,t)},_updateContent:function(e,t){var n,r=this.options.content,i=this;if(typeof r=="string")return this._open(t,e,r);n=r.call(e[0],function(n){if(!e.data("tooltip-open"))return;i._delay(function(){this._open(t,e,n)})}),n&&this._open(t,e,n)},_open:function(t,r,i){function u(e){o.of=e,s.position(o)}var s,o;if(!i)return;s=this._find(r);if(s.length){s.find(".ui-tooltip-content").html(i);return}r.is("[title]")&&(t&&t.type==="mouseover"?r.attr("title",""):r.removeAttr("title")),s=this._tooltip(r),n(r,s.attr("id")),s.find(".ui-tooltip-content").html(i),this.options.track&&t&&/^mouse/.test(t.originalEvent.type)?(o=e.extend({},this.options.position),this._on(this.document,{mousemove:u}),u(t)):s.position(e.extend({of:r},this.options.position)),s.hide(),this._show(s,this.options.show),this._trigger("open",t,{tooltip:s}),this._on(r,{mouseleave:"close",focusout:"close",keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var n=e.Event(t);n.currentTarget=r[0],this.close(n,!0)}}})},close:function(t,n){var i=this,s=e(t?t.currentTarget:this.element),o=this._find(s);if(this.closing)return;if(!n&&t&&t.type!=="focusout"&&this.document[0].activeElement===s[0])return;s.data("ui-tooltip-title")&&s.attr("title",s.data("ui-tooltip-title")),r(s),o.stop(!0),this._hide(o,this.options.hide,function(){e(this).remove(),delete i.tooltips[this.id]}),s.removeData("tooltip-open"),this._off(s,"mouseleave focusout keyup"),this._off(this.document,"mousemove"),this.closing=!0,this._trigger("close",t,{tooltip:o}),this.closing=!1},_tooltip:function(n){var r="ui-tooltip-"+t++,i=e("
    ").attr({id:r,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return e("
    ").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),e.fn.bgiframe&&i.bgiframe(),this.tooltips[r]=n,i},_find:function(t){var n=t.data("ui-tooltip-id");return n?e("#"+n):e()},_destroy:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0),e("#"+n).remove(),r.data("ui-tooltip-title")&&(r.attr("title",r.data("ui-tooltip-title")),r.removeData("ui-tooltip-title"))})}})}(jQuery); \ No newline at end of file diff --git a/static/js/mspointers.js b/static/js/mspointers.js new file mode 100644 index 0000000..148aa42 --- /dev/null +++ b/static/js/mspointers.js @@ -0,0 +1,15 @@ +// Original code from http://msdn.microsoft.com/en-us/library/ie/hh673557(v=vs.85).aspx +window.addEventListener('load', function () { + var canvas = document.getElementById("drawSurface"), + context = canvas.getContext("2d"); + if (window.navigator.msPointerEnabled) { + canvas.addEventListener("MSPointerMove", paint, false); + } + else { + canvas.addEventListener("mousemove", paint, false); + } + function paint(event) { + // paint a small rectangle every time the event fires. + context.fillRect(event.clientX, event.clientY, 5, 5); + } +}); \ No newline at end of file diff --git a/static/libs-1.html b/static/libs-1.html new file mode 100644 index 0000000..640ef2f --- /dev/null +++ b/static/libs-1.html @@ -0,0 +1,13 @@ + + + + + + + + + +

    jQuery up to date

    +

    Expected result: Pass

    + + \ No newline at end of file diff --git a/static/libs-10.html b/static/libs-10.html new file mode 100644 index 0000000..ea134eb --- /dev/null +++ b/static/libs-10.html @@ -0,0 +1,15 @@ + + + + + + + + + + + +

    jQuery 1.4.2 & Dojo 1.7.0

    +

    Expected result: Fails

    + + \ No newline at end of file diff --git a/static/libs-2.html b/static/libs-2.html new file mode 100644 index 0000000..6bce1ff --- /dev/null +++ b/static/libs-2.html @@ -0,0 +1,14 @@ + + + + + + + + + +

    jQuery v1.4.2

    +

    Expected result: Fails

    + + + \ No newline at end of file diff --git a/static/libs-3.html b/static/libs-3.html new file mode 100644 index 0000000..615d08a --- /dev/null +++ b/static/libs-3.html @@ -0,0 +1,14 @@ + + + + + + + + + +

    Dojo up to date

    +

    Expected result: Pass

    + + + \ No newline at end of file diff --git a/static/libs-4.html b/static/libs-4.html new file mode 100644 index 0000000..27a2e07 --- /dev/null +++ b/static/libs-4.html @@ -0,0 +1,13 @@ + + + + + + + + + +

    dojo v1.8.0

    +

    Expected result: Fails

    + + \ No newline at end of file diff --git a/static/libs-5.html b/static/libs-5.html new file mode 100644 index 0000000..cc5fce4 --- /dev/null +++ b/static/libs-5.html @@ -0,0 +1,13 @@ + + + + + + + + + +

    jQuery UI v1.10.3

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/libs-6.html b/static/libs-6.html new file mode 100644 index 0000000..33528e1 --- /dev/null +++ b/static/libs-6.html @@ -0,0 +1,13 @@ + + + + + + + + + +

    jQuery UI v1.9.0

    +

    Expected result: Fails

    + + \ No newline at end of file diff --git a/static/libs-7.html b/static/libs-7.html new file mode 100644 index 0000000..9ae6744 --- /dev/null +++ b/static/libs-7.html @@ -0,0 +1,13 @@ + + + + + + + + + +

    jQuery UI v1.9.0 min

    +

    Expected result: Fails

    + + \ No newline at end of file diff --git a/static/libs-8.html b/static/libs-8.html new file mode 100644 index 0000000..cb81844 --- /dev/null +++ b/static/libs-8.html @@ -0,0 +1,14 @@ + + + + + + + + + + +

    jQuery & Dojo up to date

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/libs-9.html b/static/libs-9.html new file mode 100644 index 0000000..333b53e --- /dev/null +++ b/static/libs-9.html @@ -0,0 +1,15 @@ + + + + + + + + + + + +

    jQuery & Dojo up to date

    +

    Expected result: Fails

    + + \ No newline at end of file diff --git a/static/plugin-1.html b/static/plugin-1.html new file mode 100644 index 0000000..45a3562 --- /dev/null +++ b/static/plugin-1.html @@ -0,0 +1,11 @@ + + + + + + + +

    No plugin

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/plugin-10.html b/static/plugin-10.html new file mode 100644 index 0000000..1bbd27d --- /dev/null +++ b/static/plugin-10.html @@ -0,0 +1,12 @@ + + + + + + + +

    Object SVG

    +

    Expected result: Passes

    + + + \ No newline at end of file diff --git a/static/plugin-11.html b/static/plugin-11.html new file mode 100644 index 0000000..2d68d4f --- /dev/null +++ b/static/plugin-11.html @@ -0,0 +1,15 @@ + + + + + + + +

    SVG + Flash

    +

    Expected result: Passes

    + + + + \ No newline at end of file diff --git a/static/plugin-12.html b/static/plugin-12.html new file mode 100644 index 0000000..62be612 --- /dev/null +++ b/static/plugin-12.html @@ -0,0 +1,16 @@ + + + + + + + +

    SVG + ActiveX

    +

    Expected result: Fails

    + + + + + + + \ No newline at end of file diff --git a/static/plugin-2.html b/static/plugin-2.html new file mode 100644 index 0000000..7851f0d --- /dev/null +++ b/static/plugin-2.html @@ -0,0 +1,14 @@ + + + + + + + +

    Flash plugin with Embed

    +

    Expected result: Passes

    + + + \ No newline at end of file diff --git a/static/plugin-3.html b/static/plugin-3.html new file mode 100644 index 0000000..bf8f5b1 --- /dev/null +++ b/static/plugin-3.html @@ -0,0 +1,14 @@ + + + + + + + +

    Flash plugin with Object

    +

    Expected result: Passes

    + +

    Alternative content

    +
    + + \ No newline at end of file diff --git a/static/plugin-4.html b/static/plugin-4.html new file mode 100644 index 0000000..341eeaa --- /dev/null +++ b/static/plugin-4.html @@ -0,0 +1,15 @@ + + + + + + + +

    Flash plugin with Object and param

    +

    Expected result: Passes

    + + +

    Alternative content

    +
    + + \ No newline at end of file diff --git a/static/plugin-5.html b/static/plugin-5.html new file mode 100644 index 0000000..120c2c2 --- /dev/null +++ b/static/plugin-5.html @@ -0,0 +1,29 @@ + + + + + + + +

    Flash plugin with nested Objects

    +

    Expected result: Passes

    + + + + + + + + + + +

    Alternate content goes here..

    + +
    + +
    + + \ No newline at end of file diff --git a/static/plugin-6.html b/static/plugin-6.html new file mode 100644 index 0000000..2350a43 --- /dev/null +++ b/static/plugin-6.html @@ -0,0 +1,25 @@ + + + + + + + +

    Flash plugin object and embed

    +

    Expected result: Passes

    + + + + + + + + + + + + \ No newline at end of file diff --git a/static/plugin-7.html b/static/plugin-7.html new file mode 100644 index 0000000..d3861ae --- /dev/null +++ b/static/plugin-7.html @@ -0,0 +1,12 @@ + + + + + + + +

    ActiveX control

    +

    Expected result: Fails

    + + + \ No newline at end of file diff --git a/static/plugin-8.html b/static/plugin-8.html new file mode 100644 index 0000000..d39d84c --- /dev/null +++ b/static/plugin-8.html @@ -0,0 +1,12 @@ + + + + + + + +

    Active Content with object tag (no SWF)

    +

    Expected result: Fails

    + + + \ No newline at end of file diff --git a/static/plugin-9.html b/static/plugin-9.html new file mode 100644 index 0000000..6c7ae78 --- /dev/null +++ b/static/plugin-9.html @@ -0,0 +1,12 @@ + + + + + + + +

    Embed SVG

    +

    Expected result: Fails

    + + + \ No newline at end of file diff --git a/static/rwd-1.html b/static/rwd-1.html new file mode 100644 index 0000000..3371a5c --- /dev/null +++ b/static/rwd-1.html @@ -0,0 +1,11 @@ + + + + + + + +

    No CSS - No RWD

    +

    Expected result: Fails

    + + \ No newline at end of file diff --git a/static/rwd-10.html b/static/rwd-10.html new file mode 100644 index 0000000..15c8d66 --- /dev/null +++ b/static/rwd-10.html @@ -0,0 +1,12 @@ + + + + + + + + +

    RWD - min max width with EM

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-11.html b/static/rwd-11.html new file mode 100644 index 0000000..d83c14b --- /dev/null +++ b/static/rwd-11.html @@ -0,0 +1,12 @@ + + + + + + + + +

    RWD - min BreakPoints Spectrum

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-12.html b/static/rwd-12.html new file mode 100644 index 0000000..aea4c62 --- /dev/null +++ b/static/rwd-12.html @@ -0,0 +1,12 @@ + + + + + + + + +

    RWD - max BreakPoints Spectrum

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-13.html b/static/rwd-13.html new file mode 100644 index 0000000..b04640c --- /dev/null +++ b/static/rwd-13.html @@ -0,0 +1,13 @@ + + + + + + + + + +

    RWD - min and max BreakPoints Spectrum

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-14.html b/static/rwd-14.html new file mode 100644 index 0000000..b960622 --- /dev/null +++ b/static/rwd-14.html @@ -0,0 +1,13 @@ + + + + + + + + + +

    RWD - min and max BreakPoints Spectrum

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-2.html b/static/rwd-2.html new file mode 100644 index 0000000..015d02b --- /dev/null +++ b/static/rwd-2.html @@ -0,0 +1,12 @@ + + + + + + + + +

    Simple CSS no RWD

    +

    Expected result: Fails

    + + \ No newline at end of file diff --git a/static/rwd-3.html b/static/rwd-3.html new file mode 100644 index 0000000..88791ec --- /dev/null +++ b/static/rwd-3.html @@ -0,0 +1,12 @@ + + + + + + + + +

    RWD - Min Width

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-4.html b/static/rwd-4.html new file mode 100644 index 0000000..7dda978 --- /dev/null +++ b/static/rwd-4.html @@ -0,0 +1,12 @@ + + + + + + + + +

    RWD - Max Width

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-5.html b/static/rwd-5.html new file mode 100644 index 0000000..623f5e4 --- /dev/null +++ b/static/rwd-5.html @@ -0,0 +1,12 @@ + + + + + + + + +

    RWD - Min and Max Width

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-6.html b/static/rwd-6.html new file mode 100644 index 0000000..f86b754 --- /dev/null +++ b/static/rwd-6.html @@ -0,0 +1,12 @@ + + + + + + + + +

    RWD - Min and Max Width with different order

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-7.html b/static/rwd-7.html new file mode 100644 index 0000000..955a168 --- /dev/null +++ b/static/rwd-7.html @@ -0,0 +1,12 @@ + + + + + + + + +

    RWD - Duplicate breakpoints

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-8.html b/static/rwd-8.html new file mode 100644 index 0000000..60268c1 --- /dev/null +++ b/static/rwd-8.html @@ -0,0 +1,13 @@ + + + + + + + + + +

    RWD - Several CSS files

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/rwd-9.html b/static/rwd-9.html new file mode 100644 index 0000000..37cabcf --- /dev/null +++ b/static/rwd-9.html @@ -0,0 +1,27 @@ + + + + + + + + + +

    RWD - Embedded CSS

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/test-server.js b/static/test-server.js new file mode 100644 index 0000000..1b05f02 --- /dev/null +++ b/static/test-server.js @@ -0,0 +1,37 @@ +// Original code from http://stackoverflow.com/questions/7268033/basic-static-file-server-in-nodejs + +"use strict"; + +var http = require('http'), + url = require('url'), + path = require('path'), + fs = require('fs'), + port = 1338; +var mimeTypes = { + "html": "text/html", + "jpeg": "image/jpeg", + "jpg": "image/jpeg", + "png": "image/png", + "js": "text/javascript", + "css": "text/css"}; + +http.createServer(function(req, res) { + var uri = url.parse(req.url).pathname; + var filename = path.join(process.cwd(),'static', uri); + fs.exists(filename, function(exists) { + if(!exists) { + console.log("not exists: " + filename); + res.writeHead(200, {'Content-Type': 'text/plain'}); + res.write('404 Not Found\n'); + res.end(); + return; + } + var mimeType = mimeTypes[path.extname(filename).split(".")[1]]; + res.writeHead(200, {'Content-Type':mimeType}); + + var fileStream = fs.createReadStream(filename); + fileStream.pipe(res); + }); //end path.exists +}).listen(port); + +module.exports.port = port; \ No newline at end of file diff --git a/static/touch-1.html b/static/touch-1.html new file mode 100644 index 0000000..4a1d8d6 --- /dev/null +++ b/static/touch-1.html @@ -0,0 +1,11 @@ + + + + + + + +

    No touch

    +

    Expected result: Fails

    + + \ No newline at end of file diff --git a/static/touch-2.html b/static/touch-2.html new file mode 100644 index 0000000..a3d5e03 --- /dev/null +++ b/static/touch-2.html @@ -0,0 +1,12 @@ + + + + + + + + +

    Simple CSS with no Touch

    +

    Expected result: Fails

    + + \ No newline at end of file diff --git a/static/touch-3.html b/static/touch-3.html new file mode 100644 index 0000000..94692d4 --- /dev/null +++ b/static/touch-3.html @@ -0,0 +1,12 @@ + + + + + + + + +

    Simple CSS with -ms-touch

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/touch-4.html b/static/touch-4.html new file mode 100644 index 0000000..b1371b1 --- /dev/null +++ b/static/touch-4.html @@ -0,0 +1,20 @@ + + + + + + + + +

    Simple CSS with -ms-touch embed

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/touch-5.html b/static/touch-5.html new file mode 100644 index 0000000..056546b --- /dev/null +++ b/static/touch-5.html @@ -0,0 +1,12 @@ + + + + + + + + +

    msPointerEnabled

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/static/touch-6.html b/static/touch-6.html new file mode 100644 index 0000000..bf35384 --- /dev/null +++ b/static/touch-6.html @@ -0,0 +1,28 @@ + + + + + + + + +

    msPointerEnabled embed

    +

    Expected result: Passes

    + + \ No newline at end of file diff --git a/test/auth_test.js b/test/auth_test.js new file mode 100644 index 0000000..09f3a28 --- /dev/null +++ b/test/auth_test.js @@ -0,0 +1,76 @@ +/** + * Description: Test that local scans can use authenticated (user/password) pages. + * At the moment, only supports Basic and Digest auth courtesy of node.js request. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var service = require('../lib/service.js'), + serviceUrl = 'http://localhost:' + service.port + '/?url=%0', + authString = '&user=%1&password=%2', + authServer = require('../static/auth-server.js'), + serverUrl = 'http%3A%2F%2Flocalhost%3A' + authServer.port + '%2Fauth-', + request = require('request'); + + +function checkObject(object, expected, test) { + for (var key in expected) { + if (typeof expected[key] === "object") { + checkObject(object[key], expected[key], test); + } else { + test.equal(object[key], expected[key], object[key] + " !== " + expected[key]); + } + } +} + +function deepCount(object){ + var count = 0; + if(typeof object === "object"){ + for(var key in object){ + count += deepCount(object[key]); + } + }else{ + count++; + } + return count; +} + +function checkPage(page, expected, auth) { + return function (test) { + var uri = page.indexOf('http') === 0 ? page : serviceUrl.replace('%0', serverUrl + page), + tests = deepCount(expected); + + if (auth) { + uri += authString.replace('%1', auth.user).replace('%2', auth.password); + } + + test.expect(tests); + + request(uri, function (error, response, content) { + var result = JSON.parse(content); + checkObject(result, expected, test); + test.done(); + }); + }; +} + +module.exports['Auth Tests'] = { + 'No auth': checkPage('1.html', {statusCode: 401}), + 'Basic auth': checkPage('1.html', {results: {cvlist: {passed: true}}}, {user: 'user', password: 'password'}), + 'Basic auth - failing JS': checkPage('2.html', {results: {jslibs: {passed: false}}}, {user: 'user', password: 'password'}), + 'Basic auth - touch': checkPage('3.html', {results: {touch: {passed: true}}}, {user: 'user', password: 'password'}), + 'Basic auth - failing JS, touch': checkPage('4.html', {results: {jslibs: {passed: false}, touch: {passed: true}}}, {user: 'user', password: 'password'}) +}; \ No newline at end of file diff --git a/test/checklibs_test.js b/test/checklibs_test.js new file mode 100644 index 0000000..f9c080e --- /dev/null +++ b/test/checklibs_test.js @@ -0,0 +1,145 @@ +/** + * Description: Test the JavaScript library version detection. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var checklibs = require('../lib/checks/check-libs.js'), + url = require('url'), + request = require('request'), + cheerio = require('cheerio'), + jsloader = require('../lib/checks/loadjs.js'), + testServer = require('../static/test-server.js'), + testUrl = 'http://localhost:' + testServer.port + '/libs-'; + + +function checkPage(page, test, expected) { + var uri = testUrl + page, + dataKeys = [], + tests = 1; + + if (expected.data) { + dataKeys = Object.keys(expected.data[0]); + tests += dataKeys.length * expected.data.length; + } + + test.expect(tests); + + request(uri, function (error, response, content) { + var website = { + url: url.parse(uri), + content: content, + $: cheerio.load(content) + }; + + jsloader.loadjsFiles(website).then(function (js) { + website.js = js; + checklibs.check(website).then(function (result) { + test.equal(result.passed, expected.passed, uri + " " + result.data.join("\n")); + if (expected.data) { + for (var i = 0; i < expected.data.length; i++) { + for (var key in expected.data[i]) { + test.equal(result.data[i][key], expected.data[i][key], uri + " " + result.data[i][key]); + } + } + } + + test.done(); + }); + }); + }); +} + + +module.exports['JS Libraries'] = { + 'jQuery - latest version': function (test) { + checkPage('1.html', test, { + passed: true + }); + }, + 'jQuery - 1.4.2': function (test) { + checkPage('2.html', test, { + passed: false, + data: [ + { + lineNumber: 7, + version: "1.4.2", + minVersion: "1.6.4" + } + ] + }); + }, + 'dojo - latest version': function (test) { + checkPage('3.html', test, {passed: true}); + }, + 'dojo - v1.8.0': function (test) { + checkPage('4.html', test, {passed: true}); + }, + 'jQuery UI - latest version': function (test) { + checkPage('5.html', test, {passed: true}); + }, + 'jQuery UI - v1.9.0': function (test) { + checkPage('6.html', test, { + passed: false, + data: [ + { + lineNumber: 7, + version: "1.9.0", + minVersion: "1.9.2" + } + ] + }); + }, + 'jQuery UI - v1.9.0 min': function (test) { + checkPage('7.html', test, { + passed: false + }); + }, + 'jQuery & dojo up to date': function (test) { + checkPage('8.html', test, { + passed: true + }); + }, + 'jQuery up to date & dojo v 1.7.0': function (test) { + checkPage('9.html', test, { + passed: false, + data: [ + { + lineNumber: 8, + version: "1.7.0", + minVersion: "1.7.3" + } + ] + }); + }, + 'jQuery 1.4.2 & dojo v 1.7.0': function (test) { + checkPage('10.html', test, { + passed: false, + data: [ + { + lineNumber: 7, + version: "1.4.2", + minVersion: "1.6.4" + }, + { + lineNumber: 8, + version: "1.7.0", + minVersion: "1.7.3" + } + ] + }); + } +}; \ No newline at end of file diff --git a/test/compatlist_test.js b/test/compatlist_test.js new file mode 100644 index 0000000..8572d26 --- /dev/null +++ b/test/compatlist_test.js @@ -0,0 +1,128 @@ +/** + * Description: Test the X-UA-Compatible and CV-list detection. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var compatList = require('../lib/checks/check-compatlist.js'), + url = require('url'), + request = require('request'), + cheerio = require('cheerio'), + testServer = require('../static/test-server.js'), + testUrl = 'http://localhost:' + testServer.port + '/compat-'; + +function checkPage(page, expected) { + return function (test) { + var uri = page.indexOf('http') === 0 ? page : testUrl + page, + tests = 1; + + if (expected.data) { + tests += Object.keys(expected.data).length; + } + + test.expect(tests); + + request(uri, function (error, response, content) { + var website = { + url: url.parse(uri), + content: content, + $: cheerio.load(content) + }; + + compatList.check(website).then(function (result) { + test.equal(result.passed, expected.passed, url + " " + result.passed + " !==" + expected.passed); + if (expected.data) { + for (var key in expected.data) { + test.equal(result.data[key], expected.data[key], uri + " " + result.data[key] + " !== " + expected.data[key]); + } + } + test.done(); + }); + }); + }; +} + + +module.exports['Compatibility List'] = { + 'www.modern.ie - Not CV list': checkPage('http://www.modern.ie', {passed: true}), + 'Present (www.crackle.com)': checkPage('http://www.crackle.com', {passed: false, + data: { + source: 'tag', + mode: 'ie=emulateie8' + } + }), + 'Website in cvlist but only for Flash (santandernet.com.br)': checkPage('http://santandernet.com.br', {passed: true}), + 'No metatag': checkPage('1.html', {passed: true}), + 'IE=5': checkPage('2.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=5' + }}), + 'IE=EmulateIE7': checkPage('3.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=emulateie7' + }}), + 'IE=7': checkPage('4.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=7' + }}), + 'IE=EmulateIE8': checkPage('5.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=emulateie8' + }}), + 'IE=8': checkPage('6.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=8' + }}), + 'IE=EmulateIE9': checkPage('7.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=emulateie9' + }}), + 'IE=9': checkPage('8.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=9' + }}), + 'IE=edge': checkPage('9.html', {passed: true}), + 'IE=8,edge': checkPage('10.html', {passed: true}), + 'IE=EmulateIE9,edge': checkPage('11.html', {passed: true}), + 'IE=chrome=1': checkPage('12.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=chrome=1' + }}), + 'IE=EmulateIE10': checkPage('13.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=emulateie10' + }}), + 'IE=EmulateIE8 lowercase': checkPage('14.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=emulateie8' + }}), + 'IE=EmulateIE8 bizarre case': checkPage('15.html', {passed: false, + data: { + source: 'tag', + mode: 'ie=emulateie8' + }}), + 'IE=edge bizarre case': checkPage('16.html', {passed: true}) +}; \ No newline at end of file diff --git a/test/cssprefixes_test.js b/test/cssprefixes_test.js new file mode 100644 index 0000000..700b704 --- /dev/null +++ b/test/cssprefixes_test.js @@ -0,0 +1,86 @@ +/** + * Description: Test the CSS prefix completeness detection. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var cssprefixes = require('../lib/checks/check-cssprefixes.js'), + url = require('url'), + cssloader = require('../lib/checks/loadcss.js'), + request = require('request'), + cheerio = require('cheerio'), + testServer = require('../static/test-server.js'), + testUrl = 'http://localhost:' + testServer.port + '/cssprefixes-'; + + +function checkPage(page, expected) { + return function (test) { + var uri = page.indexOf('http') === 0 ? page : testUrl + page, + tests = 1; + + if (expected.data) { + tests += Object.keys(expected.data).length; + } + + test.expect(tests); + + request({uri: uri, + headers: {'user-agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)'}}, + function (error, response, content) { + var website = { + url: url.parse(uri), + content: content, + $: cheerio.load(content) + }; + + cssloader.loadCssFiles(website).then(function (css) { + website.css = css; + cssprefixes.check(website).then(function (result) { + test.equal(result.passed, expected.passed, uri + " passed: " + result.passed + " !== " + expected.passed); + + if (expected.data) { + for (var key in expected.data) { + test.strictEqual(result.data[key], expected.data[key], uri + " " + key + " " + result.data[key] + " !== " + expected.data[key]); + } + } + test.done(); + }); + }); + }); + }; +} + +module.exports['CSS Prefixes'] = { + 'No CSS': checkPage("1.html", {passed: true}), + 'Simple CSS with no CSS3': checkPage("2.html", {passed: true}), + 'Unprefixed version of rules': checkPage("3.html", {passed: false}), + 'Simple CSS + Unprefixed version': checkPage("4.html", {passed: false}), + 'Transform': checkPage("5.html", {passed: true}), + 'Transitions': checkPage("6.html", {passed: true}), + 'Gradients': checkPage("7.html", {passed: true}), + 'Animations': checkPage("8.html", {passed: true}), + 'Missing Transform': checkPage("9.html", {passed: false}), + 'Missing Transitions': checkPage("10.html", {passed: false}), + 'Missing Gradients': checkPage("11.html", {passed: false}), + 'Missing Animations': checkPage("12.html", {passed: false}), + 'Gradients + Transforms': checkPage("13.html", {passed: true}), + 'Gradients + Missing Transforms': checkPage("14.html", {passed: false}), + 'Embed Transform': checkPage("15.html", {passed: true}), + 'Embed Missing Transform': checkPage("16.html", {passed: false}), + 'Imports using url(), inline': checkPage("17.html", {passed: false}), + 'Imports using single, included': checkPage("18.html", {passed: false}), + 'Imports using quoted url(), included': checkPage("19.html", {passed: false}) +}; \ No newline at end of file diff --git a/test/doctype_test.js b/test/doctype_test.js new file mode 100644 index 0000000..f46b81f --- /dev/null +++ b/test/doctype_test.js @@ -0,0 +1,109 @@ +/** + * Description: Test the doctype (Quirks) detection. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +// Most of the test pages are from http://www.hixie.ch/tests/adhoc/compat/mozilla/001.cgi + +"use strict"; +var doctype = require('../lib/checks/check-doctype.js'), + url = require('url'), + request = require('request'), + testServer = require('../static/test-server.js'), + testUrl = 'http://localhost:' + testServer.port + '/doctype-'; + +function doctypeTestMaker(page, wantResult, lineNumber) { + return function (test) { + var site = page.indexOf('http') === 0 ? page : testUrl + page; + + if (lineNumber) { + test.expect(2); + } else { + test.expect(1); + } + + request(site, function (error, response, content) { + var website = { + url: url.parse(site), + content: content + }; + doctype.check(website).then(function (result) { + test.equal(result.passed, wantResult, site + ": wanted " + + (wantResult ? "Standards " : "Quirks ") + result.data.mode.join()); + if (lineNumber) { + test.ok(result.data.lineNumber === lineNumber, site + ": current lineNumber " + + result.data.lineNumber + + ' expected ' + + lineNumber); + } + test.done(); + }); + }); + }; +} + +module.exports['DocType'] = { + 'Standards mode: Any "DOCTYPE HTML SYSTEM"': doctypeTestMaker("http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+SYSTEM+%22http%3A%2F%2Fwww.w3.org%2FTR%2FREC-html40%2Fstrict.dtd%22%3E&MODE=full&EXPECT=standards%20mode", + true, 1), + 'Standards mode: A DOCTYPE declaration without a DTD, i.e., .': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML%3E&MODE=full&EXPECT=standards%20mode', + true), + 'Standards mode: The public identifier "-//W3C//DTD HTML 4.01//EN"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+HTML+4.01%2F%2FEN%22%3E&MODE=full&EXPECT=standards%20mode', + true), + 'Standards mode: The public identifier "-//W3C//DTD HTML 4.0//EN"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+HTML+4.0%2F%2FEN%22%3E&MODE=full&EXPECT=standards%20mode', + true), + 'Standards mode: The public identifier "-//W3C//DTD XHTML 1.0 Strict//EN"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+XHTML+1.0+Strict%2F%2FEN%22%3E&MODE=full&EXPECT=standards%20mode', + true), + 'Standards mode: The public identifier "ISO/IEC 15445:1999//DTD HyperText Markup Language//EN"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22ISO%2FIEC+15445:1999%2F%2FDTD+HyperText+Markup+Language%2F%2FEN%22%3E&MODE=full&EXPECT=standards%20mode', + true), + 'Standards mode: The public identifier "ISO/IEC 15445:1999//DTD HTML//EN"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22ISO%2FIEC+15445:1999%2F%2FDTD+HTML%2F%2FEN%22%3E&MODE=full&EXPECT=standards%20mode', + true), + 'Standards mode: Another public identifier "-//UNKNOWN//EN"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FUNKNOWN%2F%2FEN%22%3E&MODE=full&EXPECT=standards%20mode', + true), + 'Standards mode: "DOCTYPE HTML SYSTEM "about:legacy-compat"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+html+SYSTEM+%22about%3Alegacy-compat%22%3E&MODE=full', + true), + 'Almost Standards mode: The public identifier "-//W3C//DTD XHTML 1.0 Transitional//EN"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+XHTML+1.0+Transitional%2F%2FEN%22%3E&MODE=full&EXPECT=almost%20standards%20mode', + true), + 'Almost Standards mode: The public identifier "-//W3C//DTD XHTML 1.0 Frameset//EN"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+XHTML+1.0+Frameset%2F%2FEN%22%3E&MODE=full&EXPECT=almost%20standards%20mode', + true), + 'Almost Standards mode: The public identifier "-//W3C//DTD HTML 4.01 Transitional//EN", with a system identifier': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+HTML+4.01+Transitional%2F%2FEN%22+%22http%3A%2F%2Fwww.w3.org%2FTR%2Fhtml4%2Floose.dtd%22%3E&MODE=full&EXPECT=almost%20standards%20mode', + true), + 'Almost Standards mode: The public identifier "-//W3C//DTD HTML 4.01 Frameset//EN", with a system identifier': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+HTML+4.01+Frameset%2F%2FEN%22+%22http%3A%2F%2Fwww.w3.org%2FTR%2Fhtml4%2Fframeset.dtd%22%3E&MODE=full&EXPECT=almost%20standards%20mode', + true), + 'Quirks mode: An XML declaration (pseudo-PI)': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%3Fxml+version%3D%221.0%22%3F%3E&MODE=full&EXPECT=quirks%20mode', + false), + 'Quirks mode: The absence of a DOCTYPE': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=&MODE=full&EXPECT=quirks%20mode', + false), + 'Quirks mode: A DOCTYPE declaration that cannot be understood (e.g., no matching quote)': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+NOT+UNDERSTOOD%3E&MODE=full&EXPECT=quirks%20mode', + false), + 'Quirks mode: The public identifier "-//W3C//DTD HTML 4.01 Transitional//EN", without a system identifier': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+HTML+4.01+Transitional%2F%2FEN%22%3E&MODE=full&EXPECT=quirks%20mode', + false), + 'Quirks mode: The public identifier "-//W3C//DTD HTML 4.01 Frameset//EN", without a system identifier': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+HTML+4.01+Frameset%2F%2FEN%22%3E&MODE=full&EXPECT=quirks%20mode', + false), + 'Quirks mode: The public identifier "-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//EN"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FMicrosoft%2F%2FDTD+Internet+Explorer+3.0+HTML+Strict%2F%2FEN%22%3E&MODE=full&EXPECT=quirks%20mode', + false), + 'Quirks mode: The public identifier "-//W3C//DTD HTML 3.2 Final//EN"': doctypeTestMaker('http://hixie.ch/tests/adhoc/compat/mozilla/001.cgi?DOCTYPE=%3C%21DOCTYPE+HTML+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+HTML+3.2+Final%2F%2FEN%22%3E&MODE=full&EXPECT=quirks%20mode', + false) +// 'Standards-HTML5': doctypeTestMaker("1.html", true, 1), +// 'Quirks-NoDoctype': doctypeTestMaker("2.html", false), +// 'Quirks-Unknown DocType': doctypeTestMaker("3.html", false), +// 'Standards-XHTML1-Strict': doctypeTestMaker("4.html", true), +// 'XHTML1-Transitional': doctypeTestMaker("5.html", true), +// 'HTML4.01 Transitional with system identifier': doctypeTestMaker("6.html", false) + // 'Standards-XHTML1-Strict': doctypeTestMaker("http://www.aa.com", true), + + // 'Standards-HTML4-Transitional': doctypeTestMaker("http://www.dell.com", true, 1), + // 'Quirks-doctype-not-first': doctypeTestMaker("http://www.rivals.com", false, 7), + // 'Quirks-NoDoctype': doctypeTestMaker("http://juno.com", false) +}; \ No newline at end of file diff --git a/test/ie10favicon_test.js b/test/ie10favicon_test.js new file mode 100644 index 0000000..253ddf2 --- /dev/null +++ b/test/ie10favicon_test.js @@ -0,0 +1,96 @@ +/** + * Description: Test detection of IE10 favicon meta tags. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var ie10fav = require('../lib/checks/check-ie10favicon.js'), + url = require('url'), + request = require('request'), + cheerio = require('cheerio'), + testServer = require('../static/test-server.js'), + testUrl = 'http://localhost:' + testServer.port + '/favicon-'; + + +function checkPage(page, expected) { + return function (test) { + var uri = page.indexOf('http') === 0 ? page : testUrl + page, + tests = 1; + + if (expected.data) { + tests += Object.keys(expected.data).length; + } + + + test.expect(tests); + + request(uri, function (error, response, content) { + var website = { + url: url.parse(uri), + content: content, + $: cheerio.load(content) + }; + + ie10fav.check(website).then(function (result) { + test.equal(result.passed, expected.passed, uri + " passed: " + result.passed + " !== " + expected.passed); + if (expected.data) { + for(var key in expected.data){ + test.equal(result.data[key], expected.data[key], uri + " key: " + result.data[key] + " !== " + expected.data[key]); + } + } + test.done(); + }); + }); + }; +} + +module.exports['IE10 Favicon'] = { + 'No favicon - No Apple Icon': checkPage('1.html', { + passed: false, + data: { + iOS: false + }}), + 'Favicon ': checkPage('2.html', { + passed: true, + data: { + iOS: false + } + }), + 'No Favicon - Apple Icon Precomposed ': checkPage('3.html', { + passed: false, + data: { + iOS: true + } + }), + 'Favicon - Apple Icon Precomposed': checkPage('4.html', { + passed: true, + data: { + iOS: true + } + }), + 'No Favicon - Apple Icon': checkPage('5.html', { + passed: false, + data: { + iOS: true + } + }), + 'Favicon - Apple Icon': checkPage('6.html', { + passed: true, + data: { + iOS: true + } + }) +}; \ No newline at end of file diff --git a/test/pluginfree_test.js b/test/pluginfree_test.js new file mode 100644 index 0000000..913586b --- /dev/null +++ b/test/pluginfree_test.js @@ -0,0 +1,94 @@ +/** + * Description: Test the detection of plugins. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var pluginChecker = require('../lib/checks/check-pluginfree.js'), + request = require('request'), + cheerio = require('cheerio'), + url = require('url'), + testServer = require('../static/test-server.js'), + testUrl = 'http://localhost:' + testServer.port + '/plugin-'; + + +function checkPage(page, expected) { + return function (test) { + var uri = page.indexOf('http') === 0 ? page : testUrl + page, + tests = 1; + + if (expected.data) { + tests += Object.keys(expected.data).length; + } + + test.expect(tests); + + request(uri, function (error, response, content) { + var website = { + url: url.parse(uri), + content: content, + $: cheerio.load(content, { lowerCaseTags: true, lowerCaseAttributeNames: true }) + }; + + pluginChecker.check(website).then(function (result) { + test.equal(result.passed, expected.passed, uri + " passed: " + result.passed + " !== " + expected.passed); + if (expected.data) { + for (var key in expected.data) { + test.strictEqual(result.data[key], expected.data[key], uri + " " +key + " " + result.data[key] + " !== " + expected.data[key]); + } + } + test.done(); + }); + }); + }; +} + +module.exports['Plugin Free'] = { + 'No plugin - No CV list': checkPage('1.html', {passed: true}), + 'Flash embed tag': checkPage('2.html', {passed: true}), + 'Flash object tag': checkPage('3.html', {passed: true}), + 'Flash object tag with param': checkPage('4.html', {passed: true}), + 'Flash with nested objects': checkPage('5.html', {passed: true}), + 'Flash with object and embed': checkPage('6.html', {passed: true}), + 'ActiveX control': checkPage('7.html', {passed: false, + data: { + activex: true, + cvlist: false, + lineNumber: 10 + }}), + 'Active Content with object tag (no SWF)': checkPage('8.html', {passed: false, + data: { + activex: true, + cvlist: false, + lineNumber: 10 + }}), + 'Embed SVG': checkPage('9.html', {passed: true}), + 'Object SVG': checkPage('10.html', {passed: true}), + 'SVG + Flash': checkPage('11.html', {passed: true}), + 'SVG + ActiveX': checkPage('12.html', {passed: false, + data: { + activex: true, + cvlist: false, + lineNumber: 11 + } + }), + 'Blocked website in CV List': checkPage('http://aardman.com',{passed:false, + data:{ + activex: false, + cvlist: true + }}), + 'Embed tag with SVG instead flash ( http://doulosdiscovery.org)': checkPage('http://doulosdiscovery.org', {passed: true}) +}; \ No newline at end of file diff --git a/test/responsive_test.js b/test/responsive_test.js new file mode 100644 index 0000000..123fb76 --- /dev/null +++ b/test/responsive_test.js @@ -0,0 +1,133 @@ +/** + * Description: Test the detection of Responsive Web Design (width/height breakpoints). + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var responsive = require('../lib/checks/check-responsive.js'), + url = require('url'), + cssloader = require('../lib/checks/loadcss.js'), + request = require('request'), + cheerio = require('cheerio'), + testServer = require('../static/test-server.js'), + testUrl = 'http://localhost:' + testServer.port + '/rwd-'; + + +function checkPage(page, expected) { + return function (test) { + var uri = page.indexOf('http') === 0 ? page : testUrl + page, + tests = 1; + + if (expected.data) { + tests += Object.keys(expected.data).length; + } + + test.expect(tests); + + request({uri: uri, + headers: {'user-agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)'}}, + function (error, response, content) { + var website = { + url: url.parse(uri), + content: content, + $: cheerio.load(content) + }; + + cssloader.loadCssFiles(website).then(function (css) { + website.css = css; + responsive.check(website).then(function (result) { + test.equal(result.passed, expected.passed, uri + " passed: " + result.passed + " !== " + expected.passed); + if (expected.data) { + for (var key in expected.data) { + test.deepEqual(result.data[key], expected.data[key], uri + " " + key + " " + result.data[key] + " !== " + expected.data[key]); + } + } + test.done(); + }); + }); + }); + }; +} + +module.exports['Responsive'] = { + 'No CSS - No RWD': checkPage("1.html", {passed: false}), + 'Simple CSS - No RWD': checkPage("2.html", {passed: false}), + 'RWD - min-width': checkPage("3.html", {passed: true, data: { + minBreakPoints: [480], + maxBreakPoints: [] + }}), + 'RWD - max-width': checkPage("4.html", {passed: true, data: { + minBreakPoints: [], + maxBreakPoints: [480] + }}), + 'RWD - min and max width': checkPage("5.html", {passed: true, data: { + minBreakPoints: [480, 780], + maxBreakPoints: [479] + }}), + 'RWD - min and max width with different order': checkPage("6.html", {passed: true, data: { + minBreakPoints: [480, 780], + maxBreakPoints: [479] + }}), + 'RWD - Duplicate widths': checkPage("7.html", {passed: true, data: { + minBreakPoints: [480, 780], + maxBreakPoints: [479] + }}), + 'RWD - Several CSS files': checkPage("8.html", {passed: true, data: { + minBreakPoints: [480], + maxBreakPoints: [480] + }}), + 'RWD - Embedded CSS': checkPage("9.html", {passed: true, data: { + minBreakPoints: [480], + maxBreakPoints: [479] + }}), + 'RWD - min max width with EM': checkPage("10.html", {passed: true, data: { + minBreakPoints: [480, 780], + maxBreakPoints: [480] + }}), + 'RWD - min BreakPoints Spectrum': checkPage("11.html", {passed: true, data: { + minBreakPoints: [360, 440, 720], + maxBreakPoints: [], + spectrum: [ + {start: 360, end: 550}, + {start: 720, end: 900} + ] + }}), + 'RWD - max BreakPoints Spectrum': checkPage("12.html", {passed: true, data: { + minBreakPoints: [], + maxBreakPoints: [360,440,720], + spectrum: [ + {start: 270, end: 440}, + {start: 540, end: 720} + ] + }}), + 'RWD - min and max BreakPoints Spectrum': checkPage("13.html", {passed: true, data: { + minBreakPoints: [360, 440, 720], + maxBreakPoints: [360,440,720], + spectrum: [ + {start: 270, end: 900} + ] + }}), + 'RWD - min and max BreakPoints Spectrum 2': checkPage("14.html", {passed: true, data: { + minBreakPoints: [100, 550, 1120], + maxBreakPoints: [360,440,720], + spectrum: [ + {start: 100, end: 125}, + {start: 270, end: 440}, + {start: 540, end: 720}, + {start: 1120, end: 1400} + ] + }}) +}; \ No newline at end of file diff --git a/test/touch_test.js b/test/touch_test.js new file mode 100644 index 0000000..dfbf8b6 --- /dev/null +++ b/test/touch_test.js @@ -0,0 +1,90 @@ +/** + * Description: Test for detection of use of pointer events. + * + * Copyright (c) Microsoft Corporation; All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * THIS CODE IS PROVIDED AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS + * OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. + * + * See the Apache Version 2.0 License for specific language governing permissions + * and limitations under the License. + */ + +"use strict"; + +var touchChecker = require('../lib/checks/check-touch.js'), + url = require('url'), + cssloader = require('../lib/checks/loadcss.js'), + jsLoader = require('../lib/checks/loadjs.js'), + request = require('request'), + cheerio = require('cheerio'), + testServer = require('../static/test-server.js'), + testUrl = 'http://localhost:' + testServer.port + '/touch-'; + + +function checkPage(page, expected) { + return function (test) { + var uri = page.indexOf('http') === 0 ? page : testUrl + page, + tests = 1; + + if (expected.data) { + tests += Object.keys(expected.data).length; + } + + test.expect(tests); + + request({uri: uri, + headers: {'user-agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)'}}, + function (error, response, content) { + var website = { + url: url.parse(uri), + content: content, + $: cheerio.load(content) + }; + + cssloader.loadCssFiles(website).then(function (css) { + website.css = css; + jsLoader.loadjsFiles(website).then(function (js) { + website.js = js; + touchChecker.check(website).then(function (result) { + test.equal(result.passed, expected.passed, uri + " passed: " + result.passed + " !== " + expected.passed); + + if (expected.data) { + for (var key in expected.data) { + test.strictEqual(result.data[key], expected.data[key], uri + " " + key + " " + result.data[key] + " !== " + expected.data[key]); + } + } + test.done(); + }); + }); + }); + }); + }; +} + +module.exports['Touch tests'] = { + 'No Touch CSS': checkPage("1.html", {passed: false}), + 'No Touch in CSS': checkPage("2.html", {passed: false}), + 'ms-touch-action': checkPage("3.html", {passed: true}), + 'ms-touch-action embed': checkPage("4.html", {passed: true}), + 'msPointerEnabled': checkPage("5.html", {passed: true}), + 'msPointerEnabled embed': checkPage("6.html", {passed: true}) +// 'No -ms-touch-action': checkPage("http://www.google.com", {passed: false}), +// 'Uses touch': checkPage("http://ie.microsoft.com/testdrive/Graphics/TouchEffects/", {passed: true}), +// 'Uses touch with an @import rule': checkPage("http://www.computer-service-goeppingen.de", {passed: true}), +// 'www.ietestdrive.com': checkPage("http://www.ietestdrive.com", {passed: true}), +// 'ie.microsoft.com/testdrive/Graphics/TouchEffects/': checkPage("http://ie.microsoft.com/testdrive/Graphics/TouchEffects/", {passed: true}), +// 'ie.microsoft.com/testdrive/Browser/BrowserSurface/': checkPage("http://ie.microsoft.com/testdrive/Browser/BrowserSurface/", {passed: true}), +// 'maps.bing.com': checkPage("http://maps.bing.com", {passed: true}), +// 'maps.google.com': checkPage("http://maps.google.com", {passed: true}), +// 't.msn.com': checkPage("http://t.msn.com", {passed: true}), +// 'www.craigslist.org': checkPage("http://www.craigslist.org", {passed: true}), +// 'www.reddit.com': checkPage("http://www.reddit.com", {passed: false}), +// 'www.microsoft.com': checkPage("http://www.microsoft.com", {passed: false}), +// 'www.windows.com': checkPage("http://www.windows.com", {passed: false}) +}; \ No newline at end of file