From 4a64a5d4eb6e7da0d4e764106c7483a82d20db3c Mon Sep 17 00:00:00 2001 From: daniel Date: Sat, 16 Nov 2013 17:12:51 -0500 Subject: [PATCH] initial commit --- .bowerrc | 3 + .editorconfig | 21 + .gitattributes | 1 + .gitignore | 8 + .jshintrc | 24 + Gruntfile.js | 302 ++ README.md | 24 + app/_locales/en/messages.json | 10 + app/images/128.png | Bin 0 -> 7446 bytes app/images/16.png | Bin 0 -> 587 bytes app/images/32.png | Bin 0 -> 1499 bytes app/images/48.png | Bin 0 -> 2440 bytes app/images/ajax-loader.gif | Bin 0 -> 673 bytes app/manifest.json | 44 + app/popup.html | 18 + app/scripts/background.js | 57 + app/scripts/forceTooling.js | 435 +++ app/scripts/jquery.js | 6 + app/scripts/main.js | 1028 +++++++ app/scripts/mousetrap.min.js | 22 + app/scripts/popup.js | 55 + app/styles/main.css | 50 + bower.json | 6 + package.json | 32 + test/index.html | 23 + test/lib/chai.js | 3809 +++++++++++++++++++++++ test/lib/expect.js | 12 + test/lib/mocha/mocha.css | 231 ++ test/lib/mocha/mocha.js | 5340 +++++++++++++++++++++++++++++++++ test/spec/test.js | 11 + 30 files changed, 11572 insertions(+) create mode 100644 .bowerrc create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .jshintrc create mode 100644 Gruntfile.js create mode 100644 README.md create mode 100644 app/_locales/en/messages.json create mode 100644 app/images/128.png create mode 100644 app/images/16.png create mode 100644 app/images/32.png create mode 100644 app/images/48.png create mode 100644 app/images/ajax-loader.gif create mode 100644 app/manifest.json create mode 100644 app/popup.html create mode 100644 app/scripts/background.js create mode 100644 app/scripts/forceTooling.js create mode 100644 app/scripts/jquery.js create mode 100644 app/scripts/main.js create mode 100644 app/scripts/mousetrap.min.js create mode 100644 app/scripts/popup.js create mode 100644 app/styles/main.css create mode 100644 bower.json create mode 100644 package.json create mode 100644 test/index.html create mode 100755 test/lib/chai.js create mode 100755 test/lib/expect.js create mode 100755 test/lib/mocha/mocha.css create mode 100755 test/lib/mocha/mocha.js create mode 100644 test/spec/test.js diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..ba0accc --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "app/bower_components" +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..8a80734 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + + +[*] + +# Change these settings to your own preference +indent_style = space +indent_size = 4 + +# We recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..2125666 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a88969 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules +temp +.tmp +dist +.sass-cache +app/bower_components +test/bower_components +package diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..06a890e --- /dev/null +++ b/.jshintrc @@ -0,0 +1,24 @@ +{ + "node": true, + "browser": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 4, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "regexp": true, + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "smarttabs": true, + "globals" : { + "chrome": true + } +} diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..dd62b63 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,302 @@ +/*jshint camelcase: false*/ +// Generated on 2013-11-16 using generator-chrome-extension 0.2.5 +'use strict'; +var mountFolder = function (connect, dir) { + return connect.static(require('path').resolve(dir)); +}; + +// # Globbing +// for performance reasons we're only matching one level down: +// 'test/spec/{,*/}*.js' +// use this if you want to recursively match all subfolders: +// 'test/spec/**/*.js' + +module.exports = function (grunt) { + // show elapsed time at the end + require('time-grunt')(grunt); + // load all grunt tasks + require('load-grunt-tasks')(grunt); + + // configurable paths + var yeomanConfig = { + app: 'app', + dist: 'dist' + }; + + grunt.initConfig({ + yeoman: yeomanConfig, + watch: { + options: { + spawn: false + }, + coffee: { + files: ['<%= yeoman.app %>/scripts/{,*/}*.coffee'], + tasks: ['coffee:dist'] + }, + coffeeTest: { + files: ['test/spec/{,*/}*.coffee'], + tasks: ['coffee:test'] + }, + compass: { + files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], + tasks: ['compass:server'] + } + }, + connect: { + options: { + port: 9000, + // change this to '0.0.0.0' to access the server from outside + hostname: 'localhost' + }, + test: { + options: { + middleware: function (connect) { + return [ + mountFolder(connect, '.tmp'), + mountFolder(connect, 'test') + ]; + } + } + } + }, + clean: { + dist: { + files: [{ + dot: true, + src: [ + '.tmp', + '<%= yeoman.dist %>/*', + '!<%= yeoman.dist %>/.git*' + ] + }] + }, + server: '.tmp' + }, + jshint: { + options: { + jshintrc: '.jshintrc' + }, + all: [ + 'Gruntfile.js', + '<%= yeoman.app %>/scripts/{,*/}*.js', + 'test/spec/{,*/}*.js' + ] + }, + mocha: { + all: { + options: { + run: true, + urls: ['http://localhost:<%= connect.options.port %>/index.html'] + } + } + }, + coffee: { + dist: { + files: [{ + expand: true, + cwd: '<%= yeoman.app %>/scripts', + src: '{,*/}*.coffee', + dest: '.tmp/scripts', + ext: '.js' + }] + }, + test: { + files: [{ + expand: true, + cwd: 'test/spec', + src: '{,*/}*.coffee', + dest: '.tmp/spec', + ext: '.js' + }] + } + }, + compass: { + options: { + sassDir: '<%= yeoman.app %>/styles', + cssDir: '.tmp/styles', + generatedImagesDir: '.tmp/images/generated', + imagesDir: '<%= yeoman.app %>/images', + javascriptsDir: '<%= yeoman.app %>/scripts', + fontsDir: '<%= yeoman.app %>/styles/fonts', + importPath: '<%= yeoman.app %>/bower_components', + httpImagesPath: '/images', + httpGeneratedImagesPath: '/images/generated', + relativeAssets: false + }, + dist: {}, + server: { + options: { + debugInfo: true + } + } + }, + // not used since Uglify task does concat, + // but still available if needed + /*concat: { + dist: {} + },*/ + // not enabled since usemin task does concat and uglify + // check index.html to edit your build targets + // enable this task if you prefer defining your build targets here + /*uglify: { + dist: {} + },*/ + useminPrepare: { + options: { + dest: '<%= yeoman.dist %>' + }, + html: [ + '<%= yeoman.app %>/popup.html' + ] + }, + usemin: { + options: { + dirs: ['<%= yeoman.dist %>'] + }, + html: ['<%= yeoman.dist %>/{,*/}*.html'], + css: ['<%= yeoman.dist %>/styles/{,*/}*.css'] + }, + imagemin: { + dist: { + files: [{ + expand: true, + cwd: '<%= yeoman.app %>/images', + src: '{,*/}*.{png,jpg,jpeg}', + dest: '<%= yeoman.dist %>/images' + }] + } + }, + svgmin: { + dist: { + files: [{ + expand: true, + cwd: '<%= yeoman.app %>/images', + src: '{,*/}*.svg', + dest: '<%= yeoman.dist %>/images' + }] + } + }, + cssmin: { + dist: { + files: { + '<%= yeoman.dist %>/styles/main.css': [ + '.tmp/styles/{,*/}*.css', + '<%= yeoman.app %>/styles/{,*/}*.css' + ] + } + } + }, + htmlmin: { + dist: { + options: { + /*removeCommentsFromCDATA: true, + // https://github.com/yeoman/grunt-usemin/issues/44 + //collapseWhitespace: true, + collapseBooleanAttributes: true, + removeAttributeQuotes: true, + removeRedundantAttributes: true, + useShortDoctype: true, + removeEmptyAttributes: true, + removeOptionalTags: true*/ + }, + files: [{ + expand: true, + cwd: '<%= yeoman.app %>', + src: '*.html', + dest: '<%= yeoman.dist %>' + }] + } + }, + // Put files not handled in other tasks here + copy: { + dist: { + files: [{ + expand: true, + dot: true, + cwd: '<%= yeoman.app %>', + dest: '<%= yeoman.dist %>', + src: [ + '*.{ico,png,txt}', + 'images/{,*/}*.{webp,gif}', + '_locales/{,*/}*.json' + ] + }, { + expand: true, + cwd: '.tmp/images', + dest: '<%= yeoman.dist %>/images', + src: [ + 'generated/*' + ] + }] + } + }, + concurrent: { + server: [ + 'coffee:dist', + 'compass:server' + ], + test: [ + 'coffee', + 'compass' + ], + dist: [ + 'coffee', + 'compass:dist', + 'imagemin', + 'svgmin', + 'htmlmin' + ] + }, + chromeManifest: { + dist: { + options: { + buildnumber: true, + background: { + target:'scripts/background.js' + } + }, + src: '<%= yeoman.app %>', + dest: '<%= yeoman.dist %>' + } + }, + compress: { + dist: { + options: { + archive: 'package/SFNav.zip' + }, + files: [{ + expand: true, + cwd: 'dist/', + src: ['**'], + dest: '' + }] + } + } + }); + + grunt.registerTask('test', [ + 'clean:server', + 'concurrent:test', + 'connect:test', + 'mocha' + ]); + + grunt.registerTask('build', [ + 'clean:dist', + 'chromeManifest:dist', + 'useminPrepare', + 'concurrent:dist', + 'cssmin', + 'concat', + 'uglify', + 'copy', + 'usemin', + 'compress' + ]); + + grunt.registerTask('default', [ + 'jshint', + 'test', + 'build' + ]); +}; diff --git a/README.md b/README.md new file mode 100644 index 0000000..bfc17b1 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# Salesforce Navigator + +This extension helps you get to any salesforce page quickly. Just type in what you need to do. + +- All objects list views and create new pages are available (even for objects that don't have tabs). Type in "List " or "New " + +- All setup links are available -- Type in "Setup" to see all. For example, if you want to get to the Account fields setup, type in "Account Fields". Or any custom object setup page, type "setup " + +- (beta) Thanks to the SF tooling API, you can now create fields. "cf Account newField TEXT 100." + +Check it out on the Chrome Web Store: +[Salesforce Navigator](https://chrome.google.com/webstore/detail/salesforce-navigator/ecjmdlggbilopfkkhggmgebbmbiklcdo) + +Maintainers: [Daniel Nakov](https://twitter.com/dnak0v) and [Wes Weingartner](https://twitter.com/wes1278) + +## Getting Started +Project was scaffolded using [Yeoman](http://yeoman.io/) using [generator-chrome-extension](https://github.com/yeoman/generator-chrome-extension) + +## Test +To test, go to: chrome://extensions, enable Developer mode and load app as an unpacked extension. + +## License +[MIT License](http://en.wikipedia.org/wiki/MIT_License) + diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json new file mode 100644 index 0000000..03a73b1 --- /dev/null +++ b/app/_locales/en/messages.json @@ -0,0 +1,10 @@ +{ + "appName": { + "message": "SFNav", + "description": "The name of the application" + }, + "appDescription": { + "message": "Salesforce Navigator", + "description": "The description of the application" + } +} diff --git a/app/images/128.png b/app/images/128.png new file mode 100644 index 0000000000000000000000000000000000000000..4e17328563613c86f778008865b641de15821ff8 GIT binary patch literal 7446 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 literal 0 HcmV?d00001 diff --git a/app/images/32.png b/app/images/32.png new file mode 100644 index 0000000000000000000000000000000000000000..79cce4686d464676f2c409ab83ee236a95713363 GIT binary patch literal 1499 zcmV<11tj{3P)dH0iniQy9K( zVaSO7Q-FWfvA8)n9*WG8$U5do&*^bFw4JGm4=Fa3)Q~}&i6#v z4mjKrplwu7Ckam<^ht6xIAAI{c0TTfl94nHBA&ZkV%T>%INnDywOnf@%r!eC zR*^X2y>i6UyNB43&yej_AT&~ypM~oG`l-96>WX$ojXK+6h3kzDR3c_?Bs^=OKg_VN z*XQ1zEbj76T_YF~7Ag@ZE?8=+M5&?xjW$%8pzwTU$I&L$(%CtF~A)2HfQw zOf1w}U=@6ia$-4CZZQ{i_|{l2y9(L0e(;TvCo8S!&nDxg|2bD{zkl*-l`4P;6a!dJ zuvFolQpD8dGK;N*cS{jbs$gVEb_H<)Neae5VKsk0Xs1lgmYJ@_UD+gqmh@3MaWQ(( zr1sQwBOW||v&rfC8g0*AEl^cREs~_{^c`lJDb_V?afHiGsiRzN^Y6MY?CMna+8u&Q~0`g;h zJiN7lAjE2U)iumU*;}6L#$1$esTs4c$6u3=I$^+kWu@5|fzJMZ(TB&kp=xr$3Zk(^RiBfxOtt$U8ieB#)^c`Wbost%F zu(cPq^+7QQUgnnZ6};c*Q0k;?&t=%OGj@5Q6fY4_Xlk0CGKhI;X}t;s&ez-PPp?R1 z*Ar-_mP#jOByibV^tl~W!7eKj<*Zusx{)L~iR#U6V~KV>W{yCRfy{aWs!OGxF~Sq0 zMfMg~n^reG5sI#pg8WNGj~to|=S{htf7`;J)(VQiXt4e*aC{Hx$!$=YafEQ$^`T=p zcxNA99xjk`Hil!w_tK*4Oi9vt{M&bhXJENnj~!EY^qbMo)#?Ee83vp;K5X*Gxe7*L zG;sOsmXKE#>&&;3bxL>UGkj-9|AzQiI+izYHd$yTqzVHWr*r>6?#Pe#6i%$W?8?Wn z*VG>#YEFu0_dDV|Scz@%-BNVV9lkq0p7RJ@;l=qHe_g1r-rfjDCi>Y`$Zi}gmSGhX z#Sxiyr1R*(iJqBF32cUE{@vc4mGl{f`$Y(2tMZ$RH<_u&3}hU>x~<5k`);3j04Ozt zqs58f_yLjhV-od~Gg|J;E+ z()}QOG=a@<{OrOVZoc?SQT+nQAZy056?g#f@W&T80Ki1tWg zKc|j)1ZzJ9#z(j&*1o1<{?_WqJKx>yU%B0Y`d{@Wcf_t1p&bAK002ovPDHLkV1n3i B;6nfa literal 0 HcmV?d00001 diff --git a/app/images/48.png b/app/images/48.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb09543b817f53635a2c17cb5e66e80496cb839 GIT binary patch literal 2440 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 literal 0 HcmV?d00001 diff --git a/app/manifest.json b/app/manifest.json new file mode 100644 index 0000000..d2bd498 --- /dev/null +++ b/app/manifest.json @@ -0,0 +1,44 @@ +{ + "name": "Salesforce Navigator", + "version": "0.5.12", + "manifest_version": 2, + "default_locale": "en", + "browser_action": { + "default_icon": "images/32.png", + "default_popup": "popup.html" + }, + "background": { + "scripts": [ + "scripts/background.js" + ], + "persistent": true + }, + "web_accessible_resources": [ + "images/ajax-loader.gif" + ], + "description": "", + "content_scripts": [ + { + "css": [ + "styles/main.css" + ], + "matches": [ + "https://*.force.com/*", + "https://*.salesforce.com/*" + ], + "js": [ + "scripts/jquery.js", + "scripts/mousetrap.min.js", + "scripts/forceTooling.js", + "scripts/main.js", + "scripts/popup.js" + ], + "run_at": "document_end" + } + ], + "permissions": [ + "https://*.force.com/*", + "https://*.salesforce.com/*", + "storage" + ] +} \ No newline at end of file diff --git a/app/popup.html b/app/popup.html new file mode 100644 index 0000000..04f987d --- /dev/null +++ b/app/popup.html @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/scripts/background.js b/app/scripts/background.js new file mode 100644 index 0000000..7502e7a --- /dev/null +++ b/app/scripts/background.js @@ -0,0 +1,57 @@ +var commands = {}; +var metadata = {}; + +chrome.extension.onMessage.addListener( + function(request, sender, sendResponse) { + if(request.action == 'Store Commands') + { + commands[request.key] = request.payload; + sendResponse({}); + } + if(request.action == 'Get Commands') + { + if(commands != null) + sendResponse(commands[request.key]); + else + sendResponse(null); + } + if(request.action == 'Get Settings') + { + var settings = localStorage.getItem('sfnav_settings'); + console.log('settings: ' + settings); + if(settings != null) + { + sendResponse(JSON.parse(settings)); + } + else + { + var sett = {}; + sett['shortcut'] = 'shift+space'; + localStorage.setItem('sfnav_settings', JSON.stringify(sett)); + sendResponse(sett); + } + } + if(request.action == 'Set Settings') + { + var settings = localStorage.getItem('sfnav_settings'); + if(settings != null) + { + var sett = JSON.parse(settings); + sett[request.key] = request.payload; + localStorage.setItem('sfnav_settings', JSON.stringify(sett)); + } + sendResponse({}); + } + if(request.action == 'Store Metadata') + { + metadata[request.key] = request.payload; + sendResponse({}); + } + if(request.action == 'Get Metadata') + { + if(metadata != null) + sendResponse(metadata[request.key]); + else + sendResponse(null); + } + }); \ No newline at end of file diff --git a/app/scripts/forceTooling.js b/app/scripts/forceTooling.js new file mode 100644 index 0000000..1f616df --- /dev/null +++ b/app/scripts/forceTooling.js @@ -0,0 +1,435 @@ +/* + * Copyright (c) 2011, salesforce.com, inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted provided + * that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of conditions and the + * following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided with the distribution. + * + * Neither the name of salesforce.com, inc. nor the names of its contributors may be used to endorse or + * promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* JavaScript library to wrap REST API on Visualforce. Leverages Ajax Proxy + * (see http://bit.ly/sforce_ajax_proxy for details). + * + * Note that you must add the REST endpoint hostname for your instance (i.e. + * https://na1.salesforce.com/ or similar) as a remote site - in the admin + * console, go to Your Name | Setup | Security Controls | Remote Site Settings + */ + +var forceTooling = window.forceTooling; + +if (forceTooling === undefined) { + forceTooling = {}; +} + +if (forceTooling.ApexLogs === undefined) { + forceTooling.ApexLogs = {}; + + forceTooling.ApexLogs.queryString = 'SELECT Id,Application,DurationMilliseconds,Location,LogLength,LogUserId,Operation,Request,StartTime,Status FROM ApexLog'; +} + +if (forceTooling.CustomFields === undefined) { + forceTooling.CustomFields = {}; + + // The main wrapper that needs to be an input to the create method. + // Right now, the constructor for this takes a reasonable amount of inputs. + // Need to add some new parameters to this to allow for creating things like + // relationship fields and a few other more complex field types. + forceTooling.CustomFields.CustomField = function(sobject,sobjectId, name,type,helpText,length,leftDecimals,rightDecimals,picklistValues, referenceTo, visibleLines){ + this.Metadata = new forceTooling.CustomFields.Metadata(name,sobject,type,helpText,length,leftDecimals,rightDecimals,picklistValues, referenceTo, visibleLines); + this.FullName = sobject + '.' + this.Metadata.fullName; + if(sobjectId === null) this.TableEnumOrId = sobject; + else this.TableEnumOrId = sobjectId; + }; + + // Should be instantiated as new Metadata(fieldName or label,forceTooling.CustomFields.TYPES,a string of helptext, the length As Integer(for text fields), # of decimals to the left, # of decimals to the right) + // Most of the fields that are possible will probably never be used. That doesn't mean we should never create a constructor for all these fields. + forceTooling.CustomFields.Metadata = function(name,sobject, type,helpText,length,leftDecimals,rightDecimals,picklistValues, referenceTo, visibleLines){ + var tempName = name; + if(name.toLowerCase().substring(name.length-3,name.length) == "__c") + { + this.fullName = name; + + tempName = name.replace("__c",""); + tempName = tempName.replace("__C",""); + tempName = tempName.replace("_"," "); + this.label = tempName; + } + else + { + this.label = name; + tempName = name.replace(" ","_"); + tempName += "__c"; + this.fullName = tempName; + } + this.type = type; + this.inlineHelpText = helpText; + this.length = parseInt(length); + this.precision = parseInt(leftDecimals + rightDecimals); + this.scale = rightDecimals; + if(picklistValues !== null) + { + this.picklist = { sorted: false, restrictedPicklist: null, controllingField: null}; + this.picklist.picklistValues = picklistValues; + } + + // unused booleans + this.caseSensitive = false; + this.deprecated = false; + this.displayLocationInDecimal = false; + this.externalId = false; + this.indexed = false; + this.populateExistingRows = false; + this.reparentableMasterDetail = false; + this.stripMarkup = false; + this.trackFeedHistory = false; + this.trackHistory = false; + this.trueValueIndexed = false; + this.unique = false; + this.writeRequiresMasterRead = false; + + // unused ints + this.relationshipOrder = 0; + this.startingNumber = 0; + this.visibleLines = visibleLines; + + // unused strings + this.defaultValue = null; + if(referenceTo != null) this.deleteConstraint = 'SetNull'; + this.description = null; + this.displayFormat = null; + this.formula = null; +// this.formulaTreatBlankAs = null; + this.maskChar = null; + this.maskType = null; + this.referenceTo = referenceTo; + if(referenceTo != null) this.relationshipLabel = sobject; + if(referenceTo != null) this.relationshipName = sobject; + this.summarizedField = null; + this.summaryForeignKey = null; + this.summaryOperation = null; + }; + + // For future use: + // Should create an array of forceTooling.CustomFields.PicklistValues to pass as an input to Metadata. + // Right now, all the fields seem semi-useless except for name. + // we can't set the default value because it's a reserved word. + forceTooling.CustomFields.PicklistValue = function(name){ + this.fullName = name; + + //booleans + this.allowEmail = null; + this.closed = null; + this.converted = null; + this.cssExposed = null; + this.highPriority = null; + this.reviewed = false; + this.won = null; + this.probability = null; + + //string fields + this.forecastCategory = null; + this.color = null; + this.description = null; + this.reverseRole = null; + this.controllingFieldValues = null; + }; + + // Holds the default query string for Custom fields. + forceTooling.CustomFields.queryString = 'Select Id, DeveloperName, NamespacePrefix, TableEnumOrId, Fullname, Metadata FROM CustomField'; + + // an object to hold all the salesforce custom field types. the name attribute is the exact salesforce name. + forceTooling.CustomFields.TYPES = { + AUTONUMBER : {name:"AutoNumber",code:"auto"}, + CHECKBOX : {name:"Checkbox",code:"cb"}, + CURRENCY : {name:"Currency",code:"curr"}, + DATE : {name:"Date",code:"d"}, + DATETIME : {name:"DateTime",code:"dt"}, + EMAIL : {name:"Email",code:"e"}, + FORMULA : {name:"FORMULA",code:"form"}, + GEOLOCATION : {name:"Location",code:"geo"}, + HIERARCHICALRELATIONSHIP : {name:"Hierarchy",code:"hr"}, + LOOKUPRELATIONSHIP : {name:"Lookup",code:"look"}, + MASTERDETAILRELATIONSHIP : {name:"MasterDetail",code:"md"}, + NUMBER : {name:"Number",code:"n"}, + PERCENT : {name:"Percent",code:"per"}, + PHONE : {name:"Phone",code:"ph"}, + PICKLIST : {name:"Picklist",code:"pl"}, + PICKLISTMS : {name:"MultiselectPicklist",code:"plms"}, + ROLLUPSUMMARY : {name:"Summary",code:"rup"}, + TEXT : {name:"Text",code:"t"}, + TEXTENCRYPTED : {name:"EcryptedText",code:"te"}, + TEXTAREA : {name:"TextArea",code:"ta"}, + TEXTAREALONG : {name:"LongTextArea",code:"tal"}, + TEXTAREARICH : {name:"Html",code:"tar"}, + URL : {name:"Url",code:"url"} + }; +} + +if (forceTooling.Client === undefined) { + // We use $j rather than $ for jQuery so it works in Visualforce + if (window.$j === undefined) { + $j = $; + } + + /** + * The Client provides a convenient wrapper for the Force.com REST API, + * allowing JavaScript in Visualforce pages to use the API via the Ajax Proxy. + * @param [clientId=null] 'Consumer Key' in the Remote Access app settings + * @param [loginUrl='https://login.salesforce.com/'] Login endpoint + * @param [proxyUrl=null] Proxy URL. Omit if running on Visualforce or PhoneGap etc + * @constructor + */ + forceTooling.Client = function(clientId, loginUrl, proxyUrl) { + this.clientId = clientId; + this.loginUrl = loginUrl || 'https://login.salesforce.com/'; + if (typeof proxyUrl === 'undefined' || proxyUrl === null) { + if (location.protocol === 'file:') { + // In PhoneGap + this.proxyUrl = null; + } else { + // In Visualforce + this.proxyUrl = location.protocol + "//" + location.hostname + "/services/proxy"; + } + this.authzHeader = "Authorization"; + } else { + // On a server outside VF + this.proxyUrl = proxyUrl; + this.authzHeader = "X-Authorization"; + } + this.refreshToken = null; + this.sessionId = null; + this.apiVersion = null; + this.instanceUrl = null; + this.asyncAjax = true; + }; + + /** + * Set a refresh token in the client. + * @param refreshToken an OAuth refresh token + */ + forceTooling.Client.prototype.setRefreshToken = function(refreshToken) { + this.refreshToken = refreshToken; + }; + + /** + * Refresh the access token. + * @param callback function to call on success + * @param error function to call on failure + */ + forceTooling.Client.prototype.refreshAccessToken = function(callback, error) { + var that = this; + var url = this.loginUrl + '/services/oauth2/token'; + return $j.ajax({ + type: 'POST', + url: (this.proxyUrl !== null) ? this.proxyUrl: url, + cache: false, + processData: false, + data: 'grant_type=refresh_token&client_id=' + this.clientId + '&refresh_token=' + this.refreshToken, + success: callback, + error: error, + dataType: "json", + beforeSend: function(xhr) { + if (that.proxyUrl !== null) { + xhr.setRequestHeader('SalesforceProxy-Endpoint', url); + } + } + }); + }; + + /** + * Set a session token and the associated metadata in the client. + * @param sessionId a salesforce.com session ID. In a Visualforce page, + * use '{!$Api.sessionId}' to obtain a session ID. + * @param [apiVersion="21.0"] Force.com API version + * @param [instanceUrl] Omit this if running on Visualforce; otherwise + * use the value from the OAuth token. + */ + forceTooling.Client.prototype.setSessionToken = function(sessionId, apiVersion, instanceUrl) { + this.sessionId = sessionId; + this.apiVersion = (typeof apiVersion === 'undefined' || apiVersion === null) ? 'v27.0': apiVersion; + if (typeof instanceUrl === 'undefined' || instanceUrl === null) { + // location.hostname can be of the form 'abc.na1.visual.force.com', + // 'na1.salesforce.com' or 'abc.my.salesforce.com' (custom domains). + // Split on '.', and take the [1] or [0] element as appropriate + var elements = location.hostname.split("."); + + var instance = null; + if(elements.length == 4 && elements[1] === 'my') { + instance = elements[0] + '.' + elements[1]; + } else if(elements.length == 3){ + instance = elements[0]; + } else { + instance = elements[1]; + } + + this.instanceUrl = "https://" + instance + ".salesforce.com"; + } + else { + this.instanceUrl = instanceUrl; + } + }; + + /* + * Low level utility function to call the Salesforce endpoint. + * @param path resource path relative to /services/data + * @param callback function to which response will be passed + * @param [error=null] function to which jqXHR will be passed in case of error + * @param [method="GET"] HTTP method for call + * @param [payload=null] payload for POST/PATCH etc + */ + forceTooling.Client.prototype.ajax = function(path, callback, error, method, payload, retry) { + var that = this; + var url = this.instanceUrl + '/services/data' + path; + + return $j.ajax({ + type: method || "GET", + async: this.asyncAjax, + url: (this.proxyUrl !== null) ? this.proxyUrl: url, + contentType: method == "DELETE" ? null : 'application/json', + cache: false, + processData: false, + data: payload, + success: callback, + error: (!this.refreshToken || retry ) ? error : function(jqXHR, textStatus, errorThrown) { + if (jqXHR.status === 401) { + that.refreshAccessToken(function(oauthResponse) { + that.setSessionToken(oauthResponse.access_token, null, + oauthResponse.instance_url); + that.ajax(path, callback, error, method, payload, true); + }, + error); + } else { + error(jqXHR, textStatus, errorThrown); + } + }, + dataType: "json", + beforeSend: function(xhr) { + if (that.proxyUrl !== null) { + xhr.setRequestHeader('SalesforceProxy-Endpoint', url); + } + xhr.setRequestHeader(that.authzHeader, "OAuth " + that.sessionId); + xhr.setRequestHeader('X-User-Agent', 'salesforce-toolkit-rest-javascript/' + that.apiVersion); + } + }); + }; + + /* + * Low level utility function to call the Salesforce endpoint specific for Apex REST API. + * @param path resource path relative to /services/apexrest + * @param callback function to which response will be passed + * @param [error=null] function to which jqXHR will be passed in case of error + * @param [method="GET"] HTTP method for call + * @param [payload=null] payload for POST/PATCH etc + * @param [paramMap={}] parameters to send as header values for POST/PATCH etc + * @param [retry] specifies whether to retry on error + */ + forceTooling.Client.prototype.apexrest = function(path, callback, error, method, payload, paramMap, retry) { + var that = this; + var url = this.instanceUrl + '/services/apexrest' + path; + + return $j.ajax({ + type: method || "GET", + async: this.asyncAjax, + url: (this.proxyUrl !== null) ? this.proxyUrl: url, + contentType: 'application/json', + cache: false, + processData: false, + data: payload, + success: callback, + error: (!this.refreshToken || retry ) ? error : function(jqXHR, textStatus, errorThrown) { + if (jqXHR.status === 401) { + that.refreshAccessToken(function(oauthResponse) { + that.setSessionToken(oauthResponse.access_token, null, + oauthResponse.instance_url); + that.apexrest(path, callback, error, method, payload, paramMap, true); + }, + error); + } else { + error(jqXHR, textStatus, errorThrown); + } + }, + dataType: "json", + beforeSend: function(xhr) { + if (that.proxyUrl !== null) { + xhr.setRequestHeader('SalesforceProxy-Endpoint', url); + } + //Add any custom headers + if (paramMap === null) { + paramMap = {}; + } + for (var paramName in paramMap) { + xhr.setRequestHeader(paramName, paramMap[paramName]); + } + xhr.setRequestHeader(that.authzHeader, "OAuth " + that.sessionId); + xhr.setRequestHeader('X-User-Agent', 'salesforce-toolkit-rest-javascript/' + that.apiVersion); + } + }); + }; + + // Create + forceTooling.Client.prototype.create = function(metaDataType, payload, callback, error) { + return this.ajax('/' + this.apiVersion + '/tooling/sobjects/' + metaDataType + '/', callback, error, "POST", JSON.stringify(payload)); + }; + + // Update + forceTooling.Client.prototype.update = function(metaDataType, id, payload, callback, error) { + return this.ajax('/' + this.apiVersion + '/tooling/sobjects/' + metaDataType + '/' + id + '?_HttpMethod=PATCH', callback, error, "POST", JSON.stringify(payload)); + }; + + // query + forceTooling.Client.prototype.query = function(queryString, callback, error) { + return this.ajax('/' + this.apiVersion + '/tooling/query/?q=' + queryString, callback, error); + }; + + // queryFieldsByName + forceTooling.Client.prototype.queryFieldsByName = function(name, callback, error) { + var queryString = forceTooling.CustomFields.queryString + ' WHERE Fullname=\'' + name + '\''; + return forceTooling.Client.prototype.query(this.queryString,callback,error); + }; + + // queryFieldsById + forceTooling.Client.prototype.queryFieldsById = function(id, callback, error) { + var queryString = forceTooling.CustomFields.queryString + ' WHERE Id=\'' + id + '\''; + return forceTooling.Client.prototype.query(this.queryString,callback,error); + }; + + // queryFieldsForObject + forceTooling.Client.prototype.queryFieldsForObject = function(objectName, callback, error) { + var queryString = forceTooling.CustomFields.queryString + ' WHERE TableEnumOrId=\'' + objectName + '\''; + return forceTooling.Client.prototype.query(this.queryString,callback,error); + }; + + // queryLogsById + forceTooling.Client.prototype.queryLogsById = function(id, callback, error) { + return this.ajax('/' + this.apiVersion + '/tooling/sobjects/ApexLog/'+ id); + }; + + // queryLogsById + forceTooling.Client.prototype.queryLogsByUserId = function(userId, callback, error) { + var queryString = forceTooling.ApexLogs.queryString + ' WHERE LogUserId=\'' + userId + '\''; + return forceTooling.Client.prototype.query(this.queryString,callback,error); + }; + + // queryLogBodyByLogId + forceTooling.Client.prototype.queryLogBodyByLogId = function(id, callback, error) { + return this.ajax('/' + this.apiVersion + '/tooling/sobjects/ApexLog/'+ id +'/Body/'); + }; + +} \ No newline at end of file diff --git a/app/scripts/jquery.js b/app/scripts/jquery.js new file mode 100644 index 0000000..e3c94c5 --- /dev/null +++ b/app/scripts/jquery.js @@ -0,0 +1,6 @@ +/*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license + +*/ +(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],p="2.0.3",f=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:p,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return f.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,p,f,h,d,g,m,y,v="sizzle"+-new Date,b=e.document,w=0,T=0,C=st(),k=st(),N=st(),E=!1,S=function(e,t){return e===t?(E=!0,0):0},j=typeof undefined,D=1<<31,A={}.hasOwnProperty,L=[],q=L.pop,H=L.push,O=L.push,F=L.slice,P=L.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",W="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",$=W.replace("w","w#"),B="\\["+M+"*("+W+")"+M+"*(?:([*^$|!~]?=)"+M+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+$+")|)|)"+M+"*\\]",I=":("+W+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+B.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=RegExp("^"+M+"*,"+M+"*"),X=RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=RegExp(M+"*[+~]"),Y=RegExp("="+M+"*([^\\]'\"]*)"+M+"*\\]","g"),V=RegExp(I),G=RegExp("^"+$+"$"),J={ID:RegExp("^#("+W+")"),CLASS:RegExp("^\\.("+W+")"),TAG:RegExp("^("+W.replace("w","w*")+")"),ATTR:RegExp("^"+B),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:RegExp("^(?:"+R+")$","i"),needsContext:RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Q=/^[^{]+\{\s*\[native \w/,K=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Z=/^(?:input|select|textarea|button)$/i,et=/^h\d$/i,tt=/'|\\/g,nt=RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),rt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{O.apply(L=F.call(b.childNodes),b.childNodes),L[b.childNodes.length].nodeType}catch(it){O={apply:L.length?function(e,t){H.apply(e,F.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function ot(e,t,r,i){var o,s,a,u,l,f,g,m,x,w;if((t?t.ownerDocument||t:b)!==p&&c(t),t=t||p,r=r||[],!e||"string"!=typeof e)return r;if(1!==(u=t.nodeType)&&9!==u)return[];if(h&&!i){if(o=K.exec(e))if(a=o[1]){if(9===u){if(s=t.getElementById(a),!s||!s.parentNode)return r;if(s.id===a)return r.push(s),r}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(a))&&y(t,s)&&s.id===a)return r.push(s),r}else{if(o[2])return O.apply(r,t.getElementsByTagName(e)),r;if((a=o[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&(!d||!d.test(e))){if(m=g=v,x=t,w=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(g=t.getAttribute("id"))?m=g.replace(tt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",l=f.length;while(l--)f[l]=m+mt(f[l]);x=U.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return O.apply(r,x.querySelectorAll(w)),r}catch(T){}finally{g||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,r,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>i.cacheLength&&delete t[e.shift()],t[n]=r}return t}function at(e){return e[v]=!0,e}function ut(e){var t=p.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function lt(e,t){var n=e.split("|"),r=e.length;while(r--)i.attrHandle[n[r]]=t}function ct(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return at(function(t){return t=+t,at(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}s=ot.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},n=ot.support={},c=ot.setDocument=function(e){var t=e?e.ownerDocument||e:b,r=t.defaultView;return t!==p&&9===t.nodeType&&t.documentElement?(p=t,f=t.documentElement,h=!s(t),r&&r.attachEvent&&r!==r.top&&r.attachEvent("onbeforeunload",function(){c()}),n.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ut(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),n.getById=ut(function(e){return f.appendChild(e).id=v,!t.getElementsByName||!t.getElementsByName(v).length}),n.getById?(i.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){return e.getAttribute("id")===t}}):(delete i.find.ID,i.filter.ID=function(e){var t=e.replace(nt,rt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=n.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&h?t.getElementsByClassName(e):undefined},g=[],d=[],(n.qsa=Q.test(t.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ut(function(e){var n=t.createElement("input");n.setAttribute("type","hidden"),e.appendChild(n).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")})),(n.matchesSelector=Q.test(m=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&ut(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",I)}),d=d.length&&RegExp(d.join("|")),g=g.length&&RegExp(g.join("|")),y=Q.test(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,r){if(e===r)return E=!0,0;var i=r.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(r);return i?1&i||!n.sortDetached&&r.compareDocumentPosition(e)===i?e===t||y(b,e)?-1:r===t||y(b,r)?1:l?P.call(l,e)-P.call(l,r):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],u=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:l?P.call(l,e)-P.call(l,n):0;if(o===s)return ct(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)u.unshift(r);while(a[i]===u[i])i++;return i?ct(a[i],u[i]):a[i]===b?-1:u[i]===b?1:0},t):p},ot.matches=function(e,t){return ot(e,null,null,t)},ot.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Y,"='$1']"),!(!n.matchesSelector||!h||g&&g.test(t)||d&&d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return ot(t,p,null,[e]).length>0},ot.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},ot.attr=function(e,t){(e.ownerDocument||e)!==p&&c(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!h):undefined;return o===undefined?n.attributes||!h?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null:o},ot.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ot.uniqueSort=function(e){var t,r=[],i=0,o=0;if(E=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(S),E){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return e},o=ot.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=ot.selectors={cacheLength:50,createPseudo:at,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(nt,rt),e[3]=(e[4]||e[5]||"").replace(nt,rt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ot.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ot.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return J.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&V.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(nt,rt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ot.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,y=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){p=t;while(p=p[g])if(a?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[v]||(m[v]={}),l=c[e]||[],h=l[0]===w&&l[1],f=l[0]===w&&l[2],p=h&&m.childNodes[h];while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[w,h,f];break}}else if(x&&(l=(t[v]||(t[v]={}))[e])&&l[0]===w)f=l[1];else while(p=++h&&p&&p[g]||(f=h=0)||d.pop())if((a?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(x&&((p[v]||(p[v]={}))[e]=[w,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||ot.error("unsupported pseudo: "+e);return r[v]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?at(function(e,n){var i,o=r(e,t),s=o.length;while(s--)i=P.call(e,o[s]),e[i]=!(n[i]=o[s])}):function(e){return r(e,0,n)}):r}},pseudos:{not:at(function(e){var t=[],n=[],r=a(e.replace(z,"$1"));return r[v]?at(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:at(function(e){return function(t){return ot(e,t).length>0}}),contains:at(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:at(function(e){return G.test(e||"")||ot.error("unsupported lang: "+e),e=e.replace(nt,rt).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return et.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},i.pseudos.nth=i.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})i.pseudos[t]=ft(t);function dt(){}dt.prototype=i.filters=i.pseudos,i.setFilters=new dt;function gt(e,t){var n,r,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=i.preFilter;while(a){(!n||(r=_.exec(a)))&&(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=X.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(z," ")}),a=a.slice(n.length));for(s in i.filter)!(r=J[s].exec(a))||l[s]&&!(r=l[s](r))||(n=r.shift(),o.push({value:n,type:s,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ot.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,n){var i=t.dir,o=n&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var u,l,c,p=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[v]||(t[v]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,a)||r,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[v]&&(r=bt(r)),i&&!i[v]&&(i=bt(i,o)),at(function(o,s,a,u){var l,c,p,f=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,f,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(p=l[c])&&(y[h[c]]=!(m[h[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?P.call(o,p):f[c])>-1&&(o[l]=!(s[l]=p))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):O.apply(s,y)})}function wt(e){var t,n,r,o=e.length,s=i.relative[e[0].type],a=s||i.relative[" "],l=s?1:0,c=yt(function(e){return e===t},a,!0),p=yt(function(e){return P.call(t,e)>-1},a,!0),f=[function(e,n,r){return!s&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>l;l++)if(n=i.relative[e[l].type])f=[yt(vt(f),n)];else{if(n=i.filter[e[l].type].apply(null,e[l].matches),n[v]){for(r=++l;o>r;r++)if(i.relative[e[r].type])break;return bt(l>1&&vt(f),l>1&&mt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&wt(e.slice(l,r)),o>r&&wt(e=e.slice(r)),o>r&&mt(e))}f.push(n)}return vt(f)}function Tt(e,t){var n=0,o=t.length>0,s=e.length>0,a=function(a,l,c,f,h){var d,g,m,y=[],v=0,x="0",b=a&&[],T=null!=h,C=u,k=a||s&&i.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(u=l!==p&&l,r=n);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,c)){f.push(d);break}T&&(w=N,r=++n)}o&&((d=!m&&d)&&v--,a&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,c);if(a){if(v>0)while(x--)b[x]||y[x]||(y[x]=q.call(f));y=xt(y)}O.apply(f,y),T&&!a&&y.length>0&&v+t.length>1&&ot.uniqueSort(f)}return T&&(w=N,u=C),b};return o?at(a):a}a=ot.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[v]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ot(e,t[r],n);return n}function kt(e,t,r,o){var s,u,l,c,p,f=gt(e);if(!o&&1===f.length){if(u=f[0]=f[0].slice(0),u.length>2&&"ID"===(l=u[0]).type&&n.getById&&9===t.nodeType&&h&&i.relative[u[1].type]){if(t=(i.find.ID(l.matches[0].replace(nt,rt),t)||[])[0],!t)return r;e=e.slice(u.shift().value.length)}s=J.needsContext.test(e)?0:u.length;while(s--){if(l=u[s],i.relative[c=l.type])break;if((p=i.find[c])&&(o=p(l.matches[0].replace(nt,rt),U.test(u[0].type)&&t.parentNode||t))){if(u.splice(s,1),e=o.length&&mt(u),!e)return O.apply(r,o),r;break}}}return a(e,f)(o,t,!h,r,U.test(e)),r}n.sortStable=v.split("").sort(S).join("")===v,n.detectDuplicates=E,c(),n.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(p.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||lt("type|href|height|width",function(e,t,n){return n?undefined:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||lt("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?undefined:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||lt(R,function(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}),x.find=ot,x.expr=ot.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ot.uniqueSort,x.text=ot.getText,x.isXMLDoc=ot.isXML,x.contains=ot.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(p){for(t=e.memory&&p,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(p[0],p[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!a||n&&!u||(t=t||[],t=[e,t.slice?t.slice():t],r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))x.extend(this.cache[i],t);else for(r in t)o[r]=t[r];return o},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){var r;return t===undefined||t&&"string"==typeof t&&n===undefined?(r=this.get(e,t),r!==undefined?r:this.get(e,x.camelCase(t))):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i,o=this.key(e),s=this.cache[o];if(t===undefined)this.cache[o]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):(i=x.camelCase(t),t in s?r=[t,i]:(r=i,r=r in s?[r]:r.match(w)||[])),n=r.length;while(n--)delete s[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.slice(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t) +};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t);x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n\f]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,i=0,o=x(this),s=e.match(w)||[];while(t=s[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,x(this).val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.bool.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,p,f,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(f=x.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=x.event.special[d]||{},p=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,f.setup&&f.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),f.add&&(f.add.call(e,p),p.handler.guid||(p.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,p):h.push(p),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,p,f,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){p=x.event.special[h]||{},h=(r?p.delegateType:p.bindType)||h,f=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=f.length;while(o--)c=f[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));s&&!f.length&&(p.teardown&&p.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,p,f,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),f=x.event.special[d]||{},i||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!i&&!f.noBubble&&!x.isWindow(r)){for(l=f.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:f.bindType||d,p=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),p&&p.apply(a,n),p=c&&a[c],p&&x.acceptData(a)&&p.apply&&p.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,s=e,a=this.fixHooks[i];a||(this.fixHooks[i]=a=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=a.props?this.props.concat(a.props):this.props,e=new x.Event(s),t=r.length;while(t--)n=r[t],e[n]=s[n];return e.target||(e.target=o),3===e.target.nodeType&&(e.target=e.target.parentNode),a.filter?a.filter(e,s):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=/^(?:parents|prev(?:Until|All))/,Q=x.expr.match.needsContext,K={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(et(this,e||[],!0))},filter:function(e){return this.pushStack(et(this,e||[],!1))},is:function(e){return!!et(this,"string"==typeof e&&Q.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],s=Q.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function Z(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return Z(e,"nextSibling")},prev:function(e){return Z(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return e.contentDocument||x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(K[e]||x.unique(i),J.test(e)&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function et(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,nt=/<([\w:]+)/,rt=/<|&#?\w+;/,it=/<(?:script|style|link)/i,ot=/^(?:checkbox|radio)$/i,st=/checked\s*(?:[^=]|=\s*.checked.)/i,at=/^$|\/(?:java|ecma)script/i,ut=/^true\/(.*)/,lt=/^\s*\s*$/g,ct={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ct.optgroup=ct.option,ct.tbody=ct.tfoot=ct.colgroup=ct.caption=ct.thead,ct.th=ct.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=pt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(mt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&dt(mt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(mt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!it.test(e)&&!ct[(nt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(tt,"<$1>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(mt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=f.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,p=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&st.test(d))return this.each(function(r){var i=p.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(mt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,mt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,ht),l=0;s>l;l++)a=o[l],at.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(lt,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=mt(a),o=mt(e),r=0,i=o.length;i>r;r++)yt(o[r],s[r]);if(t)if(n)for(o=o||mt(e),s=s||mt(a),r=0,i=o.length;i>r;r++)gt(o[r],s[r]);else gt(e,a);return s=mt(a,"script"),s.length>0&&dt(s,!u&&mt(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,p=e.length,f=t.createDocumentFragment(),h=[];for(;p>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(rt.test(i)){o=o||f.appendChild(t.createElement("div")),s=(nt.exec(i)||["",""])[1].toLowerCase(),a=ct[s]||ct._default,o.innerHTML=a[1]+i.replace(tt,"<$1>")+a[2],l=a[0];while(l--)o=o.lastChild;x.merge(h,o.childNodes),o=f.firstChild,o.textContent=""}else h.push(t.createTextNode(i));f.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=mt(f.appendChild(i),"script"),u&&dt(o),n)){l=0;while(i=o[l++])at.test(i.type||"")&&n.push(i)}return f},cleanData:function(e){var t,n,r,i,o,s,a=x.event.special,u=0;for(;(n=e[u])!==undefined;u++){if(F.accepts(n)&&(o=n[q.expando],o&&(t=q.cache[o]))){if(r=Object.keys(t.events||{}),r.length)for(s=0;(i=r[s])!==undefined;s++)a[i]?x.event.remove(n,i):x.removeEvent(n,i,t.handle);q.cache[o]&&delete q.cache[o]}delete L.cache[n[L.expando]]}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}});function pt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ht(e){var t=ut.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function dt(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function gt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=q.set(t,o),l=o.events)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function mt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function yt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ot.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var vt,xt,bt=/^(none|table(?!-c[ea]).+)/,wt=/^margin/,Tt=RegExp("^("+b+")(.*)$","i"),Ct=RegExp("^("+b+")(?!px)[a-z%]+$","i"),kt=RegExp("^([+-])=("+b+")","i"),Nt={BODY:"block"},Et={position:"absolute",visibility:"hidden",display:"block"},St={letterSpacing:0,fontWeight:400},jt=["Top","Right","Bottom","Left"],Dt=["Webkit","O","Moz","ms"];function At(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Dt.length;while(i--)if(t=Dt[i]+n,t in e)return t;return r}function Lt(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function qt(t){return e.getComputedStyle(t,null)}function Ht(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&Lt(r)&&(o[s]=q.access(r,"olddisplay",Rt(r.nodeName)))):o[s]||(i=Lt(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=qt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return Ht(this,!0)},hide:function(){return Ht(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Lt(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=vt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=At(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=kt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=At(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=vt(e,t,r)),"normal"===i&&t in St&&(i=St[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),vt=function(e,t,n){var r,i,o,s=n||qt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Ct.test(a)&&wt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ot(e,t,n){var r=Tt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ft(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+jt[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+jt[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+jt[o]+"Width",!0,i))):(s+=x.css(e,"padding"+jt[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+jt[o]+"Width",!0,i)));return s}function Pt(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=qt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=vt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Ct.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ft(e,t,n||(s?"border":"content"),r,o)+"px"}function Rt(e){var t=o,n=Nt[e];return n||(n=Mt(e,t),"none"!==n&&n||(xt=(xt||x("