From bb19eb8f56dfcdd7c25904904da882657f705755 Mon Sep 17 00:00:00 2001 From: Yuren Ju Date: Tue, 22 Jul 2014 21:53:17 +0800 Subject: [PATCH 001/122] add package.json and add |npm start| command --- .gitignore | 1 + package.json | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 package.json diff --git a/.gitignore b/.gitignore index e178365..875edd3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ js/vars.js +node_modules diff --git a/package.json b/package.json new file mode 100644 index 0000000..31f3a15 --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "xd", + "version": "0.0.1", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "./node_modules/http-server/bin/http-server -p 8080" + }, + "repository": { + "type": "git", + "url": "https://github.com/XDDDDD/xd.git" + }, + "author": "Yuren Ju (http://yurinfore.blogspot.com/)", + "license": "BSD-2-Clause", + "bugs": { + "url": "https://github.com/XDDDDD/xd/issues" + }, + "homepage": "https://github.com/XDDDDD/xd", + "dependencies": { + "http-server": "~0.6.1" + } +} From fdaa7464481c251c83d0686426d715ab6218c5e4 Mon Sep 17 00:00:00 2001 From: Yuren Ju Date: Tue, 22 Jul 2014 22:49:13 +0800 Subject: [PATCH 002/122] show picture if available --- js/fb.js | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/js/fb.js b/js/fb.js index 4e94cc5..259b845 100644 --- a/js/fb.js +++ b/js/fb.js @@ -31,7 +31,7 @@ function fb_init() { // the user is logged in and has authenticated your // app, and response.authResponse supplies // the user's ID, a valid access token, a signed - // request, and the time the access token + // request, and the time the access token // and signed request each expire var uid = response.authResponse.userID; var accessToken = response.authResponse.accessToken; @@ -40,7 +40,7 @@ function fb_init() { getMyFriend() switchElement($('#getBT'), 'on'); } else if (response.status === 'not_authorized') { - // the user is logged in to Facebook, + // the user is logged in to Facebook, // but has not authenticated your app switchElement($('#fblogin'), 'on'); console.log('has not authenticated your app'); @@ -59,7 +59,7 @@ function userInfo () { function (response) { if (response && !response.error) { /* handle the result */ - var icon = "https://graph.facebook.com/" + response.id + + var icon = "https://graph.facebook.com/" + response.id + "/picture"; $('#usericon').attr('src', icon).attr('traget', '_blank'); $('#username').attr('href', response.link).html(response.name); @@ -80,6 +80,22 @@ function switchElement(ele, operate) { } } +function render(entries) { + var ret = '
    '; + entries.forEach(function(entry) { + ret += '
  • '; + if (entry.message) { + ret += entry.message; + } + if (entry.type === 'photo') { + ret += ''; + } + ret += '
  • '; + }) + ret += '
'; + return ret; +} + function getUserFeed(id) { if (id == null) { id = 'me'; @@ -89,20 +105,19 @@ function getUserFeed(id) { function (response) { if (response && !response.error) { /* handle the result */ - var text = []; + var entries = []; response.data.forEach(function (entry) { - if (entry.message != undefined && entry.from.id == id) { - text.push(entry.message); + if (entry.from.id == id) { + entries.push(entry); } if (entry.comments != undefined) { entry.comments.data.forEach(function(comment) { - text.push(comment.message); + entries.push(comment); }); } - + }); - text = text.join('\n'); - $('#feeds').html(text).css('border', '1px solid #f00'); + $('#feeds').html(render(entries)).css('border', '1px solid #f00'); }// end of if } ); From fdff2a0e8248fac7e2f21d1acc26a70e480cf655 Mon Sep 17 00:00:00 2001 From: John Hu Date: Wed, 23 Jul 2014 11:35:26 +0800 Subject: [PATCH 003/122] XD add xd calculator..... --- js/xd_calc.js | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ xd.html | 1 + 2 files changed, 65 insertions(+) create mode 100644 js/xd_calc.js diff --git a/js/xd_calc.js b/js/xd_calc.js new file mode 100644 index 0000000..fd053b6 --- /dev/null +++ b/js/xd_calc.js @@ -0,0 +1,64 @@ +'use strict'; + +(function(exports) { + + var xdRegexes = { + 'XD': /XD+/gi, + '^_^': /^_+^/g, + 'T_T': /T_+T/g, + 'cool': /coo+l/gi, + ':)': /:\)+/g, + '8-)': /8-\)+/g, + ';)': /:\)+/g, + ':D': /:D+/g, + ':d': /:d+/g, + ':p': /:p+/g, + 'ha': /(ha+)(ha)*/gi, + '哈': /哈+/g, + '呵': /呵+/g, + '囧': /囧+/g, + '科': /科+/g, + 'wwww': /wwww+/gi, + 'Orz': /[Oo囧]rz+/g, + '\0/': /\[Oo0]\//g, + '++': /\++/g, + '-_-': /-_+-/g, + '@@': /@_*@/g, + '!!': /!!+/g, + 'kerker': /(ker)(ker)+/gi, + 'der': /der/g, + 'q_q': /q_*q/g + }; + + function calculateXD(text) { + var xDegrees = []; + var matchedResult; + var processed = text; + for(var key in xdRegexes) { + matchedResult = matchAndCalculate(processed, key, xdRegexes[key]); + processed = matchedResult.processed; + xDegrees[xDegrees.length] = [key, matchedResult.score + 10]; + } + return { + 'processed': processed, + 'scores': xDegrees + }; + } + + function matchAndCalculate(text, base, regex) { + var matches = text.match(regex); + var score = 0; + if (matches) { + score = matches.length + matches.forEach(function(m) { + score += (m.length - base.length); + }); + } + return { + 'processed': text.replace(regex, ''), + 'score': score + }; + } + + exports.calculateXD = calculateXD; +})(this); diff --git a/xd.html b/xd.html index 9ef4162..e37f06d 100644 --- a/xd.html +++ b/xd.html @@ -10,6 +10,7 @@ + From 6b7be0b28301b5184762bcbbdd16b6451cf2442b Mon Sep 17 00:00:00 2001 From: John Hu Date: Wed, 23 Jul 2014 11:36:34 +0800 Subject: [PATCH 004/122] Orz => fix the li issue --- js/fb.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/js/fb.js b/js/fb.js index 259b845..bc5892d 100644 --- a/js/fb.js +++ b/js/fb.js @@ -14,7 +14,7 @@ $(document).ready(function() { }); $('#getBT').click(function() { - runWordFreq($('#feeds').html()); + runWordFreq($('#feeds').text()); }); }); @@ -149,9 +149,14 @@ function getMyFriend() { } function runWordFreq(text) { - var wordfreqOption = { workerUrl: 'js/wordfreq/src/wordfreq.worker.js' }; - WordFreq(wordfreqOption).process(text, function(list) { - console.log('pizaList:' +list); - WordCloud(document.getElementById('wc-canvas-canvas'), { list: list } ); - }); + var xDegrees = calculateXD(text); + var wordfreqOption = { workerUrl: 'js/wordfreq/src/wordfreq.worker.js' }; + WordFreq(wordfreqOption).process(xDegrees.processed, function(list) { + var pizaList = list.concat(xDegrees.scores); + pizaList.sort(function(a, b) { + return b[1]- a[1]; + }); + console.log('pizaList:' +pizaList); + WordCloud(document.getElementById('wc-canvas-canvas'), { list: pizaList } ); + }); } From bc16fa62a6da447188389d41aa38f27ae0a02f74 Mon Sep 17 00:00:00 2001 From: mpizza Date: Thu, 24 Jul 2014 01:57:40 +0800 Subject: [PATCH 005/122] =?UTF-8?q?add=20"=E5=95=8A"=20in=20xdRegexes=20ca?= =?UTF-8?q?lculate=20each=20comment's=20xDegrees?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/fb.js | 12 ++++++++++++ js/xd_calc.js | 1 + 2 files changed, 13 insertions(+) diff --git a/js/fb.js b/js/fb.js index bc5892d..580dbda 100644 --- a/js/fb.js +++ b/js/fb.js @@ -83,9 +83,21 @@ function switchElement(ele, operate) { function render(entries) { var ret = '
    '; entries.forEach(function(entry) { + var xDegrees = null; ret += '
  • '; if (entry.message) { ret += entry.message; + xDegrees = calculateXD(entry.message); + xDegrees.scores.sort(function(a, b) { + return b[1]- a[1]; + }); + xDegrees.scores.forEach(function(xd){ + var scroes = parseInt(xd[1], 10); + if (scroes > 10) { + var fontSize = 20 + scroes; + ret += '' + xd[0] + ''; + } + }); } if (entry.type === 'photo') { ret += ''; diff --git a/js/xd_calc.js b/js/xd_calc.js index fd053b6..c91d042 100644 --- a/js/xd_calc.js +++ b/js/xd_calc.js @@ -15,6 +15,7 @@ ':p': /:p+/g, 'ha': /(ha+)(ha)*/gi, '哈': /哈+/g, + '啊': /啊+/g, '呵': /呵+/g, '囧': /囧+/g, '科': /科+/g, From 7b94285c489f5d9ccefbf01c3ea2011f6cf469f9 Mon Sep 17 00:00:00 2001 From: John Hu Date: Thu, 24 Jul 2014 10:03:05 +0800 Subject: [PATCH 006/122] =?UTF-8?q?^=5F=5F=5F=5F^=20fix=20the=20big=20smil?= =?UTF-8?q?e=20face=20and=20add=20=E9=98=BF=20to=20be=20the=20same=20of=20?= =?UTF-8?q?=E5=95=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/xd_calc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/xd_calc.js b/js/xd_calc.js index c91d042..f1ab96d 100644 --- a/js/xd_calc.js +++ b/js/xd_calc.js @@ -4,7 +4,7 @@ var xdRegexes = { 'XD': /XD+/gi, - '^_^': /^_+^/g, + '^_^': /\^_+\^/g, 'T_T': /T_+T/g, 'cool': /coo+l/gi, ':)': /:\)+/g, @@ -15,7 +15,7 @@ ':p': /:p+/g, 'ha': /(ha+)(ha)*/gi, '哈': /哈+/g, - '啊': /啊+/g, + '啊': /[啊阿]+/g, '呵': /呵+/g, '囧': /囧+/g, '科': /科+/g, From 97bb24af87680067706f946d31d24f137ec6a20f Mon Sep 17 00:00:00 2001 From: mpizza Date: Fri, 25 Jul 2014 11:30:45 +0800 Subject: [PATCH 007/122] add ">///<" and ":P" into xdRegexes --- js/xd_calc.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/xd_calc.js b/js/xd_calc.js index f1ab96d..e7d41ef 100644 --- a/js/xd_calc.js +++ b/js/xd_calc.js @@ -5,6 +5,7 @@ var xdRegexes = { 'XD': /XD+/gi, '^_^': /\^_+\^/g, + '>///<': />\/\/\/+ Date: Fri, 25 Jul 2014 11:41:34 +0800 Subject: [PATCH 008/122] add Bootstrap CDN and index page --- index.html | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 0000000..1d2d0a6 --- /dev/null +++ b/index.html @@ -0,0 +1,34 @@ + + + + + + + XDDDD + + + + + + + + + + + + + + +
    +
    +
    +
    + + + + + + From a8449f12abe8aea8f66a63514f80dc8384ef3598 Mon Sep 17 00:00:00 2001 From: mpizza Date: Fri, 25 Jul 2014 17:54:19 +0800 Subject: [PATCH 009/122] XD: add search feature --- js/fb.js | 138 +++++++++++++++++++++++++++++++++++++++++++------- js/xd_calc.js | 60 +++++++++++----------- xd.html | 3 ++ 3 files changed, 154 insertions(+), 47 deletions(-) diff --git a/js/fb.js b/js/fb.js index 580dbda..86e79bc 100644 --- a/js/fb.js +++ b/js/fb.js @@ -1,8 +1,12 @@ 'use strict'; var uid = null; var accessToken = null; +var xdinfo = null; +var feedEntries = []; $(document).ready(function() { + // init XDInfo + xdinfo = new XDinfo(xdRegexes); $.ajaxSetup({ cache: true }); $.getScript('//connect.facebook.net/en_UK/all.js', fb_init); $('#fblogin').click(function() { @@ -16,6 +20,28 @@ $(document).ready(function() { $('#getBT').click(function() { runWordFreq($('#feeds').text()); }); + + $('#searchBT').click(function(){ + var searchText = $('#xdSearch').val(); + var xds = xdinfo.getItems(searchText); + var showEntries = []; + if (xds.items.length !== 0) { + showEntries = []; + xds.items.sort(function(a, b) { + return b.scroes- a.scroes; + }); + console.log('HA:' + JSON.stringify(xds.items)); + for(var i in xds.items) { + var index = parseInt(xds.items[i].id); + if (feedEntries[index]) { + showEntries.push(feedEntries[index]); + } + } + console.log('HA:' + JSON.stringify(showEntries)); + $('#result').html(render(showEntries)).css('border', '1px solid #f00'); + + } + }); }); function fb_init() { @@ -82,30 +108,53 @@ function switchElement(ele, operate) { function render(entries) { var ret = '
      '; + var index = 0; entries.forEach(function(entry) { - var xDegrees = null; - ret += '
    • '; + ret += '
    • '; if (entry.message) { ret += entry.message; + } + if (entry.type === 'photo') { + ret += ''; + } + ret += '
    • '; + index += 1; + }) + ret += '
    '; + return ret; +} + +function calDegrees(entries) { + console.log(JSON.stringify(entries)); + var index = 0; + entries.forEach(function(entry) { + if (entry.message) { + var xDegrees = null; xDegrees = calculateXD(entry.message); + xDegrees.scores.sort(function(a, b) { return b[1]- a[1]; }); + xDegrees.scores.forEach(function(xd){ var scroes = parseInt(xd[1], 10); if (scroes > 10) { + var obj = {}; + obj.id = index; + obj.scroes = scroes; + xdinfo.updateItem(xd[0], obj, scroes); var fontSize = 20 + scroes; - ret += '' + xd[0] + ''; + // ret += '' + // + xd[0] + ''; } }); } - if (entry.type === 'photo') { - ret += ''; - } - ret += '
  • '; - }) - ret += '
'; - return ret; + index += 1; + }); + + console.log('done!!:' + JSON.stringify(xdinfo)); } function getUserFeed(id) { @@ -117,19 +166,19 @@ function getUserFeed(id) { function (response) { if (response && !response.error) { /* handle the result */ - var entries = []; response.data.forEach(function (entry) { if (entry.from.id == id) { - entries.push(entry); + feedEntries.push(entry); } if (entry.comments != undefined) { entry.comments.data.forEach(function(comment) { - entries.push(comment); + feedEntries.push(comment); }); } }); - $('#feeds').html(render(entries)).css('border', '1px solid #f00'); + calDegrees(feedEntries); + $('#feeds').html(render(feedEntries)).css('border', '1px solid #f00'); }// end of if } ); @@ -161,10 +210,12 @@ function getMyFriend() { } function runWordFreq(text) { - var xDegrees = calculateXD(text); + // var xDegrees = calculateXD(text); + var xDegrees = xdinfo.getScores(); + var wordfreqOption = { workerUrl: 'js/wordfreq/src/wordfreq.worker.js' }; - WordFreq(wordfreqOption).process(xDegrees.processed, function(list) { - var pizaList = list.concat(xDegrees.scores); + WordFreq(wordfreqOption).process(text, function(list) { + var pizaList = list.concat(xDegrees); pizaList.sort(function(a, b) { return b[1]- a[1]; }); @@ -172,3 +223,56 @@ function runWordFreq(text) { WordCloud(document.getElementById('wc-canvas-canvas'), { list: pizaList } ); }); } + +function XDinfo(dict) { + this.infoBox = []; + this.init(dict); +} + +XDinfo.prototype = { + init: function xd_init(dict) { + for(var key in dict) { + var obj = {}; + obj.name = key; + obj.items = []; + obj.scores = 0; // default scroes + this.infoBox.push(obj); + } + }, + + updateItem: function xd_updateItem(key, keyInfo, scores) { + var xd = this.getItems(key); + xd.scores = xd.scores + scores; + xd.items.push(keyInfo); + }, + + getItems: function xd_getItem(key) { + for(var i in this.infoBox) { + var xd = this.infoBox[i]; + if (xd.name === key) { + console.log('test: ' + JSON.stringify(xd)); + return xd; + } + } + + return false; + }, + + getScores: function xd_getScores() { + var xDegrees = []; + for(var i in this.infoBox) { + var xd = this.infoBox[i]; + if (xd.scores === 0) { + xDegrees[xDegrees.length] = [xd.name, 10]; + } else { + xDegrees[xDegrees.length] = [xd.name, xd.scores]; + } + } + + return xDegrees; + }, + + close: function xd_close() { + this.infoBox = []; + } +}; diff --git a/js/xd_calc.js b/js/xd_calc.js index e7d41ef..0d151e8 100644 --- a/js/xd_calc.js +++ b/js/xd_calc.js @@ -1,36 +1,36 @@ 'use strict'; -(function(exports) { +var xdRegexes = { + 'XD': /XD+/gi, + '^_^': /\^_+\^/g, + '>///<': />\/\/\/+///<': />\/\/\/+ + + +
From 5cb88835a9e39abb8d0e3daffeb946c80c6a3391 Mon Sep 17 00:00:00 2001 From: gasolin Date: Fri, 25 Jul 2014 18:15:58 +0800 Subject: [PATCH 010/122] use webapplate --- .bowerrc | 3 + .gitignore | 28 +- .jscsrc | 13 + .jshintignore | 2 + .jshintrc | 32 + .travis.yml | 14 + Gruntfile.js | 380 ++ bower.json | 24 + css/xd.css | 12 - helper/install.html | 17 + index.html | 32 +- js/fb.js | 278 - js/jquery.min.js | 4 - js/vars_sample.js | 3 - js/wordcloud2 | 1 - js/wordfreq | 1 - js/xd_calc.js | 66 - karma.conf.js | 58 + package.json | 80 +- public/fallback.html | 28 + public/index.html | 56 + public/js/app_installer.js | 41 + public/js/background.js | 14 + public/js/fallback.js | 11 + public/js/main.js | 14 + public/locales/locales.en.l20n | 2 + public/locales/locales.zh-TW.l20n | 2 + public/locales/manifest.json | 10 + public/manifest.appcache | 12 + public/manifest.json | 19 + public/manifest.webapp | 19 + public/parts/app-main.css | 11 + public/parts/app-main.html | 35 + .../icons/apple-touch-icon-precomposed.png | Bin 0 -> 2486 bytes public/style/icons/favicon.ico | Bin 0 -> 1150 bytes public/style/icons/icon128.png | Bin 0 -> 5280 bytes public/style/main.css | 18 + public/test/index.html | 50 + public/test/unit/array_test.js | 21 + public/test/unit/basic_test.js | 33 + public/test/unit/sinon_test.js | 111 + public/test/vendor/blanket/blanket.min.js | 1 + public/test/vendor/blanket/mocha-blanket.js | 66 + public/test/vendor/chai/chai.js | 4613 ++++++++++++++ public/test/vendor/mocha-config.js | 5 + public/test/vendor/mocha/mocha.css | 270 + public/test/vendor/mocha/mocha.js | 5674 +++++++++++++++++ public/test/vendor/sinon/sinon.js | 4290 +++++++++++++ server.js | 111 + tasks/welcome.js | 20 + views/index.html | 19 + views/main.html | 24 + xd.html | 34 - 53 files changed, 16240 insertions(+), 442 deletions(-) create mode 100644 .bowerrc create mode 100644 .jscsrc create mode 100644 .jshintignore create mode 100644 .jshintrc create mode 100644 .travis.yml create mode 100644 Gruntfile.js create mode 100644 bower.json delete mode 100644 css/xd.css create mode 100644 helper/install.html delete mode 100644 js/fb.js delete mode 100644 js/jquery.min.js delete mode 100644 js/vars_sample.js delete mode 160000 js/wordcloud2 delete mode 160000 js/wordfreq delete mode 100644 js/xd_calc.js create mode 100644 karma.conf.js create mode 100644 public/fallback.html create mode 100644 public/index.html create mode 100644 public/js/app_installer.js create mode 100644 public/js/background.js create mode 100644 public/js/fallback.js create mode 100644 public/js/main.js create mode 100644 public/locales/locales.en.l20n create mode 100644 public/locales/locales.zh-TW.l20n create mode 100644 public/locales/manifest.json create mode 100644 public/manifest.appcache create mode 100644 public/manifest.json create mode 100644 public/manifest.webapp create mode 100644 public/parts/app-main.css create mode 100644 public/parts/app-main.html create mode 100644 public/style/icons/apple-touch-icon-precomposed.png create mode 100644 public/style/icons/favicon.ico create mode 100644 public/style/icons/icon128.png create mode 100644 public/style/main.css create mode 100644 public/test/index.html create mode 100644 public/test/unit/array_test.js create mode 100644 public/test/unit/basic_test.js create mode 100644 public/test/unit/sinon_test.js create mode 100644 public/test/vendor/blanket/blanket.min.js create mode 100644 public/test/vendor/blanket/mocha-blanket.js create mode 100644 public/test/vendor/chai/chai.js create mode 100644 public/test/vendor/mocha-config.js create mode 100644 public/test/vendor/mocha/mocha.css create mode 100644 public/test/vendor/mocha/mocha.js create mode 100644 public/test/vendor/sinon/sinon.js create mode 100644 server.js create mode 100644 tasks/welcome.js create mode 100644 views/index.html create mode 100644 views/main.html delete mode 100644 xd.html diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..113cd19 --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory" : "public/vendor" +} diff --git a/.gitignore b/.gitignore index 875edd3..4b509af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,26 @@ -js/vars.js -node_modules +.DS_Store +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +npm-debug.log +node_modules/ +public/vendor/ + +dist/ +docs/ +public/test/reports/ +public/test/coverage.html + +public/manifest_webapp_backup +public/manifest_json_backup + diff --git a/.jscsrc b/.jscsrc new file mode 100644 index 0000000..a3070f5 --- /dev/null +++ b/.jscsrc @@ -0,0 +1,13 @@ +{ + "preset": "google", + "additionalRules": [ + "node_modules/jscs-jsdoc/lib/rules/*.js" + ], + "jsDoc": { + }, + "requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties", + "excludeFiles": [ + "public/vendor/**", + "public/test/**" + ] +} \ No newline at end of file diff --git a/.jshintignore b/.jshintignore new file mode 100644 index 0000000..fccec75 --- /dev/null +++ b/.jshintignore @@ -0,0 +1,2 @@ +public/vendor/** +public/test/** \ No newline at end of file diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..37794fa --- /dev/null +++ b/.jshintrc @@ -0,0 +1,32 @@ +{ + "camelcase": false, + "curly": true, + "forin": false, + "latedef": "nofunc", + "newcap": false, + "noarg": true, + "nonew": true, + "quotmark": "single", + "undef": true, + "unused": "vars", + "strict": true, + "trailing": true, + "maxlen": 80, + + "eqnull": true, + "esnext": true, + "expr": true, + "globalstrict": true, + + "maxerr": 1000, + "regexdash": true, + "laxcomma": true, + "proto": true, + + "browser": true, + "devel": true, + "nonstandard": true, + "worker": true, + + "-W078": true +} diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..7af5d63 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +language: node_js +node_js: + - "0.10" + - "0.11" +script: + - npm install -g grunt-cli bower karma + - $CI_ACTION +env: + matrix: + - CI_ACTION="grunt" + - CI_ACTION="grunt static" + - CI_ACTION="grunt pack" + - CI_ACTION="grunt karma" + - CI_ACTION="grunt mochacov:travis" diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..e3f974e --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,380 @@ +module.exports = function(grunt) { + 'use strict'; + + // measures the time each task takes + require('time-grunt')(grunt); + + // Load the plugin that provides tasks. + require('load-grunt-tasks')(grunt); + grunt.loadTasks('tasks'); + + // Project configuration. + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + express: { + options: { + port: 8000 + }, + dev: { + options: { + script: 'server.js' + } + }, + prod: { + options: { + script: 'server.js', + node_env: 'production' + } + }, + test: { + options: { + script: 'server.js' + } + } + }, + watch: { + express: { + files: ['server.js', 'public/js/*.js'], + tasks: ['express:dev'], + options: { + livereload: true, //reloads the browser + spawn: false + } + } + }, + karma: { + unit: { + configFile: 'karma.conf.js' + } + }, + mochacov: { + test: { + options: { + reporter: 'spec' + } + }, + coverage: { + options: { + reporter: 'html-cov', + output: 'public/test/coverage.html' + } + }, + travis: { + options: { + coveralls: { + serviceName: 'travis-ci', + serviceJobId: process.env.TRAVIS_JOB_ID, + repoToken: '9Lqs288pJNb4aYw10BdWnjdJ5Vbx1zZM7' + } + } + }, + options: { + files: ['public/test/unit/**_test.js'], + ui: 'tdd' + } + }, + mocha_phantomjs: { + all: ['public/test/index.html'] + }, + dom_munger: { + readcss: { + options: { + read: { + selector: 'link', + attribute: 'href', + writeto: 'cssRefs', + isPath: true + } + }, + src: 'public/index.html' //read from source index.html + }, + readjs: { + options: { + read: { + selector: 'script', + attribute: 'src', + writeto: 'jsRefs', + isPath: true + } + }, + src: 'public/index.html' + }, + cleancss: { + options: { + remove: 'link[href]' + }, + src: 'dist/index.html' //read from source index.html + }, + cleanjs: { + options: { + remove: 'script[src]' + }, + src: 'dist/index.html' + }, + updatecss: { + options: { + append: { + selector: 'head', + html: '' + } + }, + src: 'dist/index.html' //update the dist/index.html + // (the src index.html is copied there) + }, + updatejs: { + options: { + append: { + selector: 'body', + html: '' + } + }, + src: 'dist/index.html' + } + }, + cssmin: { + main: { + src: '<%= dom_munger.data.cssRefs %>', + dest: 'dist/style/app.min.css' + } + }, + uglify: { + options: { + banner: '/*! <%= pkg.name %> ' + + '<%= grunt.template.today("yyyy-mm-dd") %> */\n' + }, + main: { + src: '<%= dom_munger.data.jsRefs %>', + dest: 'dist/js/app.min.js' + } + }, + manifest: { + generate: { + options: { + basePath: './public/', + // cache: ['js/server.js', 'css/style.css'], + // cachePrefix: '/', + // network: ['http://*', 'https://*'], + fallback: ['/ fallback.html'], + // exclude: ['js/jquery.min.js'], + preferOnline: true, + verbose: false, + timestamp: true + }, + src: [ + '*.html', + 'js/*.js', + 'style/*.css', + 'style/images/*.png', + 'style/images/*.jpg', + 'style/icons/*.ico', + 'style/icons/*.png' + ], + dest: 'public/manifest.appcache' + } + }, + plato: { + all: { + files: { + 'docs/report': ['public/js/*.js'] + } + } + }, + copy: { + webapp: { + files: [{ + expand: false, + src: 'public/manifest.webapp', + dest: 'dist/manifest.webapp' + }] + }, + staticWeb: { + files: [{ + expand: true, + cwd: 'public/', + src: '**', + dest: 'dist/' + }] + }, + installPage: { + files: [{ + expand: true, + cwd: 'helper/', + src: 'install.html', + dest: 'dist/' + }] + }, + backupFirefox: { + files: [{ + expand: false, + src: 'public/manifest.webapp', + dest: 'public/manifest_webapp_backup' + }] + }, + firefox: { + files: [{ + expand: false, + src: 'public/manifest.webapp', + dest: 'public/manifest.json' + }] + }, + backupChrome: { + files: [{ + expand: false, + src: 'public/manifest.json', + dest: 'public/manifest_json_backup' + }] + }, + chrome: { + files: [{ + expand: false, + src: 'public/manifest.json', + dest: 'public/manifest.webapp' + }] + } + }, + rename: { + backup: { + src: 'public/test', + dest: 'dist/test' + }, + restore: { + src: 'dist/test', + dest: 'public/test' + } + }, + zip: { + dist: { + cwd: 'public/', + src: 'public/**', + dest: 'dist/package.zip' + } + }, + clean: { + dist: ['dist/'], + test: ['dist/test'], + docs: ['docs/'] + }, + jsdoc: { + src: ['public/js/*.js'], + options: { + destination: 'docs' + } + }, + jshint: { + utils: { + jshintrc: true, + src: [ + '*.js', + 'tasks/**/*.js' + ] + }, + server: { + jshintrc: true, + src: [ + 'server.js' + ] + }, + client: { + jshintrc: true, + src: [ + 'public/**/*.js' + ] + } + }, + jscs: { + options: { + config: '.jscsrc' + }, + utils: { + src: [ + '*.js', + 'tasks/**/*.js' + ] + }, + server: { + src: [ + 'server.js' + ] + }, + client: { + src: [ + 'public/**/*.js' + ] + } + }, + jsonlint: { + files: { + src: [ + 'public/manifest.webapp', + 'public/manifest.json', + 'public/**..json' + ] + } + }, + sloc: { + client: { + files: { + './': [ + 'public/*.html', + 'public/js/*.js', + 'public/style/*.css', + 'public/parts/*.html', + 'public/parts/*.js', + 'public/parts/*.css', + 'public/test/unit/*.js' + ] + } + } + }, + 'gh-pages': { + options: { + base: 'dist' + }, + src: ['**'] + } + }); + + // Default task(s). + grunt.registerTask('default', ['welcome', 'mochacov:test']); + + // Server + grunt.registerTask('server', ['express:dev', 'watch']); + + // generate static web + grunt.registerTask('static', [ + 'welcome', 'clean:dist', 'mocha_phantomjs', 'manifest', + /*copy public folder*/ + 'copy:staticWeb', + /*parse css/js for minify*/ + 'dom_munger:readcss', 'dom_munger:readjs', + 'dom_munger:cleancss', 'dom_munger:cleanjs', + 'cssmin:main', 'uglify:main', + 'dom_munger:updatecss', 'dom_munger:updatejs', + /*append minified css/js*/ + 'clean:test' + ]); + + // generate package app + grunt.registerTask('pack', [ + 'welcome', 'clean:dist', 'mocha_phantomjs', + /*copy files*/ + 'copy:webapp', 'copy:installPage', + /* not pack with test */ + 'rename:backup', 'zip:dist', + 'rename:restore' + ]); + + // copy firefox webapp manifest to chrome webapp json + grunt.registerTask('f2c', [ + 'welcome', 'copy:backupChrome', 'copy:firefox' + ]); + // copy chrome webapp json to firefox webapp manifest + grunt.registerTask('c2f', [ + 'welcome', 'copy:backupFirefox', 'copy:chrome' + ]); + + // generate docs + grunt.registerTask('docs', [ + 'welcome', 'clean:docs', 'jshint', 'jscs', 'sloc', 'jsdoc', 'plato' + ]); +}; diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..ab11de5 --- /dev/null +++ b/bower.json @@ -0,0 +1,24 @@ +{ + "name": "webapplate", + "description": "", + "homepage": "", + "keywords": [], + "author": "", + "license": "", + "ignore": [ + "**/.*", + "node_modules", + "bower_components" + ], + "dependencies": { + "l20n": "1.0.0-rc", + "platform": "Polymer/platform", + "font-roboto": "Polymer/font-roboto", + "core-toolbar": "Polymer/core-toolbar", + "core-menu": "Polymer/core-menu", + "core-item": "Polymer/core-item", + "core-header-panel": "Polymer/core-header-panel", + "core-drawer-panel": "Polymer/core-drawer-panel", + "core-scaffold": "Polymer/core-scaffold" + } +} diff --git a/css/xd.css b/css/xd.css deleted file mode 100644 index 12f815a..0000000 --- a/css/xd.css +++ /dev/null @@ -1,12 +0,0 @@ - .hidden { - display: none; - } - - #friendlist ul li { - cursor: pointer; - } - - #friendlist ul li:hover { - font-weight:bold; - } - diff --git a/helper/install.html b/helper/install.html new file mode 100644 index 0000000..1089d84 --- /dev/null +++ b/helper/install.html @@ -0,0 +1,17 @@ + + +

Packaged app installation page

+ + + \ No newline at end of file diff --git a/index.html b/index.html index 1d2d0a6..fd1bbed 100644 --- a/index.html +++ b/index.html @@ -1,34 +1,8 @@ - - - - - XDDDD - - - - - - - - - - - + - -
-
-
-
- - - + Redirect to public/index.html - - + \ No newline at end of file diff --git a/js/fb.js b/js/fb.js deleted file mode 100644 index 86e79bc..0000000 --- a/js/fb.js +++ /dev/null @@ -1,278 +0,0 @@ -'use strict'; -var uid = null; -var accessToken = null; -var xdinfo = null; -var feedEntries = []; - -$(document).ready(function() { - // init XDInfo - xdinfo = new XDinfo(xdRegexes); - $.ajaxSetup({ cache: true }); - $.getScript('//connect.facebook.net/en_UK/all.js', fb_init); - $('#fblogin').click(function() { - FB.login(function(response) { - // handle the response - switchElement($('#fblogin'), 'off'); - switchElement($('#getBT'), 'on'); - }, {scope: 'email,user_friends,read_stream,export_stream,friends_photos'}); - }); - - $('#getBT').click(function() { - runWordFreq($('#feeds').text()); - }); - - $('#searchBT').click(function(){ - var searchText = $('#xdSearch').val(); - var xds = xdinfo.getItems(searchText); - var showEntries = []; - if (xds.items.length !== 0) { - showEntries = []; - xds.items.sort(function(a, b) { - return b.scroes- a.scroes; - }); - console.log('HA:' + JSON.stringify(xds.items)); - for(var i in xds.items) { - var index = parseInt(xds.items[i].id); - if (feedEntries[index]) { - showEntries.push(feedEntries[index]); - } - } - console.log('HA:' + JSON.stringify(showEntries)); - $('#result').html(render(showEntries)).css('border', '1px solid #f00'); - - } - }); -}); - -function fb_init() { - FB.init({ - appId: FACEBOOK_APP_ID, - status : true, - xfbml : true, - version : 'v1.0' - }); - - FB.getLoginStatus(function(response) { - if (response.status === 'connected') { - // the user is logged in and has authenticated your - // app, and response.authResponse supplies - // the user's ID, a valid access token, a signed - // request, and the time the access token - // and signed request each expire - var uid = response.authResponse.userID; - var accessToken = response.authResponse.accessToken; - console.log('login!!!' + response.authResponse.userID); - userInfo(); - getMyFriend() - switchElement($('#getBT'), 'on'); - } else if (response.status === 'not_authorized') { - // the user is logged in to Facebook, - // but has not authenticated your app - switchElement($('#fblogin'), 'on'); - console.log('has not authenticated your app'); - } else { - $('#fblogin').removeAttr('disabled'); - // the user isn't logged in to Facebook. - console.log('the user isn\'t logged in to Facebook.'); - switchElement($('#fblogin'), 'on'); - } - }); -} - -function userInfo () { - FB.api( - "/me/", - function (response) { - if (response && !response.error) { - /* handle the result */ - var icon = "https://graph.facebook.com/" + response.id + - "/picture"; - $('#usericon').attr('src', icon).attr('traget', '_blank'); - $('#username').attr('href', response.link).html(response.name); - $('#usericon').click(function() { - getUserFeed(response.id); - }); - switchElement($('#userinfo'), 'on'); - } - } - ); -} - -function switchElement(ele, operate) { - if (operate === 'off') { - ele.addClass('hidden'); - } else { - ele.removeClass('hidden'); - } -} - -function render(entries) { - var ret = '
    '; - var index = 0; - entries.forEach(function(entry) { - ret += '
  • '; - if (entry.message) { - ret += entry.message; - } - if (entry.type === 'photo') { - ret += ''; - } - ret += '
  • '; - index += 1; - }) - ret += '
'; - return ret; -} - -function calDegrees(entries) { - console.log(JSON.stringify(entries)); - var index = 0; - entries.forEach(function(entry) { - if (entry.message) { - var xDegrees = null; - xDegrees = calculateXD(entry.message); - - xDegrees.scores.sort(function(a, b) { - return b[1]- a[1]; - }); - - xDegrees.scores.forEach(function(xd){ - var scroes = parseInt(xd[1], 10); - if (scroes > 10) { - var obj = {}; - obj.id = index; - obj.scroes = scroes; - xdinfo.updateItem(xd[0], obj, scroes); - var fontSize = 20 + scroes; - // ret += '' - // + xd[0] + ''; - } - }); - } - index += 1; - }); - - console.log('done!!:' + JSON.stringify(xdinfo)); -} - -function getUserFeed(id) { - if (id == null) { - id = 'me'; - } - FB.api( - "/" + id + "/feed/", {limit: 500}, - function (response) { - if (response && !response.error) { - /* handle the result */ - response.data.forEach(function (entry) { - if (entry.from.id == id) { - feedEntries.push(entry); - } - if (entry.comments != undefined) { - entry.comments.data.forEach(function(comment) { - feedEntries.push(comment); - }); - } - - }); - calDegrees(feedEntries); - $('#feeds').html(render(feedEntries)).css('border', '1px solid #f00'); - }// end of if - } - ); -} - -function getMyFriend() { - FB.api( - "/me/friends/", {limit: 500}, - function (response) { - if (response && !response.error) { - var ul = document.createElement("ul"); - var docfrag = document.createDocumentFragment(); - response.data.forEach( - function (entry) { - var li = document.createElement("li"); - li.textContent = entry.name; - li.dataset.id = entry.id; - docfrag.appendChild(li); - } - ); - ul.appendChild(docfrag); - document.getElementById('friendlist').appendChild(ul); - ul.addEventListener('click', function(e) { - getUserFeed(e.target.dataset.id); - }); - } - } - ); -} - -function runWordFreq(text) { - // var xDegrees = calculateXD(text); - var xDegrees = xdinfo.getScores(); - - var wordfreqOption = { workerUrl: 'js/wordfreq/src/wordfreq.worker.js' }; - WordFreq(wordfreqOption).process(text, function(list) { - var pizaList = list.concat(xDegrees); - pizaList.sort(function(a, b) { - return b[1]- a[1]; - }); - console.log('pizaList:' +pizaList); - WordCloud(document.getElementById('wc-canvas-canvas'), { list: pizaList } ); - }); -} - -function XDinfo(dict) { - this.infoBox = []; - this.init(dict); -} - -XDinfo.prototype = { - init: function xd_init(dict) { - for(var key in dict) { - var obj = {}; - obj.name = key; - obj.items = []; - obj.scores = 0; // default scroes - this.infoBox.push(obj); - } - }, - - updateItem: function xd_updateItem(key, keyInfo, scores) { - var xd = this.getItems(key); - xd.scores = xd.scores + scores; - xd.items.push(keyInfo); - }, - - getItems: function xd_getItem(key) { - for(var i in this.infoBox) { - var xd = this.infoBox[i]; - if (xd.name === key) { - console.log('test: ' + JSON.stringify(xd)); - return xd; - } - } - - return false; - }, - - getScores: function xd_getScores() { - var xDegrees = []; - for(var i in this.infoBox) { - var xd = this.infoBox[i]; - if (xd.scores === 0) { - xDegrees[xDegrees.length] = [xd.name, 10]; - } else { - xDegrees[xDegrees.length] = [xd.name, xd.scores]; - } - } - - return xDegrees; - }, - - close: function xd_close() { - this.infoBox = []; - } -}; diff --git a/js/jquery.min.js b/js/jquery.min.js deleted file mode 100644 index 73f33fb..0000000 --- a/js/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f -}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="
a",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/\s*$/g,sb={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?""!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("